UTM坐标之间的距离
Distance between UTM coordinates
我在 QGIS 地图上有一些点,想确定 R 中每个点之间的距离。每个 Unique ID 都是一棵树。坐标是 UTM 坐标(x = 东,y = 北)
我的数据集如下所示:
Unique_ID
EW_X.
EW_Y
45
573500
775011
49
572224
774700
70
573573
775200
71
573573
775200
我会使用什么公式来获得描述每棵树之间距离的输出,看起来像这样(其中 x 是每棵树之间的距离):
Unique_ID
45
49
70
71
45
x
x
x
49
x
x
x
70
x
x
x
71
x
x
x
或者如果它更简单,重复行(例如 45 对 49、45 对 70、45 对 71;等等,每次重复都是一个新行)
使用 tidyverse
和 sf
,并获得以米为单位的距离矩阵,尝试:
library(tidyverse)
library(sf)
df <- tibble(
Unique_ID = c(45L, 49L, 70L, 71L),
EW_X = c(573500L, 572224L, 573573L, 573573L),
EW_Y = c(775011L, 774700L, 775200L, 775200L))
sf_trees <- st_as_sf(x = df, coords = c("EW_X", "EW_Y"),
crs = 3857) # Note that I am using WGS 84 Pseudo Mercator. If you know the UTM zone you could be more specific with the csr/epsg code
tb_distance <- st_distance(sf_trees, sf_trees, ) %>% # The following 3 lines are optional.
as_tibble() %>%
set_names(nm = df$Unique_ID) %>%
bind_cols(tibble(Unique_ID = as.character(df$Unique_ID)), . )
tb_distance
# A tibble: 4 x 5
Unique_ID `45` `49` `70` `71`
<chr> [m] [m] [m] [m]
1 45 0 1313. 203. 203.
2 49 1313. 0 1439. 1439.
3 70 203. 1439. 0 0
4 71 203. 1439. 0 0
我在 QGIS 地图上有一些点,想确定 R 中每个点之间的距离。每个 Unique ID 都是一棵树。坐标是 UTM 坐标(x = 东,y = 北)
我的数据集如下所示:
Unique_ID | EW_X. | EW_Y |
---|---|---|
45 | 573500 | 775011 |
49 | 572224 | 774700 |
70 | 573573 | 775200 |
71 | 573573 | 775200 |
我会使用什么公式来获得描述每棵树之间距离的输出,看起来像这样(其中 x 是每棵树之间的距离):
Unique_ID | 45 | 49 | 70 | 71 |
---|---|---|---|---|
45 | x | x | x | |
49 | x | x | x | |
70 | x | x | x | |
71 | x | x | x |
或者如果它更简单,重复行(例如 45 对 49、45 对 70、45 对 71;等等,每次重复都是一个新行)
使用 tidyverse
和 sf
,并获得以米为单位的距离矩阵,尝试:
library(tidyverse)
library(sf)
df <- tibble(
Unique_ID = c(45L, 49L, 70L, 71L),
EW_X = c(573500L, 572224L, 573573L, 573573L),
EW_Y = c(775011L, 774700L, 775200L, 775200L))
sf_trees <- st_as_sf(x = df, coords = c("EW_X", "EW_Y"),
crs = 3857) # Note that I am using WGS 84 Pseudo Mercator. If you know the UTM zone you could be more specific with the csr/epsg code
tb_distance <- st_distance(sf_trees, sf_trees, ) %>% # The following 3 lines are optional.
as_tibble() %>%
set_names(nm = df$Unique_ID) %>%
bind_cols(tibble(Unique_ID = as.character(df$Unique_ID)), . )
tb_distance
# A tibble: 4 x 5
Unique_ID `45` `49` `70` `71`
<chr> [m] [m] [m] [m]
1 45 0 1313. 203. 203.
2 49 1313. 0 1439. 1439.
3 70 203. 1439. 0 0
4 71 203. 1439. 0 0