2012-04-02 12 views
3

G'day,
Ich habe eine große Anzahl von lon/lat-Koordinaten, die im CRS Australian Geodetic Datum 66/84 (kurz AGD66) enthalten sind. Ich möchte diese Koordinaten von AGD66 zu WGS84 ändern, da es zwischen ihnen etwa 200m Unterschied gibt und ich andere Koordinaten und Ebenen in WGS84 habe. Ich habe versucht, dies zu tun durch:Fehler bei der Neuprojektion von räumlichen Punkten mit spTransform in rgdal R

lon  lat 
147.1428 -43.49083 

library(rgdal) 
pts<-read.table(file.choose(),header=TRUE,sep=',') 
# I first project the pts in their original CRS 
pts66<-project(cbind(pts$lon,pts$lat), "+init=epsg:4202") 
# Then to transform it to WGS84 
pts84 = spTransform(pts66,CRS("+init=epsg:3033")) 

Error in function (classes, fdef, mtable) : 
unable to find an inherited method for function "spTransform", for signature "matrix", "CRS" 

Weiß jemand, warum ich diesen Fehler oder irgendwelche Vorschläge, wie ich diese Koordinaten von AGD66 zu WGS84 ändern? Danke im Vorraus für deine Hilfe.

Cheers,
Adam

Antwort

6

Ich habe Teil einer falschen Antwort entfernt.

Die Funktion project() kann keine Datumkonvertierungen durchführen, damit Sie ein Problem haben und ich denke, was Sie haben, ist falsch.

Das Problem ist, dass Sie nur (/) von LongLat auf WGS84 projizieren können, so dass Ihre erste Verwendung des Projekts falsch ist. Wenn ich das richtig einschätze, haben Sie Koordinaten, die in AGD66 sind, also müssen Sie zuerst diese Projektion zuweisen und dann können Sie transformieren. Sie können Datumstransformationen nicht mit project() ausführen, sondern mit spTransform().

Ich glaube, Sie dies benötigen:

pts = read.table(text = "lon  lat 
147.1428 -43.49083", header = TRUE) 

## assign original coordinate system 
pts66 = SpatialPoints(cbind(pts$lon,pts$lat), CRS("+init=epsg:4202")) 

## Then to transform it to WGS84 
pts84 = spTransform(pts66, CRS("+init=epsg:3033")) 


pts66 
SpatialPoints: 
    coords.x1 coords.x2 
[1,] 147.1428 -43.49083 
Coordinate Reference System (CRS) arguments: +init=epsg:4202 +proj=longlat +ellps=aust_SA 
+no_defs 

pts84 
SpatialPoints: 
    coords.x1 coords.x2 
[1,] 11126605 2971806 
Coordinate Reference System (CRS) arguments: +init=epsg:3033 +proj=lcc +lat_1=-68.5  +lat_2=-74.5 
+lat_0=-50 +lon_0=70 +x_0=6000000 +y_0=6000000 +ellps=WGS84 +datum=WGS84 +units=m +no_defs 
+towgs84=0,0,0 

Das bedeutet, dass pts66 nicht von ihren ursprünglichen Werten geändert, aber sie haben die Metadaten korrekt für den nächsten Schritt, die sie zu Ihrem Ziel verwandelt (die Lambert Conformal ist Conic übrigens). Sie müssen vielleicht ein wenig mehr Nachforschungen anstellen, um herauszufinden, was erforderlich ist.

CRS("+init=epsg:4202") 
CRS arguments: 
+init=epsg:4202 +proj=longlat +ellps=aust_SA +no_defs 

CRS("+init=epsg:3033") 

CRS arguments: 
+init=epsg:3033 +proj=lcc +lat_1=-68.5 +lat_2=-74.5 +lat_0=-50 
+lon_0=70 +x_0=6000000 +y_0=6000000 +ellps=WGS84 +datum=WGS84 +units=m 
+no_defs +towgs84=0,0,0 

Ihr ursprüngliches Projekt() wurde versucht, falsch aus longlat auf WGS84 zu transformieren auf AGD66 longlat, aber diese Funktion kann das nicht so ist es nur Verwirrung in der Mischung hinzugefügt. Ein Datum ist keine Projektion, es ist ein kritischer Teil der Definition einer Projektion und in diesem Sinne ist "longlat on AGD66" eine Projektion wie "Lambert Conformal Conic on WGS84".

+0

Hallo @mdsummer, danke für deine Antwort. Ich versuche es jetzt, aber wenn ich versuche, meinen lon/lat zu SpatialPoint() zu machen, bekomme ich den folgenden Fehler: Fehler in validObject (.Object): ungültige Klasse "SpatialPoints" Objekt: Bbox sollte nie NA-Werte enthalten . Irgendwelche Ideen, was das bedeutet, habe ich auf NA-Werte in der Datei überprüft, kann sie aber nicht finden. Sind diesen Punkten Variablen zugeordnet, die Probleme verursachen? Danke nochmal für deine Hilfe. – Adam

+0

Bitte ignorieren Sie den obigen Kommentar. Ich hatte Daten in den Variablen, die den lon/lat pts zugeordnet sind, verloren. – Adam