#canvas #leaflet #html5-canvas #geojson #react-leaflet
#холст #листовка #html5-холст #geojson #реакция-листовка
Вопрос:
Я использую React Leaflet для отображения карты листовки и Leaflet.Path.Drag для перетаскивания нескольких полигонов вместе. Вот демонстрация.
У меня много полигонов, и я хотел бы перетащить несколько полигонов с помощью параметров preferCanvas. Если я попытаюсь перетащить несколько полигонов с preferCanvas
помощью, это не сработает. Перетаскивание создает дублирующиеся полигоны на холсте, и полигоны не видны во время перетаскивания.
Ответ №1:
Так что я вроде как обманул, чтобы заставить это работать. Я заметил, что при перетаскивании фигур старые полигоны не очищаются, если вы не сбросите вид карты с помощью панорамирования или масштабирования. Таким образом, в конце вашего события перетаскивания вы можете просто установить вид карты таким, какой он уже есть, и он очистит старые фигуры для вас:
layer.on("dragend", function (e) {
setTransform({ matrix: layer.dragging._matrix, end: true });
const map = layer._map;
map.setView(map.getCenter());
});
Рабочий codesandbox
Комментарии:
1. Спасибо! Это выглядит намного лучше, но есть проблема, из-за которой полигоны не видны при перетаскивании.
2. Это правда, но, насколько я могу судить, эта проблема существует даже без моего изменения. Прямо сейчас вы
handleFeature
применили его к каждому объекту GeoJSON, вам также необходимо применить его к результирующей форме границ, которая содержит первые две фигуры. Однако это немного другое обсуждение. Кроме того, к вашему сведению, вы можете заменить большую часть своей логики методом L.LatLngBounds extends , чтобы получить общие границы обоих.3. Спасибо за совет
LatLngBounds
. Что вы подразумеваете подhandleFeature
необходимостью применения к результирующей форме границ? У него уже естьhandleFeature
какое установленноеtransform
состояние.