2016-11-29 9 views
0

Учитывая кадр данных с широтами и долготами, я хочу добавить столбец, который просто содержит количество других точек (того же кадра данных), которые находятся в пределах определенного радиуса, например. в пределах 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 тема и ответ приблизиться, он не решает конкретный вопрос простого подсчета. Этот вопрос отличается, как мне нужно отсчеты всех точек в пределах радиуса, а не точки

+0

теорему Пифагора, 'distance² = (point1x - point2x) ² + (point1y - point2y) ²', или если вы хотите сохранить CPU и не вычислять квадратный корень, вы можете просто проверить, будет ли '10² <((point1x - point2x) ² + (point1y - point2y) ²)' знать, находится ли его внутри радиуса. Я не знаю синтаксиса «R», поэтому я не могу вам помочь, но я уверен, что вы можете понять здесь. – Havenard

+0

Я действительно ищу гео-расстояние, и синтаксис R является ключевым здесь, и в частности, как получить счет всех точек в пределах этого радиуса. – Kathi

+0

@ Havenard нам нужно использовать некоторую метрику расстояния, такую ​​как Haversine, чтобы найти расстояние между двумя точками на земле (выраженное lat/lon), метрика евклидова расстояния не будет работать здесь. –

ответ

2

Попробуйте это:

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 
+0

apply очень неэффективен в этом случае –

+0

какой метрикой является выход distm in? метров или км? – Kathi

+1

@ Кати это в метрах. –

 Смежные вопросы

  • Нет связанных вопросов^_^