基于 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 为例)
EPSG 4326 (或 '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.AngularUnits 0.017453292519943295
属性 AngularUnitsName 角度单位名称 SR.AngularUnitsName ‘degree’
属性 EPSG 坐标系 EPSG 编码。没有 EPSG 编码的坐标系则值为 0 SR.EPSG 4326
方法 Export 导出坐标系。支持 MICoordSys,PCI,PROJJSON,PrettyWkt,Proj4,USGS,Wkt,XML 格式 SR.Export(Format = 'Proj4') ‘+proj=longlat +datum=WGS84 +no_defs’
方法 GetProjParms 获取坐标系的投影参数 SR.GetProjParms() {}
方法 GetUseFeature 获取坐标系的使用区域 Feature SR.GetUseFeature()
方法 GetUseFeatureInWGS84 获取坐标系的使用区域 Feature(WGS84) SR.GetUseFeatureInWGS84()
属性 InvFlattening 椭球体反扁率 SR.InvFlattening 298.257223563
属性 LinearUnits 线形单位值 SR.LinearUnits 1.0
属性 LinearUnitsName 线形单位名称 SR.LinearUnitsName ‘Meter’
属性 Name 坐标系名称 SR.Name ‘WGS 84’
属性 PRIMEM 坐标系的本初子午线 SR.PRIMEM {‘Greenwich’: 0.0}
属性 Proj WKT 格式的坐标系 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.SemiMajor 6378137.0
属性 SemiMinor 椭球体短半轴 SR.SemiMinor 6356752.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)

基于 gma 的 GIS 空间参考系统探索_第1张图片

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)

基于 gma 的 GIS 空间参考系统探索_第2张图片

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)

基于 gma 的 GIS 空间参考系统探索_第3张图片

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)

基于 gma 的 GIS 空间参考系统探索_第4张图片

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)

基于 gma 的 GIS 空间参考系统探索_第5张图片

你可能感兴趣的:(java,数据库,javascript)