在矩形、圆形和多边形内填充标记

Populating markers inside rectangle, circle and polygon

我的要求是在用户绘制的区域内填充标记,可以是圆形、矩形、多边形。

这就是我目前正在尝试的:-

map.on('draw:created', function(e) {
    var type = e.layerType, layer = e.layer;
    var bounds =  layer.getBounds();
});

现在我使用这些 bounds(southWest, northEast) latlongs 来虚拟创建行列间距,然后相应地填充标记。

问题:-

关于如何严格在圆和多边形的内部或边界上填充标记有什么建议吗?

提前致谢。

您或许可以使用 PointInLayer leaflet plug-in 来检查某个点是否在您的区域内。

然后您可以仅为实际位于多边形内的网格点添加标记。

类似的东西:

// the user area:
var areaLayer = L.geoJson(userArea);

// iterate over your grid of points
for (var i = 0; i < gridPoints.length; i++) {

   // add marker only if the point is within the area
   var results = leafletPip.pointInLayer(gridPoints[i], areaLayer, true);
   if (results.length > 0) {
      L.marker(gridPoints[i]).addTo(map);
   }
}

按照@kmandov 的建议通过 PIP 解决了多边形内的点,并通过以下过程解决了圆:-

  • 获取点的经纬度。
  • 获取圆心经纬度
  • 运行 distanceTo() 方法在上述两个经纬度中的任何一个上,并将第二个经纬度作为参数传递。
  • 检查距离是否大于圆的半径
  • 如果它大于半径,则该点在圆外,否则在圆内。

这是我使用的条件:

if (customMarker.getLatLng().distanceTo(myCircle.getLatLng()) <= myCircle.getRadius()) {
          console.log("Marker is inside circle");
}else{
         console.log("Marker is outside circle");
}