我有一个简单的多边形和一个点,两者都具有与 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")
我想计算
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版本。
使用 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 计算以度为单位的距离的方式来解释(它使用球面几何)