我有美国州topojson和加拿大州topojson我想将它们合并为单个文件。有人可以告诉我如何将两个文件合并到单个topojson文件中。我在创建地图时使用墨卡托投影
答案 0 :(得分:4)
我遇到了类似的问题,最后将topojson文件转换为geojson,将它们与geojson-merge合并,最后转换为topojson。
由于加拿大和美国在topojson中有一些边界(arcs
),它应该减少文件总量。
for item in "us" "ca"
do
topo2geo tracts=$item-geo.json < $item-topo.json
done
geojson-merge *-geo.json > combined-geo.json
geo2topo tracts=combined-geo.json > combined-topo.json
答案 1 :(得分:-1)
这不是解决合并topojson文件的问题,而是解决了问题的核心问题
在这里参加聚会有点晚,但是我只是想做同样的事情。我可以很容易地找到我们topo和加拿大topo,但是两者都不在一起。然后,我以某种方式在Google上搜索了正确的内容,并偶然发现了Merging TopoJSON States块模块教程。事实证明,该教程使用了美国和加拿大的地图。完善!这就是我所需要的!如果您查看网络流量,则可以获取topo json的URL。不幸的是,尚未设置CORS,因此您必须下载文件并制作自己的副本才能使用它。但是,它可以完美运行:
这是JavaScript(/topo
端点只是调用python端点,该端点返回我从该块复制并粘贴的文件)
function generateMap() {
return new Promise((resolve, reject) => {
d3.json('/topo').then(_topo => {
console.log(_topo);
const height = 1500;
const width = 960;
const path = d3.geoPath().projection(null);
const svg = d3.select('body').append('svg')
.attr('width', width)
.attr('height', height);
svg.append('path')
.datum(topojson.feature(_topo, _topo.objects.usa_canada))
.attr('class', 'state')
.attr('d', path);
svg.append('path')
.datum(topojson.mesh(_topo, _topo.objects.usa_canada, (a, b) => a !== b))
.attr('class', 'state-boundary')
.attr('d', path);
resolve({ path: path, svg: svg });
});
});