转 - GeoJSON和TopoJSON
GeoJSON 和 TopoJSON
GeoJSON和TopoJSON是符合JSON语法规则的两种数据格式,用于表示地理信息。
1. GeoJSON
GeoJSON 是用于描述地理空间信息的数据格式。GeoJSON 不是一种新的格式,其语法规则是符合 JSON 格式的,只不过对其名称进行了规范,专门用于表示地理信息。
GeoJSON 的最外层是一个单独的对象(object)。这个对象可表示:
- 几何体(Geometry)。
- 特征(Feature)。
- 特征集合(FeatureCollection)。
最外层的GeoJSON里可能包含有很多子对象,每一个GeoJSON对象都有一个type属性,表示对象的类型,type的指必须是下面之一:
- Point:点。
- MultiPoint:多点。
- LineString:线。
- MultiLineString:多线。
- Polygon:面。
- MultiPolygon:多面。
- GeometryCollection:几何体集合。
- Feature:特征。
- FeatureCollection:特征集合。
例子:
点对象:
{
"type": "Point",
"coordinates": [-105, 39]
}
线对象:
{
"type": "LineString",
"coordinates": [[-105, 39], [-107, 38]]
}
面对象:
{
"type": "Polygon",
"coordinates": [[
[30, 0], [31, 0], [31, 5], [30, 5], [30, 0]
]]
}
由以上格式可以发现,每一个对象都有一个成员变量coordinates。如果type的值为Point、MultiPoint、LIneString、MultiLineString、Polygon、MultiPolygon之一,则该对象必须有变量coordinates。
如果type的值为GeometryCollection(几何体集合),那么该对象必须有变量geometries,其指是一个数组,数组的每一项都是一个GeoJSON的几何对象。例如:
{
"type": "GeometryCollection",
"geometries": [
{
"type": "Point",
"coordinates": [100, 40]
},
{
"type": "LineString",
"coordinates": [ [100, 30], [100, 35] ]
}
]
}
如果type的值是Feature(特征),那么此特征对象必须包含有变量geometry,表示几何体,geometry的值必须是几何体对象。此特征对象还包含有一个properties,表示特征,properties的值可以是任意JSON对象或null。例如:
{
"type": "Feature",
"properties": {
"name": "北京"
},
"geometry": {
"type": "Point",
"coordinates": [ 116.3671875, 39.977120098439634]
}
}
如果type的值为FeatureCollection(特征集合),则该对象必须有一个名称为features的成员。features的值是一个数组,数组的每一项都是一个特征对象。
2. TopoJSON
TopoJSON是GeoJSON按拓扑学编码后的拓展形式,是由D3的作者Mike Bostock制定的。相比GeoJSON直接使用Polygon、Point之类的几何体表示图形的方法,TopoJSON中的每一个几何体都是通过将共享边(被称为arcs)整合后组成的。
TopoJSON消除了冗余,文件大小缩小了80%,因为:
- 边界线只记录一次(例如广西和广东的交界线只记录一次);
- 地理坐标使用整数,不使用浮点数。
3. 在线工具
- JSON在线解析及格式化:https://www.json.cn/
- 在线生成GeoJSON: http://geojson.io/
- 简化、转换GeoJSON和TopoJSON: http://mapshaper.org/