在要素属性值上过滤GeoJSON

时间:2017-09-29 23:43:05

标签: javascript json geojson

我正在尝试使用要素属性中的值过滤或更好地“拆分”GeoJSON对象,并创建n个新的geoJSON,将它们存储到数组中。

这是我正在研究的GeoJSON:http://www.brainsengineering.com/1.json

我必须通过'Level'属性将其拆分,方法是创建与原始GeoJSON中存在的级别数一样多的新GeoJSONs变量 在上面的示例文件中,有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

{“ type ”:“FeatureCollection”,“ hc-transform ”:{“default”:{“crs”:“+ proj = longlat + ellps = WGS84 + datum = WGS84 + no_defs“}},”功能“:...

有没有办法重新创建保留这些元素的对象?

1 个答案:

答案 0 :(得分: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
    })) + '}');
}

不太优雅,但它有效。有人知道一种更优雅/更有效的方法来获得相同的结果吗?