library(tidyverse)
library(sf)
x <- 500000
y <- 4649776
zone_num <- "33"
ellipsoid <- "WGS84"
res <- data.frame(x, y) %>%
sf::st_as_sf(coords = c("x", "y"),
crs = paste0("+proj=utm +zone=", zone_num)) %>%
sf::st_transform(crs = paste0("+proj=longlat +datum=", ellipsoid)) %>%
sf::st_coordinates() %>%
data.frame() %>%
dplyr::rename("lon" = "X", "lat" = "Y");res
# Test case 2: Southern hemisphere
x2 <- 500000
y2 <- (4649776 +10000000)-1 # +10000000)-1 tp adjust for southern hemisphere latitude
res <- data.frame(x2, y2) %>%
sf::st_as_sf(coords = c("x2", "y2"),
crs = paste0("+proj=utm +zone=", zone_num)) %>%
sf::st_transform(crs = paste0("+proj=longlat +datum=", ellipsoid)) %>%
sf::st_coordinates() %>%
data.frame() %>%
dplyr::rename("lon" = "X", "lat" = "Y");res
字符串
对于第一个,输出是正确的lon:15纬度:42
对于南半球,它不正确,因为它应该是长的:15纬度:-48.30
但输出是这样的:经度:-165纬度:48.2686
我不明白为什么会发生这种情况,经度应该是不变的,纬度差了将近0.04度。你知道为什么sf在变形方面有困难吗?
1条答案
按热度按时间qvtsj1bj1#
这里有几个问题。主要的一个是,南半球的
proj4string
应该有+south
参数。第二个问题是UTM中的北距范围介于0到1000万之间。您在原始北距(
y
)值上增加了1000万,因此您最终得到的数字超出了有效范围。如果您解决了这些问题,您将获得与北方半球相同的
lon
值和适当的lat
值:字符串