TopoJSON 是 GeoJSON 按拓扑学编码后的扩展形式。使用点、弧(有向线)来表示图形。
- 点状地理实体
由坐标表示
- 线状地理实体
由弧索引表示
- 多边形
由弧索引表示
TopoJSON文件由三部分组成,transform、objects和arcs组成。transform描述了变换参数;
objects描述地理实体包含空间及属性信息;arcs描述了有向弧的空间关系,弧由一系列起点及相对于起点的有向偏移坐标表示。基于这种弧的存储方式可以表达出拓扑关系。
由于弧只记录一次及地理坐标使用整数,不使用浮点数,相对于GeoJSON,TopoJSON 消除了冗余,文件大小缩小了 80%。
{
"type":"Topology",
"transform":{
"scale": [1,1], //缩放比例
"translate": [0,0] //相对于原点([0,0])的偏移量
},
"objects":{
"two-squares":{
"type": "GeometryCollection",
"geometries":[
{"type": "Polygon", "arcs":[[0,1]],"properties": {"name": "Left_Polygon" }},
{"type": "Polygon", "arcs":[[2,-1]],"properties": {"name": "Right_Polygon" }}
]
},
"one-line": {
"type":"GeometryCollection",
"geometries":[
{"type": "LineString", "arcs": [3],"properties":{"name":"Under_LineString"}}
]
},
"two-places":{
"type":"GeometryCollection",
"geometries":[
{"type":"Point","coordinates":[0,0],"properties":{"name":"Origine_Point"}},
{"type":"Point","coordinates":[0,-1],"properties":{"name":"Under_Point"}}
]
}
},
"arcs": [
[[1,2],[0,-2]],
[[1,0],[-1,0],[0,2],[1,0]],
[[1,2],[1,0],[0,-2],[-1,0]],
[[0,-1],[2,0]]
]
}
TopoJSON可以由GeoJSON转换而来。
npm install -g topojson@1
//subunits.geojson->uk.topojson
topojson -o uk.topojson subunits.geojson