三分钟搞懂 GeoJSON 是什么?

前言
GeoJSON
(地理JSON
)是一种开放的标准数据格式,用于表示地理信息和地理特征的地理数据。它基于JSON(JavaScript Object Notation)
格式,旨在用于描述地理和空间信息,例如地图数据、地理特征、地理坐标等。GeoJSON
通常用于Web
地图应用、地理信息系统(GIS
)、地理空间数据的存储和交换,以及其他与地理位置相关的应用。
GeoJSON
的主要特点包括:
地理特征:
GeoJSON
允许表示各种地理特征,如点(Point
)、线(LineString
)、多边形(Polygon
)、多点(MultiPoint
)、多线(MultiLineString
)、多边形集合(MultiPolygon
)、几何集合(GeometryCollection
)、特征对象(Feature
)、以及特征集合(FeatureCollection
)等。这使得它适用于各种地理数据的表示。地理坐标:
GeoJSON
使用经度和纬度坐标来表示地理位置。这些坐标通常使用WGS 84
坐标系,这是一种广泛使用的地理坐标系。在国际上,每个坐标系统都会被分配一个EPSG
代码,EPSG:4326
就是WGS84
的代码。属性信息:
GeoJSON
允许为地理特征添加属性信息。这些属性信息通常以键-值对的形式包含在GeoJSON
对象中,使用户能够附加各种属性数据。简洁性:
GeoJSON
使用JSON
格式,这使得它易于阅读、编写和解析。JSON 是一种文本格式,易于与各种编程语言兼容。
GeoJSON
通常用于 Web
地图应用中,例如 高德
、OpenLayers
和 Mapbox
,用于将地理数据显示在地图上。它也被用于地理信息系统,用于地理数据的导入、导出和存储。许多地理信息数据提供者和地理数据 API
也支持 GeoJSON
格式,使其成为广泛应用的标准。
GeoJSON 对象
GeoJSON
对象分为三种:几何对象、特征对象、特征集合对象
几何对象
GeoJSON
支持以下几何类型:Point
,MultiPoint
,LineString
,MultiLineString
,Polygon
,和MultiPolygon
。
除了 GeometryCollection
外的其他任何类型的 GeoJSON
几何对象必须由一个名字为 coordinates
的成员。coordinates
成员的值总是数组。这个数组里的元素的结构由几何类型来确定。
点(Point)
1 | { |
多点(MultiPoint)
1 | { |
线 (LineString)
1 | { |
多线 (MultiLineString)
1 | { |
多边形 (Polygon)
- 不带孔
1
2
3
4
5
6
7
8
9
10
11
12{
"type": "Polygon",
"coordinates": [
[
[ 100, 0 ],
[ 101, 0 ],
[ 101, 1 ],
[ 100, 1 ],
[ 100, 0 ]
]
]
} - 带孔的
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19{
"type": "Polygon",
"coordinates": [
[
[ 100, 0 ],
[ 101, 0 ],
[ 101, 1 ],
[ 100, 1 ],
[ 100, 0 ]
],
[
[ 100.2, 0.2 ],
[ 100.8, 0.2 ],
[ 100.8, 0.8 ],
[ 100.2, 0.8 ],
[ 100.2, 0.2 ]
]
]
}
多个多边形 (Polygon)
1 | { |
几何集合
1 | { "type": "GeometryCollection", |
特征对象
类型为 Feature
的 GeoJSON
对象是特征对象。
特征对象必须由一个名字为 geometry
的成员,这个几何成员的值是上面定义的几何对象或者 JSON 的 null 值。特征对象那个必须有一个名字为 properties
的成员,这个属性成员的值是一个对象(任何 JSON 对象或者 JSON 的 null 值)。
1 | { |
特征集合对象
特征集合对象 type
为 FeatureCollection
,必须有一个名字为 features
的属性。与 features
相对应的值是一个数组。这个数组中的每个元素都是上面定义的特征对象。
这个是一个基本的特征集合对象示例,包含点、线、多边形。
1 | { |
坐标参考系统对象
GeoJSON
对象的坐标参考系统(CRS
)是由它的 crs
属性来确定的。如果对象没有 crs
属性,那么它的父对象或者祖父对象的 crs
属性可能被获取作为它的 crs
。如果这样还没有获得 crs
成员,那么默认的 CRS
将应用到 GeoJSON
对象。
默认的 CRS
是地理坐标参考系统,使用的是 WGS84
数据。
1 | { |
边界框
通常情况下,坐标参考系统对象会包含几何、特征或者特征集合的坐标范围信息,GeoJSON
对象可能有一个名字为 bbox
的属性。bbox
属性的值必须是 2*n
数组,n
是所包含几何对象的维数(如二维简单的经纬度,将包含经度和纬度的最大值、最小值,如果是三维空间将多一个高度的最大值、最小值。),并且所有坐标轴的最低值后面跟着最高者值。bbox
的坐标轴的顺序遵循几何坐标轴的顺序。除此之外,bbox
的坐标参考系统假设匹配它所在 GeoJSON
对象的坐标参考系统。
- 特征对象上的
bbox
成员的例子1
2
3
4
5
6
7
8
9
10
11
12{
"type": "Feature",
"bbox": [-180.0, -90.0, 180.0, 90.0],
"geometry": {
"type": "Polygon",
"coordinates": [
[
[-180.0, 10.0], [20.0, 90.0], [180.0, -5.0], [-30.0, -90.0]
]
]
}
} - 特征集合对象
bbox
成员的例子1
2
3
4
5{
"type": "FeatureCollection",
"bbox": [100.0, 0.0, 105.0, 1.0],
"features": []
}