Was ist der nützlichste räumliche R-Trick?

44

R wird zu einem starken Werkzeug für die Verarbeitung und Analyse von Geodaten. Ich habe einige nützliche Dinge durch Fragen wie diese bei SO gelernt und dachte, dass es nützlich sein könnte, etwas Ähnliches zu haben, das aber eher räumlich orientiert ist.

Können Sie einige räumliche R-Tipps und -Tricks weitergeben, die Sie für nützlich befunden haben?

U / min radek
quelle
5
Community-Wiki?
Relet
ack. Vielen Dank. Ich glaube, ich habe das gesehen, aber es ist leicht zu vergessen.
Relet 10.11.10
3
Also: rspatialtips.org.uk
radek
Ich denke, dies sollte auch ein Community-Wiki sein, da dies zu einer Art Liste geworden ist.
RK

Antworten:

38

Dies ist weniger ein Trick als vielmehr die spplot()raffinierte integrierte Funktionalität. spplot()Die Skalierbarkeit von Legendenmustern (um Klassifizierungsunterbrechungsbereiche abzugleichen) ist ein nützliches pädagogisches Werkzeug bei der Erörterung von Attributdatenverteilung und Klassifizierungstypen. Das Kombinieren von kumulativen Verteilungsdiagrammen mit den Karten hilft dabei.

Bildbeschreibung hier eingeben Bildbeschreibung hier eingeben

Die Schüler müssen nur einige Skriptparameter ändern, um Klassifizierungstypen und Datentransformationseffekte zu untersuchen. Dies ist in der Regel der erste Ausflug in R in einem hauptsächlich auf ArcGIS ausgerichteten Kurs.

Hier ist ein Codeausschnitt:

library(rgdal) # Loads SP package by default
NE = readOGR(".", "NewEngland") # Creates a SpatialPolygonsDataFrame class (sp)

library(classInt)
library(RColorBrewer)
pal = brewer.pal(7,"Greens")
brks.qt = classIntervals(NE$Frac_Bach, n = 7, style = "quantile")
brks.jk = classIntervals(NE$Frac_Bach, n = 7, style = "jenks")
brks.eq = classIntervals(NE$Frac_Bach, n = 7, style = "equal")

# Example of one of the map plots
spplot(NE, "Frac_Bach",at=brks.eq$brks,col.regions=pal, col="transparent",
       main = list(label="Equal breaks"))
# Example of one of the cumulative dist plots
plot(brks.eq,pal=pal,main="Equal Breaks")

Ref: Angewandte Geodatenanalyse mit R (R. Bivand, E. Pebesma & V. Gomez-Rubio)

MannyG
quelle
1
sehr cool! Das sieht sehr nützlich aus.
29.
2
PolyGeo saugt als Moderator
Unter dem Radar
28

BEARBEITEN: Beachten Sie, dass dies nicht mehr funktioniert, 2018-10-24, aufgrund neuer Anforderungen für Google Map-Quellen.

Ich war ziemlich glücklich, das Dismo-Paket mit Geokodierung und Google Maps-Download zu finden:

library(dismo)
x <- geocode('110 George Street, Bathurst, NSW, Australia')
a <- x[5:8] + c(-0.001, 0.001, -0.001, 0.001)
e <- extent(as.numeric(a))
g <- gmap(e, type = "satellite")

plot(g)

Das heißt, in R 2.12.0 unter Windows ist es trivial, dismo und seine Abhängigkeiten dort zu installieren, nicht sicher auf anderen Systemen.

Alt-Text

mdsumner
quelle
1
Das sieht sehr nützlich aus - ich habe jedoch Probleme mit der Leitung und e <- extent(x[4:7] + c(-0.001, 0.001, -0.001, 0.001))bekomme eine Fehlermeldung Error: c("x", "y") %in% names(x) is not all TRUE. x[4:7]scheint aber in Ordnung zu sein; Irgendwelche Gedanken darüber, was das Problem sein könnte?
25.
Ja, Sie benötigen ein reproduzierbares Beispiel
mdsumner 25.11.11
Ich versuche das Beispiel in dieser Antwort zu reproduzieren und es funktioniert nicht. x <- geocode('110 George Street, Bathurst, NSW, Australia')gibt ZERO_RESULTSzum Beispiel zurück und wenn ich ein Beispiel verwende, das lat / long zurückgibt, die Funktione <- extent(x[4:7] + c(-0.001, 0.001, -0.001, 0.001)) also fails.
djq
Es gibt vielleicht eine elegantere Art, dies zu tun, aber extentes ist ein Vektor von Zahlen erforderlich. Das funktioniert also e <- extent(c(x[,4], x[,5], x[,6], x[,7]) + c(-0.001, 0.001, -0.001, 0.001)).
djq
2
Die folgende funktioniert auch:e <- extent(as.numeric(x[4:7]) + c(-0.001, 0.001, -0.001, 0.001))
snth
11

Auch kein Trick, aber hier sind einige Ressourcen / Beispiele, die ich gesammelt habe

Ein Beispiel für das Plotten mehrerer kleiner Karten von Areal-Daten in R mithilfe des Gitterpakets.

Es gibt ein paar Fragen zu StackOverflow, die sich mit Mapping und R befassen, und hier ist eine mit einem schönen Beispiel. Ich würde mir auch die anderen Antworten und die darin enthaltenen Ressourcen ansehen (und nach weiteren Beispielen suchen).

Einen anderen Link zu derselben R-Sig-Geo- Gruppe gab Brad bereits. Es ist sehr aktiv und Roger Bivand beantwortet praktisch jeden Tag Fragen in der Gruppe. Beide bezogen sich auf Programmierung und statistische Analyse.

