如何使用R计算点与参考点之间的距离?
我有一个数据框,里面有一些lat和long值。这是数据帧如何使用R计算点与参考点之间的距离?,r,coordinates,distance,R,Coordinates,Distance,我有一个数据框,里面有一些lat和long值。这是数据帧 individual_dets = structure(list(location = c("ARB-04", "BIRCHY HEAD", "Boca1", "BON-AR-S2", "BON-AR-S2", "BON-W-S5"), month = structure(c(12L, 10L, 10L, 8L, 11L, 2L), .Label = c("Jan", "Feb", "Mar", "Apr", "May", "Jun
individual_dets = structure(list(location = c("ARB-04", "BIRCHY HEAD", "Boca1",
"BON-AR-S2", "BON-AR-S2", "BON-W-S5"), month = structure(c(12L,
10L, 10L, 8L, 11L, 2L), .Label = c("Jan", "Feb", "Mar", "Apr",
"May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"), class = c("ordered",
"factor")), year = c(2018, 2018, 2018, 2018, 2018, 2018), detection_count = c(3L,
256L, 2L, 4L, 2L, 2L), num_unique_tags = c(1L, 1L, 1L, 1L, 1L,
1L), total_res_time_in_seconds = c(0, 1182040, 0, 2732221, 0,
0), latitude = c(24.94808, 44.5713, 26.32559, -49.27732, -49.27732,
-49.27985), longitude = c(-80.45412, -64.03512, -80.07108, 69.48038,
69.48038, 69.47853)), class = c("grouped_df", "tbl_df", "tbl",
"data.frame"), row.names = c(NA, -6L), groups = structure(list(
location = c("ARB-04", "BIRCHY HEAD", "Boca1", "BON-AR-S2",
"BON-AR-S2", "BON-W-S5"), month = structure(c(12L, 10L, 10L,
8L, 11L, 2L), .Label = c("Jan", "Feb", "Mar", "Apr", "May",
"Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"), class = c("ordered",
"factor")), .rows = list(1L, 2L, 3L, 4L, 5L, 6L)), row.names = c(NA,
-6L), class = c("tbl_df", "tbl", "data.frame"), .drop = TRUE))
然而,我的数据帧有4247个观察值
lat和long值用于西北大西洋跨海坐标。我试图计算这些lat和long值与哈利法克斯的距离
我被告知要使用此函数
将点捕捉到直线
,然后使用lappy
,但我正在查看结构,我太迷茫了。有人知道如何使用函数“捕捉点到直线”和“捕捉点到直线”进行编码吗?您可以使用sf
软件包中的st\u distance()
:
library(sf)
library(dplyr)
individual_dets_sf <- st_as_sf(individual_dets, coords = c("longitude", "latitude"),
crs = 4326) %>%
ungroup()
halifax <- data.frame("longitude" = -63.5752, "latitude" = 44.6488)
halifax_sf <- st_as_sf(halifax,
coords = c("longitude", "latitude"),
crs = 4326,
remove = FALSE)
individual_dets_sf_2 <- individual_dets_sf %>%
mutate(distances = st_distance(., halifax_sf, by_element = TRUE))
individual_dets_sf_2$distances
Units: [m]
[1] 2664402.84 37510.33 2513963.08 16466708.65 16466708.65 16466623.17
您可以使用
sf
软件包中的st\u distance()
:
library(sf)
library(dplyr)
individual_dets_sf <- st_as_sf(individual_dets, coords = c("longitude", "latitude"),
crs = 4326) %>%
ungroup()
halifax <- data.frame("longitude" = -63.5752, "latitude" = 44.6488)
halifax_sf <- st_as_sf(halifax,
coords = c("longitude", "latitude"),
crs = 4326,
remove = FALSE)
individual_dets_sf_2 <- individual_dets_sf %>%
mutate(distances = st_distance(., halifax_sf, by_element = TRUE))
individual_dets_sf_2$distances
Units: [m]
[1] 2664402.84 37510.33 2513963.08 16466708.65 16466708.65 16466623.17
什么包是
捕捉到行中的点
?这在r中不是有效的函数名,因为它包含空格。我确实在maptools
中找到了snapPointsToLines
,但它特别警告“此函数不适用于地理坐标。”好的,这就是建议我使用的函数。。。我没有注意到。这可能就是为什么它对我不起作用。您知道我还可以使用其他功能吗?什么包是捕捉到行的点
?这在r中不是有效的函数名,因为它包含空格。我确实在maptools
中找到了snapPointsToLines
,但它特别警告“此函数不适用于地理坐标。”好的,这就是建议我使用的函数。。。我没有注意到。这可能就是为什么它对我不起作用。你知道我还可以使用其他函数吗?在st_as_sf
函数中的coords=c()
我是否保留“经度”、“纬度”
?现在我在st_as_sf.data.frame(单个数据,coords=c(“经度”)中收到错误消息“,:坐标中不允许缺少值,但我有太多的观测值,无法单独放入。是的,您需要这些值。它们提供地理信息(即坐标)计算到其他地方的距离所必需的。如果您有缺少经度和/或纬度数据的行,您需要在使用st_as_sf()
之前删除这些点。很高兴它起作用了!请接受答案以结束问题。对不起,我实际上得到了所有0米?在距离列中啊,我错了一些内容(crs=4326
)丢失。您能再次尝试第一个代码块吗?在coords=c()
函数的st\u as\u sf
函数中,我是否保留“经度”、“纬度”
?现在我在st\u as\u sf.data.frame(单个数据,coords=c(“经度”)中收到错误消息“,:坐标中不允许缺少值,但我有太多的观测值,无法单独放入。是的,您需要这些值。它们提供地理信息(即坐标)计算到其他地方的距离所必需的。如果您有缺少经度和/或纬度数据的行,您需要在使用st_as_sf()
之前删除这些点。很高兴它起作用了!请接受答案以结束问题。对不起,我实际上得到了所有0米?在距离列中啊,我错了一些内容(crs=4326)丢失。您可以重试第一个代码块吗?