GIS

GIS坐标转换是什么

了解GIS坐标转换的基本概念、坐标系转换、投影转换、EPSG:4326与EPSG:3857以及常见坐标转换场景。

阅读约 59 分钟

GIS坐标转换是什么

坐标转换(Coordinate Transformation)是GIS中将一组坐标从一个坐标参考系统(CRS)转换到另一个坐标参考系统的过程。

例如:

EPSG:4326
经度 + 纬度
    ↓
坐标转换
    ↓
EPSG:3857
X + Y

坐标转换是GIS数据处理、地图显示和空间分析中的基础操作。

为什么需要坐标转换

不同GIS数据可能使用不同的坐标参考系统。

例如:

数据A
EPSG:4326

数据B
EPSG:3857

如果直接将两组坐标进行叠加:

Feature A
+
Feature B

可能会出现位置偏移。

因此需要先将它们转换到相同的CRS:

数据A
EPSG:4326
    ↓
EPSG:3857
    ↓
统一坐标

数据B
EPSG:3857

这样两个数据才能正确叠加。

坐标转换的核心

坐标转换可以理解为:

源坐标
    ↓
源CRS
    ↓
转换过程
    ↓
目标CRS
    ↓
目标坐标

例如:

116.397, 39.908
    ↓
EPSG:4326
    ↓
Coordinate Transformation
    ↓
EPSG:3857
    ↓
目标X、Y

注意:

坐标数字发生变化,并不意味着地理位置发生变化。

通常情况下,转换前后的坐标代表的是同一个地理位置,只是表达方式不同。

源坐标系和目标坐标系

坐标转换通常包含两个重要概念:

Source CRS

源坐标参考系统。

也就是:

当前坐标使用的CRS。

例如:

Source CRS
EPSG:4326

Target CRS

目标坐标参考系统。

也就是:

希望转换到的CRS。

例如:

Target CRS
EPSG:3857

完整过程:

Source CRS
EPSG:4326
    ↓
Transformation
    ↓
Target CRS
EPSG:3857

EPSG:4326转换EPSG:3857

这是Web GIS中最常见的坐标转换之一。

源坐标:

EPSG:4326

使用:

经度 + 纬度

例如:

116.397, 39.908

目标坐标:

EPSG:3857

使用:

X + Y

单位通常为米。

转换后会得到对应的Web Mercator平面坐标。

因此:

EPSG:4326
    ↓
经纬度
    ↓
EPSG:3857
    ↓
Web地图坐标

EPSG:3857转换EPSG:4326

坐标转换也可以反过来。

EPSG:3857
    ↓
X + Y
    ↓
坐标转换
    ↓
EPSG:4326
    ↓
经度 + 纬度

这在地图点击查询、坐标拾取等场景中非常常见。

例如用户点击地图得到:

X = ...
Y = ...

可以转换成:

Longitude
Latitude

然后显示:

经度:116.397
纬度:39.908

坐标转换与投影转换

两个概念经常一起出现。

坐标转换

Coordinate Transformation是一个更广泛的概念。

例如:

一个CRS
    ↓
另一个CRS

可能涉及不同的基准、投影或坐标定义。

投影转换

Projection Transformation通常指不同地图投影之间的转换。

例如:

地理坐标
    ↓
投影坐标

或者:

投影A
    ↓
投影B

因此可以简单理解:

坐标转换
    ↓
更大的概念

投影转换
    ↓
坐标转换中的一种常见情况

Geographic CRS转换

例如:

EPSG:4326

属于地理坐标参考系统。

如果转换到另一个地理CRS,可能涉及:

Datum
Ellipsoid
Coordinate Operation

例如:

地理坐标A
    ↓
基准转换
    ↓
地理坐标B

这种转换与简单的单位变化不同。

Projected CRS转换

例如:

EPSG:4326

转换到:

EPSG:3857

就涉及从地理坐标到投影坐标的过程。

Longitude + Latitude
        ↓
Map Projection
        ↓
X + Y

