空间参考系统与WKT解析

1、为什么要空间参考系统?

空间参考系统,也称为坐标系统。在GIS中为地理数据定位的基准,假设给你一个坐标(442281.875,4422651.589)。如果不给你空间参考系统,你可能根本不知道这个点在哪,是在欧洲还是在我们中国。这样就会给GIS应用带来困难。因此说没有空间参考的地理数据都是没有实际意义的。如果我告诉你他的空间参考系统是WGS84坐标系下的UTM50带的投影坐标系,那么你可能经过一些推算可以知道这是在北京。这里的推算就是用到了投影坐标反算,也就是由投影坐标系的平面坐标转换到地理坐标的经纬度。好了,现在大概应该知道空间参考系统的重要性了吧。

2、空间参考系统的类型

在GIS中,我们经常听到WGS84、高斯-克吕格。那么是否真正弄清楚这些名词的含义了?在这里说的WGS84是一种基准面,它的参考椭球体是国际大地测量与地球物理联合会第17届大会大地测量常数推荐值,其基本参数如下:

长半径:a=6378137±2(m);

地球引力和地球质量的乘积:GM=3986005×108m3s-2±0.6×108m3s-2;

正常化二阶带谐系数:C20=-484.16685×10-6±1.3×10-9;

地球重力场二阶带球谐系数:J2=108263×10-8

地球自转角速度:ω=7292115×10-11rads-1±0.150×10-11rads-1

扁率f=0.003352810664

那么高斯-克吕格又是什么呢?它是一种地图投影,在此投影下的坐标系一般都是用平面笛卡尔坐标表示,坐标度量的单位是米、英尺之类的。GIS相关专业的学生在本科阶段,我想老师们都会给你们布置一个作业:编程实现高斯克吕格投影正解与反解计算。

在GIS的应用中,普遍应用的空间参考系统有如下几种:

地心坐标系

地心坐标系是以地球质心为原点建立的空间直角坐标系,以x,y,z表示

或者以椭球体的中心和此质心重合建立的大地坐标系,大地坐标系一般是用B,L,H表示的

地理坐标系

以椭球体为基础建立的坐标系,用经纬度度量坐标

投影坐标系

在特定椭球体基础之上经过地图投影建立的平面坐标系。

3、空间参考系统的表示方法

在GIS应用中,经常会遇到空间参考系的表示问题,如果不同系统中的同一个空间参考系统使用了不同的代码或者名称的话,就会给不同系统之间的互操作带来困难。为了统一空间参考系统的表示,openGIS定义了用WKT,也就是孰知文本来表示空间参考系统。另外欧洲是由勘探组织定义了一套标准,它通常以以下三种形式发布:

lEPSG Registry:我们可以通过http://www.epsg-registry.org/访问和查询。

EPSG 数据库:通过关系数据库的形式发布,可以通过http://www.epsg.org/下载。

SQL脚本:以SQL脚本的方式发布,通过脚本的方式创建EPSG数据集。

3、1WKT表示方法

现在主要讲解WKT表示方法。

WKT主要就是用文本的方法表示空间参考系统,下面这些语句就是定义空间参考系统的字句。

<coordinate system> = <horz cs> | <geocentric cs> | <vert cs> | <compd cs>

| <fitted cs> | <local cs>

<horz cs> = <geographic cs> | <projected cs>

<projected cs> = PROJCS["<name>", <geographic cs>, <projection>,

{<parameter>,}* <linear unit> {,<twin axes>}{,<authority>}]

<projection> = PROJECTION["<name>" {,<authority>}]

<geographic cs> = GEOGCS["<name>", <datum>, <prime meridian>, <angular

unit> {,<twin axes>} {,<authority>}]

<datum> = DATUM["<name>", <spheroid> {,<to wgs84>} {,<authority>}]

<spheroid> = SPHEROID["<name>", <semi-major axis>, <inverse flattening>

{,<authority>}]

<semi-major axis> = <number>

<inverse flattening> = <number>

<prime meridian> = PRIMEM["<name>", <longitude> {,<authority>}]

<longitude> = <number>

