13

topojsonを使用して既存のGeoJSONデータセットを変換していますが、プロパティが保持されていません。これは標準のGeoJSON形式に従い、ジオメトリと同じレベルの「プロパティ」オブジェクトにプロパティを配置します(以下のスニペット)が、topojsonが正常に完了すると、使用および表示できる有効なtopojsonデータファイルが作成されます。マップですが、ファイルのどこにもプロパティがありません。プロパティを指定しませんでした。デフォルトの動作では、その場合はすべてのプロパティが保持されるため、困惑しています。

{"type": "Feature", "geometry": {"type":"MultiLineString","coordinates":[[[12.06,37.97],[12.064,37.991]],[[12.064,37.991],[28.985,41.018]]]}, "properties": {"pair": 50129,"direction": 0,"month": 12,"priority": 0,"expense": 4.854,"duration": 20.423,"length": 2950.524}}

編集:topojsonタグを登録するのに十分なポイントもありません。そのため、そのタグが作成されるまで、これをD3としてリストします。

4

4 に答える 4

21

オプションを使用してい-pますか?

topojson in.json -o out.json-すべてのプロパティを削除します

topojson in.json -o out.json -p-すべてのプロパティを保持します

topojson in.json -o out.json -p prop1,prop2-prop1とprop2のみを保持します

于 2013-01-04T15:10:19.403 に答える
2

@ ow3nが言ったように、geo2topoは、オリジナルのプロパティを編集する方法を提供しなくなりました。したがって、@james246のすばらしい答えは最新のパッケージでは機能しなくなりました。

しかし、私はついにndjson-cliを使用してそれを行う方法を理解しました。githubの問題スレッドでのMikeBostock自身の回答のおかげで、これはほとんどコピーペーストなので、オリジナルを見るのをためらってください。

最初に新しいパッケージをインストールします。

npm i -g shapefile ndjson-cli topojson-client topojson-server topojson-simplify

次に、3つのステップで:

ステップ1:シェープファイルを改行で区切られたGeoJSON機能に変換します。

shp2json -n original.shp > myfile.ndjson

ステップ2:GeoJSONプロパティを再定義します。名前を変更することもできます。

ndjson-map 'd.properties = {prop1: d.properties.prop1, p2: d.properties.prop2}, d' \
  < myfile.ndjson \
  > myfile-filtered.ndjson

ステップ3:改行で区切られたGeoJSONをTopoJSONに変換します。

geo2topo -n myfile-filtered.ndjson > myfile-topo.json


元のファイルがもうない場合は、 ndjson-split.shpを使用して実際の.jsonファイルを改行で区切られたGeoJSON機能に変換できます。

 ndjson-split 'd.features' \
  < myfile.json \
  > myfile.ndjson

次に、手順2の指示に従います。

于 2018-09-05T16:13:22.980 に答える
1

topojsonのこの関数は、geo2topoに移動され、元関数のプロパティを編集する方法を提供しなくなりました。

入力フィーチャオブジェクトのプロパティと識別子はすべて出力に伝播されます。プロパティを変換またはフィルタリングする場合は、コマンドラインカートグラフィーに示されているようにndjson-cliを試してください。

ndjson-cliを使用してコマンドラインですべてのプロパティを編集するよりも、独自のスクリプトを作成する方が簡単であることがわかりました。

/**
 *  Remove unwanted geojson feature properties
 */

var fs = require('fs');

var inputFile = 'input.geojson',
    outputFile = 'output.geojson',
    remove = ["properties","to","remove"];

function editFunct(feature){
    feature.TID = feature.properties.TID; // set the TID in the feature
    return feature;
}

removeGeojsonProps(inputFile,outputFile,remove,editFunct);

function removeGeojsonProps(inputFile,outputFile,remove,editFunct){

    // import geojson
    var geojson = JSON.parse(fs.readFileSync(inputFile, 'utf8'));

    // for each feature in geojson
    geojson.features.forEach(function(feature,i){

        // edit any properties
        feature = editFunct(feature);

        // remove any you don't want
        for (var key in feature.properties) {   

            // remove unwanted properties
            if ( remove.indexOf(key) !== -1 )
                delete feature.properties[key];
        }
    });

    // write file
    fs.writeFile(outputFile, JSON.stringify(geojson), function(err) {
        if(err) return console.log(err);
        console.log("The file was saved!");
    }); 
}
于 2017-03-16T11:28:31.583 に答える
1

私もこの問題にぶつかりましたが、@james246の答えはうまくいきませんでした。しかし、私は同様に単純な解決策を見つけました。

プロパティデータは、兄弟ファイルのフォルダーからソース.shpファイルを削除した場合にのみ削除されます。コマンドを適用する前に、.shpファイルと.dbfファイルが同じフォルダーにあることを確認してくださいshp2geo。(.dbfファイルにはプロパティデータが含まれています。)

のような条件を適用する必要はありませ-pん。デフォルトのコマンドはプロパティを保持します。

于 2017-11-29T07:21:08.137 に答える