GIS

GIS Geometry是什么

了解GIS中Geometry(几何)的基本概念、常见类型、坐标结构以及Geometry与Feature、WKT和GeoJSON之间的关系。

阅读约 51 分钟

GIS Geometry是什么

Geometry(几何)是GIS中用于描述地理对象空间位置和形状的数据。

简单来说:

Geometry告诉GIS对象在哪里,以及它是什么形状。

例如:

  • 一个城市可以用Polygon表示
  • 一条道路可以用LineString表示
  • 一个商店可以用Point表示

Geometry是GIS矢量数据最核心的组成部分之一。

Geometry包含什么

一个Geometry通常由:

Geometry
├── 类型
│   ├── Point
│   ├── LineString
│   └── Polygon
│
└── 坐标
    ├── X
    ├── Y
    └── Z(可选)

例如:

Point
    ↓
[116.397, 39.908]

表示一个点的位置。

Geometry与Feature的区别

Geometry主要描述空间信息,而Feature通常包含Geometry以及属性信息。

例如:

Geometry
    Point
    [116.397, 39.908]

只表示:

某个位置上的一个点。

如果增加属性:

name = 北京
type = 城市

就可以组成一个Feature。

因此:

Geometry
    ↓
空间位置 + 空间形状

Feature
    ↓
Geometry + Attributes

Point

Point是最基本的Geometry类型。

它使用一个坐标表示一个位置。

例如:

POINT (116.397 39.908)

Point常用于:

  • POI
  • 学校
  • 医院
  • 商店
  • 摄像头
  • 充电桩
  • GPS定位点

一个Point通常可以表示:

X = 116.397
Y = 39.908

如果使用三维坐标,还可以增加Z:

X = 116.397
Y = 39.908
Z = 50

其中Z通常可以表示高程。

MultiPoint

MultiPoint用于表示多个相互独立的点。

例如:

MULTIPOINT (
  (116.397 39.908),
  (116.405 39.915),
  (116.412 39.920)
)

可以用于表示:

  • 多个采样点
  • 多个监测点
  • 一组设施位置
  • 多个空间事件

与多个独立Point相比,MultiPoint可以将多个点作为一个Geometry进行管理。

LineString

LineString由多个有顺序的坐标点连接形成。

例如:

LINESTRING (
  116.397 39.908,
  116.405 39.915,
  116.412 39.920
)

可以表示:

  • 道路
  • 河流
  • 铁路
  • 管线
  • GPS轨迹

它的基本结构是:

Point
  ↓
Point
  ↓
Point
  ↓
Point

多个坐标点按照顺序连接,就形成一条LineString。

MultiLineString

MultiLineString用于表示多个线组成的Geometry。

例如:

MULTILINESTRING (
  (
    116.397 39.908,
    116.405 39.915
  ),
  (
    116.420 39.920,
    116.430 39.925
  )
)

可以用于表示:

  • 多段道路
  • 多段河流
  • 铁路网络
  • 多段管线

需要注意,MultiLineString中的每条线可以是独立的。

Polygon

Polygon用于表示一个封闭区域。

例如:

POLYGON ((
  116.390 39.900,
  116.400 39.900,
  116.400 39.910,
  116.390 39.910,
  116.390 39.900
))

Polygon常用于:

  • 行政区
  • 建筑物
  • 地块
  • 公园
  • 湖泊
  • 土地利用区域

Polygon的核心特点是:

起点
 ↓
多个坐标点
 ↓
回到起点
 ↓
形成闭合环

因此Polygon与LineString最大的区别之一就是:

Polygon用于表达区域,而LineString主要用于表达线状对象。

Polygon的内部环

Polygon除了可以表示外部边界,还可以存在内部环。

例如一个湖中有一个岛:

Polygon
├── 外部环
│
└── 内部环
    └── 岛屿

也可以理解为:

外部边界
    ↓
一个区域

内部边界
    ↓
区域中的空洞

这使Polygon能够表示更加复杂的空间区域。

MultiPolygon

MultiPolygon用于表示多个Polygon组成的Geometry。

例如:

MULTIPOLYGON (
  (
    (...),
    (...)
  ),
  (
    (...)
  )
)

常用于:

  • 多个不连续的行政区域
  • 群岛
  • 多个地块
  • 一个对象包含多个独立区域

例如一个行政区域可能由多个互不相连的岛屿组成,这时就可以使用MultiPolygon。

Geometry的坐标

Geometry的核心数据之一就是坐标。

二维坐标通常包含:

X
Y

例如:

[116.397, 39.908]

在经纬度数据中通常可以理解为:

X = 经度
Y = 纬度

但具体坐标含义取决于使用的坐标参考系统。

Geometry的Z坐标

Geometry不仅可以表示二维空间,也可以扩展到三维。

二维:

X Y

三维:

X Y Z

例如:

POINT Z (116.397 39.908 45)

