• 聊聊GIS中的坐标系|再版


    本文约6500字,建议阅读时间15分钟。

    作者:博客园/B站/知乎/csdn/小专栏 @秋意正寒

    版权:转载请告知,并在转载文上附上转载声明与原文链接(https://www.cnblogs.com/onsummer/p/12081889.html

    姐妹篇

    聊聊GIS中的坐标系|再版 详细定义、计算及高程系统聊聊GIS中的坐标系|再版 识别各种数据的坐标系及代码中的坐标系

    目录

    • 1. 经纬度与米【告诉大家GIS中的坐标系核心的两种坐标系定义,地理坐标系统vs投影坐标系统】
    • 2. 为什么有两种表达(不同点)
    • 3. 内在联系(相同点)【指出投影坐标系统的广义定义,即PCS=f(GCS)】
    • 4. 常用坐标系统(4.1 WKID;4.2 地理坐标系统;4.3 投影方法;4.4 投影坐标系统;4.5 GCJ02与BD09;4.6 经纬度直投)
    • 5. 常用坐标系统的判别与常用软件中的操作(待补充)

    1. 经纬度(例: 119.32°E, 32.48°N)与(∟, 直角坐标)

    让基础浅薄的同学、GIS外行疑惑的,可能就是这两种“单位”的坐标值,以及他们的转换了吧。

    2019年是一个不同寻常的年份,大大小小的地震总能被人民日报大V转发。

    地震信息一般会带什么呢?

    这是一条地震消息,它除了时间、地震等级等消息外,有一个很重要的消息:北纬36.16度,东经98.93度,为了方便,我们用数学的坐标表示法:

    点P,P(98.93°E, 36.16°N)

    其中,E就是单词East(东),N就是单词North(北)。

    我们先引入两个定义(敲重点):

    • 地理坐标系统(英文简写GCS,Geographical Coordinate System)
    • 投影坐标系统(英文简写PCS,Projection Coordinate System)

    上述地震点,它用角度值来表示某个点,尽管角度值可以是十进制度,也可以是度分秒(参考初中数学知识)我们说,这种表示空间上的点所用到的坐标参考,叫做地理坐标系统。

    与之相对的,用米、千米这种单位表达的,我们在初中数学里很熟悉的,用笛卡尔平面直角坐标系表示的点,我们说它用的是“投影坐标系统”。

    注意了!

    这个定义是严格的,请用这一组概念继续阅读,我知道读者可能在此之前会看过所谓的“大地坐标系统”、“平面坐标”、“经纬度坐标”等表达,但是,至少在我这里,请用我的这组定义。

    我们现在说的,是地理数据的数学基础,即坐标系它自己本身的定义,现在,我说地理数据用的坐标系有“地理坐标系统”和“投影坐标系统”两种,但不止这两种。

    2. 为什么有两种表达(不同点)

    为什么会有这些差别呢?

    我们还要从地球的形状说起。地球是一个近似的椭球,越靠近赤道,越肥。当然,这个“肥”在地球这个尺度下,好几千千米vs20千米,几乎看不出来。

    我们GIS是讲究数学的,必须用数学的语言。地球既然是个“椭球”,自然就可以用三维的坐标系统来描述。经纬度,就是解析立体几何里用的“球面坐标系统”。

    有好奇的同学会问了,三维坐标有三个坐标值啊,为什么只有经纬度呢?(笑)

    在这,我们不画图,也不展开,我在之后的讲解种会展开地理坐标系统的严格定义。但是投影坐标系统的广义定义非常简单,下一节就讲了。

    现在,在数学上,只需知道(经度、纬度)是球面坐标系的下的两个分量罢了。

    而在地理上,(经度、纬度)则是用角度值表达的“地理坐标系统”的两个分量。

    我们拿一个地球仪来看看:

    如果初中地理知识过关的话,我认为都能认出:南北极点的经线非常密集,纬线干脆就从赤道的一个大圆变成了一个点。反而越靠近赤道,纬线圈越大,经线圈的距离也越大。

    我们计算矩形的面积是怎么计算的了?

    S=a×b,a为长边长,b为短边长。

    这种“非线性”的变化,就不能用1个经度×1个纬度来表示面积了,因为不同经纬度的地方,1个经度和1个纬度代表的长度并不一样。

    正是这个“几何上的计算”的麻烦,所以在计算几何有关值(长度、面积)时,大家更喜欢在【笛卡尔直角坐标系】上计算,也即“投影坐标系统”。

    通常,在表示位置的时候,我们喜欢说“xx度东经,yy度北纬”,因为这个基于整个地球,用这简单的两三位数字(不包括小数)就可以精确定位到地球的任意一点。

    而在局部某个地区,可以是某个市的行政区,某个省的某几个市,我们喜欢用平面直角坐标来计算长度、面积。

    这就是“地理坐标系统”和“投影坐标系统”的一个最原始的需求差异。

    事实上,用角度来计算面积在高等数学中并非难事,但是,能用S=a×b来算,先人就不会用复杂的表达式了。

    所以,

    既然一个擅长定位,一个擅长计算,二者是如何联系在一起的呢?

    是啊,我们只有一个地球,但是可以用不同的表达方法(没错,就是坐标系统)来描述同一个地方,坐标系这个小东西确实让一些人头疼啊。

    3. 内在联系(相同点)

    上来开大,投影坐标系统的广义定义如下:

    投影坐标系统 = f(地理坐标系统)

    我们说,投影坐标系统是基于一个法则f和一个地理坐标系统而定义的。

    这个定义是一个广义定义,有更精确的定义于以后讲解。

    • 法则f:学名“投影方法”,简称“投影”
    • 地理坐标系统:非精确定义见上文

    为什么球面坐标(角度值)能通过一个投影方法f计算得到平面直角坐标(千米、米)呢?

    如何以曲化直呢?

    这得得益于数学家的功劳,赶紧给高斯、牛顿、莱布尼茨、拉格朗日、欧拉这些大佬烧香啊~

    举个最简单的例子,在平面上,用角度+长度表达的极坐标就能通过一组简单的公式换算到平面直角坐标:

    • x=R×sin∠A
    • y=R×cos∠A

    具体定义不扯太远,但是,这个法则f远远比这两个公式复杂得多。

    在这里,只需记住,一个投影坐标系统,必然包括一个投影方法和一个地理坐标系统的定义

    那么,

    • 投影方法有哪些呢?
    • 地理坐标系统有哪些呢?
    • 基于某个地理坐标系统,又有哪些投影坐标系统呢?
    • 在软件上又是如何识别和计算、操作的呢?

    死亡四连问啊,没关系,马上解答。

    4. 常用坐标系统

    4.1. 一对名词:WKID与EPSG

    WKID即Well Known ID,众所周知的ID号的意思。EPSG是管理这些ID号的一个组织,网站是epsg.io

    通常来说,一个GIS里的坐标系统,必须有一个WKID,某些特别的除外,下面会讲。

    例如,WKID=4326,即WGS84这个地理坐标系统的ID。

    注意!!!

    地理坐标系统和投影坐标系统均使用这套定义,但是不会重复,也没有规律说哪一段数字是地理坐标系统,哪一段是投影坐标系统。

    幸运的是,我们并不需要完全记完,网上这个WKID大全列表很容易找到,而且只需记住项目中用的、以及常见的即可。

    4.2. 常见地理坐标系统及WKID

    ①WGS84(WKID=4326)

    美国GPS使用的一个全球地理坐标系统,osm地图、谷歌地图(国外版)、Landsat系列卫星影像图等均在地理坐标系统上使用了这个,有许多开发地图的api默认是使用WGS84的,WGS84使用极其广泛。

    全称 World Geodetic System 1984。我们在网上交流的数据大多数也是WGS84的,毕竟osm地图是开源免费的,任意下载。

    需要注意的是,加密前的高德、百度用的也是WGS84,有关高德百度等常见国内电子地图的坐标系统,在4.5节会详细介绍。

    ②CGCS2000(WKID=4490)

    我国的GPS系统-北斗导航系统以及国家发行的“天地图”,用的是这一套地理坐标系统,中文名“中国国家2000地理坐标系统”,英文全称翻译名“中国大地坐标系2000”。

    英文名 China Geodetic Coordinate System 2000。

    ③北京54、西安80

    是我国已经逐渐停止使用的两个地理坐标系统。

    北京54坐标系统WKID是4214,西安80坐标系统的WKID是4610。

    尽管有大量历史遗留数据仍采用这两个坐标系统,作为学习研究使用当然是可以的,但是建议尽快转移到国家2000坐标系来(转换方法暂且不说,以后会说)。

    小补充:

    北京54是建国初,在当时技术条件不高时“引”苏联的地理坐标系统到我国境内的,在地理坐标系统的精确定义时会详细展开为何北京54在我国境内为何有较大偏差。

    而西安80则是改革开放后,技术稍好,为解决北京54偏差问题,为我国各项事业发展搞的一个适用于国内的地理坐标系统。

    为什么会启用国家2000呢?也留到以后地理坐标系统的精确定义来谈,感兴趣的朋友可以等等我。

    ④美国常用地理坐标系统

    NAD27、NAD83

    4.3. 常见投影方法

    什么是投影?这里,待投影的“东西”是地球表面这个曲面——投影到哪里?假如地心有一个灯泡,灯泡的光线能把地表照射到一个面上,而这个面可以展开成为平面,我们说投影到的这个面,叫投影面。

     

    (网络图,灯光将物体投影到墙面这个平面,墙面与物体呈垂直方向,即纵轴投影)

    事实上,能展开成平面的面有平面本身、椭圆柱面、圆锥面(好像就见过这仨)等。根据投影面和地球的相对位置,可以有非常多种投影方法。

    ①高斯克吕格(Gauss - Kruger)

    高斯克吕格是由高斯和克吕格两人一起搞的投影法则,投影面是一个椭圆柱面打横着套在地球的数学椭球面上,围绕地轴旋转,将地球表面投影到该椭圆柱面的一种投影方法。

    不懂?看图:

     

    以某条经线与椭圆柱面相切(这条经线就叫中央经线),投影到椭圆柱面后,再沿着椭圆柱面的高剪开摊成平面,就是高斯投影的原理啦。

    高斯克吕格投影是分带的,经度不是有东西各180度吗?所以可以按3度或者6度剥开一瓣用于投影。

     

    旋转高斯克吕格的投影面,可以获取下一个分带的投影,以合适全球所有的地方。

    请读者发挥一下想象力,因为从图上看,越远离中央经线的地方投影到椭圆柱面上,变形越严重,反而是中央经线附近的地方非常能贴合投影面。

    --- 如果不懂也没关系,我们已经能给出高斯投影的学名了:横轴(因为投影面是躺着的 与地轴垂直)切(因为与地表面是相切关系)椭圆柱(投影面是椭圆柱面)投影。

    实际上,高斯克吕格投影也叫“横轴墨卡托投影”,因为投影面是(椭)圆柱面的投影均叫“墨卡托投影”,见第②点。

    ②墨卡托投影(Mercator)

    墨卡托发明的投影叫墨卡托投影,特点是纵轴,即投影面是个圆柱,与地球赤道相切(立着的水管里塞了个乒乓球),学名:正轴切圆柱投影。

     (网络图片)

    ③UTM投影(Universal Transverse Mercator)

    全称“通用横轴墨卡托投影”,和高斯克吕格投影非常相似,只不过它并不是切于经线圈,而是穿地球而过。我们从侧面来看,高斯投影面和经线圈是完全重合的,但是UTM则不是:

    (网络图片,很复杂,但很形象)

    UTM投影是贯穿地球的,应该是侧面上看相割。

    UTM投影为美国陆军工程兵测绘局于20世纪40年代提出。当时对美国本土采用Clarke 1866椭球体,对全球其它地方采用其他椭球体。

    UTM投影现在采用WGS84地理坐标系统进行投影。

    现在,很多遥感影像图用的就是UTM投影出来的投影坐标系统。

    ③网络墨卡托(WebMercator)

    Web Mercator投影不是严格意义的墨卡托投影,而是一个伪墨卡托的投影方法,这个伪墨卡托投影方法的大名是 Popular Visualization Pseudo Mercator,PVPM。

    因为这个投影方法是Google Map最先发明并使用的。

    它的地理上的不严谨性在于,在投影过程中,将表示地球的椭球面作为正球面处理

    传说中是因为谷歌程序员懒得用椭球面来编程计算屏幕坐标...

    有关网络墨卡托,还有一段更有趣的故事,见参考文献。

    ④兰伯特(Lambert)投影与阿尔伯斯(Albers)投影

    兰伯特投影,投影面是圆锥面,更像是一个圆锥筒子套在一个球上(图a):

    此时的兰伯特投影是切圆锥投影,当然兰伯特也可以是割圆锥投影(图b)。

    它类似于阿尔伯斯投影,不同之处在于其描绘形状比描绘面积更准确。

    中国国家全幅地图、美国国家平面坐标系对所有具有较大东西范围的区域均使用此投影。国际上用此投影编制1∶100万地形图和航空图。

    而阿尔伯斯投影常见于我国的省区投影,因为面积更准确。

    阿尔伯斯投影是一种圆锥等面积投影。

    * 补充:兰伯特投影还有另外一种投影方法,投影面并不是圆锥面,而是平面。见维基定义上的图:

    4.4. 常见投影坐标系统及WKID

    ①基于高斯克吕格投影的投影坐标系统族

    在我国,基于北京54、西安80、国家2000,均可以使用高斯克吕格投影定义出投影坐标系统。

    因为地理坐标系统有这三个(实际上高斯克吕格投影在别的国家也有应用,不过这里只讨论我国),加上高斯克吕格投影方法允许分带表达,

    所以,该投影坐标系统族有很多个,以WKID=4547为例。

    WKID=4547这个投影坐标系统是这样定义的:

    地理坐标系为国家2000坐标系,使用3度分带规则,中央经线为东经114°,使用高斯克吕格投影的投影坐标系统,并且平面坐标系统的经度方向上的Y坐标值无投影带号。

    简写为:3度投影带114°中央经线的高斯投影坐标系统(2000坐标不带带号)。

    坐标值若不带带号的投影坐标系统会产生重叠。那么带带号的呢?WKID=4526正是WKID=4547这个带带号的PCS对应的有带号的投影坐标系统。

    在ArcGIS中,区分有无带号,从投影坐标系统的名称中可以看出:

    • CGCS2000_3_Degree_GK_CM_111E:名称中有CM,在Y坐标(经线方向)不带带号
    • CGCS2000_3_Degree_GK_Zone_30:名称中有Zone,则在Y坐标(经线方向)带带号
    • Beijing_1954_3_Degree_GK_CM_111E:(同上)
    • Beijing_1954_3_Degree_GK_Zone_35:(同上)
    • Xian_1980_3_Degree_GK_CM_111E:(同上)
    • Xian_1980_3_Degree_GK_Zone_34:(同上)

    带带号就是在Y坐标值前多加投影带数字,例如,某第38投影带上的不带投影带的坐标值为(494832,2546025),则带投影带的坐标为(38494832,2546025)

    以上为国家2000、北京54、西安80在“GK投影(高斯克吕格投影)”下同一中央经线,坐标值内带投影带与不带投影带投影坐标系统的名称。

    总结:常用的高斯投影的PCS族,在我国,地理坐标系统只有北京54、西安80、国家2000,根据中央经线按需选用。

    ②基于UTM投影的投影坐标系统族

    和①中高斯投影坐标系统族类似,只不过仅仅基于WGS84。

    分带与名称不再赘述,按中央经线自行使用即可。

    ③基于网络墨卡托(WebMercator)的投影坐标系统

    只有一个,WKID=3857。

    有趣的是,网络墨卡托投影坐标系统还有102100、900913这俩ID,有兴趣的朋友可以看参考文献里的《Web Mercator 公开的小秘密》一文。

    当前,我国的高德、百度、腾讯地图,谷歌地图(国内国外均)、osm地图都用了网络墨卡托来平面化展示,只不过国内高德百度腾讯和国内谷歌地图的地理坐标系统经过加密,加密知识见4.5节。

    而天地图虽然用的是国家2000地理坐标系,但是也提供了墨卡托投影方法来展示平面地图。

    ArcGIS Earth这个免费的小软件则直接使用3857坐标系(和Google Earth类似)。

    ④基于兰伯特与阿尔伯斯的投影坐标系统

    时间原因,此处暂不列举WKID,总之我国大公鸡图喜欢用阿尔伯斯投影,我国省区图喜欢用兰伯特圆锥投影。

    ⑤不常见投影坐标系统

    我国因部分地区建设需求,自己给自己定义了投影坐标系统,在我的实践经验中,见过的有:NJ08坐标系(基于CGCS2000)、广州地方坐标系(基于CGCS2000)等。

    4.5. 假坐标系统:GCJ02与BD09

    在4.4节的第③点中已经提及,国内高德、百度、腾讯和国内谷歌地图的地理坐标系统均经过加密。

    它们使用的都是WGS84坐标系(坊间传)。

    因为国家保密需要,网络地图至少要用一种特殊的算法进行加密,那就是大(e)名(chou)鼎(bu)鼎(kan)的加密算法——GCJ02。(当然,天地图没有加密,直接是CGCS2000)

    民间也叫火星坐标系,它加密后的WGS84坐标,与真实的WGS84坐标是有误差的,这个误差值并不固定,通常是几十米到几百米。

    GCJ02加密算法是一种多项式+正弦函数加密算法,通常隔一段时间就换一下参数,所以,网上所谓的解密算法并不是官方的精确算法,隔一段时间说不定就不准确了。

    有关WGS84和GCJ02,可以查阅参考文档里的《关于GCJ02和WGS84坐标系的一点实验》,出自李民录。这里摘抄一张图,是我国各个地区GCJ02加密后的不同偏移值:

    百度地图更为恶心,在GCJ02的基础上再次偏移,也就是BD09。

    这个加密算法并不公开,需要找有关部门交钱审核才能获取,而且没有精确的反向算法(多项式咋反向啊)。

    所以,知道为什么说GCJ02/BD09是“假的坐标系”了吧?

    4.6. 经纬度直投

    这是一个非常恶心的做法,即把经纬度等同直角坐标来绘制,这样就有一个后果:

    当纬度=90度时,理论上有无限个点(即经度有无限个),若经纬度=直角坐标,那么赤道有多长,极点就展开拉的有多长。

    这种拉扯是非常恶心的,天地图就这么干,在我国高纬度地区,使用经纬度直投的绘制方法,会使得本来直角相交的两条道路斜变:

     

      

    (天地图,黑龙江佳木斯市两种投影的对比,上图为经纬度直投)

    这也是ArcMap的默认“投影”,通常比较丑,尤其是高纬度地区变形非常严重,但是胜在渲染速度快。

    5. 常用坐标系统在软件中的判别与操作

    5.1. 判别(具体问题具体分析)

    • 如果数据有坐标系统的定义,则可以从数据的坐标系统中得知坐标系(假如定义的正确)。
    • 如果数据没有坐标系统定义,需要通过观察数据坐标值来判断GCS、PCS类型,则需要一定的经验。
    • 如果数据是两位数+三位数或者三位数+三位数等落于我国经纬度范围的数字,则可以大致判断是地理坐标系统,只需询问数据提供者,然后自己为数据定义地理坐标系统即可。
    • 如果给的数据尺度很小,例如是一个厂房,而且一个单位数值差不多就是1米,则判断是CAD绘图,是未经校准的平面直角坐标系,可以理解为投影坐标系,只不过位置并不准确罢了,需要校准。
    • 如果给的数据单位很大,通常是几万、几十万(5位数+6位数,是无投影带的,5位数是经线x方向,6位数是纬线y方向)(6位数+7位数,是有投影带的,6位数是纬线y方向,7位数是经线x方向,通过7位数的前两个数字判断投影带),此时可以粗略判断是投影坐标系统。
    • 如果均不是以上的数值,则判断为误操作,可能是错误定义了坐标系,也可能是错误进行投影计算。

    5.2. 操作:以主流软件为例

    ①ArcMap

    简单讲一下,在arcgis - arcmap中,在数据管理工具箱>投影工具集下,是处理坐标系统的强大工具。

    “定义投影”工具,是为无坐标系统定义的数据定义GCS或PCS用的;

    “投影”工具,是转换坐标系统用的,可以由GCS投影到指定PCS,也可以由PCS转到指定GCS(可以是PCS定义内的GCS,也可以是其他GCS),也可以由PCS转到另一个PCS(换投影带,或者连GCS、PCS一起换)

    >注意,跨GCS的“投影”操作,需要“地理转换”辅助,有关地理转换,会专门出一篇博客讲解。

    “投影栅格”工具,是转换栅格数据用的,用法同“投影”工具。

    以后放图及其他软件的操作。


    自我唠叨

    上一篇《聊聊GIS中的坐标系》是我大三结束那个暑假头脑一热写的。好的,这一篇还是我脑子一热写的,我写这篇花了我一个周末的某个凌晨(总算在全面小康前完成了上一篇的允诺...)。

    我写之前还疯狂沉迷于《我们无法一起学习》的古桥文乃和《总之就是非常可爱》的由崎司……跑题了

    我通常说,数据是GIS的生命源泉。而GIS数据,百里之始则为坐标系统。

    我能做的一些工作,就是精炼概念,给大家做一些小小的工作,让大家尽可能短的时间了解坐标系统,文章若有错误,请友好指出。(呼~ 总算更新回来了,加[咕]油[咕])

    姐妹篇:

    聊聊GIS中的坐标系|再版 详细定义、计算及高程系统

    聊聊GIS中的坐标系|再版 识别各种数据的坐标系及代码中的坐标系

    参考文档

    [1] epsg组织官网:http://epsg.io

    [2] UTM投影与高斯克吕格投影及其变换实现:http://wap.sciencenet.cn/home.php?mod=space&uid=856115&do=blog&id=839212

    [3] 聊聊GIS中的坐标系:https://www.cnblogs.com/onsummer/p/7451128.html

    [4] 天地图:https://map.tianditu.gov.cn/

    [5] GMT中文手册:https://docs.gmt-china.org/latest/proj/Ju/

    [6] 维基百科英文版:

    https://en.wikipedia.org/wiki/Universal_Transverse_Mercator_coordinate_system

    https://en.wikipedia.org/wiki/Lambert_conformal_conic_projection

    https://en.wikipedia.org/wiki/Albers_projection

    [7] WebMercator 正反算公式:https://blog.csdn.net/iispring/article/details/8565177

    [8] WebMercator公开的小秘密:https://blog.csdn.net/kikitamoon/article/details/46124935

    [9] 李民录. 关于GCJ02和WGS84坐标系的一点实验:https://blog.csdn.net/liminlu0314/article/details/42564039

  • 相关阅读:
    [转][Silverlight] aspx页面上传递参数给Silverlight插件的方法
    [C#] 利用cmd远程网内机器,实现文件互传
    [CSS] 对于一个连在一起很长的字符串,在页面上控制换行
    [CSS] 设置input和img在同一行上
    [MySQL] 记MySQL与MS SQL的几点不同
    [JQuery] 利用jquery的ajax调用后台的WebService公共方法和网页的静态方法
    【计算机组成原理】——计算机发展简史
    【计算机组成原理】——计算机的分类
    【JavaScript高级程序设计4th】第1章 什么是JavaScript——总结
    css重置样式表(两种版本)
  • 原文地址:https://www.cnblogs.com/onsummer/p/12081889.html
Copyright © 2020-2023  润新知