You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 07:28:23