terra::点和多边形之间的距离返回度而不是公里

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

我有一个简单的多边形和一个点,两者都具有与 lonlat 相同的 crs:

library(terra)

pol <- vect("POLYGON ((1 1, 3 1, 3 2, 4 3, 3 4, 2 4, 1 1))",crs="EPSG:4326")
pt <- vect(cbind(3.5,5),crs="EPSG:4326")

enter image description here

我想计算

pt
pol
最近的点(点5)之间的距离。 我用过

terra::distance(pt,pol,unit="km")

但结果以度为单位而不是公里:

[1,] 1.118034

长长地算一下红线的长度,原来是123.7公里

perim(as.lines(vect(list(pt,as.points(pol)[5,]))))/1000

虽然 x 和 y 都是具有相同 crs 的 SpatVector,但

distance
返回度数。这是一个错误还是我错过了什么?

我使用terra的1.7-78版本。

r distance terra
1个回答
0
投票

使用 sf 可以得到正确的结果

library(terra)

pol <- vect("POLYGON ((1 1, 3 1, 3 2, 4 3, 3 4, 2 4, 1 1))",crs="EPSG:4326")
pt <- vect(cbind(3.5,5),crs="EPSG:4326")

library(sf)

pol <- st_as_sf(pol)
pt <- st_as_sf(pt)

sf::st_distance(pol, pt)
Units: [m]
       [,1]
[1,] 124243

与您的值的差异

123.7
可以通过 sf 计算以度为单位的距离的方式来解释(它使用球面几何)

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