其中:

X = 116.397
Y = 39.908
Z = 45

Z可以用于表示:

  • 高程
  • 建筑高度
  • 地形高度
  • 三维模型高度

Geometry的M值

部分GIS数据还支持M(Measure)值。

可以表示:

  • 里程
  • 时间
  • 距离
  • 轨迹测量值

例如:

X Y Z M

因此Geometry可以扩展为:

2D
X Y

3D
X Y Z

带测量值
X Y Z M

Geometry与坐标系

Geometry中的坐标数字本身并不能完整说明地理位置。

例如:

116.397
39.908

还需要知道这些坐标属于什么坐标参考系统。

常见坐标系包括:

EPSG:4326

以及:

EPSG:3857

因此可以理解为:

Geometry
    ↓
Coordinates
    ↓
CRS
    ↓
确定真实空间位置

如果坐标系使用错误,Geometry可能会在地图上出现在错误的位置。

Geometry与WKT

WKT(Well-Known Text)是一种常见的Geometry文本表示方式。

例如Point:

POINT (116.397 39.908)

LineString:

LINESTRING (
  116.397 39.908,
  116.405 39.915
)

Polygon:

POLYGON ((
  116.390 39.900,
  116.400 39.900,
  116.400 39.910,
  116.390 39.900,
  116.390 39.900
))

因此:

WKT
 ↓
Geometry的文本表示

WKT非常适合用于:

  • Geometry调试
  • 空间数据交换
  • 数据库查询
  • GIS开发
  • 测试空间数据

Geometry与GeoJSON

GeoJSON也可以表达Geometry。

例如:

{
  "type": "Point",
  "coordinates": [116.397, 39.908]
}

LineString:

{
  "type": "LineString",
  "coordinates": [
    [116.397, 39.908],
    [116.405, 39.915]
  ]
}

Polygon:

{
  "type": "Polygon",
  "coordinates": [
    [
      [116.390, 39.900],
      [116.400, 39.900],
      [116.400, 39.910],
      [116.390, 39.900],
      [116.390, 39.900]
    ]
  ]
}

GeoJSON通常将Geometry放在Feature中:

Feature
├── geometry
│   └── Geometry
│
└── properties
    └── Attributes

Geometry与矢量数据

Geometry是矢量数据的空间基础。

可以理解为:

Vector Data
    ↓
Feature
    ↓
Geometry
    ↓
Coordinates

例如道路矢量数据:

Road Layer
├── Feature
│   └── LineString
│
├── Feature
│   └── LineString
│
└── Feature
    └── LineString

每个Feature都有自己的Geometry。

Geometry可以进行空间计算

Geometry不仅用于显示,还可以参与空间分析。

例如:

计算距离

Point A
    ↓
Distance
    ↓
Point B

计算长度

LineString
    ↓
Length
    ↓
道路长度

计算面积

Polygon
    ↓
Area
    ↓
地块面积

创建缓冲区

Geometry
    ↓
Buffer
    ↓
新的Polygon

判断空间关系

可以判断两个Geometry是否:

  • 相交
  • 包含
  • 重叠
  • 相邻
  • 相离
  • 相交于边界

这些都是GIS空间分析的重要基础。

Geometry有效性

Geometry并不是只要有坐标就一定有效。

例如Polygon可能出现:

自相交
重复节点
未闭合
错误的环方向
无效坐标

例如:

Polygon
    ↓
边界发生自相交
    ↓
Invalid Geometry

无效Geometry可能导致:

  • 面积计算错误
  • 空间查询失败
  • Buffer失败
  • 相交分析异常
  • 数据导入失败

因此GIS数据处理中,经常需要进行Geometry有效性检查和修复。

常见Geometry类型总结

Geometry含义常见对象
PointPOI、摄像头
MultiPoint多个点采样点
LineString线道路、河流
MultiLineString多条线河流网络
Polygon地块、行政区
MultiPolygon多个面群岛、多个区域

Geometry的核心关系

可以用下面的结构理解GIS Geometry:

Coordinates
    ↓
Geometry
    ↓
Feature
    ↓
Layer
    ↓
Map

其中:

Coordinates
    ↓
描述坐标

Geometry
    ↓
描述空间形状

Feature
    ↓
Geometry + Attributes

Layer
    ↓
多个Feature

Map
    ↓
多个Layer

总结

Geometry是GIS中描述空间位置和空间形状的核心数据结构。

最常见的Geometry包括:

Point
LineString
Polygon
MultiPoint
MultiLineString
MultiPolygon

可以记住:

Coordinates描述坐标,Geometry描述空间形状,Feature将Geometry与属性信息结合起来,而Layer则负责组织大量Feature。

理解Geometry之后,就可以进一步学习Feature、Vector、WKT、WKB、GeoJSON以及GIS空间分析等核心知识。

🧰

相关工具

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