20

是否可以在 mouseClick 上获取矩形的坐标,所以我有矩形的所有角?

4

4 回答 4

19

查看事件对象(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().

于 2013-03-07T12:09:09.247 回答
11

Leaflet.draw插件使用标准Leaflet 的 L.Rectangle

Leaflet 的矩形扩展了 Polygon。Polygon 扩展Polyline

因此,为了获取 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);
});
于 2014-08-01T14:08:04.043 回答
1
map.on(L.Draw.Event.CREATED, function (e) {

    var layer = e.layer;
    drawnItems.addLayer(layer);

    console.log(layer.getLatLngs())

});
于 2019-06-18T06:51:23.713 回答
0

应该注意的是 e.layerType 包含正在创建的形状类型。
getLatLngs 和 getLatLng 等方法特定于 shapetype。

根据打字稿定义文件,这些是层中允许的不同类型

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数组,而 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);
});
于 2020-05-20T10:06:28.050 回答