Рассчитать расстояние между двумя координатами в одной строке в 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)


arrow_upward
0
arrow_downward

Проверьте функцию 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

arrow_upward
0
arrow_downward

хотя 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