2015-11-25 43 views
0

使用:如何提取一个对象在一个多对象TopoJSON文件到另一个单独的TopoJSON文件

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

我们可以将两个foo.jsonbar.jsonfoobar.json

以上foobar.json看起来是像这样:

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

现在,我有foobar.json,我怎样才能从中提取foo.json

注:

我不需要TopoJSON转换为GeoJSON的。 foob​​ar.json也可以是TopoJSON格式。我只需要减小foobar.json的大小并删除'bar'对象及其相应的弧线。

例如,这里的us.json https://gist.github.com/mbostock/4090846#file-us-json包括三个对象:“县”,“州”和“陆线”。而我只需要国家。

回答

0

您可以使用客户端库从您的TopoJSON对象提取foo。这里假设foobar握着你的TopoJSON对象:

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

现在变量foobar保持功能/最初的FeatureCollection存储在各自的文件。查看存储库的维基为客户方API的参考:意见和问题,编辑后

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

编辑:

另一种选择可能是手动删除从objects对象的其他属性你的TopoJSON。如何做到这一点取决于你所掌握的语言。在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

+0

感谢这个客户端解决方案。但我真的需要使用命令行界面来解决这个问题。我需要缩小json文件并删除那些不必要的部分。 –

+0

既然你在commandline上工作,是不是一个选项,简单地不捆绑jsons在第一个地方,并创建单独的topojson对象?如果没有,您可以使用Node在服务器端使用客户端库。坦率地说,使用serverside命令行界面是不可能的。它的目的是将GeoJSON编码为TopoJSON。它无法将TopoJSON解码为GeoJSON。这就是客户端图书馆的用途。 – iH8

+0

问题是我没有foo.json和bar.json。我只有foobar.json。例如,us.json在这里https://gist.github.com/mbostock/4090846#file-us-json,其中包括“县”,“州”和“陆地线”三个对象。而我只需要国家。 –

相关问题