将投影坐标转换​​为小数

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)

现在,我需要重新使用原来的十进制坐标。谁能告诉我如何将投影坐标转换​​回十进制?

您可以重复之前的步骤,但在 proj4stringspTransform 中切换投影。

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

另一个使用 tidyversesf 的选项可能是:

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)
  )