gpt4 book ai didi

r - 如何在 R 中使用 gDistance 计算距离矩阵?

转载 作者:行者123 更新时间:2023-12-01 23:55:21 26 4
gpt4 key购买 nike

我想计算与多边形的距离。对于计算方法,我使用 hausdorff 距离。我只计算了 2 个多边形。如何计算多边形?请需要你的帮助。此源代码用于计算 2 个多边形

library(maptools)

library(rgdal)

shape <- readShapePoly("clipjawa.shp") #load for file .shp

pemalang <- shape[1,1] #save coordinates from polygon 1 to variable pemalang

tegal <- shape[2,1] #save coordinates from polygon 2 to variable tegal

distance <- gDistance(pemalang,tegal,hausdorff=TRUE)

最佳答案

有几种方法可以解决这个问题,但也许最简单的方法是识别多边形索引的所有组合(对),并将 gDistance 应用于这些组合中的每一个。

这是一个示例,使用 maptools 中包含的 wrdl_simpl 数据集计算非洲所有国家对的 Hausdorff 距离。

# Load and project the data
library(maptools)
data(wrld_simpl)
africa <- spTransform(subset(wrld_simpl, REGION==2),
CRS('+proj=eqc +lon_0=20.390625'))

# Calculate all pairs of polygons
combns <- t(combn(length(africa), 2))

# Split the SPDF into a list of SPDFs
africa.split <- split(africa, seq_len(length(africa)))

# For each row of combns, calculate Haus. dist. for the relevant pair of
# polygons
dists <- apply(combns, 1, function(x)
gDistance(africa.split[[x[1]]], africa.split[[x[2]]], hausdorff=TRUE))

为了方便起见,您可以将这些结果绑定(bind)到组合矩阵:

hdists <- cbind.data.frame(from=as.character(africa$NAME[combns[, 1]]), 
to=as.character(africa$NAME[combns[, 2]]),
d=dists)

head(hdists)

# from to d
# 1 Algeria Angola 4733071
# 2 Algeria Benin 2807129
# 3 Algeria Congo 4056594
# 4 Algeria Democratic Republic of the Congo 4532625
# 5 Algeria Burundi 5464898
# 6 Algeria Cameroon 3071739

另一种方法是使用 outer,但这应该不太有效,因为它计算所有距离两次(但它确实直接返回一个距离矩阵,这可能是可取的)。

outer(africa.split, africa.split, FUN = Vectorize(function(x, y)  
gDistance(x, y, hausdorff=TRUE)))

(更新了示例)

关于r - 如何在 R 中使用 gDistance 计算距离矩阵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24029283/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com