寻找R或QGIS解决方案:我有lat long文件和组名。我想找到a)从一个组的起点到终点的距离,b)一组中坐标之间的平均距离,或c)两者之间的某些东西。奖金,如果它有成本函数。我已经考虑了r包gdistance,但这似乎只是点之间的距离。我想在小组之间找到一个流程。我也有postgresql访问权限,但我没有很多经验,所以我更喜欢其他选项。想法?
答案 0 :(得分:1)
查看包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
答案 1 :(得分:0)
在计算距离之前,如果数据位于地理坐标中,则首先需要投影数据。 GME中的pointdistances(Pointss Points)工具应该是您要求的一部分,您可能需要做一些额外的步骤,以GME输出所需的格式获取数据。这里有更多信息http://www.spatialecology.com/gme/pointdistances.htm
GME是一个独立程序,使用r进行分析,因此您必须单独安装。希望这可以帮助。