坐标转换那些事儿
在GIS中,最基础(basic)、最关键(essential)的部分应该就是坐标系(coordinate)了,或者说空间参考(spatial reference)。只有明确了空间参考,才能正确地确定地物的空间位置、度量地物之间的空间关系,以及发挥GIS融合多源数据的功能,等等。显然,空间参考是GIS的一个根本问题。
在实际工作中,当你准备用GIS来完成一项任务时,如果你手头上数据的空间参考是正确一致的,至少基准面(datum)是正确并一致的。那么恭喜你,你基本上可以跳过坐标转换这一道坎了,可以直接使用GIS软件进行数据处理与分析了。如果空间参考是不一致的,甚至是没有空间参考的数据,那该怎么办呢?显然是要定义一个空间参考,甚至还要进行坐标转换,在一致的坐标系下才能进行后续的工作。还有,矢量、栅格数据在进行坐标转换时的原理与操作又是一致的吗?
前面废话了比较多,其实我就是想谈一谈坐标转换的问题。很基础,也不会完全正确,但应该有点用处。
矢量数据坐标转换
先来看一张矢量数据坐标转换的流程图:
(矢量数据坐标转换流程图 v0.1)
这个是我自己定义的,有点诚惶诚恐。如果接触过坐标转换,或者对GIS中的空间参考概念了解的话,我想这张图应该表达的比较清楚了。当然还有几点需要特别说明下:
(1)空间参考&已有&、&已知&的区别。&已有&说明数据是有坐标文件的,比如Shapefile数据有prj文件,而且&已有&当然&已知&了。但是&已知&并不一定&已有&,比如一份Shapefile数据知道是WGS84空间参考,但是没有prj文件,这样的情况需要重新给数据定义(define)空间参考。
(2)PCS与GCS,PCS是Projected Coordinate System的缩写,GCS是Geographic Coordinate System的缩写。PCS定义在一个GCS之上(Web Mercator比较特别,可以参考),GCS定义在一个Datum(大地基准面)之上,Datum又是Ellipsoid(地球椭球体)经过椭球定位、定向之后的产物,Ellipsoid就是通过长短半轴去描绘地球形态的光滑椭球体了。
(3)&N参数拟合&的说明。当有一份数据并不知道其空间参考时,这时就需要根据坐标数据的大小、范围等因素去推测原始坐标系,找到准确的同名控制点,再根据经验选择一个合适的物理模型,例如:仿射变换六参数,N阶多项式变换。之后进行模型参数求解,最后就是计算坐标了。特别是小范围城市级别的坐标转换,一般使用仿射变换就能满足普通需求了。这整个流程,我概括为&N参数拟合&。另外,这有点类似于ArcGIS中Spatial Adjustment工具条做的事情。
(4)&基准面不一致&的说明。当基准面不一致时,才要真正考虑到坐标转换(convertion),因为在基准面一致时,任何PCS1到PCS2都是有解析式的,坐标系之间只存在变换(transformation)的关系。基准面不一致时,一般通N个参数来确定两个基准面之间的关系,这也就是转换的物理模型。比如三参数转换、Molodenski转换、Helmert转换以及Molodenski-Badekas转换等等。这些转换大多是基于地心空间直角坐标的,也就是XYZ。
戴勤奋老师翻译了中的&Formulas for Coordinate Operations other than Map Projections&章节,中文名为&&,里面介绍了许多坐标转换模型的方方面面,是很好的学习资料。
另外还参考了《》、杨启和教授的《》以及别的各种小论文。
顺带说点八卦:
杨启和教授是的学生,吴忠性教授是王家耀院士、高俊院士、孟立秋以及祝国瑞等等知名教授的导师,也是吴邦国委员长的父亲。吴忠性教授被称为&测绘将军&,应该是现代中国地图学界的宗师级人物之一了。
杨启和教授的这本书曾被和翻译为,至今在Amazon上还有销售,胡毓钜教授曾专门谈到过这部书的出版意义。值得强调一下的是,John Snyder生前是USGS的首席地图投影专家,他将在USGS的工作成果整理为了一本书,,另外他也是投影的发明者。Waldo Tobler就更不用多解释了,地理学第一定律的提出者,UCSB的教授。
栅格数据坐标转换
栅格数据与矢量数据的定义不同,空间参考定义也是不同的,因而坐标转换当然也不会相同了。一般来说,栅格数据的坐标转换往往是一步到位。对小范围的数据,选好控制点和坐标转换模型,直接拟合;大范围数据,先分成几块,分别拟合,最后合并。这样做的原因,个人认为可能是栅格数据坐标转换涉及重采样的问题,重采样本身就有误差,若是像矢量数据一样有按严格的空间参考定义去进行一步步转换,那期间要涉及多次重采样,最终的结果可能会面目全非。另外,还可以参考ArcGIS中的Georefrencing工具的原理和使用。
在所有坐标转换模型中,仿射变换是最简单,也是最常用的。
所以,使用仿射变换,只需使用3对同名控制点,解出A~B六个参数,即能得到坐标转换公式(模型)。如果超过3对控制点,就要通过最小二乘来解算,这些使用Matlab来计算还是很方便的。
仿射变换的原理,通过几何关系可以很清楚的看出:
(仿射变换几何原理,via 戴勤奋)
由上图可知公式:
杭州公交数据转换
今年4月份的时候,调用过数据。但当时因为一些别的原因,没有用心去做,也就没有对数据进行纠偏了。
从文献来看,杭州本地基准是在北京54的基础上经过偏移的,平面坐标当然是高斯克吕格投影。而Web上的地图服务一般都是Web Mercator投影(天地图除外),基准是WGS84。
我要做即是将上数据转换到上。转换模型选择仿射变换,如果效果不好,可以再换。以地理坐标(经纬度)数据为基础,因为原始数据就是经纬度的,而且WGS84与Web Mercator的正反算也很容易。
这样,我只需要找出3对同名控制点就可以计算了。因为原始数据是公交车站的点位坐标,而这个车站的位置与实际中的位置并不一致(地图做得太烂),而且目标地图上并没有公交车站的点位标识。因而,只能使用靠近道路交叉口的公交车站,再去目标地图上找相同的交叉口,最后确定附近大概是公交车站的位置。这样来选择控制点,确实有些不友好,但也没办法呀。
找到同名控制点的坐标,通过Matlab解算参数,最后计算坐标。最终结果可以接受,至少车站都分布在道路两侧。考虑到原始数据的质量,这样的结果已经挺不容易啦。
(hzbus上的公交车站位置)
(arcgisonline上的公交车站位置)
学了这么久的GIS,坐标系也是一开始就开始接触的。简单来说,&坐标虐我千百遍,我待坐标如初恋&。
Mercator那些事儿
&&(),生于(现比利时某地,当时属于&&&荷、法、比交界的地方),制图学家、哲学家及数学家。拟定了著名的Mercator投影(正轴等角切圆柱),推动了航海事业和Web地图产业(这个您老没想到吧~)发展;首次使用&Atlas&来表示地图集,并延续至今。今年恰逢Mercator诞辰500周年,Esri曾专门纪念,在此也向Mercator表示敬意。
(比利时法郎中的Mercator头像,及Mercator投影和Atlas,via umich)
Mercator与航海
在Mercator投影发明之前,航海中使用的是最简单的(现在天地图还在用),最早由发明,投影公式简单到不能再简单了:x=lon, y=lat。但这个投影既不等角也不等积,特别在高纬度地区,与实际相差很大,所以并不实用。Mercator于1569年发明了Mercator投影,通过对普通透视圆柱投影的改进,根据纬度越高的纬圈投影到圆柱上长度变化越大,因此考虑纬度变长时将对应的经线也拉长,从而保证两者之比恒定,即能等角。
在Mercator投影的海图中,恒向线()是一条直线,这对航海来说有重要意义。沿恒向线航行不用改变航向就能到达目的地。比如你要从A航行到B,只需拿把尺子在Mercator海图上将AB连起来,计算AB与经线所成的角度,在航行中使用罗盘一直保持这个角度就能到达B了。但要注意,恒向线并不是球面上的最短距离。球面上两点间的最短距离是大圆航线()。在实际航海中,考虑到航行的距离和驾驶的方便性,往往是两者结合起来使用。在近距离航海中,沿着恒向线朝一个方向航行就能到达目的地。远距离航行中,可以先绘制从出发到目的地的大圆航线,再将大圆航线分为几段,每段按恒向线航行,这就能兼顾了距离和方便性了。当然,实际中并没那么简单。也可以想这么个问题,你一直朝一个方向走(与经线成一个恒定的角度),最终不是走到北极就是南极,除非你沿着经纬网走,那能走回原地。所以,恒向线其实是一条螺旋线。
(大圆航线和恒向线在Mercator投影中的对比,via esri)
人类征服海洋的过程是十分坎坷的,Mercator投影的发明只是一部分。直到伟大的发明了(1737),人类才能在航海时精确地计算经度,进而保证航行的安全。Harrison发明海钟又是一个百味杂陈的故事,有机会可以另说,或者阅读。
Mercator投影公式
虽然我没推导过,但不妨碍我们看看起投影公式的真面容:
(Mercator投影正解公式)
(以赤道、本初子午线为原点)
使用的参数不做过多解释,参看地图投影书籍。Mercator投影的最大优点就是正形(conformal),
(变形椭圆,via wikipedia)
但与之相伴的在高纬度地区极度的失真(面积、距离),最经典的是格陵兰岛和南美洲的大小差异,这个可以从投影公式中用到的正切函数看出。
(比例尺,via wikipedia)
Mercator并不很适合用来展现世界地图,特别是一些专题图的制作,面积与实际的差异实在是夸张,地图也会撒谎的。在教育小孩的时候,最好不要用Mercator投影地图,这可能会影响&世界观&的呀。
Web地图之空间参考
自从Google Maps(2005)出现以来,现今全球范围的Web地图,用的空间参考都是Web Mercator投影(3857)。Web Mercator与Mercator相似,可以看下其投影公式:
(Web Mercator投影正解公式)
与Mercator投影的主要差别在于纬度的计算上,Google工程师为了简便起见,没有使用椭球第一偏心率(e1),从而简化了投影公式。即将WGS84椭球在投影时看作了以其长半轴(6378137)为半径的正球体,而经纬度坐标还是参考WGS84的,这显然与GIS中的空间参考规范不符。众所周知,常用空间参考主要有投影坐标系(PCS)与地理坐标系(GCS)两大类,一个PCS建立在一个GCS之上,并要指定一个投影公式,这个投影公式是要以GCS为基准的,不然定义PCS基于GCS就没有意义了。但Google没有这么做,这就搞乱了空间参考的标准体系,不过这样我们可以从两个角度来理解Web Mercator:
(1)GIS角度。如前所述,Web Mercator采用了两个椭球,WGS84椭球和以WGS84长半轴为半径的正球。GCS用的是WGS84,而GCS投影到PCS时,使用的是正球,虽然地理坐标是参考WGS84的,这点最关键!
(2)非GIS角度。从数学上看,投影无非是一个函数。Mercator投影利用了WGS84椭球的所有参数(a、b、e1、e2),而Web Mercator只不过使用了部分参数罢了(a)。这么理解,就能忽略椭球与正球的差异了,那Web Mercator就是Google参考Mercator投影发明的一种新投影。
值得注意的是,Web Mercator投影不是等角的,只是近似等角(near-conformality),Mercator投影是等角的。虽然我不能证明,但我可以理解。从投影公式去看,或者想象一下投影时椭球和正球的区别,显然是能直观地想明白的。
Google的Hack行为一来推动了Web地图的发展,并形成了一套标准,二来也搅乱了GIS界。EPSG开始并不认可这种投影,至少是不推荐,并不给其编号。但是坊间已经应用广泛,并编之为900913,意指google。后来900913俨然成为了业界标准,EPSG数据库中也就出现了3785这个投影,但没过多久又换成了与3857之间的差异后面再说)。Esri方面,Esri的Web地图开始用的都是4326,到09年末才转换为3857,并逐步停用了原先的4326。选择3857自然有许多好处,比如这是业界标准,这样大家都能互相mashup,一起建设和谐社会。4326的瓦片大小是512&512,6,瓦片变小既能减少单张瓦片的网络流量,又能缩小瓦片数目的规模,而且在一张256&256的瓦片正好能做一张世界地图。
Web Mercator与Web Mercator(Auxiliary Sphere)之异同
ArcGIS中的Web Mercator就是3785,Web Mercator(Auxiliary Sphere)就是3857。如果你有一份与Google Maps使用相同投影的数据A,但失去了投影信息,那么你在ArcGIS中使用任何一个去定义(define)你的空间参考都是正确的。但是,假如你再将一份WGS84(4326)定义的GCS数据B与A去叠加,那么B与A3857可以直接叠加,而B与A3785就不能了,至少不能on the fly。为什么呢?这个通过看一下投影文件,结合前述的Web Mercator投影介绍,再自己实践一下就能明白。
(3785投影文件)
(3857投影文件)
两个比较明显的区别:
(1)3785用的是正球体,3857用的是椭球体。
(2)3857的投影参数里面多了&Auxiliary_Sphere_Type: 0.0&。
也就是说3785是以正球体上为基准的,但其GCS还是参考WGS84;3857是以椭球体为基准的,但投影时参考正球体,&Auxiliary_Sphere_Type: 0.0&的作用就在这里吧。
那么,我现在有一份4326的数据,分别要投影到上,该怎么做呢?
对于3857,因为3857本身基于4326的,所以可以直接project。但是对于3785,就稍微麻烦点了,如果你直接project,那arcgis会提示你进行椭球转换,结果显然会与你预期的不一致。所以你得先重新给这份4326的数据定义一个新的空间参考,定义一个空间参考并不改变其数据,而椭球转换显然是会改变数据的。根据3785所使用的椭球,为4326定义一个新的GCS(104199),就是6378137为半径的正球体,然后再project到3785。这样得到的数据会跟4326直接project到3857一致,但空间参考是不一致的,一个是3857,一个是3785。如果有兴趣可以自己尝试,我附了数据在后面。
显而易见,更合适一些,至少Datum是正常的。GIS的一大特征就是能叠加多源数据,3785这样的投影在叠加数据就很尴尬了,这也是Esri最终使用3857的原因。Esri Dev Summit的视频中也表示,在数学上是一致的,如果要考虑叠加数据,建议使用3857。其实我觉得3785现在基本上没什么用了,只是Esri自己凌乱状态下定义的一个过渡空间参考:P
回过头看,Google 工程师的一次偷懒行为,破坏了GIS界的规范,还最终逆袭成为了事实上的标准,让人唏嘘不已。如果Google使用的是正常的Mercator投影,同样也可以在一张256&256的瓦片中容纳世界地图,只不过南北的跨度略有差异,这样既能保证真正的等角,又符合GIS规范,也不会给我们带来这么困扰。同样,如果Esri或者EPSG能更有话语权,那或许也不会有Web Mercator的存在了。只能说IT和GIS相遇,失意的总是GIS,至少目前是这样的。
空间参考本身比较复杂,所以文中难免有所疏漏和错误,请批评、指正。另外,现今GIS中的地图学课程越来越式微,地图投影等学习也十分薄弱。个人觉得,GIS的教育是很失败的,但是教育失败并不是我们止步的借口,而是我们更应发奋的缘由之一。
有关坐标系常见问题的问与答&&
坐标系是gis的灵魂,坐标系问题在桌面版是个永恒的主题,下面将常见的坐标系问题以问答的形式列出来,希望对大家有所帮助。问:我这有2个不同坐标的shp要素,这2个要素是同一地理位置的,但是在arcmap中打开不能显示在同一范围内,所以我将其中一个要素的坐标转换成另一个要素的坐标,但是转换后,2个要素还是不能显示在同一范围内。怎么办?答:能不能叠加的关键是各自的坐标系要正确,不一定要相同。检查数据的坐标系,错误的重新定义成正确的即可叠加到一起。问:犯了个错误:有一个shape文件是54坐标系的,我不小心定义成80坐标系了,然后以之为标准对其它shape文件进行空间配准,今天弄分幅图的时候才发现错位了,请问有没有什么办法补救呢?答:把那些数据都重新定义成54坐标系。问:如何看出定义的坐标系是错误的?我听说是从extent能看出来,但是我怎么看不出来?答:从extent看出坐标系是否正确要建立在对各种坐标系的坐标形式、坐标范围很了解的条件下。比如wgs84等地理坐标系的范围应满足-180&X&180,-90&Y&90,再比如Xian_1980_3_Degree_GK_Zone_38坐标系的坐标的形式是(38XXXXXX,YYYYYYY)等,如果你数据的坐标形式是(19XXXXXX,YYYYYYY)而你定义成Xian_1980_3_Degree_GK_Zone_38就错了。当然有些错误从extent是看不出来的,比如你的数据正确的坐标系是Xian_1980_3_Degree_GK_CM_111E而你定义成了Beijing_1954_3_Degree_GK_CM_111E,这个错误从extent是看不出来的。问:我的数据是wgs84坐标系的,在dataframe的属性里将display unit改成米后右下角显示的坐标就会变成以米为单位,我想问这个坐标是怎么计算出来的?答:是根据赤道长度及经纬度计算出来的。地球长轴为6378137米,赤道长度为2&6378137&&&米,则赤道上1&&米。假设某点的经纬度坐标为(63..747445),则将display unit换成meter后其坐标就是(427,127),自己验证一下。问:有一个数据有坐标系,是错误的,想进行修改,那么使用哪个工具呢?答:用define projection重新定义坐标系。问:我的栅格是北京54投影坐标系下的tif格式文件,做裁切后为什么坐标系变成Krasovsky_1940_Transverse_Mercator了,我什么也没设置啊。答:你存成grid格式了吧?北京54和西安80投影坐标系的栅格转存成grid格式后会自动改变。北京54坐标系会变成Krasovsky_1940_Transverse_Mercator,西安80坐标系会变成User_Defined_Transverse_Mercator,这是历史原因造成的,不必理会它。问:我用arcgis计算面积时,数据的坐标系为WGS_84,求出来的结果是平方度,如何将其转换为平方米?答:地理坐标系不适合求面积,平方度也不是面积单位,不同纬度1&&1&范围的面积不相同。可将你的数据用project转成WGS 1984 UTM投影坐标系后再求面积。问:有一个无坐标系统的shp层,我用define projection给它定义坐标系统后,然后加到arcmap中来,提示Warning,inconsistent extent!这是什么原因?怎么解决?答:坐标系定义错误,比如有带号的坐标系数据定义成没带号的坐标系,或者把投影坐标系的数据定义成了地理坐标系等等。找出正确的坐标系并用define projection或在arccatalog里重新定义。问:我想计算中国各大港口之间的欧式距离,但用ArcGIS和google earth两种方式计算的结果相差200多公里,我用ArcGIS计算的步骤如下:a搜集天津港和深圳港的经纬度并制作成Excel表b在ArcCatalog中创建port点图层(shapefile格式),选择GCS-WGS1984c在ArcMap中添加port图层,使用Tool-&add XY data创建点图层中要素d使用project转换port图层,投影坐标系选择PDC-WGS1984e使用Point Distance计算点间距离以上五步中,哪一步出错了?答:同样两地在不同坐标系下所求的距离有可能不相等。google earth里求距离、面积等并不是用PDC-WGS1984坐标系算出的,用此坐标系算出的距离、面积和实际的数比有很大的误差。一般计算距离时用等距离投影,计算面积时用等面积投影。问:按理说,计算距离等应该在投影坐标系下进行,书上也说经纬度坐标系不是一种平面坐标系,因为度不是标准的长度单位,不可用其量测面积长度。但是在地理坐标系下(比如WGS84)arcmap的measure工具是可以选择公里为单位进行测量的,请问这个是怎么计算长度的(比如以什么投影系统为基准)?答:用测量学的方法根据两点的经纬度计算出的球面距离。问:为什么我的数据做了clip后变形很大,原来不相连的地方都连在一起了?答:tolerance的问题。一般原因是地理坐标系数据没有定义坐标系或定义成了投影坐标系。当地理坐标系数据没有定义坐标系或定义成了投影坐标系时系统默认的tolerance是0.001,这对投影坐标系的数据来说是合适的,这样的数据不会出错。当你的数据是地理坐标系时,0.001就显得太大了,相当于投影坐标系的100米左右,当两个节点距离小于这个值时就会合并成一个,所以就会出现处理后的数据不该合并的地方合并了,惨不忍睹。问:在做Extract By Mask时出现错误:An error was encountered while executing ExtractByMask.("esriGeoAnalyst.GridEngine") Could not get a valid extent.Failed to execute (ExtractByMask_3).请问是什么地方出错了?改如何解决呢?答:检查是否都正确定义了坐标系。问:创建点时出错提示&不能创建要素坐标或测量值超出范围&,这是什么原因?答:这问题经常出现在空的图层中&随意画&时。要素类或shapefile是有有效范围的,超出这个范围就不能创建要素了。问:我在用ArcGIS计算DEM坡度时,最低0度,最高89度,平均坡度也达到了87度,肯定是不对的,这是什么原因?答:一般出现这种情况是因为你的数据是经纬度的坐标系。转换成投影坐标系后再做。问:为什么地理坐标系dem求出的slope是错误的呢?答:因为slope和距离、高程有关,你的数据中XY坐标是度,Z坐标是米,单位不一样,但数据中可能只有X、Y的单位信息,没有Z的单位信息,系统会认为它们单位都一样,所以计算会出错。比如说,在地理坐标系下,两个象元相距0.001度,高程相差1米,在地理坐标系下计算时这两点连线和水平面夹角的正切就是1000,也就是两点连线和水平面的夹角是89.943&问:为什么我的栅格不能做配准,georeferencing工具条中不出现栅格图层名?答:因为你的栅格的坐标系信息和data frame的坐标系不一致,把data frame的坐标系设成栅格的坐标系后就能做了。问:在arcmap中显示全国地图全图比例尺大概有1比几百万吧,也不知道被我执行了什么操作,地图好像被所缩小了一样,在整个中国全显示的情况下,比例尺竟然达到1:128,请问这是怎么回事?答:错误的定义了坐标系,将地理坐标系数据定义成了投影坐标系,或者对无坐标系信息的地理坐标系数据在data frame里将map unit设成了meter。问:给shp格式的定义坐标系,用的是define projection,但是定义完后出现了"Datum conflict between map and output"这句绿色字体的警告,什么原因?答:提示Datum conflict between map and output是因为你的数据的坐标系和dataframe的坐标系不一致,一般可不必理会。问:先打开有地理坐标系的图层1,然后在这个图层上面叠加一个无坐标系统的图层2。图层2也和图层1一样都是地理坐标系,但图层2显示的地理位置却全部错了,飞到老远的地方去了,原来是可以叠加到一起的,这是为什么?答:那是因为你当前的的dataframe的坐标系统和图层一的不一致,而图层一因为有坐标系统能正确动态投影,而图层二没有坐标系统不能正确投影。你试着打开arcmap后只加进这两个图层看看能否正确叠加。问:我们需要提交shape成果,要求:&以度为单位的地理坐标系数据,大地坐标参照系为1954北京坐标系&,我的数据现在是北京54坐标系,显示的是六位七位的公里网格坐标,我转换了坐标系后还显示的六七位数,不是经纬度,我试了老半天了,开始把投影删了,直接定义投影为地理坐标系里的asia的beijing1954,但是单位还是错的,而且每次一加载还提示一个错误,哪里出问题了?答:你需要的是转换坐标系而不是重新定义坐标系。转换坐标系要用project(矢量)或 project raster(栅格)来做而不是用define projection来做。问:地理坐标系不是球面坐标系么,如果没有投影的话,为什么能在arcmap这个平面上显示呢?答:地球表面是球面,但地图是平面的。绘制地图时在平面上建立一个直角坐标系,x轴代表经度,y轴代表纬度,坐标轴单位是度。地球上任意一点都有经纬度,按照这个经纬度在地图上找到对应坐标点即可将球面上的点转绘到平面地图上。问:怎样得到某个投影坐标系的坐标范围?比如西安80,37&带坐标系,它的X、Y最大最小值分别是多少,怎么计算?&答:x坐标范围:加减赤道1.5&的长度y坐标范围:正负二分之一中央经线长度问:UTM 的是&以中央经线投影为纵轴x,赤道投影为横轴y&,高斯克吕格 具体构成方法是&以中央经线为x轴,赤道为y轴&,而在描述投影坐标系统时说的是&中心水平线称为x轴,中心垂直线为y轴&----以上引号皆摘自清华大学出版的那套上下册的gis书,请问,这到底是为什么?我校正图像的时候都晕乎的,到底哪个是x,哪个是y?&答:数学坐标系(也叫笛卡尔坐标系)水平的是x轴,垂直的是y轴,测量坐标系水平的是y轴垂直的是x轴。你说的那书是以测量坐标系叙述的,而 在gis软件里一般都用笛卡尔坐标系。入乡随俗,既然用gis软件就要按笛卡尔坐标系的规矩来做,不要被书上说的所左右。&问:我看一本书上写的是,在使用十进制度的wgs_1984坐标系中,数据精度是1厘米,容限值为(0.01/(.943299))/10,约等于8.983e-9,当时看了之后不明白为什么要除以(.943299)这串数字,现在也不明白,我现在的数据的Projected Coordinate System是WGS_1984_UTM_Zone_49N,在按照此作拓扑时,拓扑容限值默认是0.001,而不是8.983e-9,不知为什么,我如果把0.001改成8.983e-9,在结束时就会出错,不知为什么,请大家指教。&答:除以那个数是计算在赤道上1米相当于多少度的一段圆弧。360&=2&*赤道半径(&6378137)米,则1米&360&/(2&*6378137),而2&/360&0.943299,也就是1米&1/(.943299)&&&而一般设为容差为精度的10倍。根据上面的分析不难得出那个结果。WGS_1984_UTM_Zone_49N的单位是米,所以该设成0.001,而不是设成8.983e-9,只有以度为单位的地理坐标系才能设成8.983e-9问:我的shp数据文件是1980坐标系的,不过没有加大数的,请问如何加大数啊?就是x坐标前面都加一个40.答:用project或project raster转换到相应有带号的坐标系。问:原始数据为gtopo 1km的全球dem,地理坐标系为wgs84,但经过投影转换后,dem严重变形。我选择的是兰伯特双标准纬线等角圆锥投影,投影参数为:Projection: Lambert_Conformal_ConicFalse_Easting: 0.000000False_Northing: 0.000000Central_Meridian: 97.000000Standard_Parallel_1: 30.000000Standard_Parallel_2: 62.000000Latitude_Of_Origin: 0.000000Linear Unit: Meter (1.000000)Geographic Coordinate System: GCS_WGS_1984Angular Unit: Degree (0.943299)Prime Meridian: Greenwich (0.000000)Datum: D_WGS_1984&&Spheroid: WGS_1984& & Semimajor Axis: 000& & Semiminor Axis: 000Inverse Flattening: 298.030000答:全球数据不适合用兰伯特双标准纬线等角圆锥投影,可改用Robinson投影坐标系。问:投影信息中有几个参数不是太了解:首先Projection: Gauss_Kruger这个是知道的,下面的Parameters:参数是指什么,通常取什么值呢?还有Angular Unit: Degree(0.943299) 这个角度为什么取这个特定值,他是怎么计算出来的?还有一个我在程序里看到有个参数,取值是57.32,这个是代表什么?希望了解的帮忙解释一下答:每种投影的Parameters个数不一定一样、值也不一定相等,一般有伪偏东false_east、伪偏北false_north、中央经线central_meridian、投影原点latitude_of_origin、线性单位linear unit等。0.943299是一度等于多少弧度,57.32是一弧度等于多少度。问:我有一个政区图矢量文件,坐标是(34567)这样的形式,视图属性里显示无坐标系。我就利用arctoolbox 定义一个地理坐标系,但是定义后显示的经纬度数值没任何变化,这是怎么回事。后来定义投影坐标系数值也是没变化。答:定义坐标系不会改变坐标的数值。你的数据应该是投影坐标系的数据。先搞清楚正确的坐标系并定义之,需要经纬度的话用project转换到相应的地理坐标系。如果只是要显示经纬度的话,也可以正确定义坐标系后在dataframe的属性里将其坐标系设成相应的地理坐标系,并把display unit设成度或度分秒。问:为什么同一个区域两个坐标系完全一样的SHP文件却无重合?答:至少有一个数据的坐标系是错误的。能否正确叠加不在于两个数据的坐标系是否一样,而在于是否正确。问:有个投影坐标系的世界地图,中国在边上,出图时怎么能使中国位于中间呢?答:投影坐标系参数里边有个中央经线(Central_Meridian),将data frame的坐标系设成世界地图的坐标系,并把中央经线设置为105&。问:两个数据坐标系不同,为啥加进arcmap中能够重合?答:arcmap会自动将加进去的数据的坐标系在内存中转换到data frame的坐标系来显示,即所谓的动态投影。它只是在内存中转换,并不改变数据本身的坐标系。问:我将矢量数据从Beijing_1954_3_Degree_GK_CM_111E转换到了Beijing_1954_GK_Zone_19N,为什么坐标值没有变化啊?答:这两个坐标系的投影方式、中央经线、原点、伪偏东等参数都一样,计算坐标的方法也就一样,所不同的只是包含范围不一样,所以在三度带的范围内所有点在这两个坐标系下的坐标都一样。问:我原来有个数据里的图形是圆形的,现在怎么变成椭圆了,我保证数据没有动过。答:data frame的坐标系和数据的坐标系不一致造成的,比如你数据的坐标系是以地理坐标系,现在用了投影坐标系显示。问:为什么我的全国地图显示出来比较扁,和挂图上的中国地图样子不一样呢?答:不同坐标系下同一个图的样子可能会不一样,若你的全国数据是在地理坐标系下显示的就会看起来比较扁。问:我的数据坐标系为:China_Lambert_Conformal_ConicProjection: Lambert_Conformal_ConicFalse_Easting: 0.000000False_Northing: 0.000000Central_Meridian: 125.000000Standard_Parallel_1: 42.000000Standard_Parallel_2: 51.000000Latitude_Of_Origin: 0.000000Linear Unit: MeterGCS_Beijing_1954Datum: D_Beijing_1954添加经纬度grid后经线和纬线不是直线,我想要直的经纬线该怎么做啊?答:将data frame的坐标系设为相应的地理坐标系,即Beijing 1954地理坐标系。问:原有的SHP图层是没有投影的,我用define projection 把投影转成albers,可是为什么中国地图还是扁的,查看图层投影已经是albers了答:应该先用define projection定义正确的地理坐标系,再用project转换到albers投影坐标系,而不是直接定义成albers投影坐标系。问:我在arcmap里面加载了一副中国省界shp数据。右下角显示的坐标是:102.968&&5.936 Meters..单位是米,但是102.968& &5.936分别代表的是经纬度啊,这里显示成米,不知道该怎么转换呢?答:两种可能:1、无坐标系信息的数据在data frame的特性里将map unit设成了meter2、错误地将地理坐标系的数据定义了投影坐标系问:地理坐标系数据想转成UTM投影坐标系,数据不在一个6&带范围内该怎么选坐标系?&答:若数据东西跨度不超过6&,可修改已有的坐标系,建个非标准的坐标系,中央经线选你数据范围中间的经度。例如我的数据东西范围是东经105.5&到东经110&,跨WGS_1984_UTM_Zone_48N和WGS_1984_UTM_Zone_49N两条带,我可修改WGS_1984_UTM_Zone_48N坐标系的参数,中央经线设为108&,名称改为WGS_1984_UTM_Zone_48N_A。若东西跨度超过了6&就不适合用utm坐标系了,用其他投影坐标系吧,例如lambert投影的坐标系。&问:现有一批国内某地区的数据,跨带很广,要拼接到一起,那这些数据在投影上应该如何选择,尤其是大比例尺地图,还是用常规的分带投影吗?比如按惯例1:10w的数据是6度分带,现在假如有17-21带的数据,放大到一定程度以后如果还是6度分带并且统一到一个带,两边的地图肯定会变形很大;如果不统一到一个带,接缝的地方可以正常拼接吗?这种情况下是大比例尺地图也使用WGS84的球面坐标呢?还是将这些数据都投影到一个带,即使变形也不管?答:研究区域跨多条带拼接时应该用albers、lambert等投影坐标系来做。问:全国数据是albers坐标系的,怎么将经纬网添加上去,线线都是直的呀?答:检查data frame的坐标系是否是地理坐标系。data frame设成数据的坐标系后应该就正确了。问:我将地理坐标系的全国数据转换到了albers投影坐标系,但转换后最后出来的地图不是北朝上而朝左了,这是哪里出问题了呢?答:检查中央经线设置是否正确,全国albers坐标系的中央经线通常用105&。中央经线决定了图形旋转的方向和角度,与中央经线为105度的图相比较,小于105度就会向左转,大于105度就会向右转。问:DEM栅格图转成点图层,操作Add XY Coordinate时,计算出来的点坐标是以米为单位的,请问我想得到经纬度值应如何操作呢?答:将data frame设成地理坐标系,用calculate geometry按data frame的坐标系计算点的经纬度坐标。问:一个图层从WGS-1984-Albers到xian-1980-Albers,下面的Geographic transformation怎么选择?答:因WGS-1984-Albers到xian-1980-Albers是不同椭球体之间的坐标转换,精确转换需要用转换参数来定义Geographic transformation。转换参数可去当地测绘部门索取或购买。如果精度要求不是很高的话可用arcgis的动态投影转换,即:将data frame的坐标系设成xian-1980-Albers,按data frame的坐标系导出数据。
转载链接:
相关程序代码:
阅读(...) 评论()