我有两个点层(客户,供应商),我希望在用户输入的距离内获得特定客户的所有最近的供应商,我听说传单,但我找不到一个完整的示例了解它,有什么建议吗? 这是我通过ajax获取客户数据的代码
$.ajax({
type: "POST",
url: 'Customers_geojson.php',
dataType: 'json',
success: function (response) {
geojsonLayer = L.geoJson(
response,
{
pointToLayer: function (feature, latlng)
{
return L.circleMarker(latlng, geojsonMarkerOptions1);
}
},
{
onEachFeature: function (feature, layer)
{
layer.bindPopup('<label>Nick Name:</label>' + feature.properties.nick_name_);
}
}).addTo(mymap);
$("#info").fadeOut(500);
var gj = L.geoJson(response);
var nearest = leafletKnn(gj).nearest(L.latLng(8.71224, 125.692), 10000);
alert(nearest);
}
});
答案 0 :(得分:2)
如何使用leaflet-knn计算给定点的最近点?
答案是&#34;你不能&#34;。
nearest neighbour search算法,例如rbush-knn
(以及多较旧的leaflet-knn
)实现的算法,可帮助您回答以下查询:
我住在(x,y);我家的 5个最近的商店是什么?
或
我在(x,y); 最近的地铁站在哪里?
甚至
我在(x,y); 最近的地铁站在哪里? 限制将搜索范围限制在500米,因为我不想走得那么远。
...但是你想要回答的问题是非常不同的(强调我的):
我希望所有离用户输入的距离的最近供应商
使用最近邻搜索算法该作业的错误工具。你想要的是:
N
。该圈子将包含距离中心距离等于或小于N
的所有点,而不包含任何其他内容。N*2
。该方块将包含所有点,距离中心的距离等于或小于N
,加上一些不是。在GIS术语中,制作一个圆圈称为缓冲区,然后找到缓冲区的交叉点并设置点数。
同上,制作一个正方形称为边界框,在边界框内查询点。
制作缓冲区听起来效果最好,但计算成本更高。非常如此。创建一个边界框并查询一组点是非常便宜的(阅读&#34;快速&#34;)并且可以通过对r树结构的简单查询来实现(参见例如the documentation and examples for rbush
)。 / p>