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

Posted

技术标签:

【中文标题】无法使用 .getBounds() 函数(传单)仅显示特定范围(圆圈)内的点【英文标题】:Unable to display only the points within a specific range (circle) using the .getBounds() function (Leaflet) 【发布时间】:2015-04-28 19:26:19 【问题描述】:

我正在尝试显示特定范围内的一定数量的点,即在 圆圈 内。但是当使用.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.'");
        
        ';

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

关于这个特定问题的任何解决方案?

感谢您的帮助

【问题讨论】:

【参考方案1】:

您可以创建自己的contains 方法并将其添加到L.Circle 类,因为默认情况下它没有。您可以使用L.LatLng 对象的实用方法distanceTo 来计算标记与圆心之间的距离,并将其与圆的半径进行比较:

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

【讨论】:

omg 再次非常感谢您的帮助,代码正在运行。你是救命恩人!!【参考方案2】:

getBounds() 方法总是返回一个矩形区域。因此它不能用于检查非矩形对象是否包含给定点。

对于圆,您应该能够计算点到圆心 (getLatLng()) 的距离 (distanceTo()) 并检查它是否小于圆的半径 (getRadius())。请注意,距离和半径以米为单位。

【讨论】:

您能详细说明一下吗? 我还没有太多使用 Leaflet 的经验。你不清楚哪一部分? 我从上面的 iH8 得到了答案。也感谢您的回复和帮助。 太棒了 :) 如果您喜欢我的回答(以及 iH8 的回答),那么请考虑支持 :)

以上是关于无法使用 .getBounds() 函数(传单)仅显示特定范围(圆圈)内的点的主要内容,如果未能解决你的问题,请参考以下文章

无法识别MapBox传单路由设备

从外部访问 Leaflet.js GeoJson 功能

无法从功能传单中访问 this.map

传单:如何仅在一层上显示标记或图例?

如何在传单地图中仅添加一个标记

Google Maps Api v3 - getBounds 未定义