Как получить в переменной тип геометрии из панели инструментов рисования листовки

Я использую плагин для рисования листовок в своем приложении Angular, в котором уже установлена ​​листовка.

Я хотел бы получить переменную, если выбранная геометрия на панели инструментов представляет собой точку, линию, многоугольник и т. д.

В угловом компоненте у меня есть эта функция для получения координат, но мне нужно знать геометрию:

this.globals.map.addControl(drawControl).on('click',onClick);
    function onClick(e) {
        var lat;
        var lng;
        var coordsPair=[]
        lat=e.latlng.lat;
        lng=e.latlng.lng
        coordsPair.push(lat,lng)
        polygon.push(coordsPair);
        coordsPair=[];
        console.log(polygon);
    }
}

Теперь я могу получить только координаты, но я не могу получить тип геометрии, нажав на панель инструментов.


person Carlos FTG    schedule 01.11.2019    source источник


Ответы (2)


Я нашел решение этой проблемы, я не уверен, что это лучшее решение, но оно работает.

Я получаю drawControl в переменной:

drawControl._toolbars.draw._modes.polygon.handler._markers

И затем, нажав на карту, я могу управлять геометрией, делая это:

if(drawControl._toolbars.draw._modes.polygon.handler._markers!=undefined){
         polygonButton=drawControl._toolbars.draw._modes.polygon.handler._markers[counter]._latlng;
          lat=polygonButton.lat;
         lng=polygonButton.lng;
         geometry='POLYGON'
      }else if(drawControl._toolbars.draw._modes.polyline.handler._markers!=undefined){
        polylineButton=drawControl._toolbars.draw._modes.polyline.handler._markers[counter]._latlng;
        lat=polylineButton.lat;
        lng=polylineButton.lng;
        geometry="LINESTRING"
      } else if(drawControl._toolbars.draw._modes.marker.handler._marker!=undefined){
        markerButton=drawControl._toolbars.draw._modes.marker.handler._marker._latlng;
        lat=markerButton.lat;
        lng=markerButton.lng;
        geometry="POINT"
      }

Если вы выбрали геометрию, _marker имеет координаты, а другие нет, поэтому таким образом вы можете управлять выбранной геометрией.

person Carlos FTG    schedule 03.11.2019

Прошло некоторое время с тех пор, как я использовал leaflet.draw, но я думаю, что вы хотите послушать draw:created. Я думаю, что это событие дает вам тип созданного слоя.

Я разветвил чью-то скрипту и подключился к событию draw:created для тестирования, и событие появляется, чтобы дать вам тип в виде строки, а также созданный объект.

{layer: i, layerType: "polyline", type: "draw:created", target: i, sourceTarget: i}
{layer: i, layerType: "polygon", type: "draw:created", target: i, sourceTarget: i}
person pk.    schedule 03.02.2021