如何将多个topojson文件合并到单个topojson文件中

时间:2015-10-28 11:56:48

标签: topojson

我有美国州topojson和加拿大州topojson我想将它们合并为单个文件。有人可以告诉我如何将两个文件合并到单个topojson文件中。我在创建地图时使用墨卡托投影

2 个答案:

答案 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,因此您必须下载文件并制作自己的副本才能使用它。但是,它可以完美运行:

enter image description here

这是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 });
        });
    });