Ich habe einen Datensatz mit Werten über ein km-Raster in den kontinentalen USA. Die Spalten lauten "Breite", "Länge" und "Beobachtung", z.
"lat" "lon" "yield"
25.567 -120.347 3.6
25.832 -120.400 2.6
26.097 -120.454 3.4
26.363 -120.508 3.1
26.630 -120.562 4.4
oder als R-Datenrahmen:
mydata <- structure(list(lat = c(25.567, 25.832, 26.097, 26.363, 26.63),
lon = c(-120.347, -120.4, -120.454, -120.508, -120.562),
yield = c(3.6, 2.6, 3.4, 3.1, 4.4)), .Names = c("lat",
"lon", "yield"), class = "data.frame", row.names = c(NA, -5L))
(der vollständige Datensatz kann hier als csv heruntergeladen werden )
Die Daten werden von einem Erntemodell (vorgesehen) in einem Raster von 30 km x 30 km (von Miguez et al. 2012 ) ausgegeben .
Wie kann ich diese in eine Rasterdatei mit GIS-bezogenen Metadaten wie Kartenprojektion konvertieren?
Idealerweise ist die Datei eine Textdatei (ASCII?), Da ich möchte, dass sie plattform- und softwareunabhängig ist.
proj +proj=lcc +lat_1=50.0 +lat_2=50.0 +units=km +lon_0=-145.5 +lat_0=1.0
. Ich bin mir nicht sicher, wonach Sie in Bezug auf eine andere CSV-Datei fragen - wie würde sie sich von der in der Frage verlinkten unterscheiden, oder würde sie von der akzeptierten Antwort erzeugt werden?Antworten:
Mehrere Schritte erforderlich:
Sie sagen, es ist ein reguläres 1-km-Raster, aber das bedeutet, dass die Lat-Long-Werte nicht regulär sind. Zuerst müssen Sie es in ein reguläres Gitterkoordinatensystem umwandeln, damit die X- und Y-Werte einen regelmäßigen Abstand haben.
ein. Lesen Sie es als Datenrahmen in R ein, wobei die Spalten x, y, ergeben.
b. Konvertieren Sie den Datenrahmen mit dem sp-Paket in einen SpatialPointsDataFrame.
c. Stellen Sie auf Ihr reguläres km-System um, indem Sie zuerst angeben, um welches CRS es sich handelt, und dann spTransform zum Ziel.
d. Sagen Sie R, dass dies gerastert ist:
An diesem Punkt erhalten Sie eine Fehlermeldung, wenn Ihre Koordinaten nicht auf einem schönen regelmäßigen Gitter liegen.
Verwenden Sie nun das Raster-Paket, um in ein Raster zu konvertieren und dessen CRS festzulegen:
Jetzt schau mal:
Schreiben Sie es nun mit dem Raster-Paket als geoTIFF-Datei:
Dieses geoTIFF sollte in allen gängigen GIS-Paketen lesbar sein. Das offensichtlich fehlende Teil hier ist der proj4-String, in den konvertiert werden muss: Dies wird wahrscheinlich eine Art UTM-Referenzsystem sein. Schwer zu sagen ohne weitere Daten ...
quelle
r = Import[ "https://ebi-forecast.igb.illinois.edu/bety/miscanthusyield.csv", "Data"];
. Anschließend können Sie überdata = Rest[r]; ListPlot[data[[;; , {3, 2}]]]
(oderListPointPlot3D[data[[;; , {3, 2, 4}]]]
) eine schnelle Darstellung der Punkte erhalten . Beginnen Sie bei Neuprojektionen mit der Hilfe vonGeoGridPosition
und machen Sie dann einige intelligente Vermutungen und Querverweise, um herauszufinden, was los ist :-). Übrigens, die Erklärung von @ Spacedman ist wirklich relevant: Die metrische Verzerrung von 25 bis 49 Grad entspricht cos (25) / cos (49) = 1,38; das ist erheblich.Seit die Frage zuletzt beantwortet wurde, gibt es eine viel einfachere Lösung, indem die
rasterFromXYZ
Funktion des Rasterpakets verwendet wird, in der alle erforderlichen Schritte (einschließlich der Angabe der CRS-Zeichenfolge) zusammengefasst sind.quelle
/tmp/
mit ~ 19GB erstellte, als mir der Speicherplatz ausgegangen war.merge()
die Ergebnisse zusammenfassen.