2016-10-22 5 views
0

У меня есть фильтрованная гексагональная сетка, которую я хотел бы классифицировать.Классифицировать гексагонные сетки с Turf, Leaflet

Я создал гекс с

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

Я агрегировать значения с

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

, где myGeoJson является многоточечным FeatureCollection а и MyValue является свойством функции либо нулевым или> 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 [п] и каждый массив имеет индекс (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 + [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.push cnt вместо counts += cnt.

Если это не ответит на ваш вопрос, дайте мне знать, и я обновлю ответ. Пожалуйста, будьте очень конкретны в том, что вам нужно, если вам нужна дополнительная помощь.