带有 topojson 的脆边?

2023-12-27

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

But my 3MB .topojson https://rugger-demast.codio.io/output/world-1e3/administrative.topo.json是脆的,令人讨厌的,图形混乱的。看看海岸线,你会看到最烦人的事情:看起来像“楼梯”的线条:水平,垂直,水平,垂直,......

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

我尝试将量化减少到-q 1e3,却一直酥脆,而且更难看:楼梯的台阶更大了。

来自命令行API https://github.com/mbostock/topojson/wiki/Command-Line-Reference,我注意到并尽可能多地阅读:

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

这可能都会对我有帮助。我做了一些测试主要是为了了解平衡简化很棘手 http://une-terre.blogspot.fr/2013/08/d3js-balancing-gis-raster-precision.html。我想询问有经验的用户如何处理和平衡他们的 topojson 简化。

你自己采取什么方法?所以...我应该使用哪些 topojson 参数来使我的 topojson 更好?(没有脆的楼梯台阶边缘,正确忠实于形状)


-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一些聪明的提示。

  1. 对于美国,请使用-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/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

带有 topojson 的脆边? 的相关文章

  • D3 V6 - 缩放和拖动功能

    在 Angular 7 中使用 D3 v6 创建世界地图 Choropleth 从 Angular 精简为纯 JavaScript 从 NaturalEarth 收集并在 mapshaper 中编译的形状文件以创建 GeoJSON 只对国家
  • D3可折叠树不同节点颜色

    我在 d3 js 中有一个可折叠的树 我的目标是通过 类型 属性为节点着色 例如 类型 str 的节点应填充为红色 而类型 elem 的节点应填充为绿色 我就是无法让它发挥作用 有人能帮助我吗 这是我的代码
  • 修复地图投影后形状不连续的多边形对象

    该演示程序 旨在在 IPython 笔记本中运行 您需要matplotlib mpl toolkits basemap pyproj and shapely 应该在地球表面绘制越来越大的圆圈 只要圆不越过其中一根极点 它就能正常工作 如果发
  • D3.js 如何将我的真实数据合并到饼图中

    我是 D3 和数据可视化的新手 在加载真实数据时遇到一些问题 您将在以下部分中找到我的代码 现在我有一些数据存储在数组中 现在我想做的是将数据库中的实际数据存储到饼图中 另外 如果我这样做 var mydata d3 json mydata
  • d3 强制添加和删除节点

    我根据我在书中看到的一些代码整理了以下 jfiddle http jsfiddle net hiwilson1 o3gwejbx 2 http jsfiddle net hiwilson1 o3gwejbx 2 总的来说 我关注正在发生的事
  • 更改一个 y 轴的范围 nvd3/d3

    我目前正在使用 multiChart 模型 并且有两个不同的 y 轴 我想更改两个轴 使它们从 0 开始 因为目前它们从最小的 y 数据点开始 我尝试过执行以下操作 chart yAxis1 tickFormat d3 format f d
  • 我可以为我的 r 闪亮界面使用 index.html 和 ui.r 吗?

    在参照this http shiny rstudio com articles html ui html关于如何完全用 HTML 构建闪亮的应用程序 我想知道是否有任何方法可以将这种方法与传统的 ui r 方法结合使用 Reason Thi
  • D3 数据对象内的循环数组

    data name c1 id 4690 day 1 3 start 8 00 end 10 00 name c3 id 5283 day 3 4 start 8 00 end 17 00 name c4 id 4862 day 4 sta
  • D3.js - 如何迭代数据集中的子数组

    我试图让 d3 迭代数据中的子数组并生成多个饼图 这是完整的代码 来自https gist github com mbostock 1305111 https gist github com mbostock 1305111 and htt
  • 如何使用 jQuery 循环 JSON 文件

    我正在尝试循环下面的 JSON 文件 statements subject A predicate B object C subject D predicate E object F 正如您所看到的 有两个主语 两个谓语和两个宾语 例如 我
  • d3.js:在树布局中展开多个路径

    My JSON contains same node names in different paths I would like to be able to open all children with the same name or h
  • 如何对多重映射中的键和值进行排序?

    建议使用任何方法对多重映射的键及其值进行排序 例如 输入 5 1 1 9 1 1 5 2 1 2 输出必须是 1 1 1 2 1 9 5 1 5 2 答案是emplace hint 伪代码如下所示 insert with hint M mm
  • 使用 d3 在两个节点之间绘制多条边

    我一直在关注 Mike Bostock 的代码这个例子 http bl ocks org 1153292学习如何在 d3 中绘制有向图 并且想知道如何构建代码 以便可以在图中的两个节点之间添加多个边 例如 如果上例中的数据集定义为 var
  • 我可以补间 D3 弧的结束角度,但不能补间起始角度。我究竟做错了什么?

    我只是在玩这个演示并自己重新创建它 http bl ocks org mbostock 5100636 http bl ocks org mbostock 5100636 我可以定义一个新的 endAngle 并且它会很好地制作动画 但现在
  • 具有水平和垂直组合布局的可折叠树

    我正在尝试在 D3 中创建一个可折叠树 它结合了水平 第一级和第二级 和垂直 3 级 布局 这里有一个jsfiddle http jsfiddle net artemkolotilkin z7tb23Lo 到目前为止我所得到的 除了一件事之
  • D3js 多折线图 mouseOver

    我正在努力适应this http bl ocks org mbostock 3902569D3js 折线图示例 将鼠标悬停在我的多线图表上的使用情况 看起来d3 mouse this 0 on the mousemove函数生成以下错误 无
  • 通过使用 Intents 使用预装的 Google 地图而不是自己的 Activity?

    我只是想知道是否可以将地理坐标传递给谷歌地图应用程序之二意图或类似的东西 我自己编写了一个用于显示路线 坐标等的应用程序 但是让谷歌地图本身显示这些不是更优雅吗 我不知道这是否可能 但也许你们中的一个人可以回答这个问题 如果这是可能的 是否
  • 如何使用 d3.v4 中的 JSON 数据创建树布局 - 不使用 stratify()

    我正在尝试将一些 d3 代码从 v3 更新到版本 4 我有一个使用 JSON 数据的树形图 d3 v4 示例展示了如何使用 stratify 将表格数据 例如flare csv 转换为分层数据https bl ocks org mbosto
  • D3:如何在Groups of Force布局节点上绘制多个凸包?

    我试图在力布局中的所有组上绘制凸包 但我只画出了一半的凸包 当 D3 尝试绘制其余的船体时 控制台返回错误 元素尚未创建 然而 当我检查控制台中的 groups 变量时 所有组数据都在那里 x y 数据都设置得很好 见下图 我什至尝试在ti
  • 使用 D3.js 解析时间序列数据

    是时候寻求帮助了 我已经学习 D3 js 几个星期了 我才开始觉得我理解了其中的 10 哈哈哈 我正在尝试生成一个非常简单的线图 只要数据非常简单 我就可以做到这一点 但我的原始数据源具有 UTC 时间戳和实数 小数 这会导致任何超出简单范

