2017-09-29 2 views
1

Ich versuche, ein GeoJSON-Objekt durch einen Wert in einer Featureeigenschaft zu filtern oder besser zu "teilen" und ein neues geoJSON zu erstellen, das sie in einem Array speichert.Filtern von GeoJSON auf einem Feature-Eigenschaftswert

hier ist die GeoJSON Ich arbeite an: http://www.brainsengineering.com/1.json

ich es Eigentum von ‚Niveau‘ aufgeteilt müssen, um so viele neue GeoJSONs Variablen wie die Anzahl der Ebenen in der ursprünglichen GeoJSON In der Schaffung über Beispieldatei gibt es 4 Ebenen. Hier

ist der Code, teilweise funktioniert:

//geoData is the variable holding the GeoJSON 
var featureCount = geoData.features.length; 
var maxLevel; 
var geoByLevel = []; 

//retrieve the maximum number of levels 
for (var i = 0; i < featureCount; i++) { 
    if (geoData.features[i].properties.Level > maxLevel) { 
     maxLevel = geoData.features[i].properties.Level; 
    } 
} 

//Split geoData content into the geoByLevel array by level 
for (var i = 1; i <= maxLevel; i++) { 
    geoByLevel[i-1] = geoData.features.filter(function (el) { 
      return el.properties.Level == i 
    }); 
} 

Dieser Code teilweise funktioniert, weil ich richtig die Eigenschaften von Ebenen in das Array aufgeteilt, aber sie sind nicht gültig GeoJSON als ich die ersten Objekte verlieren

{ "Typ ":" FeatureCollection", "hc-Transformation ": {" default ": {" crs": "+ proj = longlat + ellps = WGS84 + Bezug = WGS84 + no_defs"}} , "Funktionen": ...

Gibt es eine Möglichkeit, die Objekte, die auch diese Elemente enthalten, neu zu erstellen?

Antwort

0

ich derzeit von verketten der fehlenden Saiten auf das Zeichenfolge Objekt gelöst habe und dann die neue Zeichenfolge in ein JSON-Objekt Parsen zurück:

for (var i = 1; i <= maxLevel; i++) { 
    geoByLevel[i - 1] = JSON.parse('{"type":"FeatureCollection","hc-transform": {"default": {"crs": "+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs"}},"features":' + 
     JSON.stringify(geoData.features.filter(function (el) { 
     return el.properties.Level == i 
    })) + '}'); 
} 

Nicht so elegant, aber es funktioniert. Jemand kennt eine elegantere/effizientere Methode, um das gleiche Ergebnis zu erzielen?

Verwandte Themen