以前に GIS フォーラム (Alt 下) に投稿したことがありますが、活動はほとんどないので、ここで運を試しています。これは、基本的に、js オブジェクト配列の問題でもあると思います。同様の質問が多数ありますが、対処しなければならないオブジェクト構造に対して機能する解決策を得ることができません。
注意事項はさておき。
問題:解析されたオブジェクト配列内にネストされた (未知の) 数のオブジェクトから返された情報を取得して、人間が判読できる方法で抽出、フォーマット、および表示できるようにします。例えば;
Layer id <--- currently returned as val.layer.id (see snippet)
key1 : value1 <
key2 : value2 <-- returns in console.log as Object at val.properties
key3 : value3 <
Layer id
key1 : value1
key2 : value2
Layer id...
各「features.layer.id」とそれに関連付けられた「features.properties」が必要です。そのキーと値は不明で、レイヤー間で異なります (features.properties にあるオブジェクト)。これらの機能の位置は MapBox で一貫しているため、ここでの解決策は将来のユーザーに適用できるはずです。
現在のコード; コメントアウトされているのは、必要な値にアクセスして表示しようとする私の試みの散在です。「features」要素 ID は情報パネルです。それ以外の場合は、ネストされたオブジェクトが返されます (サンプルを参照)。
concattedjson は現在、最初のレイヤー タイトルの最初の文字でエラー ("unexpected token N") を生成していました。
map.on('click', function (e) {
map.featuresAt(e.point, {radius: 5, layer: lyrlist}, function (err, features) {
if (err) throw err;
var keys = Object.keys(features);
var val = "";
for (var i = 0; i < keys.length; i++) {
val = features[keys[i]];
//document.getElementById('features').innerHTML = '<b>'+val.layer.id+'</b>';
//console.log(val.layer.id,val.properties);
//console.log(val.properties); shows each layer properties on click
//console.log(val.layer.id); shows each layer title on click
//console.log(val);
var lyrid = val.layer.id;
var prop = val.properties;
concattedjson = JSON.stringify(JSON.parse(lyrid).concat(JSON.parse(prop)));
}
document.getElementById('features').innerHTML = concattedjson
//document.getElementById('features').innerHTML = JSON.stringify(val.layer, ['id'], 2);
//document.getElementById('features').innerHTML = JSON.stringify(val.properties, null, 2);
});
});
2 つの「レイヤー」を含む JSON のサンプル
[
{
"layer": {
"id": "Nature Improvement Area",
"minzoom": 7,
"interactive": true,
"paint": {
"fill-opacity": 0.3,
"fill-color": "hsl(0, 24%, 24%)"
},
"type": "fill",
"source": "mapbox://mbbdev.8uf2j3ka",
"source-layer": "lcr_nia_v1_region",
"layout": {
"visibility": "visible"
}
},
"type": "Feature",
"geometry": null,
"properties": {
"NIA_Focu00": "Netherley Brook and Ditton Brook Corridor",
"NIA_Focu01": "INSERT LINK TO PROFILE DOC",
"NIA_Focus_": "07"
},
"id": 16
},
{
"layer": {
"id": "Liverpool City Region",
"minzoom": 6,
"interactive": true,
"paint": {
"fill-opacity": 0.2,
"fill-antialias": true,
"fill-color": "hsl(0, 4%, 40%)"
},
"type": "fill",
"source": "mapbox://mbbdev.67id5f6x",
"source-layer": "lcr_district_boundary_region",
"filter": [
"==",
"$type",
"Polygon"
]
},
"type": "Feature",
"geometry": null,
"properties": {
"AREA_HA": 8618.7,
"NAME": "Knowsley"
},
"id": 1
}
]
- サイト: http://www.activenaturalist.org.uk/lcren/imap/mb.html (クリックすると features 要素の features オブジェクトの構造が表示されます)。
- 同様: mapbox GLレイヤーに問題があります。 アクセス/処理 (ネストされた) オブジェクト、配列、または JSON
- Alt: https://gis.stackexchange.com/questions/181005/extract-geojson-properties-dynamically-with-mapbox-gl