Coğrafi koordinat sistemini R cinsinden dönüştürme


14

Coğrafi koordinat sisteminde puanlarım var ve onları İsviçre ızgarasına dönüştürmek istedim (CH1903 +).

Örnek veri:

 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

Saygılarımızla:

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, ben aynı adamım. Orada doğru cevabı alamıyorum. Bana yardım edebilir misin? Ne kadar seçici olduğun için gerçekten şaşırdım.
Ocak'ta Topdombili

1
@Top Bu bir kolaylık değil, StackExchange politikasıdır. Çapraz gönderme her türlü tutarsızlığı ve problemi yaratır. (Ayrıca, yanlış forumda yayınlamanın yararlı cevaplardan daha az da alabileceğini fark etmiş olabilirsiniz.) Lütfen gönderdiğiniz SO sürümünü silin.
whuber

@Topdombili, sadece whuber'ın cevabına göre, giriş değerlerinin WGS84'te olduğunu ve bir veri dönüşümü artı CH1903 + / LV95 ızgarasına bir projeksiyon geçirdiğini belirtmek istedim.
mkennedy

@mkennedy Bu gözlem için teşekkür ederim. Orijinal (lat, lon) koordinatlarının WGS 84 (bu varsayım kodda bir yorumda gömülü) olduğunu varsaydığımı açıklamamıştım . Değilse, değerini değiştirin proj4string(d). Dikkatim öncelikle yanlış doğu ve kuzey parametrelerine çekildi x0ve y0çünkü Web'deki bazı popüler referanslar (koddaki ilk yorumda olduğu gibi) en önemli basamaklarını düşürdü, böylece tüm noktaları birkaç bin kilometre yerinden aldı :-).
whuber

1
@whuber, ah re: referanslar! WGS 84'e ayarlanan giriş hakkındaki yorumunuzu gördüm, ancak Topdombili'nin bunu gördüğünden emin olmak istedim.
mkennedy

Yanıtlar:


18

RGDAL paketini kullanın . Hangi CRS'nin kullanılacağı bir sorun var; RGDAL, EPSG kodunu tanımıyor. Parametreleri burada gösterildiği gibi açıkça belirtmeniz gerekir. (Görünüşe göre bunlar yaklaşık değerlerdir, ancak oldukça iyi olmaları gerekir. Amaçlanan değerlerin yaklaşık 0.1 m yakınında görünüyorlar.)

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

Arsalar

        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


Sayısal değerlerde mevcut koordinatlar en yakın 10 derecedeyken, ondalık değerler olmadan dönüşüm doğruluğunun sonucunun daha az olabileceğini sormak istedim, 2 basamak ondalık demekti.
Topdombili

1
Yorumunu anlamıyorum. Orijinal (lat, lon) değerler sınırlı bir hassasiyetle belirtildiğinde, yansıtılan koordinatların ne kadar hassas olduğunu soruyor musunuz? Öyleyse, bu cevabın yararlı olduğunu görebilirsiniz.
whuber

1
rgdal EPSG tanıyor: 2056, FWIW
mdsumner

@md Teşekkür ederim! Bunun EPSG: 9814 olduğunu belirten bir referans bulmuştum , ancak RGDAL bunu tanımadı.
whuber
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.