加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Flex定位坐标文章

发布时间:2020-12-15 01:36:21 所属栏目:百科 来源:网络整理
导读:?xml?version="1.0"?encoding="utf-8"? mx:Application????????xmlns:mx????????????????????????="http://www.adobe.com/2006/mxml"? ????????????????????xmlns????????????????????????????????="com.esri.solutions.flexviewer.*"? ????????????????????

<?xml?version="1.0"?encoding="utf-8"?>

<mx:Application????????xmlns:mx????????????????????????="http://www.adobe.com/2006/mxml"?

????????????????????xmlns????????????????????????????????="com.esri.solutions.flexviewer.*"?

????????????????????layout????????????????????????????????="absolute"?

????????????????????applicationComplete????????="registerGlobalKeyHandler()"

????????????????????preloader="com.sarsea.MyProgressBar"?

????????????????????styleName????????????????????????="main"?

????????????????????backgroundColor????????????????="#9EBCD8"

????????????????????initialize="ini()"

????????????????????xmlns:GIS??????????="com.esri.solutions.flexviewer.info.GIS.*"?xmlns:zj="zj.*">

????????<zjermission?id="p"/>

????????????????????????????

????????<mx:Script>

????????????????<![CDATA[

????????????????????????import?CustomizeControls.FunctionUtils;

????????????????????????import?com.sarsea.MyProgressBar;

????????????????????????import?CustomizeControls.SystemConfig;

????????????????????????import?com.esri.ags.geometry.MapPoint;

????????????????????????import?com.esri.ags.Map;

????????????????????????import?mx.rpc.AsyncResponder;

????????????????????????import?com.esri.ags.tasks.FeatureSet;

????????????????????????import?com.esri.ags.tasks.QueryTask;

????????????????????????import?com.esri.ags.tasks.Query;

????????????????????????import?mx.core.IFlexDisplayObject;

????????????????????????import?mx.effects.AnimateProperty;

????????????????????????import?mx.controls.Alert;

????????????????????????import?flash.net.registerClassAlias;????

????????????????????????import?mx.messaging.messages.RemotingMessage;

????????????????????????import?com.esri.solutions.flexviewer.AppEvent;????????????????

????????????????????????import?mx.managers.IDragManager;

????????????????????????import?mx.managers.HistoryManager;?

????????????????????????[Bindable]

????????????????????????public?var?loginUser:Object?=?null;

????????????????????????

????????????????????????private?var?iDragManager:IDragManager;

????????????????????????private?var?hist:HistoryManager;?

????????????????????????private?var?tween:AnimateProperty?=?new?AnimateProperty();

????????????????????????private?var?map:Map=new?Map;

????????????????????????

????????????????????????private?function?registerGlobalKeyHandler()?:void

????????????????????????{

????????????????????????????????stage.addEventListener(KeyboardEvent.KEY_DOWN,?handleKeyDown);

????????????????????????}

????????????????????????

????????????????????????private?function?ini():void{

????????????????????????????????FunctionUtils.iniAlert();

????????????????????????????????SystemConfig.iniPath();

????????????????????????????????registerClassAlias("flex.messaging.messages.RemotingMessage",?RemotingMessage);

????????????????????????????????SiteContainer.addEventListener(AppEvent.MAP_LOADED,?initMap);

????????????????????????????????p.CheckPermission();

????????????????????????}

????????????????????????

????????????????????????private?function?initMap(event:AppEvent):void

????????????????????????{

//????????????????????????????????SiteContainer.addEventListener(AppEvent.CONFIG_LOADED

????????????????????????????????????????tool.toolMap=event.data?as?Map;

????????????????????????????????????????map=event.data?as?Map;

????????????????????????????????????????map.addEventListener(MouseEvent.MOUSE_MOVE,mouseMoveHandler);

????????????????????????}

????????????????????????

????????????????????????private?function?handleKeyDown(event:KeyboardEvent)?:void

????????????????????????{

????????????????????????????????if?((event.shiftKey)?&&?(event.keyCode?==?27))

????????????????????????????????{

????????????????????????????????????????SiteContainer.dispatchEvent(new?AppEvent(AppEvent.SET_MAP_NAVIGATION,?false,?null));????????

????????????????????????????????}

????????????????????????}

????????????????????????private?function?fullScreen(event:MouseEvent):void

????????????????????????{?

??????????????????????????????????stage.displayState?=?(stage.displayState?==?????

????????????????????????StageDisplayState.NORMAL?StageDisplayState.FULL_SCREEN:StageDisplayState.NORMAL);??

????????????????????????}

????????????????????????

????????????????????????//显示xy坐标

????????????????????????private?function?mouseMoveHandler(event:MouseEvent):void

????????????????????????{

????????????????????????????????try{

????????????????????????????????const?mapPoint:MapPoint?=?map.toMapFromStage(event.stageX,?event.stageY);

????????????????????xyText.text?=?"X:?"+?mapPoint.x.toFixed(4)?+?",?Y:?"?+?mapPoint.y.toFixed(4);

????????????????????????????}catch(e:Error){}

????????????}????????

????????????????????????

????????????????]]>

