我正在尝试在特定范围内显示一定数量的点,即圈。但是当使用.getBounds()
函数进行比较以查看该点是否在边界内时,我会在其外部获得一些点,如下面的屏幕截图所示:
当前用于检查点是否在圆圈范围内的代码如下:
echo '
var mark = L.marker([' . $r->coordinates[0]->longitude . ',' . $r->coordinates[0]->latitude . ']);
if(circle.getBounds().contains(mark.getLatLng())){
mark.addTo(map);
mark.bindPopup("'.$info.'");
}
';
我循环到一个数组中以检索纬度和经度,然后从那里查看坐标是否填充到边界内,如果是,则将其添加到地图及其相应的弹出窗口
有关此特定问题的任何解决方案?
感谢您的帮助
答案 0 :(得分:2)
您可以创建自己的contains
方法并将其添加到L.Circle
类,因为默认情况下它没有。您可以使用distanceTo
对象的实用方法L.LatLng
来计算标记与圆的中心之间的距离,并将其与圆的半径进行比较:
L.Circle.include({
contains: function (latLng) {
return this.getLatLng().distanceTo(latLng) < this.getRadius();
}
});
现在,当你有一个圆圈和一个标记或latlng对象时,你可以这样做:
var map = L.map(...);
var circle = L.circle(...).addTo(map),
marker = L.marker(...).addTo(map);
latLng = L.latLng(...);
// Returns true when in the circle and false when outside
circle.contains(marker.getLatLng());
circle.contains(latLng);
关于Plunker的工作示例:http://plnkr.co/edit/OPF7DM?p=preview
L.Circle参考:http://leafletjs.com/reference.html#circle
L.Marker参考:http://leafletjs.com/reference.html#marker
L.LatLng参考:http://leafletjs.com/reference.html#latlng
答案 1 :(得分:0)
方法getBounds()
始终返回矩形区域。因此,它不能用于检查非矩形对象是否包含给定点。
对于圆圈,您应该能够计算圆圈中心点(distanceTo()
)的距离(getLatLng()
)并检查它是否小于圆圈&#39 ; s radius(getRadius()
)。请注意,距离和半径以米为单位。