Координаты Leaflet.Draw rectangle

Можно ли получить координаты прямоугольника с помощью mouseClick, чтобы у меня были все углы прямоугольника?


person mortenstarck    schedule 07.03.2013    source источник


Ответы (3)


См. Объект события (http://leafletjs.com/reference.html#event-objects):

var map = L.map('map').setView([53.902257, 27.561640], 13);

L.tileLayer('http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png').addTo(map);

var bounds = [[53.912257, 27.581640], [53.902257, 27.561640]];

var rect = L.rectangle(bounds, {color: 'blue', weight: 1}).on('click', function (e) {
    // There event is event object
    // there e.type === 'click'
    // there e.lanlng === L.LatLng on map
    // there e.target.getLatLngs() - your rectangle coordinates
    // but e.target !== rect
    console.info(e);
}).addTo(map);

Используйте e.target.getLatLngs().

person tbicr    schedule 07.03.2013
comment
Пожалуйста, покажите семантику границ, мой ввод {ne:{lat: -23.5601806640625lon: -46.64794921875}, sw:{lat: -23.565673828125,lon: -46.658935546875}}. - person Peter Krauss; 20.12.2018
comment
Спасибо. Это помогло мне спустя годы :) - person Maile Thiesen; 30.12.2020
comment
Хороший маленький фрагмент, когда я пробовал mapBounds.extend(). Просто нарисуйте отдельную рамку для каждого нового набора границ и посмотрите, как они вписываются в карту. Спасибо, +1 - person Mawg says reinstate Monica; 05.04.2021

Leaflet.draw plugin использует стандартный L.Rectangle в Leaflet.

Прямоугольник листовки расширяет многоугольник. Многоугольник расширяет ломаную линию.

Следовательно, чтобы получить координаты прямоугольника Leaflet.draw, вы можете использовать метод Polyline getLatLngs(), который возвращает массив точек на пути.

Пример:

var drawnItems = new L.FeatureGroup();
map.addLayer(drawnItems);

map.on('draw:created', function (e) {

    var type = e.layerType,
        layer = e.layer;

    if (type === 'rectangle') {
        layer.on('mouseover', function() {
            alert(layer.getLatLngs());    
        });
    }

    drawnItems.addLayer(layer);
});
person martynas    schedule 01.08.2014
comment
Вы знаете, почему layer.toGeoJSON (). Geometry.coordinates добавит еще одну координату. - person Spir; 07.07.2015
comment
@Spir: layer.getLatLngs () вернет LatLng-массив незамкнутого многоугольника. layer.toGeoJSON (). geometry.coordinates вернет LngLat-массив ЗАКРЫТОГО многоугольника. (последняя точка - первая точка) - person Stefan Steiger; 20.05.2020
comment
Кроме того, layer.getLatLngs () будет недоступен, если фигура представляет собой круг. Вместо этого у круга будет layer.getLatLng (), но ToGeoJSON (). Geometry.coordinates всегда присутствует. - person Stefan Steiger; 20.05.2020

Следует отметить, что e.layerType содержит создаваемый тип формы.
Такие методы, как getLatLngs и getLatLng, относятся к типу формы.

Это различные типы, разрешенные в слое в соответствии с файлом определения машинописного текста.

Circle | CircleMarker | Marker | Polygon | Polyline | Rectangle;

И возможные значения для e.layerType (согласно файлу определения машинописного текста)

circle, marker, polygon, polyline, rectangle

Таким образом, вы всегда можете получить координаты с помощью e.layer.toGeoJSON (). Geometry.coordinates.
Но вам нужно переключаться между e.layerType-s, поскольку круг geojson не содержит радиуса, вам нужно получить его с помощью getRadius.
Также обратите внимание, что getLatLngs возвращает LatLng -массив замкнутого многоугольника UN, а toGeoJSON (). geometry.coordinates возвращает замкнутый многоугольник с координатами LngLat - массив.

// console.log((<any>e.layer).getLatLngs()); // polyline
// console.log((<any>e.layer).getLatLng()); // circle
// mind the s at the end of the function...


map.on('draw:created', function(e:L.DrawEvents.Created) 
{
    console.log('On draw:created', e.target);
    console.log(e.type, e);


    console.log(e.layerType);
    // console.log((<any>e.layer).getLatLngs()); // polyline
    // console.log((<any>e.layer).getLatLng()); // circle

    // e.layerType // polygon, circle, etc. 

    // polygon 
    // e.layer.getLatLngs()

    // circle
    // e.layer.getLatLng()
    // e.layer.getRadius()


    // e.layer.toGeoJSON().geometry.type // is point if circle 
    // e.layer.toGeoJSON().geometry.coordinates

    let type = e.layerType,
        layer = e.layer;
    drawnItems.addLayer(layer);
});
person Stefan Steiger    schedule 20.05.2020