从R中的空间点计算角度

问题描述 投票:1回答:1

我正在查看一些分散数据,并希望获得点之间的距离以及这些点之间的角度。到目前为止,我只能实现第一部分。使用来自adehabitatLT包的teal数据,我已经这样做了:

require("adehabitatLT")
require("sp")
data("teal")
teal <- teal[1:10 ,]
capsd <- SpatialPointsDataFrame(coords = SpatialPoints(coords = 
    teal[, c("x","y")], proj4string = CRS("+proj=longlat +datum=WGS84 
    +ellps=WGS84 +towgs84=0,0,0")), data=teal)
capdistance <- as.data.frame(pointDistance(capsd))

capdistance是10x10数据帧,显示深青色数据集的前10个点之间的距离。

有谁知道如何计算这些点之间的角度,以创建一个类似于capdistance data.frame的矩阵?我已经搜索过,但到目前为止我还没有发现任何可以计算两个设置位置之间角度的东西。任何帮助将不胜感激。

编辑

所以我一直在环顾四周,似乎geosphere包中的轴承功能对此有用,但我仍然(至少)距离一直工作一步:

require("geosphere")
capbearing1 <- bearing(capsd[1:10 ,], capsd[1 ,])
capbearing2 <- bearing(capsd[1:10 ,], capsd[2 ,])

我可以重复十次以获得十个列表,每个列表给出相对于所有十个点(本身和另外九个点)的十个点中的一个点的角度;但是,我真的希望这能顺利运行,将所有十个列表一次性作为一个矩阵;再次,非常感谢任何帮助。

如果您在单个区域中使用UTM并且数据点有限,cygps会给出一些好的代码,所以如果您有这些参数,请尝试一下。

r loops spatial angle
1个回答
0
投票
foo <- function(df) {
      x1 <- x2 <- df$x
      y1 <- y2 <- df$y
      Xpair<-merge(x1,x2)
        names(Xpair)<-c("x1","x2")
      Ypair<-merge(y1,y2)
       names(Ypair)<-c("y1","y2")

      dist <- c(sqrt((Xpair$x1 - Xpair$x2)^2 + (Ypair$y1 - Ypair$y2)^2), NA)

      dx <- c(Xpair$x1 - Xpair$x2, NA)
      dy <- c(Ypair$y1 - Ypair$y2, NA)
      abs.angle <- ifelse(dist < 1e-07, NA, atan2(dy, dx))
      so <- list(dist,  abs.angle)
      return(so)
    }

我从adehabitatLT:as.ltraj改编了这个功能。它产生你的距离和绝对角度矩阵(假设你想要所有点之间的距离和角度,而不是时间有序的距离和角度)。

© www.soinside.com 2019 - 2024. All rights reserved.