这是Web GIS中非常典型的投影转换。

坐标转换不会改变Geometry的实际位置

假设一个Point:

POINT (116.397 39.908)

使用EPSG:4326。

转换到EPSG:3857之后:

POINT (X Y)

坐标数字发生变化。

但是:

真实地理位置

仍然是同一个位置。

因此:

坐标变化
≠
地理对象移动

可以理解为:

同一个地点
├── EPSG:4326表达
└── EPSG:3857表达

Geometry的坐标转换

Geometry可以整体进行坐标转换。

例如一个Polygon:

Polygon
    ↓
EPSG:4326
    ↓
坐标转换
    ↓
EPSG:3857

Polygon中的所有顶点都会进行转换:

Point 1
Point 2
Point 3
Point 4
...

转换后仍然组成同一个地理区域。

因此:

Geometry
    ↓
遍历坐标
    ↓
转换每个坐标
    ↓
新的Geometry

Feature的坐标转换

Feature通常包含Geometry和Attributes。

进行坐标转换时,一般主要转换:

Geometry

而不会修改:

Attributes

例如:

Feature
├── Geometry
│   └── 坐标转换
│
└── Attributes
    └── 通常保持不变

例如:

name = 北京
type = 城市

坐标转换后:

name = 北京
type = 城市

属性通常不会因为CRS转换而改变。

Layer的坐标转换

如果一个Layer包含大量Feature:

Layer
├── Feature 1
├── Feature 2
├── Feature 3
└── ...

那么可以对整个Layer进行重投影:

Layer
    ↓
Source CRS
    ↓
Transform
    ↓
Target CRS

最终:

Layer
    ↓
所有Feature
    ↓
统一到目标CRS

数据重投影

重投影(Reprojection)通常是指将空间数据从一个投影坐标参考系统转换到另一个坐标参考系统。

例如:

Shapefile
EPSG:4326
    ↓
Reprojection
    ↓
EPSG:3857

转换后:

Shapefile
EPSG:3857

这在GIS数据处理过程中非常常见。

坐标转换与地图显示

Web GIS通常会同时涉及:

数据CRS
+
地图CRS

例如:

GeoJSON
EPSG:4326
    ↓
转换
    ↓
Map
EPSG:3857

因此Web地图中经常需要:

Data Coordinate
    ↓
Map Coordinate

这也是OpenLayers等GIS框架中非常常见的操作。

OpenLayers中的坐标转换

OpenLayers中经常使用:

fromLonLat([116.397, 39.908])

将经纬度坐标转换为地图使用的投影坐标。

例如:

const coordinate = fromLonLat([
  116.397,
  39.908
])

通常可以理解为:

EPSG:4326
    ↓
EPSG:3857

反向转换可以使用:

toLonLat(coordinate)

将地图坐标转换回经纬度。

Leaflet中的坐标

Leaflet中用户通常直接使用:

[39.908, 116.397]

这样的纬度、经度坐标表示地图位置。

地图内部则会使用对应的投影体系进行显示。

因此Web GIS开发时需要区分:

用户输入的经纬度
+
地图内部使用的投影坐标

不要简单地认为所有地图坐标都是经纬度。

坐标转换与CSV

CSV是非常常见的GIS数据来源。

例如:

id,name,longitude,latitude
1,北京,116.397,39.908
2,上海,121.473,31.230

这些数据通常是:

Longitude
Latitude

可以理解为EPSG:4326经纬度数据。

如果要在Web地图中显示:

CSV
 ↓
EPSG:4326
 ↓
坐标转换
 ↓
EPSG:3857
 ↓
Web地图

坐标转换与WKT

WKT可以表达Geometry。

例如:

POINT (116.397 39.908)

如果它使用EPSG:4326:

EPSG:4326

就可以进行:

4326 → 3857

转换。

因此常见流程是:

WKT
 ↓
解析Geometry
 ↓
识别Source CRS
 ↓
Coordinate Transformation
 ↓
Target CRS
 ↓
输出WKT

坐标转换与GeoJSON

