如何将多对象TopoJSON文件中的一个对象提取到另一个单独的TopoJSON



使用:

topojson -o foobar.json -- foo.json bar.json

我们可以将两个foo.jsonbar.json组合成foobar.json:

上面的foobar.json看起来像这样:

{
    "type": "Topology",
    "transform": …,
    "objects": {
        "foo": …,
        "bar": …
    },
    "arcs": …
}

现在,我有foobar.json,如何从中提取foo.json

注:

我不需要将TopoJSON转换为GeoJSON。foobar.json也可以是TopoJSON格式。我只需要缩小foobar.json的大小,并删除"bar"对象及其相应的圆弧。

例如,这里的us.jsonhttps://gist.github.com/mbostock/4090846#file-usjson,包括三个对象:"countries"、"states"one_answers"landlines"。我只需要州。

您可以使用客户端库从TopoJSON对象中提取foo。假设foobar在这里保存您的TopoJSON对象:

var foo = topojson.feature(foobar, foobar.objects.foo),
    bar = topojson.feature(foobar, foobar.objects.bar);

现在,变量foobar保存最初存储在各自文件中的Feature/FeatureCollection。请参阅存储库维基上的客户端API参考:

https://github.com/mbostock/topojson/wiki/API-Reference#client-api

评论和问题编辑后编辑:

另一种选择可能是手动从TopoJSON中的objects对象中删除其他属性。如何做到这一点取决于您可以使用的语言。在php中,例如:

$string = file_get_contents('foobar.json');
$topojson = json_decode($string);
unset($topojson->objects->bar);
$string = json_encode($topojson);
file_put_contents('foo.json', $string);

问题是,之后TopoJSON中会有未使用的弧,但据我所知,您可以使用命令行接口的prune方法修剪这些弧:

从指定拓扑中删除任何未使用的圆弧。

https://github.com/mbostock/topojson/wiki/API-Reference#prune

最新更新