Это довольно сложно сделать, потому что единственное, что позволяет вам правильно идентифицировать маркер, это положение широты/долготы. Поэтому, если вы попытаетесь сбросить маркер на маркер с помощью lat/lng 0,0, вам нужно сбросить его точно на эту позицию, которая окажется очень трудной задачей.
Вы могли бы сделать что-то вроде толерантности к нему, но этот толерант должен измениться в зависимости от уровня масштабирования, который, я думаю, будет очень трудно получить. Вы могли бы сделать что-то вроде этого:
// Drag has ended
marker.on('dragend', function (e) {
// Get position of dropped marker
var latLng = e.target.getLatLng();
// Object to hold nearest marker and distance
var nearest = {};
// Loop over layer which holds rest of the markers
featureLayer.eachLayer(function(layer) {
// Calculate distance between each marker and dropped marker
var distance = latLng.distanceTo(layer.getLatLng());
// Set the first as nearest
if (!nearest.marker) {
nearest.marker = layer;
nearest.distance = distance;
// If this marker is nearer, set this marker as nearest
} else if (distance < nearest.distance) {
nearest.marker = layer;
nearest.distance = distance;
}
});
});
Пример на Plunker: http://plnkr.co/edit/GDixNNDGqW9rvO4R1dku?p=preview
Теперь nearest
объект будет содержать маркер, который находится ближе всего к вашей позиции перетаскивания. Ближайшее расстояние может варьироваться в зависимости от уровня масштабирования. Когда вы достигли уровня масштабирования 1, может показаться, что вы сбросили его точно на другом маркере, но вы можете находиться за тысячи миль. При масштабировании 18 разница будет намного меньше, но сбросить ее точно на том же lat/lng практически невозможно. В противном случае вы могли бы просто сравнить все latlng против упавшего latlng, но это не будет работать на практике.
Так что теперь у вас есть ближайший маркер, и это расстояние до упавших маркеров можно реализовать толерантность, то вдоль линий: if (nearest.distance < (x/y))
где x
является расстоянием и y
zoomlevel. Вам нужно будет поиграть, чтобы поправиться. После того, как вы определили правильный допуск, вы можете реализовать его прямо вместе с сравнением расстояния в обработчике.
Удачи, надеюсь, это поможет