Ищу решение R или QGIS: у меня есть файл с длинной широтой и именем группы. Я хотел бы найти либо а) расстояние от начальной точки до конца в группе, б) среднее расстояние между координатами в группе, либо в) что-то среднее. бонус, если он имеет функцию стоимости. Я рассматривал пакет r gdistance, но похоже, что это всего лишь расстояние между точками. Я хотел бы найти поток между группой. У меня также есть доступ к postgresql, но у меня нет большого опыта в этом, поэтому я бы предпочел другие варианты. Идеи?
Направление R или QGIS для расстояния
Ответы (2)
Ознакомьтесь с пакетом sp
. В частности, функция spDists
, которая принимает матрицу долгот и широт и возвращает матрицу попарных расстояний от каждой точки до всех других точек.
С помощью этой утилиты вы можете представить себе создание рабочего процесса, в котором вы подаете одну группу мест за раз в функцию, которая вычисляет расстояния между ними. Затем вы можете взять эту матрицу и вычислить средние значения любым удобным для вас способом.
Следующий воспроизводимый пример поможет вам понять, с чего начать.
require(ggmap) # Used for 'geocode' function.
require(sp) # Used for 'spDists' function.
### spDists spits out distance in KM if longlat argument = T.
# Write a function to convert to miles.
kmToMile <- function(x) x * 0.621371
### Create a character vector of locations to be geocoded.
locs <- c("san francisco", "new york city", "los angeles", "miami, florida")
ll <- lapply(locs, geocode)
ll <- do.call(rbind, ll)
### lon lat
### 1 -122.41942 37.77493
### 2 -74.00594 40.71278
### 3 -118.24368 34.05223
### 4 -80.20404 25.78910
### Feeding in a matrix of points to spDists returns a matrix
# of pairwise distance calculations. Use longlat argument to request
# kilometers rather than the "metric of the points".
dist <- spDists(as.matrix(ll), longlat = T)
### Convert object from kilometers to miles.
# Add row and column names, for easier reading.
dist <- kmToMile(dist)
rownames(dist) <- locs
colnames(dist) <- locs
### san francisco new york city los angeles miami, florida
### san francisco 0.0000 2571.930 347.1645 2593.075
### new york city 2571.9305 0.000 2450.8558 1087.392
### los angeles 347.1645 2450.856 0.0000 2337.818
### miami, florida 2593.0752 1087.392 2337.8179 0.000
Прежде чем рассчитывать расстояние, вам сначала нужно будет спроецировать ваши данные, если они находятся в географических координатах. Инструмент pointdistances (расстояния между точками) в GME должен выполнять часть того, что вы просите, вам, возможно, придется сделать несколько дополнительных шагов, чтобы получить данные в формате, который вам нужен, на выходе GME. Здесь есть дополнительная информация http://www.spatialecology.com/gme/pointdistances.htm
GME - это отдельная программа, которая использует r для анализа, поэтому вам необходимо установить ее отдельно. Надеюсь это поможет.