首页 > 解决方案 > 现有的 vega-lite 地图突然看起来非常放大 - 发生了什么?

问题描述

我有一张曾经与 Vega-Lite 一起使用过的旧 topojson 格式的地图。现在我们在这个编辑器要点中只看到一个紫色方块。

我已经用相同的代码重建了地图,但在 vega 编辑器中更新了 topojson 并在此处保存为要点

在新的 vega 版本中,我似乎需要对我的 topojson 文件进行不同的格式化,首先是弧,比如 mapshaper.org 导出输出。为什么是这样?它破坏了几个现有的网络地图,我花了几个小时才弄清楚。似乎我可以通过更改工作流程来修复它,但我很好奇。

标签: formattopojsonvega-lite

解决方案


Topojson 数据遵循投影数据的左手规则(外环顺时针方向,内环逆时针方向),其中您的 topojson 文件中的数据根据​​右手规则构造(外环逆时针方向和顺时针方向用于内环)。您的多边形的顺序似乎可以忽略不计,但它定义了哪个部分在多边形的“内部”和“外部”。

你可以做两件事:

  1. 不要使用地理投影,而是使用类似笛卡尔的identity投影。
  2. 强制您的源数据按正确的顺序排列。

示例 1:

"projection": {"type": "identity", "reflectY": true},

见 Vega 编辑器

在此处输入图像描述


示例 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')

见 Vega 编辑器

在此处输入图像描述


我之前为 Altair 和 Python Topojson 写过一些关于它的文章

和迈克博斯托克为 D3


推荐阅读