????????????????

????????</mx:Script>

????????<SiteContainer?id="container">????????

???????????<configManager>?<ConfigManager/>?</configManager>

???????????<uiManager>?????<UIManager/>?????</uiManager>

???????????<yujingTip>

???????????????????<YujingTip/>

???????????</yujingTip>

???????<controller>????<Controller?x="40"?y="20"/>????</controller>

???????<dataManager>???<DataManager/>???</dataManager>

???????<widgetManager>?<WidgetManagerDocked/>?</widgetManager>

???????<mapManager>??<MapManager/>?</mapManager>

????????</SiteContainer>??????

?????

????????<mxabel?id="xyText"?bottom="20"?right="30"/>

</mx:Application>

Flex?-?坐标系统

最近做个有关Flex的绘画程序,由于刚刚接触其坐标系统,也没看过资料,结果弄得晕乎乎的。

查阅了一些资料理解一下.?flex提供了3种不同的坐标系??全局的就是(stage级别的)??本地坐标系(组件级别的)??内容坐标系(相对于本地坐标系说的)全局????????这个坐标系的原点在整个flash舞台的左上角,MouseEvent实例的stageX,stageY就是这个坐标系中的值,本地????????坐标原点是相对的组件的左上角,MouseEvent中的localX,localY就是相对这个坐标系说的,------------------------------------------------------------------------------------------------自定义组件的坐标:?例如自定义一个矩形组件,该组件有一个中心点center中心点center的坐标(x,y)是相对于矩形组件的.所以不能和坐标系中的全局坐标搞混了。

flashflex针对不同的目的,提供了3种不同的坐标系

??全局的就是(stage级别的)

??????????本地坐标系(组件级别的)??????????内容坐标系(相对于本地坐标系说的)?????这些坐标系的点是可以转换的,并且有相应的方法,看来adobe想得挺周到。我们一个一个的说一下??????全局???????????这个坐标系的原点在整个flash舞台的左上角,MouseEvent实例的stageX?,stageY就是这个坐标系中的值,????本地?????????坐标原点是相对的组件的左上角,MouseEvent中的localX,255); font-size:10.5pt">?????内容?????????这个东西比较抽象了UIComponent类实例的contentMouseX???和??contentMouseY???就是了,这个主要针对有滚动条的组件说的,有滚动条了,内容肯定不少,内容所占的区域的坐标就是这个坐标系了。下面有个官方的图说明了三个坐标系的关系及位置:

坐标转换还有现成的方法

contentMouseX

返回mouse的内容坐标x

contentMouseY返回mouse的内容坐标YcontentToGlobal???将内容坐标转换成全局坐标contentToLocal将内容坐标转换成内容坐标globalToContent???将全局的转成内容坐标globalToLocal全局的转成本地的localToContent本地到内容坐标localToGlobal本地到全局坐标

