GeoJSON ↔ TopoJSON
双向转换 GeoJSON 与 TopoJSON:量化坐标 (quantization)、抽出共享弧段 (arcs)、Delta 编码;相邻面共享的弧段越多体积越省,并支持拓扑分析
{
"type": "Topology",
"objects": {
"main": {
"type": "GeometryCollection",
"geometries": [
{
"type": "Polygon",
"arcs": [
[
0
]
],
"properties": {
"name": "A"
}
},
{
"type": "Polygon",
"arcs": [
[
1
]
],
"properties": {
"name": "B"
}
},
{
"type": "LineString",
"arcs": [
2
],
"properties": {
"name": "line"
}
}
]
}
},
"arcs": [
[
[
0,
0
],
[
50000,
0
],
[
0,
99999
],
[
-50000,
0
],
[
0,
-99999
]
],
[
[
50000,
0
],
[
49999,
0
],
[
0,
99999
],
[
-49999,
0
],
[
0,
-99999
]
],
[
[
0,
99999
],
[
50000,
0
],
[
49999,
0
]
]
],
"transform": {
"scale": [
0.0002000020000200002,
0.0001000010000100001
],
"translate": [
0,
0
]
},
"bbox": [
0,
0,
20,
10
]
}格式与算法说明
TopoJSON 结构:objects.<name>.geometries[].arcs 引用 arcs[];transform.scale/translate 定义量化坐标系;每条弧段以 Delta 编码存 [[dx,dy],...]。
量化覆盖所有位置:规范 §2.1.2 要求拓扑里的每个位置都是量化后的整数,Point / MultiPoint 的 coordinates 同样是量化位(绝对值,不做 Delta)。若这里留原始经纬度,任何按规范读取的消费者都会再乘一次 scale —— 1e5 级量化下点位会被搬走四个数量级。
弧段共享:本实现识别"整段 ring/line 完全相同"(正/反向)作为共享,不做逐边合并;如需最大化共享请用 topojson-server (tj -q)。
反向弧:~idx(按位取反)表示反向遍历,与 TopoJSON 官方规范一致。
量化:quantization=1e5 意味着 bbox 内每轴最多 10⁵ 级;小文件常用 1e4。它必须是 2 ~ 10⁸ 之间的整数:q=1 会除以 0 让全部坐标塌成一个点,q≤0 会让 scale 变负、图形沿轴翻折成镜像 —— 这些以前都会静默产出一个「看着正常的拓扑」。某一维范围为 0 时该维按 1:1 保留,并在上方提示。
展平:GeoJSON 的 GeometryCollection 会被展平为同一层的多个几何(properties 平铺复制),并在提示里给出多出的要素数。geometry: null 的要素会被丢弃并计数 —— TopoJSON 没有空几何类型,回转时它们不会回来。
读出侧:对象名选不到、arcs 缺失、transform 只有一半、弧索引越界或非整数、环凑不出合法 LinearRing,都会直接报错并指认位置;越界索引以前会被当成一条空弧,静默吐出一个 "coordinates": [[]] 的面。弧段拼接处的断点、缺收尾点的环会在提示里计数。单个对象(非集合)也包成 Feature 输出,与 topojson-client 的 feature() 一致。
体积比率:按紧凑序列化(不带缩进的 JSON.stringify,也就是真会存进文件的大小)计;右侧输出与「复制」为便于阅读带缩进,不计入比率。本工具不做逐边弧段合并,只有输入里存在完全相同的整段 ring/line(相邻面共享边界)时才会省体积;坐标本来就是短小数又没有共享边界时,量化整数反而更占地方 —— 这种情况会在上方直接提示「比原 GeoJSON 大」。
关于 GeoJSON ↔ TopoJSON 工具
GeoJSON ↔ TopoJSON 是云海百宝箱提供的一个免费在线工具。双向转换 GeoJSON 与 TopoJSON,量化坐标 (quantization)、抽出共享弧段 (arcs)、Delta 编码;相邻面共享的弧段越多体积越省 该工具完全在浏览器中运行,无需下载安装任何软件,跨平台支持 Windows、Mac、Linux 及移动设备,数据在本地处理不上传服务器。
与 GeoJSON ↔ TopoJSON 配合常用的同类工具: GIS 坐标工具箱、坐标转换、在线地图加载、地图测距工具、坐标格式互转、坐标批量转换
GeoJSON ↔ TopoJSON 使用方法
- 在输入框中输入或粘贴需要处理的内容
- 选择相应的处理选项或参数
- 点击"处理"或"转换"按钮获取结果
- 点击"复制"按钮可一键复制结果到剪贴板