基于 gma 的 GIS 空间参考系统探索

0 了解空间参考

为了能够正确地描述要素的位置和形状,需要引入一个用于定义位置的框架,也就是空间参考。空间参考用于存储各类要素坐标属性的坐标系系统,借此描述一个要素的真实位置。主要包括两大部分:坐标系统坐标域

坐标系统
坐标系统是一个二维或者三维的参照系,用于定位坐标点,通过坐标系统可以确定要素在地球上的真实位置。常用的坐标系主要是以下两种:大地坐标系和投影坐标系。

坐标域
坐标域是一个要素中坐标的允许取值范围。

1 了解 gma (1.1.5)中的空间参考功能

1.1 gma 空间参考功能在库中的位置

gma 中空间参考功能位于 gma.algorithm.core.spat用以初始化各种坐标系/投影,以方便检索和使用参数和查询相关信息,这是基础的空间参考;基于此构建的扩展(增强)空间参考功能整合在地图工具 gma.map.rcsSpatRef 类中 。gma 库(1.1.5)及其空间参考功能分布如下:

1.2 SpatRef 类支持初始化的坐标系格式

格式示例 (以 WGS 84 为例)
EPSG4326 (或 'EPSG:4326' )
MICoordSys'Earth Projection 1, 104'
PCI['LONG/LAT D000', 'DEGREE', (0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0)]
PROJJSON'{\n "$schema": "https://proj.org/schemas/v0.4/projjson.schema.json",\n "type": "GeographicCRS",\n "name": "WGS 84",\n "datum": {\n "type": "GeodeticReferenceFrame",\n "name": "World Geodetic System 1984",\n "ellipsoid": {\n "name": "WGS 84",\n "semi_major_axis": 6378137,\n "inverse_flattening": 298.257223563\n }\n },\n "coordinate_system": {\n "subtype": "ellipsoidal",\n "axis": [\n {\n "name": "Geodetic latitude",\n "abbreviation": "Lat",\n "direction": "north",\n "unit": "degree"\n },\n {\n "name": "Geodetic longitude",\n "abbreviation": "Lon",\n "direction": "east",\n "unit": "degree"\n }\n ]\n },\n "id": {\n "authority": "EPSG",\n "code": 4326\n }\n}'
PrettyWkt'GEOGCS["WGS 84",\n DATUM["WGS_1984",\n SPHEROID["WGS 84",6378137,298.257223563,\n AUTHORITY["EPSG","7030"]],\n AUTHORITY["EPSG","6326"]],\n PRIMEM["Greenwich",0,\n AUTHORITY["EPSG","8901"]],\n UNIT["degree",0.0174532925199433,\n AUTHORITY["EPSG","9122"]],\n AXIS["Latitude",NORTH],\n AXIS["Longitude",EAST],\n AUTHORITY["EPSG","4326"]]'
Proj4'+proj=longlat +datum=WGS84 +no_defs'
USGS[0, 0, (0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0), 12]
Wkt'GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AXIS["Latitude",NORTH],AXIS["Longitude",EAST],AUTHORITY["EPSG","4326"]]'
XML'\n WGS 84\n \n 4326\n \n \n \n ellipsoidal\n \n 6402\n \n \n \n Geodetic latitude\n \n 9901\n \n Lat\n north\n \n \n \n \n Geodetic longitude\n \n 9902\n \n Lon\n east\n \n \n \n \n \n \n WGS_1984\n \n 6326\n \n \n \n Greenwich\n \n 8901\n \n \n 0\n \n \n \n \n \n WGS 84\n \n 7030\n \n 6378137\n \n 298.257223563\n \n \n \n \n \n\n'
部分主要坐标系名称WGS84

2 探索空间参考(坐标系/投影)系统

