Сохранение недвижимости TopoJSON

Я использую 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}}

edit: у меня также недостаточно точек для регистрации тега topojson, поэтому я буду перечислять это как D3, пока не будет создан этот тег.

Ответ 1

Эта функция в topojson теперь перемещена в geo2topo и больше не предоставляет способ редактировать свойства оригинала.

Любые свойства и идентификаторы объектов входных объектов распространяются на выход. Если вы хотите преобразовать или фильтровать свойства, попробуйте ndjson-cli, как показано в картографии Command-Line.

Я нашел, что было легче написать собственный script, чем редактировать все свойства в командной строке, используя 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!");
    }); 
}

Ответ 2

Используете ли вы параметр -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

Ответ 3

Я тоже попал в эту проблему, но ответ @james246 не помог мне. Однако я нашел такое же простое решение.

Данные свойств удаляются только в том случае, если вы удаляете исходный .shp файл из своей папки из родственных файлов. Убедитесь, что файлы .shp и .dbf находятся в одной папке, прежде чем применять команду shp2geo. (Файл .dbf содержит данные свойств.)

Нет необходимости применять условие типа -p или что-то еще; команда по умолчанию сохраняет свойства.