Chuyển đổi hệ tọa độ địa lý trong R


14

Tôi có các điểm trong hệ tọa độ địa lý và tôi muốn chuyển đổi chúng thành lưới swiss (CH1903 +).

Dữ liệu mẫu:

 id       lon      lat
  2 7.173500 45.86880
  3 7.172540 45.86887
  4 7.171636 45.86924
  5 7.180180 45.87158
  6 7.178070 45.87014
  7 7.177229 45.86923  
  8 7.175240 45.86808
  9 7.181409 45.87177
  10 7.179299 45.87020

Kết quả được tôn trọng:

id       E              N      
2     2579408.2431  1079721.1499
3     2579333.7158  1079729.1852
4     2579263.6502  1079770.1125
5     2579928.0358  1080028.4605
6     2579763.6471  1079868.9218
7     2579698.0756  1079767.9762
8     2579543.1019  1079640.6512
9     2580023.6226  1080049.2672
10    2579859.1889  1079875.2740 

3
@Aaron, tôi là người như vậy. Tôi không có câu trả lời thích đáng ở đó. Bạn có thể giúp tôi không? Tôi thực sự ngạc nhiên khi bạn rất kén chọn.
Topdombili

1
@Top Đây không phải là sự kén chọn, đó là chính sách StackExchange. Đăng chéo tạo ra tất cả các loại mâu thuẫn và vấn đề. (Bạn cũng có thể nhận thấy rằng việc đăng bài trong diễn đàn sai cũng có thể nhận được một số câu trả lời ít hữu ích hơn.) Vui lòng xóa phiên bản SO mà bạn đã đăng.
whuber

@Topdombili, tôi chỉ muốn chỉ ra rằng theo câu trả lời của người đánh bóng, các giá trị đầu vào nằm trên WGS84 và đang trải qua một phép biến đổi dữ liệu cộng với phép chiếu lên lưới CH1903 + / LV95.
mkennedy

@mkennedy Cảm ơn bạn đã quan sát. Tôi đã hối hận khi không giải thích rằng tôi đã giả sử tọa độ ban đầu (lat, lon) là WGS 84 (giả định đó được chôn trong một nhận xét trong mã). Nếu không, thay đổi giá trị proj4string(d)tương ứng. Sự chú ý của tôi chủ yếu được thu hút bởi các tham số hướng đông và hướng bắc sai, x0y0, bởi vì một số tài liệu tham khảo phổ biến trên Web (như trong nhận xét đầu tiên trong mã) đã giảm các chữ số có ý nghĩa nhất của chúng, do đó thay thế tất cả các điểm trong vài nghìn km :-).
whuber

1
@whuber, ouch re: các tài liệu tham khảo! Tôi đã thấy nhận xét của bạn về đầu vào được đặt thành WGS 84, nhưng muốn chắc chắn rằng Topdombili đã nhìn thấy nó.
mkennedy

Câu trả lời:


18

Sử dụng gói RGDAL . Có một vấn đề về việc sử dụng CRS; RGDAL không nhận ra mã EPSG. Bạn phải cung cấp các tham số rõ ràng, như được hiển thị ở đây. (Rõ ràng đây là những xấp xỉ, nhưng chúng được cho là khá tốt. Chúng dường như nằm trong khoảng 0,1 m so với các giá trị dự định.)

# References:
# http://lists.maptools.org/pipermail/proj/2001-September/000248.html (has typos)
# http://www.remotesensing.org/geotiff/proj_list/swiss_oblique_cylindrical.html
#
# Input coordinates.
#
x <- c(7.173500, 7.172540, 7.171636, 7.180180, 7.178070, 7.177229, 7.175240, 7.181409, 7.179299)
y <- c(45.86880, 45.86887, 45.86924, 45.87158, 45.87014, 45.86923, 45.86808, 45.87177, 45.87020)
#
# Define the coordinate systems.
#
library(rgdal)
d <- data.frame(lon=x, lat=y)
coordinates(d) <- c("lon", "lat")
proj4string(d) <- CRS("+init=epsg:4326") # WGS 84
CRS.new <- CRS("+proj=somerc +lat_0=46.9524056 +lon_0=7.43958333 +ellps=bessel +x_0=2600000 +y_0=1200000 +towgs84=674.374,15.056,405.346 +units=m +k_0=1 +no_defs")
# (@mdsumner points out that
#    CRS.new <- CRS("+init=epsg:2056")
# will work, and indeed it does. See http://spatialreference.org/ref/epsg/2056/proj4/.)
d.ch1903 <- spTransform(d, CRS.new)
#
# Plot the results.
#
par(mfrow=c(1,3))
plot.default(x,y, main="Raw data", cex.axis=.95)
plot(d, axes=TRUE, main="Original lat-lon", cex.axis=.95)
plot(d.ch1903, axes=TRUE, main="Projected", cex.axis=.95)
unclass(d.ch1903)

Lô đất

        lon        lat  

[1,] 2.579.408,24 1.079.721,15
[2] 2.579.333,69 1.079.729,18
[3,] 2.579.263,65 1.079.770,55
[4,] 2.579.928,04 1.080.028,46
[5,] 2.579.763,65 1.079.868,92
[6,] 2.579.698,00 1.079.767,97
[7,] 2.579.543,10 1.079.640,65
[8,] 2.580.023,55 1.080.049,26
[9 ,] 2579859.11 1079875.27.27


Tôi muốn hỏi kết quả của độ chính xác chuyển đổi có thể ít hơn trong khi không có giá trị thập phân trong khi tọa độ khả dụng trong kết quả được tôn trọng là 10 độ gần nhất, ý tôi là 2 chữ số thập phân.
Topdombili

1
Tôi không hiểu bình luận của bạn. Bạn có hỏi về độ chính xác của tọa độ chiếu khi các giá trị gốc (lat, lon) được chỉ định với độ chính xác giới hạn không? Nếu vậy, bạn có thể thấy câu trả lời này là hữu ích.
whuber

1
rgdal không công nhận EPSG: 2056, FWIW
mdsumner

@md Cảm ơn bạn! Tôi đã tìm thấy một tài liệu tham khảo nói rằng đây là EPSG: 9814, nhưng RGDAL không nhận ra nó.
whuber
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.