<angular unit> = <unit>

<linear unit> = <unit>

<unit> = UNIT["<name>", <conversion factor> {,<authority>}]

<conversion factor> = <number>

<geocentric cs> = GEOCCS["<name>", <datum>, <prime meridian>, <linear unit> {,<axis>,

<axis>, <axis>} {,<authority>}]

<authority> = AUTHORITY["<name>", "<code>"]

<vert cs> = VERT_CS["<name>", <vert datum>, <linear unit>, {<axis>,}

{,<authority>}]

<vert datum> = VERT_DATUM["<name>", <datum type> {,<authority>}]

<datum type> = <number>

<compd cs> = COMPD_CS["<name>", <head cs>, <tail cs> {,<authority>}]

<head cs> = <coordinate system>

<tail cs> = <coordinate system>

<twin axes> = <axis>, <axis>

<axis> = AXIS["<name>", NORTH | SOUTH | EAST | WEST | UP | DOWN | OTHER]

<to wgs84s> = TOWGS84[<seven param>]

<seven param> = <dx>, <dy>, <dz>, <ex>, <ey>, <ez>, <ppm>

<dx> = <number>

<dy> = <number>

<dz> = <number>

<ex> = <number>

<ey> = <number>

<ez> = <number>

<ppm> = <number>

<fitted cs> = FITTED_CS["<name>", <to base>, <base cs>]

<to base> = <math transform>

<base cs> = <coordinate system>

<local cs> = LOCAL_CS["<name>", <local datum>, <unit>, <axis>,

{,<axis>}* {,<authority>}]

<local datum> = LOCAL_DATUM["<name>", <datum type> {,<authority>}]

3、2 WKT主要关键字解析

上面列举了一些WKT的定义字句,这样看我们可能不知道是什么意思。下面就解析WKT中的主要关键字。

n  AUTHORITY

这个关键字是可选的,表示外部权威的空间参考系统的编码

n  AXIS

这个关键字主要指定空间参考系统的坐标轴方向,如果没有指定,就使用默认的,默认的指定方向如下:

地理坐标系统: AXIS[“Lon”,EAST],AXIS[“Lat”,NORTH]

投影坐标系统: AXIS[“X”,EAST],AXIS[“Y”,NORTH]

地心坐标系统: AXIS[“X”,OTHER],AXIS[“Y”,EAST],AXIS[“Z”,NORTH]

n  COMPD_CS

用于指定一个符合的参考系统,符合参考系统一般由两个坐标系统指定。例如一个3D坐标系统可以由一个水平坐标系统和一个垂直坐标系统复合而成。

n  DATUM

用于指定一个水平基准面。

n  GEOCCS

用于指定一个地心坐标系,是一个3D坐标系,X轴的正方向是从地球质心指向赤道和本初子午线的交点,Z轴指向北极方向,Y轴正方向是从地球质心到赤道与东经90度经线的交点。

n  GEOGCS

用于指定基于经纬度的坐标系统。注意:并不是所有的地理坐标系统都用度来表示单位。

n  LOCAL_CS

用于指定一个本地的坐标系统。一些坐标系统经常用于CAD系统中

n  PARAMETER

投影转换的参数及其值。

n  PRIMEM

用于指定经度度量的本初子午线。

n  PROJCS

用于指定一个投影坐标系。

n  PROJECTION

用于指定从地理坐标到投影坐标转换的参数。

n  SPHEROID

定义一个椭球体,椭球体是地球表面的近似。Spheroid和ellipsoid是同义词。Spheroid一般用于WKT中;而ellipsoid在任何地方使用,都是椭球体的意思。

n  TOWGS84

用于指示Bursa Wolf变换的七个参数。这七个参数可以近似的从一个基准面到WGS基准面的变换。Bursa Wolf变换只能用于空间直角坐标系之间的变换。

n  UNIT

用于指定测量使用的单位。在地理坐标系下使用角度。在垂直坐标系下使用线性单位,如米等。

n  VERT_DATUM

用于指定垂直基准面或者高程测量的方法。

n  VERT_CS

