2017-09-29 8 views
1

フィーチャプロパティの値でフィルタリングしたり、GeoJSONオブジェクトをよりよく分割したり、新しいgeoJSONを作成して配列に格納しようとしています。私は、元にGeoJSON に存在するレベルの数と同じ数の新しいGeoJSONs変数を作成することによって、「レベル」プロパティでそれを分割する必要がありhttp://www.brainsengineering.com/1.jsonGeoJSONのフィーチャプロパティ値のフィルタリング

:ここ

は、私が働いているにGeoJSONです上記の例のファイルには、4つのレベルがあります。ここで

が部分的に取り組んでいるコードです:

//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 
    }); 
} 
私は最初のオブジェクトを失うようにGeoJSONを私が正しく配列にレベルによって分割機能を得るが、彼らは有効ではないので、このコードは、部分的に動作します

{ "タイプ ":" れるFeatureCollection" は、 "をHC-変換 ":{" デフォルト ":{" CRS": "+がproj = longlat + ellps = WGS84 +データム= WGS84 + no_defs"}} 、 "features":...

これらの要素を保持するオブジェクトを再作成する方法はありますか?

答えて

0

私は現在、JSONオブジェクトにまったく新しい文字列を文字列化されたオブジェクトに不足している文字列を連結して、戻って解析することで解決しました:

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 
    })) + '}'); 
} 

ので、エレガントされないが、それは動作します。誰かが同じ結果を達成するためのよりエレガントで効率的な方法を知っていますか?

関連する問題