我有一个过滤的十六进制网格,我想分类。
我用
创建了十六进制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;
}
我哪里错了?有没有更简单的方法?
答案 0 :(得分: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
的代码末尾要做什么,因为count是一个对象。如果您只想要一个值列表,那么您应该对一个数组(counts = []
)进行计数,这样您就可以counts.push cnt
而不是counts += cnt
。
如果这不能回答你的问题,请告诉我,我会更新答案。如果您需要进一步的帮助,请详细说明您的需求。