map_tutorial

第 2 章:矢量地图基础与空间分析

1. 开篇

在第一章中,我们建立了“地球是一个椭球体”的认知,并确立了坐标参照系(CRS)作为定位的基石。然而,坐标点 merely 是数字海洋中的孤岛。为了在计算机中重现现实世界的复杂性——描绘蜿蜒的河流、不规则的地块、错综复杂的路网——我们需要一种能够精确描述离散对象的数字模型:矢量数据(Vector Data)

与照片式的栅格数据不同,矢量数据是面向对象的。它认为世界是由一个个独立的实体(Feature)组成的。本章将深入矢量数据的“解剖学结构”,从最基本的几何类型讲起,深入探讨文件存储的底层差异,剖析维持地图逻辑正确的“拓扑关系”,并详细拆解缓冲区、加分析等核心空间算法的几何原理。

学习目标

  1. 深入理解几何模型:掌握点、线、面及其“多部件(Multi-part)”变体,理解“岛”与“洞”的存储逻辑。
  2. 掌握数据格式本质:透彻理解 Shapefile 的文件构造与局限,对比 GeoJSON 与 GeoPackage 的现代优势。
  3. 领会拓扑的重要性:识别并理解悬挂节点、自相交、细长碎部(Sliver)等拓扑错误。
  4. 精通空间分析逻辑:掌握缓冲区(Buffer)、叠置(Overlay)、空间连接(Spatial Join)的数学逻辑与应用场景。

2. 文字论述

2.1 矢量数据的解剖学:几何与属性

矢量数据模型(Vector Data Model)将地理空间实体抽象为几何(Geometry)属性(Attributes)的结合体。

2.1.1 几何基元(Geometry Primitives)

OGC(开放地理空间联盟)定义了简单的要素规范(Simple Feature Access),构成了所有 GIS 软件的基石除了基本的点线面,理解多部件(Multi-part)几何至关重要。

  1. 点 (Point)
    • 定义:0 维几何,由一组坐标 $(x, y)$ 或 $(x, y, z)$ 确定。
    • 多点 (MultiPoint):一行记录对应多个点。例如,“某连锁便利店的所有分店”作为一个整体要素存储。
  2. 线 (LineString / Polyline)
    • 定义:1 维几何,由一系列有序的节点 (Vertices) 连接而成。
    • 方向性:线是有方向的(从起点 StartNode 到终点 EndNode)。这对于模拟水流、交通流向至关重要。
    • 多线 (MultiLineString):例如“一条河流”可能中间断流,或者由多条支流组成,但在属性表中仍视为同一条河。
  3. 面 (Polygon)
    • 定义:2 维几何,由一个或多个闭合的线性环 (Linear Ring) 组成。
    • 外环与内环:这是面要素最复杂的概念。一个多边形由一个外环 (Exterior Ring) 和零个或多个内环 (Interior Rings) 组成。内环即为“洞”。
      • 例子:一个湖泊(外环)中间有一个岛屿(岛屿本身是陆地,不属于湖泊多边形,所以在湖泊多边形中表现为一个“洞”)。
    • 多面 (MultiPolygon):例如“日本”或“菲律宾”这样的群岛国家,由成千上万个分离的岛屿组成,但在数据库中,它是一行记录,对应一个 MultiPolygon。
   [Polygon with Hole]              [MultiPolygon]
   
      ___________                    ______      ___
     /           \                  /      \    /   \
    /   Ext.      \                / Part 1 \  / Part\
   /    Ring       \              /__________\ \  2  /
  /     _____       \                           \___/
 |     | Int.|       |            (One Feature ID)
 |     | Ring|       |
 |     |_____|       |
 \                   /
  \_________________/

2.1.2 属性表(Attribute Table)

属性是非空间信息,通常以关型数据库表的形式存在。每一行(Row)对应一个几何实体,每一列(Column)对应一个字段。

2.2 数据格式大比拼:从历史包袱到现代标准

A. Shapefile (.shp) —— 不死的传奇与噩梦

由 ESRI 在 90 年代初推出。它不是一个文件,而是一组文件(通常 3 到 8 个)。

致命局限

  1. 字段名截断.dbf 限制字段名最长 10 个字符(例如 construction_year 会变成 constructi)。
  2. 文件大小.shp.dbf 最大支持 2GB
  3. 编码地狱.dbf 默认没有明确的编码声明,常导致中文乱码(GBK vs UTF-8)。
  4. NULL 值:很难区分“0”和“NULL”。

B. GeoJSON (.json) —— Web 的宠儿

基于 JSON 的纯文本格式,人类可读。

C. GeoPackage (.gpkg) —— 现代的终结者

基于 SQLite 数据库的单文件容器,OGC 标准。

Rule of Thumb (经验法则)

2.3 拓扑关系 (Topology):数据的逻辑骨架

拓扑不仅仅是几何位置,它定义了空间对象之间的连接邻接包含关系。拓扑关系在地图发生弹性形变(如投影转换)时保持不变。

为什么需要拓扑?

如果只是画图,不需要拓扑。但如果要做分析:

常见的拓扑错误与图示

  1. 悬挂节点 (Dangle / Overshoot / Undershoot) 线段超出了目线或未到达目标线。
    Target Line:  ───────────────
    Overshoot:           |
                         | (Crosses over)
                      ───|───
                          
    Undershoot:          |
                         | (Gap)
                         |
    
  2. 自相交 (Self-intersection / Bowtie) 多边形的边界线自己切自己,形成类似领结的形状。这在几何计算(如面积)时会导致数学错误。
       Geometry:      / \
                     /   \
                    /  X  \   <-- Intersection Point
                   / /   \ \
                  /_/     \_\
    
  3. 碎部多边形 (Slivers) 两个本该公共边的多边形之间,因为数字化误差,产生细长的重叠或空隙。
       Poly A      / \ / \      Poly B
      ____________/   X   \_____________
                  \_______/
                 (Tiny gap or overlap)
    

2.4 核心空间分析逻辑

A. 缓冲区分析 (Buffering)

不仅是画个圈。缓冲区的本质是 Minkowski Sum(闵可夫斯基和)。 对于点 $P$ 和半径 $r$,缓冲区是圆。对于复杂多边形,它是多边形边界上每个点做圆后的包络线。

B. 叠置分析 (Overlay Operations)

基于集合论的布尔运算。

C. 空间连接 (Spatial Join)

GIS 中最强大的工具之一。将“位置关系”转化为“属性关联”。


3. 本章小结

  1. 数据模型:矢量数据由几何(点、线、面及其多部件变体)和属性(表格数据)组成。
  2. 格式进化GeoPackage 是现代 GIS 交互与存储的标准容器,它解决了 Shapefile 的字段截断、大小限制和编码问题。Web 开发则依赖 GeoJSON
  3. 拓扑完整性:高质量的地图不仅看起来没问题,逻辑上也不能有悬挂自相交缝隙。拓扑检查是数据入库前的必修课。
  4. 空间逻辑
    • 缓冲区描述影响范围。
    • 叠置分析(裁剪/相交)处理层与层的几何关系。
    • 空间连接利用位置关系进行数据融合与统计。

4. 常见陷阱与错误 (Gotchas)

💀 陷阱 1:投影单位导致的“巨大”或“微小”缓冲区

💀 陷阱 2:CSV 导入时的经纬度翻转

💀 陷阱 3:MultiPolygon 变 Polygon 的丢失

💀 陷阱 4:Shapefile 编码灾难

💀 陷阱 5:环的方向 (Ring Orientation)


< 上一章:地图世界观 下一章:栅格影像与遥感入门 >