R或QGIS方向的距离

时间:2014-09-09 00:25:04

标签: r postgresql qgis

寻找R或QGIS解决方案:我有lat long文件和组名。我想找到a)从一个组的起点到终点的距离,b)一组中坐标之间的平均距离,或c)两者之间的某些东西。奖金,如果它有成本函数。我已经考虑了r包gdistance,但这似乎只是点之间的距离。我想在小组之间找到一个流程。我也有postgresql访问权限,但我没有很多经验,所以我更喜欢其他选项。想法?

2 个答案:

答案 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进行分析,因此您必须单独安装。希望这可以帮助。