代码之家  ›  专栏  ›  技术社区  ›  Giox

过滤要素属性值上的GeoJSON

  •  2
  • Giox  · 技术社区  · 7 年前

    我正在尝试过滤,或者更好地通过功能属性中的值“拆分”GeoJSON对象,并创建一个新的GeoJSON,将它们存储到一个数组中。

    http://www.brainsengineering.com/1.json

    以下是部分工作的代码:

    //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

    {" hc变换 特征

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

    1 回复  |  直到 7 年前
        1
  •  0
  •   Giox    7 年前

    我目前通过将缺失的字符串连接到字符串化对象,然后将整个新字符串解析回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
        })) + '}');
    }
    

    虽然不那么优雅,但很管用。有人知道一种更优雅/高效的方法来实现同样的结果吗?