-q VS -s
更多详情请参阅Topojson:量化 VS 简化 https://stackoverflow.com/questions/18900022/ .
几何体的总大小由两个因素控制:这
每个坐标的位数(精度) and 号码
点数.
量化-q
减少每个坐标的位数。最初,地理点具有非常高的精度,例如
…,[-90.07231180399987,29.501753271000098],[-90.06635619599979,29.499494248000133],…
量化-q 1e4
where 1e4=10000 创建一个 10,000×10,000 的网格,其整数值在 0 到 9999 之间,例如[-6700,1030]
。坐标字符从 ~40 减少到12,减少约 75%,最大为4按值的数字。其次,量化使输入形状文件中不同的地理点现在共享相同的坐标,例如[24,62],[24,62],[24,62]…
。这些重复项被合并。最终结果是由网格上的点定义的形状。如果您仅使用量化,您的形状将由从网格点到网格点的垂直线+水平线组成。
相比之下,简化通过删除点来删除信息。 TopoJSON 使用的 Visvalingam 方法去除了最不引人注目的点,其原理在线路简化文章 http://bost.ocks.org/mike/simplify/。要巧妙地删除许多精细三角形,请首先使用更高的量化,然后进行简化:
#world
topojson -q 1e6 -s 7e-5 -o world-110m.json -- NaturalEarth-110m.shp
这是通过删除一些角点在基于 topojson 的形状中创建对角线的简化。
-s
在谷歌群组中询问,M. Bostockproposed https://groups.google.com/forum/#!msg/d3-js/a6VdcMv0VmU/X-a3xYrUUc0J一些聪明的提示。
- 对于美国,请使用
-s 7e-7
。 “e”代表指数,以球面坐标的球面度为单位测量。7e-8
缩小了十倍,细节更加丰富! 7e-5 的细节少了一百倍。
最近,我开始预投影 TopoJSON。这允许您以屏幕像素为单位指定直观的简化阈值(--cartesian --width 960 -s 1
例如,对于一个方形像素),并且由于 TopoJSON 已经被投影,因此在客户端上的渲染速度非常快。
Demos
Two live use http://bl.ocks.org/mbostock/6320825另一个是这样的:
# projected (giving node extra memory since input shapefile is big)
us-albers.json: County_2010Census_DP1.shp
node --max_old_space_size=8192 node_modules/.bin/topojson \
-q 1e5 \
-s 1 \
--projection 'd3.geo.albersUsa()' \
--id-property=GEOID10 \
-p name=NAMELSAD10,pop=+DP0010001 \
-o $@ \
-- counties=County_2010Census_DP1.shp
# non-projected (not used by this example, but included for reference)
topojson --max_old_space_size=8192 \
-q 1e6 \
-s 7e-5 \
-o world-110m.json \
-- NaturalEarth-110m.shp
#USA
topojson \
-q 1e5 \
-s 7e-7 \
--id-property=GEOID10 \
-p name=NAMELSAD10,pop=+DP0010001 \
-o $@ \
-- counties=County_2010Census_DP1.shp
在未投影的情况下,当映射区域的尺寸缩小 10 倍时(即内华达州),7e-7
应该移至较小的值,例如7e-8
.
笛卡尔
http://bost.ocks.org/mike/simplify/ http://bost.ocks.org/mike/simplify/