无法使用.getBounds()函数(Leaflet)仅显示特定范围(圆圈)内的点

时间:2015-02-26 12:10:18

标签: mongodb leaflet openstreetmap geometry point

我正在尝试在特定范围内显示一定数量的点,即。但是当使用.getBounds()函数进行比较以查看该点是否在边界内时,我会在其外部获得一些点,如下面的屏幕截图所示:

Map Screenshot

当前用于检查点是否在圆圈范围内的代码如下:

        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.'");
        }
        ';

我循环到一个数组中以检索纬度和经度,然后从那里查看坐标是否填充到边界内,如果是,则将其添加到地图及其相应的弹出窗口

有关此特定问题的任何解决方案?

感谢您的帮助

2 个答案:

答案 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())。请注意,距离和半径以米为单位。