分类十六进制网格草皮,传单



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

我用

创建十六进制
var hexgrid = turf.hexGrid(bbox, cellWidth, units);

我用

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

其中myGeoJson是一个多点featurecall和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;
}

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

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

如果加上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.push cnt而不是counts += cnt

如果这不能回答你的问题,让我知道,我会更新答案。如果您需要进一步的帮助,请详细说明您需要什么。

最新更新