【发布时间】:2020-10-29 21:24:39
【问题描述】:
我希望围绕一个经纬度点绘制一个半径,然后使用该缓冲区过滤适合其中的其他点。例如:
#stores datasets
stores = data.frame(store_id = 1:3,
lat = c("40.7505","40.7502","40.6045"),
long = c("-73.8456","-73.8453","-73.8012")
)
#my location
me = data.frame(lat = "40.7504", long = "-73.8456")
#draw a 100 meter radius around me
#use the above result to check which points in dataset stores are within that buffer
不知道如何解决这个问题。我之前曾与over 合作过点和多边形相交,但不知道如何在孤点上运行类似的场景。
【问题讨论】:
-
测量所有点到给定点的距离(使用毕达哥拉斯定理),然后选择距离小于所需阈值的点。
-
有各种提供圆的包,但实际上可以简单地生成角度 (
seq(0,2*pi,len=51)) 并使用sin和cos将其转换为x的向量和ys。但是,您可能会遇到问题,因为其中大部分是基于有数字的,而您的数据中有字符串。另一个复杂因素:在纬度/经度坐标中,固定半径的圆在技术上更加困难(如方位/距离计算),因为毕达哥拉斯距离仅在小范围内近似正确;否则,事情就会开始崩溃(尤其是在 40 度和更多的北方)。 -
@Rodrigo,并不是那么简单,因为经纬度坐标不是平面坐标。您不能只将勾股定理应用于角度并期望它全部解决。
-
@clbieganek 是的,你是对的,它只是一个近似值。更好的选择是以米为单位计算距离,将地球在每个纬度的周长视为赤道周长乘以该纬度的余弦。然后使用每个距离的平均纬度作为测量该距离(以米为单位)的基础。这将提供更好的近似值。
-
你应该试试
geosphere包中的destPoint,它的设计目的是在 lon/lat 坐标上绘制圆圈 stackoverflow.com/a/54638040/7877917