Neben dem Auschecken der räumlichen Seite von cran würde ich auch vorschlagen, die von Adrian Baddeley gepflegte Spatstat- Seite speziell auszuprobieren . Viele Beispiele, ein Kurs und ein bevorstehendes E-Book. (Im Moment habe ich den Spatstat- Kurs durchlaufen , und ich denke, es ist eine viel sanftere Einführung als das Bivand-Buch).

Keine kostenlose Ressource, aber für alle, die sich für RI interessieren, empfehlen wir Ihnen, die Seite Use R! Serie von Springer. Das Buch Applied Spatial Data Analysis mit R ist direkt relevant (auch das Buch A Beginner's Guide to R ist mein Vorschlag, R zu lernen.)

Ein kostenloses E-Book, ein praktischer Leitfaden zur geostatistischen Kartierung (Hengl 2009), enthält Beispiele für angewandte Geostaten in R, GRASS und Google Earth (KML).

Wenn ich weitere gute Beispiele finde, werde ich diese weiter aktualisieren (ich hoffe, dass auch andere Leute gute Beispiele posten!)

Andy W
quelle
Vielen Dank, Andy. Ich mag Gitterbeispiele. Stimme voll und ganz Bivand et al. Buch - eine großartige Ressource.
Radek
10

Für die Rasteranalyse ist das Rasterpaket äußerst leistungsfähig. Neben dem Standardhandbuch gibt es ein paar Vignetten, um loszulegen.

johannes
quelle
Für alles, was das Raster-Paket nicht verarbeiten kann, weil es mit RAM arbeitet, können Sie gdal_Utlis in Betracht ziehen, das eine Wrapper-Funktion für die Verwendung von gdal bietet, mit der Sie große Dateien verarbeiten können.
Joaoal
7

Ich bin kein PostGIS-Benutzer, aber nachdem ich Voronoi-Polygone für eine Frage zum nächsten Nachbarn vorgeschlagen habe , habe ich ein bisschen gesucht. Ich habe festgestellt, dass Sie mit R Voronoi-Polygone für PostGIS erstellen können . Ich bin beeindruckt.

Kirk Kuykendall
quelle
Ich bin mir sicher, dass es einfachere Möglichkeiten gibt, als ich vorschlagen werde, aber Sie können Tesselations im spatstat-Paket erstellen und dieses Objekt dann mit dieser von Adrian Baddeley bereitgestellten Funktiontess in ein spObjekt konvertieren . Von einem Objekt können Sie es in ein Shapefile exportieren, wenn Sie möchten. sp
Andy W
5

Ich bin auf Spatial-Analyst.net gestoßen . Sehr informativ, umfassend und nützlich. Weitere Informationen zu dieser Frage und einige der vorherigen Antworten finden Sie auf dieser Seite .

Sean Baskin
quelle
4

Mit dieser Funktion können Sie auf einfache Weise räumliche Verknüpfungen erstellen, allerdings nur, wenn alle Bereiche mit Polygonen gefüllt sind.

library(rgeos)
library(sp) 
library(maptools)
library(rgdal)
library(sp)
xy.map <- readShapeSpatial("http://www.udec.cl/~jbustosm/points.shp")
manzana.map <- readShapeSpatial("http://www.udec.cl/~jbustosm/manzanas_from.shp" )

IntersectPtWithPoly <- function(x, y) { 
# Extracts values from a SpatialPolygonDataFrame with SpatialPointsDataFrame, and appends table (similar to 
# ArcGIS intersect)
# Args: 
#   x: SpatialPoints*Frame
#   y: SpatialPolygonsDataFrame
# Returns:
# SpatialPointsDataFrame with appended table of polygon attributes

  # Set up overlay with new column of join IDs in x
  z <- overlay(y, x)

  # Bind captured data to points dataframe
  x2 <- cbind(x, z)

  # Make it back into a SpatialPointsDataFrame 
  # Account for different coordinate variable names 
  if(("coords.x1" %in% colnames(x2)) & ("coords.x2" %in% colnames(x2))) {
    coordinates(x2) <- ~coords.x1 + coords.x2  
  } else if(("x" %in% colnames(x2)) & ("x" %in% colnames(x2))) {
    coordinates(x2) <- ~x + y 
  }

  # Reassign its projection if it has one
  if(is.na(CRSargs(x@proj4string)) == "FALSE") {
    x2@proj4string <- x@proj4string  
  }
  return(x2)
}


test<-IntersectPtWithPoly (xy.map,manzana.map)
José Bustos
quelle
3

Beispiel für eine Punktmusteranalyse:

#Load library
library(spatstat) 
#create some coordinates        
x=c(78,120,150,17,20,402) 
#prepare the window range      
y=c(70,103,100,205,200,301)
win=owin(range(x),range(y)) 
#create the point pattern
p <- ppp(x,y,window=win)
#Plot it
plot(p) 

Erstellt ein Punktmuster und zeigt es. Das spatstat- Paket verfügt über eine Reihe von Funktionen zur Analyse von geografischen Daten. Hier sind einige spatstat- Tutorials:

dimitris
quelle
1

Ich bin mir nicht sicher, ob dies ein "Trick" ist, aber ich bin ein großer Fan der Kombination des acsPakets (zur Auswahl von US-Volkszählungsdaten) und des leafletPakets (zur Erstellung interaktiver Javascript-Karten, die online gehostet werden können).

Dieses Tutorial macht einen hervorragenden Job und zeigt den Nutzen der Verwendung dieser beiden Pakete zusammen.

Tiernan
quelle