使用mapbox gl js动态向geoJSON数组添加标记
我见过几个带有多个标记的Mapbox地图示例,但是标记位置是预先编程到geoJSON数组中的,比如一个 我希望能够通过一种方法向地图添加一个标记,并保留现有标记。这些标记将通过内置的地理编码器搜索创建。使用旧的mapbox.js,似乎可以做到以下几点:使用mapbox gl js动态向geoJSON数组添加标记,mapbox,geojson,mapbox-gl-js,Mapbox,Geojson,Mapbox Gl Js,我见过几个带有多个标记的Mapbox地图示例,但是标记位置是预先编程到geoJSON数组中的,比如一个 我希望能够通过一种方法向地图添加一个标记,并保留现有标记。这些标记将通过内置的地理编码器搜索创建。使用旧的mapbox.js,似乎可以做到以下几点: L.geoJson(geojsonFeature, { ... }).addTo(map); 但是,我似乎找不到使用mapbox gl js的此类方法/功能的文档。我希望能够跟踪这些标记,并像这样编辑/删除它们。我错过什么了吗 下面是我当前的代
L.geoJson(geojsonFeature, { ... }).addTo(map);
但是,我似乎找不到使用mapbox gl js的此类方法/功能的文档。我希望能够跟踪这些标记,并像这样编辑/删除它们。我错过什么了吗
下面是我当前的代码,它只适用于一个标记。如果添加新标记,它当前将替换旧标记。我想继续从geocoder钩子中添加它们:
mapboxgl.accessToken = 'xxx';
var map = new mapboxgl.Map({
container: 'map',
style: 'mapbox://styles/mapbox/streets-v9',
center: [-79.4512, 43.6568],
zoom: 13
});
var geocoder = new mapboxgl.Geocoder({
container: 'geocoder-container'
});
map.addControl(geocoder);
map.on('load', function() {
map.addSource('single-point', {
"type": "geojson",
"data": {
"type": "FeatureCollection",
"features": []
}
});
map.addLayer({
"id": "point",
"source": "single-point",
"type": "circle",
"paint": {
"circle-radius": 5,
"circle-color": "#007cbf"
}
});
var el = document.createElement('div');
el.id = 'marker';
var markerObject;
map.addControl(new mapboxgl.NavigationControl());
geocoder.on('result', function(ev) {
var placeName = JSON.stringify(ev.result.place_name);
console.log(placeName);
var popup = new mapboxgl.Popup({offset:[0, -30]})
.setText(ev.result.place_name);
markerObject = new mapboxgl.Marker(el, {offset:[-25, -25]})
.setLngLat(ev.result.geometry.coordinates)
.setPopup(popup)
.addTo(map);
});
});
此代码由以下行组成
var el = document.createElement('div');
el.id = 'marker';
var markerObject;
在geocoder.on('result'
方法之外。如果希望在每次回调提供给geojson.on时添加新标记('result'
激发,那么这就是问题所在:您试图对多个标记使用相同的div
元素。Mapbox GL JS不会为您克隆或复制该元素:新mapboxgl.Marker
的元素参数应该是新元素
因此,要解决此问题,您需要将上述行移到
geocoder.on('result'
的回调中。此代码由以下行构成
var el = document.createElement('div');
el.id = 'marker';
var markerObject;
在geocoder.on('result'
方法之外。如果希望在每次回调提供给geojson.on时添加新标记('result'
激发,那么这就是问题所在:您试图对多个标记使用相同的div
元素。Mapbox GL JS不会为您克隆或复制该元素:新mapboxgl.Marker
的元素参数应该是新元素
因此,要解决这个问题,您需要将上述行移到
geocoder.on的回调内部(“结果”
太棒了,谢谢!还有一个是/否的问题,有没有可能实现与本文类似的功能?太棒了,谢谢!还有一个是/否的问题,有没有可能实现与本文类似的功能?