软件环境 SuperMapObjects .NET实现内容 在将经纬度的数据动态地添加到地图窗口中时,由于地图坐标系可能存在多种情况,针对坐标系的不同,如何实现动态数据能够与地图叠加显示呢?本文将介绍如何根据地图不同的坐标系,将经纬度的数据动态的添加在地图当中正确显示。背景介绍平面无投影:指物体在地图上没有对应的地理位置,一般用来作为与地理位置无关的数据的坐标参考,平面坐标系是一个二维坐标系,原点坐标为(0,0),数据中每一个点的坐标是由其距水平和垂直的X 轴和 Y轴的距离确定。具体坐标显示如图一,图一中是将经纬度坐标的数据显示在平面坐标系上的坐标显示,其经纬度的值被作为对象的X,Y坐标值显示:软件SuperMapObjects。NET实现了当经纬度数据动态添加到地图窗口时,地图坐标系中可能会出现很多情况。根据不同的坐标系,动态数据如何与地图叠加显示?本文将介绍如何根据地图的不同坐标系动态地向地图添加经纬度数据,以正确显示。无投影背景平面介绍:物体在地图上没有对应的地理位置,一般作为与地理位置无关的数据的坐标参考。平面坐标系是原点坐标为(0,0)的二维坐标系,数据中各点的坐标由其与水平和垂直X轴和Y轴的距离决定。具体坐标显示如图1所示。在图1中,经纬度坐标数据显示在平面坐标系上,经纬度值显示为物体的X、Y坐标值:

地理坐标系:表示物体的确切地理位置,通过经纬度来描述其空间位置信息,通常的表现形式为经度值在±180°,纬度值在±90°。如图二所示:投影坐标系:地球椭球体表面是曲面,而地图通常要绘制在平面图纸上,因此制图时首先要把曲面展为平面。然而球面是个不可展的曲面,换句话说,就是把它直接展为平面时,不可能不发生破裂或褶皱。若用这种具有破裂或褶皱的平面绘制地图,显然是不实用的,所以必须采用特殊的方法将曲面展开,使其成为没有破裂或褶皱的平面,于是就出现了地图投影。常用的地图投影有高斯克吕格投影,阿尔伯斯投影,兰伯特投影,墨卡托投影等,坐标位数通常比较长,一般的坐标显示是:X为6 位,Y为7 位。如图三所示:地理坐标系:表示物体的确切地理位置,用经纬度描述其在空之间的位置信息,通常表示为经度180°和纬度90°。如图2所示:

具体来说,有三个不同的坐标系。因此,在地图中添加经纬度要素时,会分为三种情况:平面坐标系、地理坐标系和投影坐标系。【案例一】无平面投影:当地图为平面坐标系,添加的数据为地理坐标系时,有两种情况:1。添加的数据在地图范围内,可以正常添加显示在地图中,其经纬度值将作为点X、Y的坐标添加到地图中,如图4所示:

二、添加的数据不在地图范围内,无法正确的添加在地图当中。这种情况下,地图的坐标系有两种可能,一:数据坐标没有意义,是错误值;二:地图坐标系非常大,且没有设置在正确坐标系。针对第一种情况,建议通过数据配准,更正错误数据,将其配准在正确的地理位置上;第二种情况,建议与数据提供方联系,设置正确坐标系后,动态添加经纬度点对象的方法类似【情况三】。第二,添加的数据不在地图范围内,无法正确添加到地图中。在这种情况下,地图的坐标系有两种可能性。一是数据坐标无意义,数值错误;第二,地图坐标系很大,没有设置正确的坐标系。对于第一种情况,建议通过数据注册来纠正错误的数据,并将其注册在正确的地理位置。在第二种情况下,建议联系数据提供者。设置好正确的坐标系后,动态添加经纬度点对象的方法类似于[案例3]。

【情况二】地理坐标系当地图为地理坐标系,添加的数据也是地理坐标系时,如果数据在同一地理范围内,可以添加到地图窗口进行显示。如图五所示:【案例二】当地理坐标系的局部地图是地理坐标系,添加的数据也是地理坐标系时,如果数据在同一地理范围内,可以添加到地图窗口显示。如图5所示:

【情况三】投影坐标系当添加的地图坐标系为投影坐标系,数据的坐标系为地理坐标系时,数据无法正常显示,如图六。地理坐标系的显示方式和投影坐标系的显示方式是不同的,地理坐标系的显示方式是球面的显示方式,而投影坐标系的显示方式是平面的。因此,两个坐标系的对象不能同时显示在一个窗口中。 那么如何能将一个地理坐标系的对象显示在投影坐标的地图中呢?就需要将添加的对象进行投影转换,而后才可以将对象添加到正确的地理位置上。进行投影转换的方法为CoordSysTranslator类的三个静态方法Covert(),Forward(),Inverse(),三种方法分别是针对于不同的对象和坐标系而言的,本例中待转换的对象为二维点,转换的类型为将地理坐标系的数据转换到投影坐标系中,因此使用的方法是CoordSysTranslator.Forward()。假设以获取待添加的二维点集,为point2ds,并将具有目标投影的数据集添加到地图窗口中,为dataset。 投影转换的主要代码为:【案例三】投影坐标系当添加的地图坐标系为投影坐标系,数据坐标系为地理坐标系时,数据无法正常显示,如图6所示。地理坐标系的显示方式不同于投影坐标系。地理坐标系的显示方式为球面,投影坐标系的显示方式为平面。因此,两个坐标系的对象不能同时显示在一个窗口中。那么,地理坐标系中的物体如何在具有投影坐标的地图中显示呢?您需要将添加的对象转换为投影,然后才能将它们添加到正确的地理位置。投影转换的方法是坐标系统转换器类的三种静态方法,分别是cover(),Forward()和Inverse(),分别针对不同的对象和坐标系。在这个例子中,要转换的对象是一个二维点,转换的类型是将地理坐标系的数据转换成投影坐标系,所以使用的方法是坐标系统转换器。向前()。假设要添加的二维点集是point2ds,带有目标投影的数据集作为数据集添加到地图窗口。投影的主要代码是:

Datasetdataset = mapControl。地图。图层[0]。数据集;PrjCoordSys prjCoordSys =数据集。PrjCoordSysbool结果= CoordSysTranslator。向前(点2ds,prjCoordSys);

投影转换后的效果如下图四:总结 综上所述,无论是使用SuperMapDeskpro .NET 还是用SuperMapObjects .NET,是添加对象还是添加数据集到地图窗口中,希望有正确显示,前提都需要待添加的数据和地图的地理信息相同,只有有了正确的地理信息基础,才能将同一地理范围内的对象添加到同一地图窗口进行显示。在使用桌面产品SuperMapDeskpro .NET 可以使用地图属性的动态投影功能,将后添加的数据动态的投影到地图的投影坐标系上,从而实现相同的显示效果。投影转换后的效果如下图4所示:综上所述,是否使用SuperMapDeskpro。NET或SuperMapObjects。NET,在地图窗口中添加对象或添加数据集,为了正确显示,前提是要添加的数据与地图的地理信息相同,只有具备正确的地理信息基础,才能将同一地理范围内的对象添加到同一地图窗口中进行显示。使用桌面产品SuperMapDeskpro。NET中,可以利用地图属性的动态投影功能,将添加的数据动态投影到地图的投影坐标系中,从而达到同样的显示效果。