【发布时间】:2017-04-13 23:18:56
【问题描述】:
给定一个具有纬度和经度的数据框,我想添加一个列,该列仅包含某个半径内的其他点(同一数据框的)的计数,例如距离该特定点 10 公里以内。
示例数据:
set.seed(1)
radius<-10
lat<-runif(10,-90,90)
long<-runif(10,-180,180)
id<-1:10
dat<-cbind(id,lat,long)
id lat long
[1,] 1 -42.20844 -105.8491530
[2,] 2 -23.01770 -116.4395691
[3,] 3 13.11361 67.3282248
[4,] 4 73.47740 -41.7226614
[5,] 5 -53.69725 97.1429112
[6,] 6 71.71014 -0.8282728
[7,] 7 80.04155 78.3426630
[8,] 8 28.94360 177.0861941
[9,] 9 23.24053 -43.1873354
[10,] 10 -78.87847 99.8802797
现在给定半径变量,我想要一个新列说“X”,每个点只包含“半径”内的其他点的数量。我不在乎这些是哪一点。
虽然这个R - Finding closest neighboring point and number of neighbors within a given radius, coordinates lat-long 主题和答案很接近,但它并不能解决简单计数的具体问题。这个问题不同,因为我需要半径内所有点的计数,而不是点数
【问题讨论】:
-
勾股定理
distance² = (point1x - point2x)² + (point1y - point2y)²,或者如果你想节省CPU而不计算平方根,你可以简单地测试10² < ((point1x - point2x)² + (point1y - point2y)²)是否在半径内。我不知道R的语法,所以我无法帮助你,但我相信你可以从这里弄清楚。 -
我实际上是在寻找地理距离,R 语法是这里的关键,尤其是如何获取该半径内所有点的计数。
-
@Havenard 我们需要使用一些距离度量,比如Haversine 来查找地球上两点之间的距离(用纬度/经度表示),欧几里得距离度量在这里不起作用。
标签: r distance latitude-longitude