用于指定一个垂直坐标系统。

3、3 WKT表示方法举例

如果使用的是地理坐标系,那么使用GEOGCS关键字;如果使用投影坐标系那么要使用PROJCS关键字,投影坐标系必须是基于一个地理坐标系定义的;如果是高程坐标系,那么使用VERT_CS关键字。

下面是一个投影坐标系的WKT字符串,表示的是WGS84坐标系下UTM50带投影下的坐标系,是不是很拗口。

PROJCS[

"WGS 84 / UTM zone 50N",

GEOGCS["WGS 84",

DATUM["WGS_1984",SPHEROID["WGS84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],

PRIMEM["Greenwich",0],UNIT["degree",0.0174532925199433],AUTHORITY["EPSG","4326"]],

PROJECTION["Transverse_Mercator"],

PARAMETER["latitude_of_origin",0],

PARAMETER["central_meridian",117],

PARAMETER["scale_factor",0.9996],

PARAMETER["false_easting",500000],

PARAMETER["false_northing",0],

UNIT["metre",1,AUTHORITY["EPSG","9001"]],

AUTHORITY["EPSG","32650"]]

 

从上面的字符串中我们可以看出一些参数的意思。表示的是一个投影坐标系统,基于的地理坐标系统是WGS84,基准面是WGS_1984,椭球体是WGS84坐标系所依赖的椭球体,6378137表示的长半轴,298.257223563是扁率的倒数,起始经线是本初子午线,地理坐标系使用单位是度,0.0174532925199433代表一度所代表多少弧度。

PROJECTION["Transverse_Mercator"]表示是投影方法通用墨卡托投影,

"latitude_of_origin",0表示纬度的起点是0度,也就是赤道,

"central_meridian",117表示投影带的中央经线是东经117度,

"scale_factor",0.9996表示中央经线的长度比是0.9996,因为UTM投影是通用横轴等角割圆柱投影,

"false_easting",500000表示坐标纵轴向西移动500km,

"false_northing",0表示横轴没有平移。

以下是一个地理坐标系统的WKT字符串,它表示的就是WGS84坐标系。

GEOGCS

["WGS 84",

DATUM["WGS_1984",

SPHEROID["WGS84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],

PRIMEM["Greenwich",0],

UNIT["degree",0.0174532925199433],

AUTHORITY["EPSG","4326"]

]

4、后记

空间坐标系统的WKT表示作为GIS业界互操作的一个规范确实起到了很大的作用。各大GIS厂商以及开源GIS软件类库也都是用WKT作为空间参考系统表示的规范,这样对GIS行业的发展起到了推动作用,也在一定程度上推进了空间数据共享。如果本文中有什么不对的地方,欢迎批评指正,我们共同探讨。

空间参考系统与WKT解析的更多相关文章

  1. ArcGIS for qml -关于空间参考如何选择设置

    作者: 狐狸家的鱼 Github: 八至 版权声明:如需转载请获取授权和联系作者 1.关于空间参考 空间参考可以通过众所周知的ID(WKID) - 整数值来引用. 官网指南中也有对此的专门说明 htt ...

  2. C# 嵌入dll 动软代码生成器基础使用 系统缓存全解析 .NET开发中的事务处理大比拼 C#之数据类型学习 【基于EF Core的Code First模式的DotNetCore快速开发框架】完成对DB First代码生成的支持 基于EF Core的Code First模式的DotNetCore快速开发框架 【懒人有道】在asp.net core中实现程序集注入

    C# 嵌入dll   在很多时候我们在生成C#exe文件时,如果在工程里调用了dll文件时,那么如果不加以处理的话在生成的exe文件运行时需要连同这个dll一起转移,相比于一个单独干净的exe,这种形 ...

  3. GIS中的空间参考

    GIS一般都是研究的基于地球的某个区域,例如一个国家.省或市的情况,既然地球上都有经纬度来标识,那么直接用经纬度来标识物体的位置不可以吗?但如果应用不一样,在实际中选择的空间参考系也是不一样的.例如我 ...

  4. GIS空间参考及坐标转换

    空间参考(Spatial Reference)是 GIS 数据的骨骼框架,能够将我们的数据定位到相应的位置,为地图中的每一点提供准确的坐标. 在同一个地图上显示的地图数据的空间参考必须是一致的,如果两 ...

  5. 《gis空间分析及应用案例解析》培训总结

    <gis空间分析及应用案例解析>培训总结 来源:常德水情 作者:唐校准 发布日期:2014-01-02       2013年12月2630日由中国科学院计算技术研究所教育中心组织的< ...

  6. C#系统缓存全解析(转载)

    C#系统缓存全解析 对各种缓存的应用场景和方法做了很详尽的解读,这里推荐一下 转载地址:http://blog.csdn.net/wyxhd2008/article/details/8076105

  7. ArcGIS Engine开发之旅09--几何对象和空间参考

    原文:ArcGIS Engine开发之旅09--几何对象和空间参考 1.Geometry  Geometry 是 GIS 中使用最为广泛的对象集之一,用户在创建.删除.编辑和进行地理分析的时候,就是处 ...

  8. ARCGIS切图:TPK文件的空间参考为地理坐标系

    先来吐槽一下,之前习惯了百度地图API,所以一直习惯直接将经纬度点添加到地图上进行显示,目前使用ARCGIS RUNTIME FOR ANDROID进行开发,在地图上加点需要原始点的坐标为投影坐标系, ...

  9. Openlayer3之空间参考扩展

    Openlayers默认了两种空间参考,一个是EPSG4326,一个是EPSG3857,其它的空间参考需要进行扩展才能使用.所以我们初始化时进行了如下操作: 1.将配置数据库中所有的空间参考读取出来, ...

随机推荐

  1. extern、static、auto、register 定义变量的不同用法

    首先得说明什么叫“编译单元”.每个 .c 文件会被编译为一个 .o 文件,这个就是一个编译单元.最后所有的编译单元被链接起来,就是一个库或一个程序. 一个变量/函数,只要是在全局声明的,链接之后都隐含 ...

  2. 教你在mac上配置adb环境变量

    1.打开终端,一次输入如下命令 cd ~ touch .bash_profile open -e .bash_profile 2.这时候会在TextEdit中打开一个空白文档,输入下面的语句 a. 输 ...

  3. mysql设置root密码

    1.停止mysql服务.可以在windows服务管理器设置,运行->services.msc->停止mysql服务 2.跳过权限验证: mysqld -nt --skip-grant-ta ...

  4. Linux less命令

    less 工具也是对文件或其它输出进行分页显示的工具,应该说是linux正统查看文件内容的工具,功能极其强大.less 的用法比起 more 更加的有弹性.在 more 的时候,我们并没有办法向前面翻 ...

  5. 王立平-- ContentValues , HashTable , HashMap差别

    ContentValues  :是一种存储机制,key-value 特点:key仅仅能是string类型.value:仅仅能是基本类型,不能是对象. 应用:经常使用语往数据库中插入数据 Content ...

  6. Blog 转移

    Blog 转移至 http://blog.rapcoder.com CSDN :  http://blog.csdn.net/a542551042 欢迎一起交流 学习 ,谢谢!!!

  7. 使用css3写一朵云

  8. 【HTTP】Fiddler(二) - 使用Fiddler做抓包分析

    上文( http://blog.csdn.net/ohmygirl/article/details/17846199 )中已经介绍了Fiddler的原理和软件界面.本文主要针对Fiddler的抓包处理 ...

  9. 基于visual Studio2013解决C语言竞赛题之1023判断排序

         题目 解决代码及点评 /* 23. 有10个两位整数,把这些数作以下变化,如果它是素数, 则把它乘以2,若它是偶数则除以2,其余的数减1, 请将变化后的10个数按从小到大 ...

  10. ORACLE11.2.0 SQLPLUS 报 error while loading shared libraries

    相应的环境平台: OS: Linux TEST11G 2.6.18-8.el5 #1 SMP Fri Jan 26 14:15:21 EST 2007 i686 i686 i386 GNU/Linux ...