GeoJSON是一种常用的对各种地理数据结构进行编码的格式,是JSON的特殊子集。区别于JSON更加灵活的结构,GeoJSON有固定的结构,必须包含特定的字段,如"type"来指定GeoJSON类型(Point、LineString、Polygon等9种类型)。
GeoJSON默认为WGS-84地理坐标系,内部不可以修改。
1. GeoJSON对象构成
(必选)"type":确定GeoJSON类型,“
Point”、“MultiPoint”、“LineString”、“MultiLineString”、“Polygon”、“MultiPolygon” 、 “GeometryCollection”、 “Feature”、“FeatureCollection”共9种。(可选)"bbox":表示数据的空间范围,通常为4个或6个数值的数组,分别表示最小和最大经纬度(以及可选的高度)坐标。用于在不需要解析整个GeoJSON的情况下加速对数据加载、查询的速度。例:[100.0, 0.0, 105.0, 1.0]、[100.0, 0.0, -100.0, 105.0, 1.0, 0.0]。
(... ...)
2.Feature、 FeatureCollection与Geometry(区别与联系)
当"type"为“FeatureCollection”时,GeoJSON表示要素对象集合(FeatureCollection);当"type"为“Feature”时,GeoJSON表示要素对象(Feature);当"type"为“Point”等其余7种类型时,GeoJSON表示几何对象(Geometry)。
联系:三种对象是包含关系,FeatureCollection可以看作Feature的集合,相当于向外包了一层存储多个Feature,而Geometry构成了Feature。
具体来说,FeatureCollection的成员“features”值为含有1个或多个Feature对象的数组,Feature的成员“geometry”值为Geometry对象。
Feature与FeatureCollection都可用于地理数据的传输与交换,而Geometry常作为Feature的内部成员值。
区别:以上"type"、"bbox"等成员是所有GeoJSON的基本成员,不同类型的GeoJSON还有不同的其它成员。
要素对象集合(FeatureCollection):特有一个“features”成员,存储1个或多个要素对象。
要素对象(Feature):特有“geomtry”和“properties”成员,分别存储几何形状位置和属性。
几何对象(Geometry):类型为“GeometryCollection”(不常用)时,特有“geometries”,存储其余6种基本类型的集合。其余6种类型特有“coordinates”,存储坐标。如下所示:
{
"type": "GeometryCollection",
"geometries": [
{
"type": "Point",
"coordinates": [100.0, 0.0]
},
{
"type": "LineString",
"coordinates": [
[101.0, 0.0],
[102.0, 1.0]
]
}
]
}
3.六种基本类型的坐标表示
Point:一个位置:[102.0, 0.5]。
MultiPoint:多个位置的数组:[ [102.0, 0.5], [103.0, 1.0] ] 。
LineString:两个或多个位置的数组:[ [102.0, 0.5], [103.0, 1.0] ]
MultiLineString:多LineString的数组:[LineString, LineString ]
Polygon:闭合LineString线性环的数组,首尾坐标相同即为闭合,[ [ [102.0, 0.5], [103.0, 1.0], [104.0, 0.5], [102.0, 0.5] ] ],线性环有方向,第一个环为最外环,逆时针方向,后面的环默认是孔,顺时针方向。
MultiPolygon:多Polygon的数组:[Polygon, Polygon ]
4.总结
GeoJSON有多种类型,6种基本类型作为地理数据的基本单元,仅包含空间位置数据;“GeometryCollection”是基本类型的集合;“Feature”是加入了属性的地理数据,包含空间位置数据和属性信息。“FeatureCollection”是“Feature”的集合。
5.参考
RFC 7946 - GeoJSON 格式
GeoJson规范(RFC 7946)全文翻译 - 知乎
geojson.io | powered by Mapbox