Изменение экземпляра функции по щелчку

#leaflet #leaflet-geoman

#листовка #листовка-геоман

Вопрос:

Я пытаюсь найти способ изменить экземпляр объекта листовки GeoJSON после его добавления на карту.

Это то, чего я хочу достичь:

Импорт данных с помощью L.GeoJSON и я использую pointToLayer для изменения маркера на L.CircleMarker

Теперь я хочу

 layer.on('click', function (e) {
   e.target //Do something here to change it from L.CircleMarker to L.Marker
});
 

Есть идеи, как этого добиться?

Ответ №1:

 var group = L.geoJSON(); // Your geojson group on importing
layer.on('click', function (e) {
   var circlemarker = e.target //Do something here to change it from L.CircleMarker to L.Marker
   var marker = L.marker(circlemarker.getLatLng()).addTo(group);
   marker.feature = circlemarker.feature
   circlemarker.removeFrom(group)
   // Then add the same events to the layer as in pointToLayer
});
 

Комментарии:

1. Если я добавлю marker.on(‘click’, onLayerClick); и попытаюсь запустить его мгновенно, чтобы пользователю не нужно было снова нажимать marker.fire (‘click’) Это работает не так, как ожидалось. Если я заставлю пользователя щелкнуть его во второй раз, он будет работать так, как ожидалось. Есть идеи, почему?

2. Без демонстрационного кода трудно сказать «Нет». Но почему вы не вызываете onLayerClick({target:marker}) напрямую?