下面是一个小例子<?xml?version="1.0"?>
<!--?containers/intro/MousePosition.mxml?--><mx:Application?xmlns:mx="http://www.adobe.com/2006/mxml"????backgroundColor="white">????????<mx:Script>????????<![CDATA[??????????import?mx.controls.Alert;??????????//?Handle?the?mouseDown?event?generated????????????//?by?clicking?in?the?application.??????????private?function?handleMouseDown(event:MouseEvent):void?{????????????????????????????//?Convert?the?mouse?position?to?global??coordinates.????????????//?The?localX?and?localY?properties?of?the?mouse?event?contain????????????//?the??coordinates?at?which?the?event?occurred?relative?to?the????????????//?event?target,?typically?one?of?the??????????????//?colored?internal?Canvas?controls.????????????//?A?production?version?of?this?example?could?use?the?????????????????//?and?stageY?properties,?which?use?the?global??coordinates,??????????????//?and?avoid?this?step.????????????//?This?example?uses?the?localX?and?localY?properties?only?to????????????//?illustrate?conversion?between?different?frames?of?reference.????????????var?pt:Point?=?new?Point(event.localX,?event.localY);????????????pt?=?event.target.localToGlobal(pt);????????????//?Convert?the?global??coordinates?to?the?content??coordinates??????????????//?inside?the?outer?c1?Canvas?control.????????????pt?=?c1.globalToContent(pt);???????????????????????????//?Figure?out?which?quadrant?was?clicked.????????????var?whichColor:String?=?"border?area";??????????????????????????if?(pt.x?<?150)?{????????????????if?(pt.y?<?150)????????????????????whichColor?=?"red";????????????????else????????????????????whichColor?=?"blue";????????????}????????????else?{????????????????????whichColor?=?"green";????????????????????whichColor?=?"magenta";????????????Alert.show("You?clicked?on?the?"?+?whichColor);??????????}????????]]>????</mx:Script>????<!--?Canvas?container?with?four?child?Canvas?containers?-->????<mx:Canvas?id="c1"??????????borderStyle="none"??????????width="300"?height="300"??????????mouseDown="handleMouseDown(event);">????????????????<mx:Canvas??????????????width="150"?height="150"??????????????x="0"?y="0"??????????????backgroundColor="red">????????????<mx:Button???label="I'm?in?Red"/>????????</mx:Canvas>?????????????x="150"?y="0"????????????backgroundColor="green">???label="I'm?in?Green"/>?????????????x="0"?y="150"????????????backgroundColor="blue">???label="I'm?in?Blue"/>?????????????x="150"?y="150"????????????backgroundColor="magenta">???label="I'm?in?Magenta"/>????</mx:Canvas></mx:Application>

flex坐标系

2009-12-13?15:57

这些天简单重新玩了一下Flex,感受觉坐标这块挺有意思,下面译一下关于坐标的文档

?????????flashflex针对不同的目的,提供了3种不同的坐标系

??????????全局的就是(stage级别的)

??????????本地坐标系(组件级别的)

??????????内容坐标系(相对于本地坐标系说的)

?????这些坐标系的点是可以转换的,并且有相应的方法,看来adobe想得挺周到。我们一个一个的说一下

???

?????全局

???????????这个坐标系的原点在整个flash舞台的左上角,MouseEvent实例的stageX,stageY就是这个坐标系中的值,

????本地

?????????坐标原点是相对的组件的左上角,MouseEvent中的localX,localY就是相对这个坐标系说的,

?????内容

?????????这个东西比较抽象了UIComponent类实例的contentMouseX?和?contentMouseY?就是了,这个主要针对有滚动条的组件说的,有滚动条了,内容肯定不少,内容所占的区域的坐标就是这个坐标系了。

下面有个官方的图说明了三个坐标系的关系及位置:

坐标转换还有现成的方法

contentMouseX

返回mouse的内容坐标x

contentMouseY

返回mouse的内容坐标Y

contentToGlobal???

将内容坐标转换成全局坐标

contentToLocal

将内容坐标转换成内容坐标

globalToContent???

将全局的转成内容坐标

globalToLocal

全局的转成本地的

localToContent

本地到内容坐标

localToGlobal

本地到全局坐标



下面是一个小例子

<?xml?version="1.0"?>
<!--?containers/intro/MousePosition.mxml?-->
<mx:Application?xmlns:mx="http://www.adobe.com/2006/mxml"
????backgroundColor="white">
????
????<mx:Script>
????????<![CDATA[
??????????import?mx.controls.Alert;

??????????//?Handle?the?mouseDown?event?generated
???????????//?by?clicking?in?the?application.
??????????private?function?handleMouseDown(event:MouseEvent):void?{
????????????????
????????????//?Convert?the?mouse?position?to?global?coordinates.
????????????//?The?localX?and?localY?properties?of?the?mouse?event?contain
????????????//?the?coordinates?at?which?the?event?occurred?relative?to?the
????????????//?event?target,?typically?one?of?the
?????????????//?colored?internal?Canvas?controls.
????????????//?A?production?version?of?this?example?could?use?the?stageX
?????????????//?and?stageY?properties,?which?use?the?global?coordinates,
?????????????//?and?avoid?this?step.
????????????//?This?example?uses?the?localX?and?localY?properties?only?to
????????????//?illustrate?conversion?between?different?frames?of?reference.
????????????var?pt:Point?=?new?Point(event.localX,?event.localY);
????????????pt?=?event.target.localToGlobal(pt);
????????????????
????????????//?Convert?the?global?coordinates?to?the?content?coordinates
?????????????//?inside?the?outer?c1?Canvas?control.
????????????pt?=?c1.globalToContent(pt);
???????????????
????????????//?Figure?out?which?quadrant?was?clicked.
????????????var?whichColor:String?=?"border?area";
??????????????
????????????if?(pt.x?<?150)?{
????????????????if?(pt.y?<?150)
????????????????????whichColor?=?"red";
????????????????else
????????????????????whichColor?=?"blue";
????????????}
????????????else?{
????????????????if?(pt.y?<?150)
????????????????????whichColor?=?"green";
????????????????else
????????????????????whichColor?=?"magenta";
????????????}
????????????????
????????????Alert.show("You?clicked?on?the?"?+?whichColor);
??????????}
????????]]>
????</mx:Script>

????<!--?Canvas?container?with?four?child?Canvas?containers?-->
????<mx:Canvas?id="c1"
?????????borderStyle="none"
?????????width="300"?height="300"
?????????mouseDown="handleMouseDown(event);">
????????
????????<mx:Canvas
?????????????width="150"?height="150"
?????????????x="0"?y="0"
?????????????backgroundColor="red">
????????????<mx:Button?label="I'm?in?Red"/>
????????</mx:Canvas>
????????<mx:Canvas
?????????????width="150"?height="150"
?????????????x="150"?y="0"
????????????backgroundColor="green">
????????????<mx:Button?label="I'm?in?Green"/>
????????</mx:Canvas>
????????<mx:Canvas
?????????????width="150"?height="150"
?????????????x="0"?y="150"
????????????backgroundColor="blue">
????????????<mx:Button?label="I'm?in?Blue"/>
????????</mx:Canvas>
????????<mx:Canvas
?????????????width="150"?height="150"
?????????????x="150"?y="150"
????????????backgroundColor="magenta">
????????????<mx:Button?label="I'm?in?Magenta"/>
????????</mx:Canvas>
????</mx:Canvas>
</mx:Application>


flex坐标转换

flex?2009-09-25?15:24:06?阅读401?评论0??字号:?订阅

  flashflex针对不同的目的,提供了3种不同的坐标系

  全局的就是(stage级别的)  本地坐标系(组件级别的)  内容坐标系(相对于本地坐标系说的)?

坐标转换还有现成的方法

contentMouseX

返回mouse的内容坐标x

contentMouseY返回mouse的内容坐标YcontentToGlobal???将内容坐标转换成全局坐标contentToLocal?将内容坐标转换成内容坐标globalToContent???将全局的转成内容坐标globalToLocal?全局的转成本地的localToContent本地到内容坐标localToGlobal?本地到全局坐标

????????????pt?=?event.target.localToGlobal(pt);?????????????pt?=?contentPanel.globalToContent(pt);??//转换成内容坐标

坐标转换的相关问题

地球物理学?2009-11-22?16:31:57?阅读52?评论0??字号:?订阅

坐标转换的相关问题(椭球体、投影、坐标系统、转换、BEIJING54XIAN80等)

(转载?http://hi.baidu.com/bbs1973/blog/item/b33cd7ec8eaab64779f055fb.html

Part?one:?Background

地理坐标系与投影坐标系的区别?(cite?from:http://tieba.baidu.com/f?kz=354009166)

1、首先理解地理坐标系(Geographic?coordinate?system),Geographic?coordinate?system直译为地理坐标系统,是以经纬度为地图的存储单位的。很明显,Geographic?coordinate?system是球面坐标系统。我们要将地球上的数字化信息存放到球面坐标系统上,如何进行操作呢?地球是一个不规则的椭球,如何将数据信息以科学的方法存放到椭球上?这必然要求我们找到这样的一个椭球体。这样的椭球体具有特点:可以量化计算的。具有长半轴,短半轴,偏心率。以下几行便是Krasovsky_1940椭球及其相应参数。??

Spheroid:?Krasovsky_1940??

Semimajor?Axis:?6378245.000000000000000000??

Semiminor?Axis:?6356863.018773047300000000??

Inverse?Flattening(扁率):?298.300000000000010000??

???然而有了这个椭球体以后还不够,还需要一个大地基准面将这个椭球定位。在坐标系统描述中,可以看到有这么一行:??

Datum:?D_Beijing_1954??

表示,大地基准面是D_Beijing_1954。??

有了SpheroidDatum两个基本条件,地理坐标系统便可以使用。??

完整参数:??

Alias:??

Abbreviation:??

Remarks:??

Angular?Unit:?Degree?(0.017453292519943299)??

Prime?Meridian(起始经度):?Greenwich?(0.000000000000000000)??

Datum(大地基准面):?D_Beijing_1954??

Spheroid(参考椭球体):?Krasovsky_1940??

Semimajor?Axis:?6378245.000000000000000000??

Semiminor?Axis:?6356863.018773047300000000??

Inverse?Flattening:?298.300000000000010000??

2、接下来便是Projection?coordinate?system(投影坐标系统),首先看看投影坐标系统中的一些参数。??

Projection:?Gauss_Kruger??

Parameters:??

False_Easting:?500000.000000??

False_Northing:?0.000000??

Central_Meridian:?117.000000??

Scale_Factor:?1.000000??

Latitude_Of_Origin:?0.000000??

Linear?Unit:?Meter?(1.000000)??

Geographic?Coordinate?System:??

Name:?GCS_Beijing_1954??

Alias:??

Abbreviation:??

Remarks:??

Angular?Unit:?Degree?(0.017453292519943299)??

Prime?Meridian:?Greenwich?(0.000000000000000000)??

Datum:?D_Beijing_1954??

Spheroid:?Krasovsky_1940??

Semimajor?Axis:?6378245.000000000000000000??

Semiminor?Axis:?6356863.018773047300000000??

Inverse?Flattening:?298.300000000000010000??

从参数中可以看出,每一个投影坐标系统都必定会有Geographic?Coordinate?System。??

投影坐标系统,实质上便是平面坐标系统,其地图单位通常为米。??

那么为什么投影坐标系统中要存在坐标系统的参数呢???

这时候,又要说明一下投影的意义:将球面坐标转化为平面坐标的过程便称为投影。??

好了,投影的条件就出来了:??

a、球面坐标??

b、转化过程(也就是算法)??

也就是说,要得到投影坐标就必须得有一个拿来投影的球面坐标,然后才能使用算法去投影!??

即每一个投影坐标系统都必须要求有Geographic?Coordinate?System参数。??

3、我们现在看到的很多教材上的对坐标系统的称呼很多,都可以归结为上述两种投影。其中包括我们常见的非地球投影坐标系统。):??

大地坐标(Geodetic?Coordinate:大地测量中以参考椭球面为基准面的坐标。地面点P的位置用大地经度L、大地纬度B和大地高H表示。当点在参考椭球面上时,仅用大地经度和大地纬度表示。大地经度是通过该点的大地子午面与起始大地子午面之间的夹角,大地纬度是通过该点的法线与赤道面的夹角,大地高是地面点沿法线到参考椭球面的距离。

方里网:是由平行于投影坐标轴的两组平行线所构成的方格网。因为是每隔整公里绘出坐标纵线和坐标横线,所以称之为方里网,由于方?里线同时?又是平行于直角坐标轴的坐标网线,故又称直角坐标网。??

11——120万比例尺的地形图上,经纬线只以图廓线的形式直接表现出来,并在图角处注出相应度数。为了在用图时加密成?网,在内外图廓间还绘有加密经纬网的加密分划短线(图式中称分度带),必要时对应短线相连就可以构成加密的经纬线网。12?5万地形图上,除内图廓上绘有经纬网的加密分划外,图内还有加密用的十字线。??

我国的150——1100万地形图,在图面上直接绘出经纬线网,内图廓上也有供加密经纬线网的加密分划短线。??

直角坐标网的坐标系以中央经线投影后的直线为X轴,以赤道投影后的直线为Y轴,它们的交点为坐标原点。这样,坐标系中就出现了四?个象限。纵坐标从赤道算起向北为正、向南为负;横坐标从中央经线算起,向东为正、向西为负。??

虽然我们可以认为方里网是直角坐标,大地坐标就是球面坐标。但是我们在一副地形图上经常见到方里网和经纬度网,我们很习惯的称经?纬度网为大地坐标,这个时候的大地坐标不是球面坐标,她与方里网的投影是一样的(一般为高斯),也是平面坐标??

四、GIS中的坐标系定义与转换??

1.?椭球体、基准面及地图投影??

GIS中的坐标系定义是GIS系统的基础,正确定义GIS系统的坐标系非常重要。GIS中的坐标系定义由基准面和地图投影两组参数确定,而基准面的定义则由特定椭球体及其对应的转换参数确定,因此欲正确定义GIS系统坐标系,首先必须弄清地球椭球体(Ellipsoid)、大地基准面(Datum)及地图投影(Projection)三者的基本概念及它们之间的关系。?基准面是利用特定椭球体对特定地区地球表面的逼近,因此每个国家或地区均有各自的基准面,我们通常称谓的北京54坐标系、西安80坐标系实际上指的是我国的两个大地基准面。我国参照前苏联从1953年起采用克拉索夫斯基(Krassovsky)椭球体建立了我国的北京54坐标系,1978年采用国际大地测量协会推荐的1975地球椭球体建立了我国新的大地坐标系--西安80坐标系,目前大地测量基本上仍以北京54坐标系作为参照,北京54与西安80坐标之间的转换可查阅国家测绘局公布的对照表。?WGS1984基准面采用WGS84椭球体,它是一地心坐标系,即以地心作为椭球体中心,目前GPS测量数据多以WGS1984为基准。??

上述3个椭球体参数如下:??

??

椭球体与基准面之间的关系是一对多的关系,也就是基准面是在椭球体基础上建立的,但椭球体不能代表基准面,同样的椭球体能定义不同的基准面,如前苏联的Pulkovo?1942、非洲索马里的Afgooye基准面都采用了Krassovsky椭球体,但它们的基准面显然是不同的。??

地图投影是将地图从球面转换到平面的数学变换,如果有人说:该点北京54坐标值为X=4231898,Y=21655933,实际上指的是北京54基准面下的投影坐标,也就是北京54基准面下的经纬度坐标在直角平面坐标上的投影结果。??

2.?GIS中基准面的定义与转换??

虽然现有GIS平台中都预定义有上百个基准面供用户选用,但均没有我们国家的基准面定义。假如精度要求不高,可利用前苏联的Pulkovo?1942基准面(Mapinfo中代号为1001)代替北京54坐标系;假如精度要求较高,如土地利用、海域使用、城市基建等GIS系统,则需要自定义基准面。??

GIS系统中的基准面通过当地基准面向WGS1984的转换7参数来定义,转换通过相似变换方法实现,具体算法可参考科学出版社1999年出版的《城市地理信息系统标准化指南》第7686页。假设XgYgZg表示WGS84地心坐标系的三坐标轴,XtYtZt表示当地坐标系的三坐标轴,那么自定义基准面的7参数分别为:三个平移参数ΔXΔYΔZ表示两坐标原点的平移值;三个旋转参数εxεyεz表示当地坐标系旋转至与地心坐标系平行时,分别绕XtYtZt的旋转角;最后是比例校正因子,用于调整椭球大小。??

MapX中基准面定义方法如下:??

Datum.Set(Ellipsoid,?ShiftX,?ShiftY,?ShiftZ,?RotateX,?RotateY,?RotateZ,?ScaleAdjust,?PrimeMeridian)??

其中参数:?Ellipsoid为基准面采用的椭球体;??

ShiftX,?ShiftZ为平移参数;??

RotateX,?RotateZ为旋转参数;??

ScaleAdjust为比例校正因子,以百万分之一计;??

PrimeMeridian为本初子午线经度,在我国取0,表示经度从格林威治起算。??

3.?GIS中地图投影的定义??

我国的基本比例尺地形图(1:5千,1:1万,1:2.5万,1:5万,1:10万,1:25万,1:50万,1:100)中,大于等于50万的均采用高斯-克吕格投影(Gauss-Kruger),又叫横轴墨卡托投影(Transverse?Mercator);小于50万的地形图采用正轴等角割园锥投影,又叫兰勃特投影(Lambert?Conformal?Conic);海上小于50万的地形图多用正轴等角园柱投影,又叫墨卡托投影(Mercator),我国的GIS系统中应该采用与我国基本比例尺地形图系列一致的地图投影系统。??

MapX中坐标系定义由基准面、投影两部分参数组成,方法如下:??

CoordSys.Set(Type,?[Datum],?[Units],?[OriginLongitude],?[OriginLatitude],??

[StandardParallelOne],?[StandardParallelTwo],?[Azimuth],?[ScaleFactor],??

[FalseEasting],?[FalseNorthing],?[Range],?[Bounds],?[AffineTransform])??

其中参数:Type表示投影类型,Type1时地图坐标以经纬度表示,它是必选参数,它后面的参数都为可选参数;??

Datum为大地基准面对象,如果采用非地球坐标(NonEarth)无需定义该参数;??

Units为坐标单位,如Units7表示以米为单位;??

OriginLongitudeOriginLatitude分别为原点经度和纬度;??

StandardParallelOneStandardParallelTwo为第一、第二标准纬线;??

Azimuth为方位角,斜轴投影需要定义该参数;??

ScaleFactor为比例系数;??

FalseEasting,?FalseNorthing为东伪偏移、北伪偏移值;??

Range为地图可见纬度范围;??

Bounds为地图坐标范围,是一矩形对象,非地球坐标(NonEarth)必须定义该参数;??

AffineTransform为坐标系变换对象。??

相应高斯-克吕格投影、兰勃特投影、墨卡托投影需要定义的坐标系参数序列如下:??

高斯-克吕格:投影代号(Type),基准面(Datum),单位(Unit),??

中央经度(OriginLongitude),原点纬度(OriginLatitude),??

比例系数(ScaleFactor),??

东伪偏移(FalseEasting),北纬偏移(FalseNorthing)??

兰勃特:?投影代号(Type),基准面(Datum),单位(Unit),??

中央经度(OriginLongitude),原点纬度(OriginLatitude),??

标准纬度1(StandardParallelOne),标准纬度2(StandardParallelTwo),??

东伪偏移(FalseEasting),北纬偏移(FalseNorthing)??

墨卡托:?投影代号(Type),基准面(Datum),单位(Unit),??

原点经度(OriginLongitude),原点纬度(OriginLatitude),??

标准纬度(StandardParallelOne)??

在城市GIS系统中均采用6度或3度分带的高斯-克吕格投影,因为一般城建坐标采用的是6度或3度分带的高斯-克吕格投影坐标。高斯-克吕格投影以6度或3度分带,每一个分带构成一个独立的平面直角坐标网,投影带中央经线投影后的直线为X(纵轴,纬度方向),赤道投影后为Y(横轴,经度方向),为了防止经度方向的坐标出现负值,规定每带的中央经线西移500公里,即东伪偏移值为500公里,由于高斯-克吕格投影每一个投影带的坐标都是对本带坐标原点的相对值,所以各带的坐标完全相同,因此规定在横轴坐标前加上带号,如(4231898,21655933)其中21即为带号,同样所定义的东伪偏移值也需要加上带号,如21带的东伪偏移值为21500000米。??

假如你的工作区位于21带,即经度在120度至126度范围,该带的中央经度为123度,采用Pulkovo?1942基准面,那么定义6度分带的高斯-克吕格投影坐标系参数为:(81001712301215000000)。??

那么当精度要求较高,实测数据为WGS1984坐标数据时,欲转换到北京54基准面的高斯-克吕格投影坐标,如何定义坐标系参数呢?你可选择WGS?1984(Mapinfo中代号104)作为基准面,当只有一个已知控制点时(见第2部分),根据平移参数调整东伪偏移、北纬偏移值实现WGS84到北京54的转换,如:?(810471230121500200-200),也可利用?AffineTransform坐标系变换对象,此时的转换系数(ABCDEF)ABDE0,只有XY方向的平移值CF?;当有3个已知控制点时,可利用得到的转换系数(ABCDEF)定义?AffineTransform坐标系变换对象,实现坐标系的转换,如:(8104712301215000000map.AffineTransform),其中AffineTransform定义为AffineTransform.set(7ABCDEF)(7表示单位米);当然有足够多已知控制点时,直接求定7参数自定义基准面就行了。??

.userData?{?BEHAVIOR.?url(#default#userdata)?}

Part?Two:?About?BEIJING54

美国国家测绘局(National?Imagery?and?Mapping?Agency)公布了世界大多数国家的当地基准面至WGS1984基准面的转换3参数(平移参数),可从?http://164.214.2.59/GandG/wgs84dt/dtp.html?下载,其中包括有香港Hong?Kong?1963基准面、台湾?Hu-Tzu-Shan?基准面的转换3参数,但是没有中国大陆的参数。??

实际工作中一般都根据工作区内已知的北京54坐标控制点计算转换参数,如果工作区内有足够多的已知北京54WGS84坐标控制点,可直接计算坐标转换的7参数或3参数;当工作区内有3个已知北京54WGS84坐标控制点时,可用下式计算WGS84到北京54坐标的转换参数(ABCDEF)x54?=?AX84?+?BY84?+?Cy54?=?DX84?+?EY84?+?F,多余一点用作检验;在只有一个已知控制点的情况下(往往如此),用已知点的北京54WGS84坐标之差作为平移参数,当工作区范围不大时精度也足够了。??

Mapinfo中国的URL(http://www.mapinfo.com.cn/download)可下载到包含北京54、西安80坐标系定义的Mapinfow.prj文件,其中定义的北京54基准面参数为:(3,24,-123,-94,-0.02,0.25,0.13,1.1,0),西安80基准面参数为:(31,0),文件中没有注明其参数的来源,我发现它们与Mapinfo参考手册附录G"定义自定义基准面"中的一个例子所列参数相同,因此其可靠性值得怀疑,尤其从西安80与北京54采用相同的7参数来看,至少西安80的基准面定义肯定是不对的。因此,当系统精度要求较高时,一定要对所采用的参数进行检测、验证,确保坐标系定义的正确性。

(cite?from:http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=33238&highlight=beijing54)

?

? ;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读