gpt4 book ai didi

d3.js - 带有 topojson 的脆边?

转载 作者:行者123 更新时间:2023-12-02 09:34:30 25 4
gpt4 key购买 nike

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是脆的,令人讨厌的,图形困惑的。看看海岸线,你会看到最烦人的事情:看起来像“楼梯”的线条:水平,垂直,水平,垂直,...

enter image description here

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

enter image description here

我尝试将量化减少到-q 1e3,但它仍然很脆,而且更难看:楼梯的台阶更大。

来自command line API ,我注意到并尽可能多地阅读:

  • -q, --quantization, --no-quantization 沿任一维度可微点的最大数量
  • -s, --simplify Visvalingam 简化的精度阈值
  • --simplify-proportion 为 Visvalingam 简化保留的点数比例
  • --宽度缩放和平移以适合指定宽度的视口(viewport)
  • --高度缩放和平移以适合指定高度的视口(viewport)

这可能对我有帮助。我做了一些测试,主要了解到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: 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 的形状中创建对角线的简化。

-s

在 Google 群组中询问,M. Bostock proposed一些聪明的提示。

  1. 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

笛卡尔坐标系

http://bost.ocks.org/mike/simplify/

关于d3.js - 带有 topojson 的脆边?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28445483/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com