带有 topojson 的脆边?
Crispy edges with topojson?
Mike Bostock 分享了一系列全球范围内的 topojson 文件。
因为我想要更多的数据和更高的质量,我现在从 Natural Earth 生成我自己的高质量 topojson 文件。为了简单起见,我的生成文件/命令是这样的:
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 很脆,很脏,图形很乱。看看海岸线,你会看到最讨厌的东西:线条看起来像 "stairs" :水平,垂直,水平,垂直,...
在他这边,M. Bostock 的 90kb .topojson 在优雅方面出奇的好。不完美,但很好,他的线条确实有对角线 (!) 和各种角度。
我尝试将量化降低到-q 1e3
,但它仍然很脆,而且更难看:楼梯的台阶更大。
从 command line API,我注意到并尽可能多地阅读了 :
- -q, --quantization, --no-quantization 任一维度上可微分点的最大数量
- -s, --simplify 用于 Visvalingam 简化的精度阈值
- --simplify-proportion 为 Visvalingam 简化保留的点的比例
- --宽度缩放和平移以适应指定宽度的视口
- --高度缩放和平移以适应指定高度的视口
这可能对我有帮助。我做了一些测试,主要学习balancing simplification is tricky。我想请教有经验的用户如何处理和平衡他们的 topojson 简化。
你自己采取什么方法?所以...
我应该使用哪些 topojson 参数来使我的 topojson 更好?(没有松脆的阶梯边缘,形状正确)
-q VS -s
有关 Topojson: quantization VS simplification 的更多详细信息。
The total size of your geometry is controlled by two factors: the
number of digits (the precision) of each coordinate and the number
of 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 的形状中创建对角线的简化。
-s
在 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
.
笛卡尔
Mike Bostock 分享了一系列全球范围内的 topojson 文件。
因为我想要更多的数据和更高的质量,我现在从 Natural Earth 生成我自己的高质量 topojson 文件。为了简单起见,我的生成文件/命令是这样的:
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 很脆,很脏,图形很乱。看看海岸线,你会看到最讨厌的东西:线条看起来像 "stairs" :水平,垂直,水平,垂直,...
在他这边,M. Bostock 的 90kb .topojson 在优雅方面出奇的好。不完美,但很好,他的线条确实有对角线 (!) 和各种角度。
我尝试将量化降低到-q 1e3
,但它仍然很脆,而且更难看:楼梯的台阶更大。
从 command line API,我注意到并尽可能多地阅读了 :
- -q, --quantization, --no-quantization 任一维度上可微分点的最大数量
- -s, --simplify 用于 Visvalingam 简化的精度阈值
- --simplify-proportion 为 Visvalingam 简化保留的点的比例
- --宽度缩放和平移以适应指定宽度的视口
- --高度缩放和平移以适应指定高度的视口
这可能对我有帮助。我做了一些测试,主要学习balancing simplification is tricky。我想请教有经验的用户如何处理和平衡他们的 topojson 简化。
你自己采取什么方法?所以... 我应该使用哪些 topojson 参数来使我的 topojson 更好?(没有松脆的阶梯边缘,形状正确)
-q VS -s
有关 Topojson: quantization VS simplification 的更多详细信息。
The total size of your geometry is controlled by two factors: the number of digits (the precision) of each coordinate and the number of 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 的形状中创建对角线的简化。
-s
在 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
.