from gma.map import rcs
SR = rcs.SpatRef('WGS84')
类型名称描述使用结果
属性AeraOfUse坐标系使用的经纬度范围。无法识别范围的坐标系则根据中央经线自动生成最大范围 (gma 对全球范围的坐标系进行了修改,其最东端与最西端永远相差0.02°SR.AeraOfUse[-179.99, -89.99, 179.99, 89.99]
属性AngularUnits角度单位值SR.AngularUnits0.017453292519943295
属性AngularUnitsName角度单位名称SR.AngularUnitsName‘degree’
属性EPSG坐标系 EPSG 编码。没有 EPSG 编码的坐标系则值为 0SR.EPSG4326
方法Export导出坐标系。支持 MICoordSys,PCI,PROJJSON,PrettyWkt,Proj4,USGS,Wkt,XML 格式SR.Export(Format = 'Proj4')‘+proj=longlat +datum=WGS84 +no_defs’
方法GetProjParms获取坐标系的投影参数SR.GetProjParms(){}
方法GetUseFeature获取坐标系的使用区域 FeatureSR.GetUseFeature()
方法GetUseFeatureInWGS84获取坐标系的使用区域 Feature(WGS84)SR.GetUseFeatureInWGS84()
属性InvFlattening椭球体反扁率SR.InvFlattening298.257223563
属性LinearUnits线形单位值SR.LinearUnits1.0
属性LinearUnitsName线形单位名称SR.LinearUnitsName‘Meter’
属性Name坐标系名称SR.Name‘WGS 84’
属性PRIMEM坐标系的本初子午线SR.PRIMEM{‘Greenwich’: 0.0}
属性ProjWKT 格式的坐标系SR.Proj ‘GEOGCS[“WGS 84”,DATUM[“WGS_1984”,SPHEROID[“WGS 84”,6378137,298.257223563,AUTHORITY[“EPSG”,“7030”]],AUTHORITY[“EPSG”,“6326”]],PRIMEM[“Greenwich”,0,AUTHORITY[“EPSG”,“8901”]],UNIT[“degree”,0.0174532925199433,AUTHORITY[“EPSG”,“9122”]],AXIS[“Latitude”,NORTH],AXIS[“Longitude”,EAST],AUTHORITY[“EPSG”,“4326”]]’
属性SemiMajor椭球体长半轴SR.SemiMajor6378137.0
属性SemiMinor椭球体短半轴SR.SemiMinor6356752.314245179
属性Type坐标系类型SR.Type‘Geographic’

3 在地图上查看坐标系的适用范围

结合 gma 绘图工具和 GetUseFeatureInWGS84 方法,可以很容易的查看某个坐标系使用区域在地图上的位置。本文以 :

  • EPSG:4326( WGS84)
  • EPSG:4490(China Geodetic Coordinate System 2000)
  • EPSG:2163(NAD27 / US National Atlas Equal Area)
  • EPSG:32650(WGS 84 / UTM zone 50N)

四个坐标系为例进行展示。

from gma.map import plot, rcs
WorldDS = plot.GetWorldDataSource()
WorldLayer = WorldDS.GetLayer(0)

3.1 全球性坐标系(WGS84)

MapF = plot.MapFrame()
MapL1 = MapF.AddLayer(WorldLayer, FaceColor = 'none', EdgeColor = 'black', LineWidth = 0.1, Zorder = 1)# 绘制坐标系范围
Spat = rcs.SpatRef('WGS84')
UseFeature = Spat.GetUseFeatureInWGS84()
MapF.AddFeature(UseFeature)

3.2 地方坐标系(EPSG:4490 / China Geodetic Coordinate System 2000)

MapF = plot.MapFrame()
MapL1 = MapF.AddLayer(WorldLayer, FaceColor = 'none', EdgeColor = 'black', LineWidth = 0.1, Zorder = 1)# 绘制坐标系范围
Spat = rcs.SpatRef(4490)
UseFeature = Spat.GetUseFeatureInWGS84()
MapF.AddFeature(UseFeature)

3.3 地方坐标系(EPSG:2163 / NAD27 / US National Atlas Equal Area)

MapF = plot.MapFrame()
MapL1 = MapF.AddLayer(WorldLayer, FaceColor = 'none', EdgeColor = 'black', LineWidth = 0.1, Zorder = 1)# 绘制坐标系范围
Spat = rcs.SpatRef(2163)
UseFeature = Spat.GetUseFeatureInWGS84()
MapF.AddFeature(UseFeature)

3.4 地方坐标系(EPSG:32650 / WGS 84 / UTM zone 50N)

MapF = plot.MapFrame()
MapL1 = MapF.AddLayer(WorldLayer, FaceColor = 'none', EdgeColor = 'black', LineWidth = 0.1, Zorder = 1)# 绘制坐标系范围
Spat = rcs.SpatRef(32650)
UseFeature = Spat.GetUseFeatureInWGS84()
MapF.AddFeature(UseFeature)

3.5 换一个视角(底图:EPSG:6931 / WGS 84 / NSIDC EASE-Grid 2.0 North)

MapF = plot.MapFrame(BaseMapProj = 6931)
MapL1 = MapF.AddLayer(WorldLayer, FaceColor = 'none', EdgeColor = 'black', LineWidth = 0.1, Zorder = 1)# 绘制坐标系范围
Spat = rcs.SpatRef(32650)
UseFeature = Spat.GetUseFeatureInWGS84()
MapF.AddFeature(UseFeature)


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部