软件环境 SuperMapObjects .NET实现内容 在将经纬度的数据动态地添加到地图窗口中时,由于地图坐标系可能存在多种情况,针对坐标系的不同,如何实现动态数据能够与地图叠加显示呢?本文将介绍如何根据地图不同的坐标系,将经纬度的数据动态的添加在地图当中正确显示。背景介绍平面无投影:指物体在地图上没有对应的地理位置,一般用来作为与地理位置无关的数据的坐标参考,平面坐标系是一个二维坐标系,原点坐标为(0,0),数据中每一个点的坐标是由其距水平和垂直的X 轴和 Y轴的距离确定。具体坐标显示如图一,图一中是将经纬度坐标的数据显示在平面坐标系上的坐标显示,其经纬度的值被作为对象的X,Y坐标值显示:
地理坐标系:表示物体的确切地理位置,通过经纬度来描述其空间位置信息,通常的表现形式为经度值在±180°,纬度值在±90°。如图二所示:投影坐标系:地球椭球体表面是曲面,而地图通常要绘制在平面图纸上,因此制图时首先要把曲面展为平面。然而球面是个不可展的曲面,换句话说,就是把它直接展为平面时,不可能不发生破裂或褶皱。若用这种具有破裂或褶皱的平面绘制地图,显然是不实用的,所以必须采用特殊的方法将曲面展开,使其成为没有破裂或褶皱的平面,于是就出现了地图投影。常用的地图投影有高斯克吕格投影,阿尔伯斯投影,兰伯特投影,墨卡托投影等,坐标位数通常比较长,一般的坐标显示是:X为6 位,Y为7 位。如图三所示:
具体实现 由于有三种不同的坐标系统,因此,在将经纬度的地物添加到地图的时候,会分为平面坐标系,地理坐标系,投影坐标系三种情况。【情况一】 平面无投影:当地图是平面坐标系,添加的数据是地理坐标系时,会出现两种情况:一、添加的数据在地图范围内,可以正常的添加显示在地图中,其经纬度的值会作为点X,Y的坐标添加到地图当中,如图四所示:
二、添加的数据不在地图范围内,无法正确的添加在地图当中。这种情况下,地图的坐标系有两种可能,一:数据坐标没有意义,是错误值;二:地图坐标系非常大,且没有设置在正确坐标系。针对第一种情况,建议通过数据配准,更正错误数据,将其配准在正确的地理位置上;第二种情况,建议与数据提供方联系,设置正确坐标系后,动态添加经纬度点对象的方法类似【情况三】。
【情况二】地理坐标系当地图为地理坐标系,添加的数据也是地理坐标系时,如果数据在同一地理范围内,可以添加到地图窗口进行显示。如图五所示:
【情况三】投影坐标系当添加的地图坐标系为投影坐标系,数据的坐标系为地理坐标系时,数据无法正常显示,如图六。地理坐标系的显示方式和投影坐标系的显示方式是不同的,地理坐标系的显示方式是球面的显示方式,而投影坐标系的显示方式是平面的。因此,两个坐标系的对象不能同时显示在一个窗口中。 那么如何能将一个地理坐标系的对象显示在投影坐标的地图中呢?就需要将添加的对象进行投影转换,而后才可以将对象添加到正确的地理位置上。进行投影转换的方法为CoordSysTranslator类的三个静态方法Covert(),Forward(),Inverse(),三种方法分别是针对于不同的对象和坐标系而言的,本例中待转换的对象为二维点,转换的类型为将地理坐标系的数据转换到投影坐标系中,因此使用的方法是CoordSysTranslator.Forward()。假设以获取待添加的二维点集,为point2ds,并将具有目标投影的数据集添加到地图窗口中,为dataset。 投影转换的主要代码为:
Datasetdataset = mapControl.Map.Layers[0].Dataset; PrjCoordSys prjCoordSys =dataset. PrjCoordSys; bool result =CoordSysTranslator.Forward(point2ds, prjCoordSys);
投影转换后的效果如下图四:总结 综上所述,无论是使用SuperMapDeskpro .NET 还是用SuperMapObjects .NET,是添加对象还是添加数据集到地图窗口中,希望有正确显示,前提都需要待添加的数据和地图的地理信息相同,只有有了正确的地理信息基础,才能将同一地理范围内的对象添加到同一地图窗口进行显示。在使用桌面产品SuperMapDeskpro .NET 可以使用地图属性的动态投影功能,将后添加的数据动态的投影到地图的投影坐标系上,从而实现相同的显示效果。
拓展阅读:
一、坐标系类型
1、大地坐标系
定义:大地测量中以参考椭球面(不准确)为基准面建立起来的坐标系。
一定的参考椭球和一定的大地原点上的大地起算数据,确定了一定的坐标系。通常用参考椭球参数和大地原点上的起算数据作为一个参心大地坐标系建成的标志。
大地坐标(地理坐标):将某点投影到椭球面上的位置用大地经度L和大地纬度B表示,( B , L)统称为大地坐标。
大地高H:某点沿投影方向到基准面(参考椭球面)的距离。
在大地坐标系中,某点的位置用(B , L,H)来表示。
2、空间直角坐标系
定义:以椭球体中心为原点,起始子午面与赤道面交线为X轴,在赤道面上与X轴正交的方向为Y轴,椭球体的旋转轴为Z轴。
在空间直角坐标系中,某点的位置用(X,Y,Z)来表示。
3、平面直角坐标系
在小区域进行测量工作若采用大地坐标来表示地面点位置是不方便的,通常采用平面直角坐标系。
测量工作以x轴为纵轴,以y轴为横轴
投影坐标:为了建立各种比例尺地形图的控制及工程测量控制,一般应将椭球面上各点的大地坐标按照一定的规律投影到平面上,并以相应的平面直角坐标表示。
4、地方独立坐标系
基于限制变形、方便、实用和科学的目的,在许多城市和工程测量中,常常会建立适合本地区的地方独立坐标系,建立地方独立坐标系,实际上就是通过一些参数来确定地方参考椭球与投影面。
二、国家大地坐标系
1.1954年北京坐标系(BJ54旧)
坐标原点:前苏联的普尔科沃。
参考椭球:克拉索夫斯基椭球。
平差方法:分区分期局部平差。
存在问题:(1)椭球参数有较大误差。
(2)参考椭球面与我国大地水准面存在着自西向东明显的系统性倾斜。
(3)几何大地测量和物理大地测量应用的参考面不统一。
(4)定向不明确。
2.1980年国家大地坐标系(GDZ80)
坐标原点:陕西省泾阳县永乐镇。
参考椭球:1975年国际椭球。
平差方法:天文大地网整体平差。
特点:(1)采用1975年国际椭球。
(2)参心大地坐标系是在1954年北京坐标系基础上建立起来的。
(3)椭球面同似大地水准面在我国境内最为密合,是多点定位。
(4)定向明确。
(5)大地原点地处我国中部。
(6)大地高程基准采用1956年黄海高程。
3.新1954年北京坐标系(BJ54新) 新1954年北京坐标系(BJ54新)是由1980年国家大地坐标系(GDZ80)转换得来的。
坐标原点:陕西省泾阳县永乐镇。
参考椭球:克拉索夫斯基椭球。
平差方法:天文大地网整体平差。
BJ54新的特点 :(1)采用克拉索夫斯基椭球。
(2)是综合GDZ80和BJ54旧 建立起来的参心坐标系。 (3)采用多点定位。但椭球面与大地水准面在我国境内不是最佳拟合。
(4)定向明确。
(5)大地原点与GDZ80相同,但大地起算数据不同。
(6)大地高程基准采用1956年黄海高程。
(7)与BJ54旧 相比,所采用的椭球参数相同,其定位相近,但定向不同。
(8) BJ54旧 与BJ54新 无全国统一的转换参数,只能进行局部转换。
三、WGS-84坐标系
地心坐标系。
参考椭球:WGS-84椭球
原点:地球的质心
空间直角坐标系的z轴指向BIH(1984.0)定义的地极(CTP)方向,X轴指向BIH定义的零度子午面和CTP赤道的交点,Y轴和Z,X轴构成右手坐标系。
长半轴a=6378137m;扁率f=1:298.257223563
四、2000国家大地坐标系
地心坐标系
国家大地坐标系的定义包括坐标系的原点、三个坐标轴的指向、尺度以及地球椭球的4个基本参数的定义。2000国家大地坐标系的原点为包括海洋和大气的整个地球的质量中心;
2000国家大地坐标系的Z轴由原点指向历元2000.0的地球参考极的方向,该历元的指向由国际时间局给定的历元为1984.0的初始指向推算,定向的时间演化保证相对于地壳不产生残余的全球旋转,
X轴由原点指向格林尼治参考子午线与地球赤道面(历元2000.0)的交点,Y轴与Z轴、X轴构成右手正交坐标系。
采用广义相对论意义下的尺度。
2000国家大地坐标系采用的地球椭球参数的数值为:
长半轴 a=6378137m
扁率 f=1/298.257222101
地心引力常数 GM=3.986004418×1014m3s-2
自转角速度 ω=7.292l15×10-5rad s-1