随机推荐

  • Flutter:我们如何将 Firebase 数据库与桌面应用程序一起使用

    我正在考虑使用 dart 和 flutter 开发一个桌面应用程序 但我不知道如何将 Firebase 数据库与其集成 任何建议将不胜感激 提前致谢 Use Firedart用于将 FIRebase 集成到基于桌面的 Flutter 应用程
  • python 中捕获性能异常

    我知道 python 中的异常处理速度很快try但就捕获量而言 可能会很昂贵 这是否意味着 try some code except MyException pass 比这个更快吗 try some code except MyExcept
  • numpy timedelta64 不显示分数

    我想将 847 小时转换为天 实际结果是 847 24 35 29 但是 numpy 仅显示 35 天 import numpy as np x np timedelta64 847 h x np timedelta64 x D print
  • PySpark 1.5 如何将时间戳从秒截断为最近的分钟

    我正在使用 PySpark 我在数据帧 canon evt 中有一个列 dt 这是一个时间戳 我正在尝试从日期时间值中删除秒 它最初是作为字符串从镶木地板中读入的 然后我尝试通过将其转换为时间戳 canon evt canon evt wi
  • WorkManager 尝试在 Application#onCreate 中将独特的定期工作排入队列时崩溃 [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我想将 WorkManager 与 Dagger 2 一起使用 将依赖项注入到工作人员中 我跟着本文 https proandro
  • 从 JList 取回数据

    我在谷歌上搜索一个从 JList 组件检索数据的解决方案 但没有找到任何解决方案 那么 Jlist 是否有一种返回其项目的方法 我不想要只选择一个 我想要整个清单 原因是我有这个方法可以根据列表框的选定值更新对话框的所有组件 我想用相同的方
  • 为什么我的 vba 代码将逗号视为新行?

    我有这段从文本文件中读取的代码 当行以 Q 开头时 它是一个问题 R 和 W 分别是读取到形状的错误和正确答案 但问题是 如果文本中的任何位置有逗号 我的 powerpoint 宏会将其视为新行 请帮忙解决这个问题吗 这是代码 Open A
  • UIViewController 生命周期调用与状态恢复相结合

    我正在尝试在使用 iOS 6 和故事板的应用程序中实现状态恢复 但我在寻找防止重复调用繁重方法的方法时遇到问题 如果我只是启动应用程序 那么我需要在中设置用户界面viewDidLoad void viewDidLoad super view
  • 如何制作自定义形状的按钮?

    我正在开发一个 iPhone 应用程序 它要求按钮的形状不是矩形 正方形 例如阿米巴形状的按钮 此外 当单击该按钮时 该按钮仅突出显示其大小 所以仅仅设置背景图片是不够的 我该怎么办 一种方法是为正常状态和选定状态制作预渲染图像 然后设置使
  • 带有overlayskscene Xcode Swift 的屏幕触摸Scenekit 导致应用程序崩溃

    嘿 好吧 在 Overlayskene 的场景套件 3D 游戏中识别 HUD 触摸的最佳方法是什么 因为我有一个名为 AButton 的按钮 但是当我触摸按钮或屏幕时 游戏会在几个小时的搜索后崩溃 我猜问题是场景套件上的 touchbegi
  • iOS/Android 上的 OpenMP

    OpenMP 在跨平台的 GCC 中受支持 但这是否意味着 OpenMP 在所有目标平台上都受支持 具体来说 iOS 和 Android 随着手机 平板电脑转向四核 在游戏中不使用所有核心将是一个巨大的劣势 作为一名非移动开发人员 我不知道
  • 创建重定向到另一个 URL 的 WordPress 页面

    我想创建一个新的 WordPress 页面 它实际上是另一个网站的链接 目标是让页面显示在我的页面列表中 但实际上将 Web 用户发送到目标 URL 例如 假设我想包含一个指示 我的照片 的页面 但实际上将它们重定向到 Flickr 我猜测
  • 如何在 docker 中将 /proc 文件系统重新挂载为 r/w 系统?

    我已经在 Ubuntu 12 04 上安装了 docker 0 11 1 我正在尝试将 shmmax 从固定值 32 M 更改为更大的值 1G 当我运行命令时 从 docker 中 sysctl w kernel shmmax 107374
  • 将使用“by”创建的摘要转换为 data.frame

    df1 data frame c 2 1 2 c 1 2 3 4 5 6 seq 141 170 create data frame names df1 c gender age height column names df1 gender
  • 在基于 JSF 的应用程序中捕获并记录/通知未处理的异常

    我想使用 log4j 检查并记录 JSF Web 应用程序中所有未处理的异常 我读了这篇文章使用 log4j 记录 Java 中的运行时异常 https stackoverflow com questions 2344654 log run
  • ElementClickInterceptedException:消息:元素在点 (x,y) 处不可单击,因为另一个元素遮挡了它

    您好 我继续收到错误 ElementClickInterceptedException 消息 元素在点 x y 处不可单击 因为另一个元素遮挡了它 我尝试了很多解决方法 包括时间延迟 但似乎没有任何效果 我在这里尝试了一些解决方案 Sele
  • 正则表达式和 ISO8601 格式的日期时间 [重复]

    这个问题在这里已经有答案了 我有一个 ISO 8601 格式的日期时间字符串 2012 10 06T04 13 00 00 00 以及以下正则表达式与该字符串不匹配 d 4 d 2 d 2 T d 2 d 2 d 2 d 2 d 2 我不明
  • 右 |如何按自定义顺序排列 df 列的字符向量?

    我有一个如下所示的数据框 Fruit X Y Z apple banana orange papaya a f k banana orange grape b g l orange banana c h m grape d i n bana
  • 从 python 脚本解锁 Windows 中的文件

    我可以在 windows 7 中取消阻止 Windows 从 Internet 下载 自动阻止的文件吗 遇到此类文件时会引发 WindowsError 我想捕获这个异常 并运行一个 powershell 脚本 如下所示 Parameter
  • 带有 topojson 的脆边?

    Mike Bostock 分享了一系列全球范围内的 topojson 文件 由于我想要更多数据和更高质量 我现在从 Natural Earth 生成自己的高质量 topojson 文件 为了简单起见 我的 makefile 命令是这样的 a