2015-11-25 74 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,其中包括「縣」,「州」和「陸地線」三個對象。而我只需要國家。 –

相關問題