3

我正在使用 Leaflet 和 Leaflet PM 及其折线工具来创建折线。单击并向地图添加新点时一切正常。然后我用这些数据存储在其他地方并用它做一些其他的事情。事情是。

我将拥有一个功能,能够按“e”键和“d”键使用 DOM 事件监听器向地图添加点。这是因为我需要更改楼层标高。如果我在与先前添加的点相同的位置上使用鼠标,它会关闭折线。那里也很好用。我在地图上使用鼠标悬停,存储 lat long,然后在 keydown 上我使用我的 workingLayer 添加LatLng(latlng)。它保存纬度和经度,它画线。但是当我单击时没有添加顶点。我需要 vertexadded 函数才能将我的其他元数据添加到它。稍后我还将使用这些顶点进行自定义。

我已经花了一整天的时间,现在我真的需要一些帮助,找不到任何关于它的信息。

我还尝试将标记直接添加到图层,但没有奏效。

总而言之。当我单击制作折线时,一切正常。但是当以编程方式调用 layer.addLatLng(latlng); 不会添加顶点。如图所示,只有 latlng 及其所在位置。因此 pm:vertexadded 永远不会被调用。

我错过了什么?

我的代码中的一个例子:

lmap.on('pm:drawstart', function(e){
    //Layer is now the workingLayer
    let layer = e.workingLayer;

    //Will hold coordinates from map
    let pointFromMouse;
    lmap.addEventListener('mousemove', function(e){
        //Assigning current position lat/long 
        pointFromMouse = e.latlng;
    })

    document.addEventListener('keydown', function(e){
        if(e.keyCode == '69'){
            //When pressing 'e', adds it to the polyline
            layer.addLatLng(pointFromMouse);
            //I also tried setLatLngs(); and redraw(); no sucess
        }
    })


    layer.on('pm:vertexadded', function(e){
        //Here I'm calling some other stuff. I stuff another array along
        //with other meta-data, other than lat/long.
    })   
})

Image1:单击时的外观(一切正常,添加了顶点)。

Image2:当我添加一个按键时它的外观。没有添加顶点,因此永远不会调用 pm:vertexadded。

我单击时的外观(一切正常,添加了顶点)

当我添加一个按键时它的外观。 没有添加顶点,因此永远不会调用 pm:vertexadded。

4

0 回答 0