GeoJSON也经常需要进行坐标转换。

例如:

GeoJSON
 ↓
EPSG:4326
 ↓
坐标转换
 ↓
EPSG:3857

转换后:

coordinates

中的坐标值会发生变化。

但是:

properties

通常保持不变。

坐标转换与距离计算

如果需要计算距离,需要特别注意CRS。

例如:

EPSG:4326

的坐标单位是角度。

不能简单将:

经度差
纬度差

直接当成米。

更合理的流程通常是:

经纬度数据
    ↓
选择适合的CRS
    ↓
转换
    ↓
距离计算

如果只是Web地图显示,可以使用EPSG:3857。

但如果是高精度测量,应根据研究区域选择更加合适的投影坐标系。

坐标转换与面积计算

Polygon的面积计算同样需要考虑CRS。

例如:

EPSG:4326
    ↓
经纬度
    ↓
不适合直接将坐标差值当平方米

更合理的流程:

Polygon
    ↓
选择合适的投影CRS
    ↓
Reprojection
    ↓
Area
    ↓
平方米

选择哪一种投影坐标系,需要根据研究区域和精度要求确定。

坐标转换常见错误

把4326坐标直接当3857使用

例如:

116.397, 39.908

如果直接作为EPSG:3857坐标:

X = 116.397
Y = 39.908

就会导致地图位置错误。

经纬度顺序错误

常见的经纬度表示:

[经度, 纬度]

例如:

[116.397, 39.908]

如果顺序写反:

[39.908, 116.397]

可能会导致完全不同的位置。

只修改CRS名称,没有转换坐标

错误做法:

原数据
EPSG:4326

直接修改标签
EPSG:3857

这不是坐标转换。

正确的做法是:

原坐标
    ↓
实际转换
    ↓
新坐标
    ↓
更新CRS

数据CRS判断错误

如果源数据实际使用:

EPSG:4326

却错误地认为:

EPSG:3857

后续转换结果也会错误。

因此坐标转换前最重要的步骤之一就是:

确认源数据的CRS。

坐标转换的标准流程

一个完整的GIS坐标转换流程通常可以理解为:

输入空间数据
      ↓
确定Source CRS
      ↓
确定Target CRS
      ↓
选择Coordinate Operation
      ↓
转换Geometry
      ↓
生成新的坐标
      ↓
更新目标CRS
      ↓
输出空间数据

例如:

GeoJSON
EPSG:4326
      ↓
Coordinate Transformation
      ↓
EPSG:3857
      ↓
Web GIS

如何选择目标CRS

选择目标CRS时需要考虑:

Web地图显示

通常可以考虑:

EPSG:3857

全球经纬度数据

通常可以使用:

EPSG:4326

精确距离和面积

应该根据:

研究区域
+
分析类型
+
精度要求

选择合适的投影坐标系。

不要因为某个CRS常见,就认为它适合所有GIS分析。

坐标转换知识结构

可以把坐标转换理解为:

Source CRS
    ↓
Source Coordinates
    ↓
Coordinate Operation
    ↓
Target Coordinates
    ↓
Target CRS

其中最重要的三个概念:

Source CRS
    ↓
从哪里转换

Coordinate Operation
    ↓
怎么转换

Target CRS
    ↓
转换到哪里

总结

GIS坐标转换就是将空间数据从一个坐标参考系统转换到另一个坐标参考系统。

最核心的关系是:

源坐标
    ↓
Source CRS
    ↓
坐标转换
    ↓
Target CRS
    ↓
目标坐标

最常见的Web GIS转换:

EPSG:4326
经度 + 纬度
    ↓
坐标转换
    ↓
EPSG:3857
Web Mercator

需要记住:

坐标转换改变的是坐标的表达方式,而不是地理对象本身的位置。

同时要特别注意:

修改CRS标签并不等于坐标转换;真正的坐标转换必须对Geometry中的坐标进行实际计算。

🧰

相关工具

使用 IYATools 在线工具快速处理 GIS 数据