【问题标题】:Calculating number of points within a certain radius [duplicate]计算一定半径内的点数[重复]
【发布时间】: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² &lt; ((point1x - point2x)² + (point1y - point2y)²)是否在半径内。我不知道R 的语法,所以我无法帮助你,但我相信你可以从这里弄清楚。
  • 我实际上是在寻找地理距离,R 语法是这里的关键,尤其是如何获取该半径内所有点的计数。
  • @Havenard 我们需要使用一些距离度量,比如Haversine 来查找地球上两点之间的距离(用纬度/经度表示),欧几里得距离度量在这里不起作用。

标签: r distance latitude-longitude


【解决方案1】:

试试这个:

library(geosphere)
cbind(dat, X=rowSums(distm (dat[,3:2], 
       fun = distHaversine) / 1000 <= 10000)) # number of points within distance 10000 km

      id       lat         long X
 [1,]  1 -42.20844 -105.8491530 5
 [2,]  2 -23.01770 -116.4395691 5
 [3,]  3  13.11361   67.3282248 5
 [4,]  4  73.47740  -41.7226614 6
 [5,]  5 -53.69725   97.1429112 4
 [6,]  6  71.71014   -0.8282728 6
 [7,]  7  80.04155   78.3426630 6
 [8,]  8  28.94360  177.0861941 5
 [9,]  9  23.24053  -43.1873354 6
[10,] 10 -78.87847   99.8802797 4

【讨论】:

  • apply 在这种情况下效率很低
  • distm 的输出是什么指标?米还是公里?
  • @Kathi 以米为单位。
  • 一个问题:你为什么要除以 1000(是为了让你把它放在米中?)它也适用于以下数据` col1,col2 -2.1230278 40.06281,-8.7031111 42.21814,-3.7109167 37.18450`
猜你喜欢
  • 2011-07-20
  • 2011-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-06
  • 1970-01-01
  • 2018-11-02
  • 1970-01-01
相关资源
最近更新 更多