2016-04-15 2 views
0

Ich muss eine Formdatei in ein Raster konvertieren und habe keine Ahnung, wo ich anfangen soll.SpatialPointsDataFrame und SpatialLinesDataFrame zum Rasterplot hinzufügen

Wenn mir jemand helfen könnte, würde ich mich sehr freuen!

Update: Ich habe über die ‚readOGR'-Funktion gefunden, aber jedes Mal benutze ich es mir die folgende Meldung:

Warning messages: 
1: In readOGR(dsn = "C:/Users/Giaco/Dropbox/Random Walk/Waterbodies", : 
    Dropping null geometries: 308, 309 
2: In readOGR(dsn = "C:/Users/Giaco/Dropbox/Random Walk/Waterbodies", : 
    Z-dimension discarded 

Kann jemand mir sagen, was das bedeutet?

Edit:

altdata <- raster("altitude.tif")   
plot(altdata) 
Lotic <- readOGR(dsn="C:/Users/Giaco/Dropbox/Random Walk/Waterbodies",layer="Lotic") 
Lentic <- readOGR(dsn="C:/Users/Giaco/Dropbox/Random Walk/Waterbodies",layer="Lentic") 

Wie kann ich das Raster "altdata" plotten, die SpatialPointsDataFrame "Lentic" und die SpatialLinesDataFrame "Lotic" alles in einem Plot?

Edit:

altdata 
class  : RasterLayer 
dimensions : 1286, 963, 1238418 (nrow, ncol, ncell) 
resolution : 15, 15 (x, y) 
extent  : 90938.29, 105383.3, 190000, 209290 (xmin, xmax, ymin, ymax) 
coord. ref. : +proj=tmerc +lat_0=39.66666666666666 +lon_0=1 +k=1 +x_0=200000 +y_0=300000 +ellps=intl +pm=-9.131906111111112 +units=m +no_defs 
data source : C:\Users\Giaco\Dropbox\Random Walk\altitude.tif 
names  : altitude 
values  : -32768, 32767 (min, max) 

> Lentic 
class  : SpatialPointsDataFrame 
features : 182 
extent  : -108473.2, -95455.86, -107870.9, -91344.22 (xmin, xmax, ymin, ymax) 
coord. ref. : +proj=tmerc +lat_0=39.66825833333333 +lon_0=-8.133108333333334 +k=1 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs 
variables : 3 
names  : Presence,  Type, Accessible 
min values :  0, Fountain,   0 
max values :  1,  Well,   2 
> Lotic 
class  : SpatialLinesDataFrame 
features : 317 
extent  : -108956.5, -93832.44, -108979.5, -90747.34 (xmin, xmax, ymin, ymax) 
coord. ref. : +proj=tmerc +lat_0=39.66825833333333 +lon_0=-8.133108333333334 +k=1 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs 
variables : 1 
names  : Presence 
min values :  0 
max values :  1 
+0

Sie benötigen weitere Informationen und müssen Ihren Code sehen, damit Syntaxfehler ausgeschlossen werden können. Was genau möchten Sie als Raster darstellen, ist Ihr Datenpolygon oder Punkt und die Werte numerisch oder kategorisch, gibt es eine kontinuierliche Abdeckung über den Bereich? Von den gdal-Fehlern sieht es so aus, als hätten Sie null Geometrien in den Daten und das Shapefile hat einen z-Wert.Ich glaube nicht, dass eine dieser Warnungen katastrophal ist und Sie sollten immer noch ein SP-Objekt erhalten. Da Sie keinen Code zur Verfügung gestellt haben, kann die Ausgabe nicht überprüft werden. –

+0

Danke für Ihre Antwort. Ich arbeite zum ersten Mal mit Shape-Dateien, also entschuldige bitte, wenn meine Fragen ein wenig dumm erscheinen. Ich habe zwei Formdateien, von denen die eine Punkte und die andere eine Zeile enthält. Es ist mir gelungen, sie in R zu laden und auch zu zeichnen. Jetzt möchte ich sie zu einem Raster-Plot hinzufügen. Ich werde meine Frage bearbeiten, damit Sie besser verstehen können. Danke im Voraus. – snoops

Antwort

1

Mit Grundstück gibt es zwei Wege Vektordaten auf einem Raster zu überlagern. Zeichnen Sie zuerst das Raster, dann können Sie entweder das Diagramm für jede Feature-Class mit dem Argument add = TRUE aufrufen. Alternativ können Sie die Punkte- und Linienfunktionen verwenden, die ebenfalls zum aktuellen Diagramm hinzugefügt werden.

erstellen einige Beispieldaten

library(raster) 
library(sp) 

r <- raster(nrows=180, ncols=360, xmn=571823.6, xmx=616763.6, ymn=4423540, 
      ymx=4453690, resolution=270, crs = CRS("+proj=utm +zone=12 +datum=NAD83 
      +units=m +no_defs +ellps=GRS80 +towgs84=0,0,0")) 
r[] <- runif(ncell(r)) 
pts <- sampleRandom(r, 10, na.rm = TRUE, sp = TRUE) 

Plot das Raster wieder rufen Plot, mit Add = TRUE, um Punkte hinzuzufügen.

plot(r) 
    plot(pts, pch=20, cex=2, col="red", add=TRUE) 

Oder zeichnen Sie das Raster und verwenden Sie Punkte, um die Punkt-Feature-Class hinzuzufügen.

plot(r) 
    points(pts, pch=20, cex=2, col="red") 

Edit: Ihre Ausdehnungen zwischen den Raster- und Vektorobjektklassen nicht überlappen.

Wir können SpatialPolygons mit der Ausdehnung Ihrer Objekte und einem Beispielraster (mit einem einheitlichen Wert von 1) erstellen.

library(raster) 
proj <- sp::CRS("+proj=tmerc +lat_0=39.66666666666666 +lon_0=1 +k=1 +x_0=200000 +y_0=300000 
       +ellps=intl +pm=-9.131906111111112 +units=m +no_defs") 
r.ext <- as(extent(90938.29, 105383.3, 190000, 209290), "SpatialPolygons") 
    proj4string(r.ext) <- proj 
pt.ext <- as(extent(-108473.2, -95455.86, -107870.9, -91344.22), "SpatialPolygons") 
    proj4string(pt.ext) <- proj 
line.ext <- as(extent(-108956.5, -93832.44, -108979.5, -90747.34), "SpatialPolygons") 
    proj4string(line.ext) <- proj 
r <- raster(r.ext, resolution = c(15,15), crs = proj) 
    r[] <- rep(1, ncell(r)) 

Hier sehen wir, dass, wenn wir das Raster zeichnen und dann die Punkt- und Linien Ausmaß Polygone, Sie nicht sehen können.

Wenn wir jedoch die Linie und Punkt Ausdehnung Polygone plotten sie gut überlagern.

plot(line.ext) 
    plot(pt.ext,add=TRUE) 

Wenn wir die Raster inwieweit das Ausmaß des Linienobjekts begrenzen, sollten Sie das Raster Subregion sehen, aber nicht. Und wenn Sie versuchen, das Raster zu beschneiden, erhalten Sie einen Fehler "Fehler in .local (x, y, ...): Extents nicht überlappen".

plot(line.ext) 
    plot(r, add=TRUE) 
+0

Danke! Leider arbeitet keiner von mir für mich. Wahrscheinlich liegt das daran, dass ich keine Vektordaten verwende, sondern räumliche Daten, wie ich oben erwähnt habe ... Hast du noch eine andere Idee? – snoops

+0

In diesem Fall sind Vektor und Spatial austauschbar. Der Begriff "Vektor" bezieht sich lediglich auf räumliche Objekte, die als Punkte, Polygone oder Linien dargestellt werden. Da du keine Informationen darüber gibst, was schief läuft, kann ich dir wirklich nicht helfen. Ich kann jedoch spekulieren, dass Ihre Daten in einem anderen Koordinatenraum liegen, also nicht überlagern. Sehen Sie sich den proj4-String jedes Objekts an, um zu sehen, ob sie übereinstimmen. Hast du mein Beispiel durchgearbeitet, das sind räumliche Objekte (Raster und Punkte). –

+0

Ja, ich habe mir dein Beispiel angeschaut und es funktionierte einwandfrei. Wenn ich das gleiche trage, bekomme ich kein Ergebnis. Der Koordinatenraum scheint zu passen, aber ich bin kein Experte. Ich werde meine Frage bearbeiten, so dass Sie selbst schauen können (Altdaten ist das Raster, zu dem ich die zwei anderen Objekte hinzufügen muss). Gibt es eine Möglichkeit, die von mir verwendeten Dokumente hochzuladen, damit Sie es selbst ausprobieren können? Auf jeden Fall nochmals vielen Dank für deine Zeit und Antworten, ich schätze es sehr! – snoops