2016-03-29 12 views
0

Weiß jemand, ob es möglich ist, TopoJSON-Geometrien mit einer bestimmten Eigenschaft in Multi-Geometrien zu gruppieren?Group TopoJSON-Geometrien durch eine gegebene Eigenschaft

Zum Beispiel, wenn ein TopoJSON mit den Höhenlinien eines Bereichs angegeben wird, sollte es möglich sein, Geometrien mit derselben Höhe zu gruppieren, wobei die Eigenschaften beibehalten werden.

Ich fand dies in der TopoJSON Dokumentation: https://github.com/mbostock/topojson/blob/master/bin/topojson-group

ich es getestet, um die ID für die verschiedenen Erhebungen verwendet, aber die Ausgabe bewahrt nicht die Eigenschaften (auch die Parameter -p verwenden).

Antwort

0

Verwenden Sie topjson.js, um Topojson in Geojson-Features zu konvertieren. Dann können Sie die Features basierend auf der Höhe gruppieren. Sie können geojson-groupby verwenden, um basierend auf beliebigen Attributen zu gruppieren. Verwenden Sie dann mutligeojson, um die Geometrien mit MultiGeometry zu kombinieren.

var features = [f1, f2, ..,fn] 
var grouped = GeoJSONGroupBy(features, 'properties.elevation'); 
// grouped is 
// { 
// '100': [f1, f3, ..], 
// '200': [f5, f8, f6, ..], 
//  .... 
// } 
var merged = {}; // final output merged with geometry and other attributes 
Object.keys(grouped).reduce(function(merged,groupKey) { 
    var group = grouped[groupKey]; 
    var reduced = { 
    geomCollection: [] 
    attributes: { 
     elevation: group[0].attributes.elevation, 
     length: 0 // any other that you want to include 
    } 
    }; 
    group.reduce(function(reduced, cur) { 
    reduced.geomCollection.push(cur.geometry); 
    reduced.attributes.length += length(cur.geometry); //length functon 
    },reduced); 
    return { 
    type: 'Feature', 
    geometry: multigeojson.implode(reduced.geomCollection), 
    attributes: reduced.attributes 
    } 
},merged);