Направление R или QGIS для расстояния

Ищу решение R или QGIS: у меня есть файл с длинной широтой и именем группы. Я хотел бы найти либо а) расстояние от начальной точки до конца в группе, б) среднее расстояние между координатами в группе, либо в) что-то среднее. бонус, если он имеет функцию стоимости. Я рассматривал пакет r gdistance, но похоже, что это всего лишь расстояние между точками. Я хотел бы найти поток между группой. У меня также есть доступ к postgresql, но у меня нет большого опыта в этом, поэтому я бы предпочел другие варианты. Идеи?


person ahitub    schedule 09.09.2014    source источник
comment
PostGIS и earthdistance?   -  person Craig Ringer    schedule 09.09.2014


Ответы (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
person Andreas    schedule 09.09.2014

Прежде чем рассчитывать расстояние, вам сначала нужно будет спроецировать ваши данные, если они находятся в географических координатах. Инструмент pointdistances (расстояния между точками) в GME должен выполнять часть того, что вы просите, вам, возможно, придется сделать несколько дополнительных шагов, чтобы получить данные в формате, который вам нужен, на выходе GME. Здесь есть дополнительная информация http://www.spatialecology.com/gme/pointdistances.htm

GME - это отдельная программа, которая использует r для анализа, поэтому вам необходимо установить ее отдельно. Надеюсь это поможет.

person ben au    schedule 09.09.2014