如何在Leaflet中仅显示X设施25英里范围内的Y设施标记
解决Leaflet中仅显示X类设施25英里范围内Y类设施的问题
嘿,我来帮你搞定这个Leaflet的筛选问题!其实核心思路就是先计算每个Y类设施到所有X类设施的距离,筛选出至少有一个X在25英里范围内的Y,再把这些符合条件的Y标记加到地图里就行。具体步骤如下:
1. 准备依赖包
我们需要用geosphere包来计算经纬度之间的球面距离,先安装并加载它:
# 如果还没安装geosphere包,先执行安装 install.packages("geosphere") # 加载需要的包 library(geosphere) library(leaflet)
2. 筛选符合距离要求的Y类设施
首先把25英里转换成米(因为distHaversine函数返回的距离单位是米),然后遍历每个Y点,判断它是否在任意X点的25英里范围内:
# 25英里对应的米数(1英里≈1609.34米) miles_25 <- 25 * 1609.34 # 筛选出符合条件的Y类设施 Y_filtered <- Y[apply(Y[, c("longitude", "latitude")], 1, function(y_point) { # 计算当前Y点到所有X点的距离 distances <- distHaversine(y_point, X[, c("Longitude", "Latitude")]) # 判断是否存在距离≤25英里的X点 any(distances <= miles_25) }), ]
注意:如果你的X/Y数据框里经纬度的列名和示例不一致,记得把代码里的
longitude/latitude、Longitude/Latitude改成你实际的列名哦!
3. 生成筛选后的地图
最后用筛选后的Y_filtered来创建Leaflet地图就可以了:
Z <- leaflet() %>% addTiles() %>% addMarkers(lng = Y_filtered$longitude, lat = Y_filtered$latitude, icon = YIcon, group = "BASE") %>% addMarkers(lng = X$Longitude, lat = X$Latitude, icon = XIcon)
这样你的地图就只会显示X类设施25英里范围内的Y类设施标记啦!
内容的提问来源于stack exchange,提问作者Kyle Overton
相关产品推荐
相关产品推荐

