タイトルはかなり私がやろうとしていることを述べています。マップボックス内の既存のレイヤーにソースを追加するGL
マップ上のマーカーのバックエンドとしてFirebaseを使用しており、on('child_added')
メソッドを使用してこれらを監視しています。データベース内の特定の場所にあるノードごとに、on('child_added')
が1回発射されます。
これは、作成される新しいノードにも当てはまります。したがって、データベースに追加されるときにマップに新しいマーカーを非同期的に追加するのに最適です。
マップ上にこれらを表示するには、マップボックスGLでデータをgeojson
に変換し、ソースを作成してこのソースをレイヤーに追加する必要があります。下のコードはこれを示しており、地図上に実際にマーカーを表示しています。
markersRef.on('child_added', function(childSnapshot) { //fires once for every child node
var currentKey = childSnapshot.key; //the key of current child
var entry = childSnapshot.val(); //the value of current child
//creates a geojson object from child
var geojson = {
"type": "FeatureCollection",
"features": [{
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [entry.position.long, entry.position.lat]
}
}],
"properties": {
title: entry.title,
text: entry.text
}
};
//creates a source with the geojson object from above
map.addSource(currentKey, { //currentKey is the name of this source
"type": "geojson",
"data": geojson,
cluster: true //clusters the points in this source
});
//adds the source defined above to a layer that will be displayed on a map
map.addLayer({
"id": currentKey, // Sets id as current child's key
"source": currentKey, // The source layer defined above
});
});
問題は、マーカーが個別のソースにあり、マーカーが異なるレイヤーに表示されることです。したがって、私はそれらをクラスター化することはできません。それらを検索します。
私が探しているのはです。既存のレイヤーにソースを追加する方法です。これにより、on('child_added')
メソッド以外のレイヤーを作成し、このレイヤーにソースを追加することができます。
私はマップボックスGLドキュメントを見ましたが、そこでは私がこれを行うことができる何かを見つけることができません。この点でmapbox jsに比べて非常に限られているようです。
これはかなり重要な機能だとわかりましたが、なぜこれができないのか分かりません。あなたの中には回避策があるか、マップボックスGLの地図にマーカーを非同期的に追加する方法があることを願っています。
これは今のところ最良のソリューションだと私は信じています。私はMapboxに連絡を取りやめたが、これは実際に彼らの提案だった。私はそれが動作すると思うが、私はそれが非常に非効率的でなければならないと信じ、特に大きなデータセットで。とにかく、あなたの返事をありがとう!私はあなたが別の解決策を見つけたら投稿しています - 同じことをしてください:) –
mapboxGLが自動的に以前のデータから新しいものを読み込んで、必要なもののみを更新する場所を読んでいるようです。 – shongololo