GeoJSON 标准详解:为地理空间数据掌握 RFC 7946 标准
在 Web 地图和地理信息系统 (GIS) 领域,GeoJSON 已成为共享空间数据的通用语言。无论您使用的是 Leaflet、Mapbox 还是 Google Maps,您很可能都在与 RFC 7946(官方 GeoJSON 标准)进行交互。
什么是 RFC 7946 (GeoJSON)?
RFC 7946 发布于 2016 年,正式规范了 GeoJSON 格式。它是一种基于 JSON(JavaScript 对象表示法)的地理空间数据交换格式。它允许您表示几何图形、特征及其集合。
GeoJSON 支持以下几何类型:
- Point (点): 单个位置(经度,纬度)。
- LineString (线): 一系列连接的点。
- Polygon (面): 封闭区域(起点和终点相同)。
- MultiPoint, MultiLineString, MultiPolygon: 上述类型的集合。
- GeometryCollection: 不同几何类型的混合。
GeoJSON 的核心原理
1. 坐标系
RFC 7946 严格规定使用 WGS 84(1984 年世界大地测量系统)基准面。坐标始终按 [经度, 纬度] 排序。 警告:许多开发者会错误地使用 [纬度, 经度],这会导致您的数据出现在地球上完全错误的位置!
2. 特征对象 (Feature)
GeoJSON Feature 对象包含一个几何图形和额外的元数据(属性)。
{
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [102.0, 0.5]
},
"properties": {
"name": "Dinagat Islands"
}
}
3. 特征集合 (FeatureCollection)
大多数 GeoJSON 文件都是 FeatureCollection 对象,允许您将多个特征打包到单个文件中。
实际应用场景
Web 地图
GeoJSON 是大多数现代 Web 地图库的原生格式。它易于通过 AJAX 加载,并且可以根据 properties 对象进行动态样式设置。
数据库存储
现代数据库(如带有 PostGIS 的 PostgreSQL 和 MongoDB)对 GeoJSON 提供原生支持,允许您执行空间查询(例如,“查找该位置 5 公里范围内的所有点”)。
数据可视化
D3.js 等工具可以读取 GeoJSON 数据并将其渲染为交互式 SVG 地图,非常适合仪表板和信息图表。
GeoJSON vs. KML vs. Shapefile 对比
| 特性 | GeoJSON | KML | Shapefile |
|---|---|---|---|
| 格式 | JSON | XML | 二进制(多个文件) |
| Web 友好度 | 极佳 | 一般 | 较差 |
| 样式设置 | 通过属性 | 内置 (XML) | 独立文件 (.qml/.sld) |
| 人类可读 | 是 | 是 | 否 |
常见问题 FAQ
Q: 为什么是 [经度, 纬度] 而不是 [纬度, 经度]?
A: RFC 7946 遵循标准笛卡尔坐标系 [x, y],其中经度对应 X 轴,纬度对应 Y 轴。
Q: 我可以使用不同的坐标参考系统 (CRS) 吗?
A: 虽然旧版本的 GeoJSON 允许自定义 CRS,但 RFC 7946 严格要求使用 WGS 84。如果您的数据位于不同的系统中(如 UTM),则在将其共享为 GeoJSON 之前,必须将其投影到 WGS 84。
Q: 如何处理大型数据集?
A: 对于非常庞大的空间数据集,GeoJSON 的加载速度可能会变慢。对于生产级地图,请考虑使用 TopoJSON(通过共享拓扑减少文件大小)或 矢量切片 (Vector Tiles)。