Hug*_*lpz 2 maps d3.js topojson
Mike Bostock分享了一系列全球topojson文件.
由于我想要更多的数据和更高的质量,我现在从Natural Earth生成我自己的高质量topojson文件.为简单起见,我的makefile /命令是这样的:
admin_0: crop
../node_modules/topojson/bin/topojson \
--id-property name \
-p name=name \
-q 1e4 \
--filter=small \
-o admin_0.topo.json \
-- admin_0=./natural_earth_vector/10m_cultural/ne_10m_admin_0_countries.shp
Run Code Online (Sandbox Code Playgroud)
但我的3MB .topojson是脆的,讨厌的,图形凌乱.看看海岸线,你会看到最烦人的事情:看起来像"楼梯"的线条:水平,垂直,水平,垂直,......

在他身边,M. Bostock的90kb .topojson在优雅方面做得非常好.不完美,但很好,他确实有对角线(!)和他的线条使用的各种角度.

我尝试减少量化-q 1e3,但它保持松脆,而且更加难看:楼梯的台阶甚至更大.
从命令行API,我注意到,读尽我所能在:
这可能都对我有帮助.我做了一些测试,主要是了解平衡简化是棘手的.我想请经验丰富的用户如何处理和平衡他们的topojson简化.
你自己采取什么方法?所以... 我应该使用什么topojson参数来使我的topojson更好?(没有酥脆的楼梯 - 台阶边缘,正确的忠诚形状)
几何体的总大小由两个因素控制:每个坐标的位数(精度)和点数.
量化-q减少了每个坐标的位数.最初,地理输出具有非常高的精度
…,[-90.07231180399987,29.501753271000098],[-90.06635619599979,29.499494248000133],…
Run Code Online (Sandbox Code Playgroud)
量化-q 1e4其中1E4 = 10000 0和9999之间这样创建一个万×万格与整数值[-6700,1030].通过坐标的字符从~40减少到12,减少~75%,最多4个数值.其次,quatization使输入shapefile中不同的地理输出现在共享相同的坐标,例如[24,62],[24,62],[24,62]….这些重复项合并.最终结果是由网格上的点定义的形状.如果仅使用量化,则形状将由从网格点到网格点的垂直+水平线组成.
相反,简化通过删除点来删除信息.TopoJSON使用的Visvalingam方法消除了最不显着的点,原理在Line Simplification文章中有详细说明.为了精细地删除许多精细三角形,首先使用更高的量化,然后简化:
#world
topojson -q 1e6 -s 7e-5 -o world-110m.json -- NaturalEarth-110m.shp
Run Code Online (Sandbox Code Playgroud)
这是通过删除一些角点在基于topojson的形状中创建对角线的简化.
在谷歌小组提问时,M.Bostock 提出了一些聪明的建议.
- 对于美国,请使用
-s 7e-7."e"代表指数,以球面坐标测量球面坐标.7e-8小十倍,这是更详细的!7e-5的细节少了一百倍.最近,我开始预先投影TopoJSON.这允许您在屏幕像素中指定直观的简化阈值(
--cartesian --width 960 -s 1例如,对于一个方形像素),并且由于已经投影了TopoJSON,因此在客户端上进行渲染非常快.
两个实时使用和另外两个是这样的:
# 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
Run Code Online (Sandbox Code Playgroud)
对于未投影,当您的映射区域的尺寸变小10倍(即内华达州)时,7e-7应该移动到较小的值7e-8.
http://bost.ocks.org/mike/simplify/