Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Leaflet 如何在传单中获取在地图上绘制的多边形的边_Leaflet_Polygon_Draw_Edges - Fatal编程技术网

Leaflet 如何在传单中获取在地图上绘制的多边形的边

Leaflet 如何在传单中获取在地图上绘制的多边形的边,leaflet,polygon,draw,edges,Leaflet,Polygon,Draw,Edges,我正在使用传单和传单绘制角度在谷歌地图上绘制一些多边形。当用户准确单击绘制多边形的边并获取该边的lat和lng时,如何实现侦听器。我知道类似的情况可以用谷歌地图API实现,如下面的代码,但我在传单中找不到任何源代码来帮助我实现同样的事情 google.maps.event.addListenerpolygon,“单击”,函数事件{console.logevent.edge} 谷歌地图文档:当用户点击多边形时,你可以在所有的角上循环,并检查他是否点击了角的附近 poly.on('click',

我正在使用传单和传单绘制角度在谷歌地图上绘制一些多边形。当用户准确单击绘制多边形的边并获取该边的lat和lng时,如何实现侦听器。我知道类似的情况可以用谷歌地图API实现,如下面的代码,但我在传单中找不到任何源代码来帮助我实现同样的事情

google.maps.event.addListenerpolygon,“单击”,函数事件{console.logevent.edge}


谷歌地图文档:

当用户点击多边形时,你可以在所有的角上循环,并检查他是否点击了角的附近


poly.on('click', function(e){
  var latlng = e.latlng;
  var corners = poly.getLatLngs();
  if(!L.LineUtil.isFlat(corners)){ //Convert to a flat array
    corners = corners[0];
  }

    //Convert the point to pixels
    var point = mymap.latLngToContainerPoint(latlng);

  //Loop through each corner
  corners.forEach(function(ll){    
    //Convert the point to pixels
    var point1 = mymap.latLngToContainerPoint(ll);
    var distance =  Math.sqrt(Math.pow(point1.x - point.x, 2) + Math.pow(point.y - point1.y, 2));

    //Check if distance between pixels is smaller then 10
    if(distance < 10){
        console.log('corner clicked');
    }
  });
});
这是纯JS,你必须将其自身转换为角度

备选方案是在每个角落放置一个DivMarker或CircleMarker,如果单击该标记,则触发一个事件。
看起来像:

对于那些遇到这个问题的人:我自己找到了一个解决方案! 我没有直接从传单绘图库中找到任何我可以使用的东西,所以我为自己定义了一个三角学问题,并以这种方式解决它。 我定义了一个函数,在其中单击多边形时,它会转换event.latlng和polygon.getLatLngs[0]上的循环,并获取一对a和B点。A是第一个坐标,B是下一个坐标,如果到达数组的末尾,B将是第一个点。然后使用3个点与x,y的共线函数,我检查单击的x,y是否与点a和B具有相同的斜率。必须将其四舍五入,如果是,我将保存a和B点对及其latLng信息,并在我的项目中进一步使用它。
尽管这种方法可行,但如果有人知道更好的解决方案或库内置函数,我将不胜感激。谢谢

谢谢你的评论,但这不是我要找的。我知道如何转弯。也许我不清楚我的问题。我希望能够点击多边形中每条路径线的中间,并能够检测到它并对其进行处理。例如,如果多边形有6个角和6条线,则从点0到点1创建的第一条线将是线0,依此类推。因此,一旦用户单击该行,它将显示event.edge=0,这是用户绘制的第一行。请阅读谷歌链接上的文档以便更好地理解。