问题描述
我有一幅旧的topojson格式的地图,曾经与Vega-Lite一起使用。现在我们只在this editor gist.
中看到一个紫色正方形我用相同的代码重建了地图,但是在vega编辑器和saved as a gist here中更新了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的Mike Bostock