Неправильное значение возникает при преобразовании точек из UTM в WGS84 в R - PullRequest
0 голосов
/ 23 декабря 2018

Я использую метод от Станислава в этой теме форума , который является вопросом о "преобразовании точек широты и долготы в UTM".Я отредактировал функцию в обратном порядке, чтобы изменить точки с UTM на WGS84, а именно:

library(sp); library(rgdal)

#Function
UTMToLongLat<-function(x,y,zone){
  xy <- data.frame(ID = 1:length(x), X = x, Y = y)
  coordinates(xy) <- c("X", "Y")
  proj4string(xy) <- CRS(paste("+proj=utm +zone=",zone," ellps=WGS84",sep=''))  
  res <- spTransform(xy, CRS("+proj=longlat +datum=WGS84"))
  return(as.data.frame(res))
}

Пример из предыдущего вопроса, упомянутого выше, опробован:

x2 <- c(-48636.65, 1109577); y2 <- c(213372.05, 5546301)

Что такоеожидается (118, 10), (119, 50) в WGS84.Пример Колина приведен в UTM51.

Итак, используется следующее предложение:

done2 <- UTMToLongLat(x2,y2,51)

Однако получено: (118.0729, 1.92326), (131.4686, 49.75866).

Что не так?Кстати, как контролировать десятичные цифры на выходе?

1 Ответ

0 голосов
/ 23 декабря 2018

Во-первых, вы ошиблись в выражении координаты.Оно должно быть:

x <- c(-48636.65, 213372.05)
y <- c(1109577, 5546301)

В функции оно будет преобразовано и сохранено как:

> data.frame(ID = 1:length(x), X = x, Y = y)
#   ID         X       Y
# 1  1 -48636.65 1109577
# 2  2 213372.05 5546301

И снова выполните вашу функцию:

> UTMToLongLat(x, y, 51)
#   ID   X         Y
# 1  1 118  9.999997
# 2  2 119 50.000001

Вуправляйте десятичными цифрами:

> round(UTMToLongLat(x, y, 51))
#   ID   X  Y
# 1  1 118 10
# 2  2 119 50
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...