Konvertierung des geografischen Koordinatensystems in R

14

Ich habe Punkte im geografischen Koordinatensystem und wollte sie in ein Schweizer Gitter umwandeln (CH1903 +).

Beispieldaten:

 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

Respektierte Ergebnisse:

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 
Topdombili
quelle
3
@ Aaron, ich bin der gleiche Typ. Ich habe dort keine richtige Antwort bekommen. Kannst du mir helfen? Ich bin wirklich erstaunt, wie wählerisch du bist.
Topdombili
1
@Top Dies ist keine Kleinigkeit, sondern eine StackExchange-Richtlinie. Cross-Posting erzeugt alle Arten von Inkonsistenzen und Problemen. (Möglicherweise haben Sie auch bemerkt, dass das Posten im falschen Forum auch einige weniger als nützliche Antworten erhalten kann.) Löschen Sie die SO-Version, die Sie gepostet haben.
Whuber
@Topdombili, ich wollte nur darauf hinweisen, dass laut Whubers Antwort die Eingabewerte auf WGS84 liegen und eine Datumstransformation sowie eine Projektion auf das CH1903 + / LV95-Gitter durchlaufen.
Mkennedy
@mkennedy Danke für diese Beobachtung. Ich habe nicht erklärt, dass ich angenommen habe, dass die ursprünglichen (lat, lon) Koordinaten WGS 84 sind (diese Annahme ist in einem Kommentar im Code vergraben). Ist dies nicht der Fall, ändern Sie den Wert von proj4string(d)entsprechend. Meine Aufmerksamkeit wurde in erster Linie auf die Parameter für die falsche Ausrichtung nach Osten und Norden gelenkt, x0und y0weil einige beliebte Referenzen im Web (wie der erste Kommentar im Code) ihre wichtigsten Stellen gelöscht haben und dadurch alle Punkte um einige tausend Kilometer verschoben haben :-).
Whuber
1
@whuber, autsch re: die referenzen! Ich habe Ihren Kommentar zu dem auf WGS 84 eingestellten Eingang gesehen, wollte aber sicherstellen, dass Topdombili ihn gesehen hat.
Mkennedy

Antworten:

18

Verwenden Sie das RGDAL-Paket . Es gibt ein Problem, welches CRS verwendet werden soll. RGDAL erkennt den EPSG-Code nicht. Sie müssen die Parameter wie hier gezeigt explizit angeben. (Anscheinend handelt es sich hierbei um Näherungswerte, sie sollten jedoch ziemlich gut sein. Sie liegen anscheinend innerhalb eines Bereichs von etwa 0,1 m um die beabsichtigten Werte.)

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

Grundstücke

        lon        lat  

[1,] 2579408,24 1079721,15
[2] 2579333,69 1079729,18
[3] 2579263,65 1079770,55
[4] 2579928,04 1080028,46
[5] 2579763,65 1079868,92
[6] 2579698,00 1079767,97
[7] 2579543,10 1079640,65
[8] 2580023,55 1080049,26
[9 ,] 2579859.11 1079875.27

whuber
quelle
Ich wollte fragen, ob das Ergebnis der Konvertierung möglicherweise weniger genau ist, obwohl es keine Dezimalwerte gibt, während die verfügbaren Koordinaten in den respektierten Ergebnissen in den nächsten 10 Grad liegen. Ich meinte 2 Dezimalstellen.
Topdombili
1
Ich verstehe deinen Kommentar nicht. Fragen Sie sich, wie genau die projizierten Koordinaten sind, wenn die ursprünglichen (lat, lon) Werte mit begrenzter Genauigkeit angegeben werden? In diesem Fall ist diese Antwort möglicherweise hilfreich.
Whuber
1
rgdal erkennt EPSG: 2056, FWIW
mdsumner
@md Danke! Ich hatte eine Referenz gefunden , die besagt, dass dies EPSG: 9814 ist, aber RGDAL hat es nicht erkannt.
whuber