将投影坐标转换为小数
Converting projected coordinates into decimals
我有以下坐标为小数的数据集:
ID Longitude Latitude
1 -93.2552 58.0879
1 -93.2558 58.0876
1 -93.2555 58.0873
对于之前的项目,我使用以下代码投影坐标:
library(rgdal)
coordinates(data) <- c("longitude", "latitude")
proj4string(data) <- CRS("+init=epsg:4326")
data <- spTransform(data, CRS("+init=epsg:5321"))
data<-as.data.frame(data)
现在,我需要重新使用原来的十进制坐标。谁能告诉我如何将投影坐标转换回十进制?
您可以重复之前的步骤,但在 proj4string
和 spTransform
中切换投影。
library(rgdal)
data_old <- data
coordinates(data_old) <- c("Longitude", "Latitude")
proj4string(data_old) <- CRS("+init=epsg:4326")
data_old <- spTransform(data_old, CRS("+init=epsg:5321"))
data_old <- as.data.frame(data_old)
# ID Longitude Latitude
# 1 1 451077.2 7117021
# 2 1 451037.6 7116991
# 3 1 451051.2 7116956
然后,您只需在代码中切换投影即可恢复到原始坐标。
data_new <- data_old
coordinates(data_new) <- c("Longitude", "Latitude")
proj4string(data_new) <- CRS("+init=epsg:5321")
data_new <- spTransform(data_new, CRS("+init=epsg:4326"))
data_new <- as.data.frame(data_new)
输出
ID Longitude Latitude
1 1 -93.2552 58.0879
2 1 -93.2558 58.0876
3 1 -93.2555 58.0873
另一个使用 tidyverse
和 sf
的选项可能是:
library(tidyverse)
library(sf)
data_old %>%
st_as_sf(coords = c("Longitude", "Latitude"), dim = "XY") %>%
st_set_crs(5321) %>%
st_transform(4326) %>%
as.data.frame() %>%
extract(geometry,
c('Longitude', 'Latitude'),
'\((.*), (.*)\)',
convert = TRUE)
数据
data <-
structure(
list(
ID = c(1, 1, 1),
Longitude = c(-93.2552,-93.2558,-93.2555),
Latitude = c(58.0879, 58.0876, 58.0873)
),
class = "data.frame",
row.names = c(NA,-3L)
)
我有以下坐标为小数的数据集:
ID Longitude Latitude
1 -93.2552 58.0879
1 -93.2558 58.0876
1 -93.2555 58.0873
对于之前的项目,我使用以下代码投影坐标:
library(rgdal)
coordinates(data) <- c("longitude", "latitude")
proj4string(data) <- CRS("+init=epsg:4326")
data <- spTransform(data, CRS("+init=epsg:5321"))
data<-as.data.frame(data)
现在,我需要重新使用原来的十进制坐标。谁能告诉我如何将投影坐标转换回十进制?
您可以重复之前的步骤,但在 proj4string
和 spTransform
中切换投影。
library(rgdal)
data_old <- data
coordinates(data_old) <- c("Longitude", "Latitude")
proj4string(data_old) <- CRS("+init=epsg:4326")
data_old <- spTransform(data_old, CRS("+init=epsg:5321"))
data_old <- as.data.frame(data_old)
# ID Longitude Latitude
# 1 1 451077.2 7117021
# 2 1 451037.6 7116991
# 3 1 451051.2 7116956
然后,您只需在代码中切换投影即可恢复到原始坐标。
data_new <- data_old
coordinates(data_new) <- c("Longitude", "Latitude")
proj4string(data_new) <- CRS("+init=epsg:5321")
data_new <- spTransform(data_new, CRS("+init=epsg:4326"))
data_new <- as.data.frame(data_new)
输出
ID Longitude Latitude
1 1 -93.2552 58.0879
2 1 -93.2558 58.0876
3 1 -93.2555 58.0873
另一个使用 tidyverse
和 sf
的选项可能是:
library(tidyverse)
library(sf)
data_old %>%
st_as_sf(coords = c("Longitude", "Latitude"), dim = "XY") %>%
st_set_crs(5321) %>%
st_transform(4326) %>%
as.data.frame() %>%
extract(geometry,
c('Longitude', 'Latitude'),
'\((.*), (.*)\)',
convert = TRUE)
数据
data <-
structure(
list(
ID = c(1, 1, 1),
Longitude = c(-93.2552,-93.2558,-93.2555),
Latitude = c(58.0879, 58.0876, 58.0873)
),
class = "data.frame",
row.names = c(NA,-3L)
)