0

分類したいフィルター処理された 16 進グリッドがあります。

で六角形を作成しました

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

で値を集計しました

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

ここで、myGeoJson はマルチポイント FeatureCollection であり、MyValue は null または > 0 の機能プロパティです

16進数をフィルタリングしました

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

各 hex オブジェクトには次のようにアクセスできます

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

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

各オブジェクトには .feature.properties.NewCol[n] があり、各配列にはインデックス (0、1、2) と値 (null、1 +) があります。

配列値の合計で各 16 進グリッドを分類するにはどうすればよいですか?

ネイティブの 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
    }

このコードは、2 番目のループを置き換える必要があります。counts += cntcounts はオブジェクトであるため、コードの最後で を使用して何をしようとしているのか正確にはわかりません。値のリストだけが必要な場合は、counts を配列 ( ) にして、代わりにcounts = []できるようにする必要があります。counts.push cntcounts += cnt

これがあなたの質問に答えない場合はお知らせください。答えを更新します。さらにサポートが必要な場合は、必要なものを具体的に記入してください。

于 2016-11-23T12:53:08.340 に答える