- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
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
但是我的3MB .topojson是脆的,令人讨厌的,图形困惑的。看看海岸线,你会看到最烦人的事情:看起来像“楼梯”的线条:水平,垂直,水平,垂直,...
在他这边,M. Bostock 的 90kb .topojson在优雅方面做得非常好。不完美,但很好,而且他的线条确实有对角线(!)和各种角度。
我尝试将量化减少到-q 1e3
,但它仍然很脆,而且更难看:楼梯的台阶更大。
来自command line API ,我注意到并尽可能多地阅读:
这可能对我有帮助。我做了一些测试,主要了解到balancing simplification is tricky 。我想询问有经验的用户如何处理和平衡他们的 topojson 简化。
您自己采取什么方法?所以...我应该使用哪些 topojson 参数来使我的 topojson 更好?(没有脆的楼梯边缘,正确的形状忠诚度)
最佳答案
有关 Topojson: quantization VS simplification的更多详细信息 .
The total size of your geometry is controlled by two factors: thenumber of digits (the precision) of each coordinate and the numberof points.
量化-q
减少每个坐标的位数。最初,地理点具有非常高的精度,例如
…,[-90.07231180399987,29.501753271000098],[-90.06635619599979,29.499494248000133],…
量化-q 1e4
,其中1e4=10000创建一个10,000×10,000网格,其整数值在0到9999之间,例如[ -6700,1030]
。按坐标排列的字符从约 40 个减少到 12,减少了约 75%,按值最多 4 位数字。其次,量化使输入 shapefile 中不同的地理点现在共享相同的坐标,例如 [24,62],[24,62],[24,62]...
。这些重复项被合并。最终结果是由网格上的点定义的形状。 如果您仅使用量化,您的形状将由从网格点到网格点的垂直线+水平线组成。
相反,简化通过删除点来删除信息。 TopoJSON 使用的 Visvalingam 方法去除了最不引人注目的点,其原理在 Line Simplification article 中巧妙地说明了。要巧妙地删除许多精细三角形,请首先使用更高的量化,然后进行简化:
#world
topojson -q 1e6 -s 7e-5 -o world-110m.json -- NaturalEarth-110m.shp
这是通过删除一些角点在基于 topojson 的形状中创建对角线的简化。
在 Google 群组中询问,M. Bostock proposed一些聪明的提示。
- For the USA, use
-s 7e-7
. "e" stands for exponent, measured in steradians for spherical coordinates.7e-8
is ten times smaller, which is a lot more detail! 7e-5 is one hundred times less details.Lately, I’ve started pre-projecting the TopoJSON. This allows you to specify an intuitive simplification threshold in screen pixels (
--cartesian --width 960 -s 1
for one square pixel, e.g.) and makes rendering very fast on the client since the TopoJSON is already projected.
两个 live use另一个是这样的:
# 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
。
关于d3.js - 带有 topojson 的脆边?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28445483/
我是一名优秀的程序员,十分优秀!