Dựa trên mã trên, tôi cũng đã thêm một phiên bản của khu vực và phát hiện bán cầu (mà giải quyết vấn đề chuyển đổi, như mô tả trong một số ý kiến) + viết tắt cho CRS
chuỗi và chuyển đổi trở lại WSG86:
library(dplyr)
library(sp)
library(rgdal)
library(tibble)
find_UTM_zone <- function(longitude, latitude) {
# Special zones for Svalbard and Norway
if (latitude >= 72.0 && latitude < 84.0)
if (longitude >= 0.0 && longitude < 9.0)
return(31);
if (longitude >= 9.0 && longitude < 21.0)
return(33)
if (longitude >= 21.0 && longitude < 33.0)
return(35)
if (longitude >= 33.0 && longitude < 42.0)
return(37)
(floor((longitude + 180)/6) %% 60) + 1
}
find_UTM_hemisphere <- function(latitude) {
ifelse(latitude > 0, "north", "south")
}
# returns a DF containing the UTM values, the zone and the hemisphere
longlat_to_UTM <- function(long, lat, units = 'm') {
df <- data.frame(
id = seq_along(long),
x = long,
y = lat
)
sp::coordinates(df) <- c("x", "y")
hemisphere <- find_UTM_hemisphere(lat)
zone <- find_UTM_zone(long, lat)
sp::proj4string(df) <- sp::CRS("+init=epsg:4326")
CRSstring <- paste0(
"+proj=utm +zone=", zone,
" +ellps=WGS84",
" +", hemisphere,
" +units=", units)
if (dplyr::n_distinct(CRSstring) > 1L)
stop("multiple zone/hemisphere detected")
res <- sp::spTransform(df, sp::CRS(CRSstring[1L])) %>%
tibble::as_data_frame() %>%
dplyr::mutate(
zone = zone,
hemisphere = hemisphere
)
res
}
UTM_to_longlat <- function(utm_df, zone, hemisphere) {
CRSstring <- paste0("+proj=utm +zone=", zone, " +", hemisphere)
utmcoor <- sp::SpatialPoints(utm_df, proj4string = sp::CRS(CRSstring))
longlatcoor <- sp::spTransform(utmcoor, sp::CRS("+init=epsg:4326"))
tibble::as_data_frame(longlatcoor)
}
đâu CRS("+init=epsg:4326")
là viết tắt cho CRS("+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs +towgs84=0,0,0")
.
tìm tài liệu tham khảo khu UTM: http://www.igorexchange.com/node/927
Nguồn
2018-02-17 05:16:33
Nó sẽ được khó khăn để giúp bạn nếu bạn không cung cấp cho chúng tôi một số những con số mà ** không ** làm việc (cộng với khả năng một số mô tả về định dạng trong chúng được lưu trữ). Ngoài ra, bạn có biết rằng tất cả các tọa độ dài của bạn nằm trong một vùng UTM không? –
Cũng không nhiều đến mức các con số không hoạt động vì Im không đưa vào các con số. Tôi cần kịch bản để đọc nó từ một bảng của hàng ngàn tọa độ. Tôi chỉ không biết làm thế nào để làm điều đó. dd <- read.csv (tệp.chọn(), header = T) X <- dd [ "X"] Y <- dd [ "Y"] xy <- cbind (c (X), c (Y)) dự án (xy, "+ Proj = utm + khu = 51 ellps = WGS84") Thậm chí chắc chắn nếu phương trình có ý nghĩa nhưng nó không chạy. "xy không phải là số" Ngoài ra tôi không biết liệu tất cả tọa độ của tôi có nằm trong một vùng UTM hay không. Tôi ghét nghe như một thằng ngốc nhưng điều này là mới đối với tôi nhưng tôi không biết điều đó có nghĩa là gì – Colin
Loại bảng nào? (Nó được lưu trữ trong một tập tin văn bản? Một csv? Một cơ sở dữ liệu quan hệ? Một tập tin Excel? Vv vv) Có vẻ như bạn đang thực sự vào thời điểm này hỏi làm thế nào để đọc dữ liệu vào R. Trong trường hợp đó, hãy thử sử dụng Google hoặc tìm kiếm trong thanh tìm kiếm SO ở phía trên bên phải và sau đó hỏi lại nếu bạn không thể tìm ra. –