format - 现有的 vega-lite 地图突然看起来非常放大 - 发生了什么?
问题描述
我有一张曾经与 Vega-Lite 一起使用过的旧 topojson 格式的地图。现在我们在这个编辑器要点中只看到一个紫色方块。
我已经用相同的代码重建了地图,但在 vega 编辑器中更新了 topojson 并在此处保存为要点。
在新的 vega 版本中,我似乎需要对我的 topojson 文件进行不同的格式化,首先是弧,比如 mapshaper.org 导出输出。为什么是这样?它破坏了几个现有的网络地图,我花了几个小时才弄清楚。似乎我可以通过更改工作流程来修复它,但我很好奇。
解决方案
Topojson 数据遵循投影数据的左手规则(外环顺时针方向,内环逆时针方向),其中您的 topojson 文件中的数据根据右手规则构造(外环逆时针方向和顺时针方向用于内环)。您的多边形的顺序似乎可以忽略不计,但它定义了哪个部分在多边形的“内部”和“外部”。
你可以做两件事:
- 不要使用地理投影,而是使用类似笛卡尔的
identity
投影。 - 强制您的源数据按正确的顺序排列。
示例 1:
"projection": {"type": "identity", "reflectY": true},
示例 2:
使用 MapShaper 或 Python 以正确的顺序强制您的数据。这里是一个使用 Python 的例子
import topojson as tp
import geopandas as gpd
gdf = gpd.read_file('https://raw.githubusercontent.com/nycehs/NeighborhoodReports/master/visualizations/json/UHF42.topo_old.json')
tp.Topology(gdf).to_json('UHF42.topo_new.json')
我之前为 Altair 和 Python Topojson 写过一些关于它的文章
- https://mattijn.github.io/topojson/example/settings-tuning.html#winding_order
- https://altair-viz.github.io/user_guide/data.html#winding-order
和迈克博斯托克为 D3
推荐阅读
- android - 我正在尝试通过单击当前 RecyclerView 中的按钮来加载 RecyclerView
- python - IMAPLIB“初始值必须是 str 或 none,而不是字节”错误
- javascript - PHP 无法与 html、js/jquery 和 ajax 一起正常工作
- version - Anylogic 将 ALP 从版本 8.3.2 转换为 7.1.2
- oracle - 如何在表 1 中显示每年的记录,然后将计算值自动关联到第二个表中?
- html - 如果我缩小页面,我的网页不会居中,有什么提示吗?
- javascript - 在电子事件处理程序中执行 JavaScript 方法
- java - 如何将特定数字分配给特定字母?
- python - 如何根据python中的字典键获取唯一数据
- ios - Xcode 失去与 iPad 的连接