我有一个包含2对UTM(32 N)坐标的 Dataframe ,我需要计算它们之间从原点到目的地的公里差异。我尝试使用sf库,使用“by_element”,但我得到一个错误消息“Error in st_distance(data,by_element = TRUE):!missing_y non è TRUE”。有什么问题吗?如果我不使用“by_element”选项,它可以工作,并创建所有坐标之间的距离矩阵,但这不是我需要的。
library(sf)
df <- data.frame(id = c(1,2,3), x_origin = c(642683.2, 373775,383881 ), y_origin = c(5082920, 4997274,4994504), x_dest =c(642683.3, 1126050,942763.9 ), y_dest=c(5082920, 4374481,4534235 ))
data <- st_as_sf(df, coords = c("x_origin", "y_origin"), crs="4326" )
distances <- st_distance(data, by_element = TRUE )
2条答案
按热度按时间xxe27gdn1#
您提供了
x
(起点)到st_distance()
,但没有提供y
(终点)。CRS不可能是正确的,如果EPSG代码是字符串,sf无法识别,4326表示坐标是WGS84纬度/经度。假设32632,WGS 84/UTM区域32N。创建于2023年1月25日,使用reprex v2.0.2
jv4diomz2#
首先,
sf
无法通过您输入数据的方式知道您正在计算起点和终点之间的距离;其次,UTM Zone 32 N的EPSG代码不是4326
;第三,您应该使用crs = st_crs(4326)
而不是crs = "4326"
。使用以下代码段创建计算感兴趣的距离所需的对象
注意CRS的不同EPSG代码。
接下来,我们计算距离(此投影的默认单位为米)
如果你使用
by_element = FALSE
,你会得到所有的两两距离。最后,我们可以使用
units
包将距离转换为km
(或者我们可以简单地将它们除以1000)。