0

我有一个过滤的十六进制网格,我想对其进行分类。

我创建了十六进制

var hexgrid = turf.hexGrid(bbox, cellWidth, units);

我汇总了价值

var aggregated = turf.collect(hexgrid, myGeoJson, 'MyValue', 'NewCol');

其中 myGeoJson 是一个多点 FeatureCollection,MyValue 是一个特征属性,要么为 null 要么 > 0

我过滤了十六进制

var hexFiltered = L.geoJson(aggregated, {
    filter: function(feature, layer) {
        return feature.properties.NewCol.length > 0;
    }
}).addTo(map);

每个十六进制对象都可以使用

console.log(hexFiltered["_layers"]);

output = Object { 49: Object, 51: Object, 52: Object, 53: Object...

然后每个对象都有 .feature.properties.NewCol[n] 并且每个数组都有索引 (0, 1, 2) 和值 (null, 1 +)

如何用数组值的总和对每个十六进制网格进行分类?

我已经用本机 javascript 尝试过这个,但我能实现的只是一个包含每个值的字符串。

var counts = {};
for (var obj in hexFiltered["_layers"]) {
    // Output the id of each obj (hex)
    // console.log("Object: " + obj);
    var cnt = 0;
    for (var i in hexFiltered["_layers"][obj]["feature"]["properties"] ) {
        // print values out as 1 line (i)
        console.log("One line of values :" + hexFiltered["_layers"][obj]["feature"]["properties"][i]);
        // output = One line of values :,,,1,,,,1,1,,1

        // add values
        cnt = cnt + hexFiltered["_layers"][obj]["feature"]["properties"][i];
        console.log(cnt);
        // output = 0,,,1,,,,1,1,,1
    }
    // attach cnt to counts object
    counts += cnt;
}

我哪里错了?有没有更简单的方法?

4

1 回答 1

0

如果你的问题是你得到一个字符串而不是数组值的总和,那么解决方案是迭代数组并单独添加每个元素,而不是尝试将数组添加到整数。

如果添加0 + [1,2,3,4,5],您将获得'01,2,3,4,5'. 您应该做的是添加另一个循环,该循环遍历保存数组的属性并单独添加每个元素。如何做到这一点的一个例子是

    for (var j in hexFiltered["_layers"][obj]["feature"]["properties"]["NewCol"] ) {
        cnt += j
    }

此代码应替换您的第二个循环。我不确定您在代码末尾到底要做什么counts += cnt,因为 counts 是一个对象。如果您只想要一个值列表,那么您可能应该将 counts 设为一个数组 ( counts = []),这样您就可以counts.push cnt代替counts += cnt.

如果这不能回答您的问题,请告诉我,我会更新答案。如果您需要进一步的帮助,请非常具体地说明您的需求。

于 2016-11-23T12:53:08.340 回答