Рассчитать расстояние между двумя координатами в одной строке в R

У меня есть фрейм данных [df] вроде этого:

df<-structure(list(  Latitude = c(-23.8, -23.8, -23.9, -23.9), 
                     Longitude = c(-49.6, -49.3, -49.4, -49.8), 
                     Latitude1 = c(-23.4, -23.7, -23.4, -23.8), 
                     Longitude1 = c(-49.7, -49.4, -49.6, -49.7)),
                     class = "data.frame", row.names = c(NA, -4L))

Кадр данных содержит GPS-координаты двух точек, и я хотел бы рассчитать расстояние в метрах между этими двумя точками в каждой строке. Я хотел бы получить только расстояние между двумя точками в каждой строке, а не матрицу расстояний.

Желаемый результат будет выглядеть так:

Latitude   Longitude   Latitude1   Longitude1   Distance_m
-23.8      -49.6       -23.4       -49.7        53

Я попробовал пакет геосферы, но не смог получить нужных результатов.

Есть ли способ сделать это, пожалуйста?

Спасибо за любые предложения.


person dloudtrain    schedule 06.05.2021    source источник


Ответы (2)


Проверьте функцию distm из пакета geosphere:

apply(df, 1, function(x)distm(c(x[1],x[2]),c(x[3],x[4]),fun = distGeo))
person mfalco    schedule 06.05.2021

хотя tidyverse// не удалось воспроизвести желаемый результат 53... ?

library(geosphere)
library(tidyverse)
df %>%
  mutate(distance = pmap(list(a = Longitude, 
                              b = Latitude, 
                              x = Longitude1,
                              y = Latitude1), 
                          ~ geosphere::distGeo( c(..1, ..2), c(..3, ..4))))

#   Latitude Longitude Latitude1 Longitude1 distance
# 1    -23.8     -49.6     -23.4      -49.7 45461.49
# 2    -23.8     -49.3     -23.7      -49.4 15053.19
# 3    -23.9     -49.4     -23.4      -49.6 59016.34
# 4    -23.9     -49.8     -23.8      -49.7 15048.01
person Wimpel    schedule 06.05.2021
comment
Спасибо за это, однако я всегда получаю эту ошибку: Ошибка в .pointsToMatrix(x): долгота ‹ -360. Мои долготы указаны в числовом формате, и ни одна из них не ниже -360. - person dloudtrain; 06.05.2021
comment
странно.. не могу воспроизвести эту ошибку... - person Wimpel; 06.05.2021