Wenn Sie PostGIS-Treiber im rgdal-Paket haben, müssen Sie nur eine Verbindungszeichenfolge erstellen und diese verwenden. Hier verbinde ich mich mit meinen gis
Standardanmeldeinformationen mit meiner lokalen Datenbank , daher ist mein DSN ziemlich einfach. Möglicherweise müssen Sie einen Host, einen Benutzernamen oder ein Kennwort hinzufügen. Weitere Informationen finden Sie in den GDAL-Dokumenten.
> require(rgdal)
> dsn="PG:dbname='gis'"
Welche Tabellen befinden sich in dieser Datenbank?
> ogrListLayers(dsn)
[1] "ccsm_polygons" "nongp" "WrldTZA"
[4] "nongpritalin" "ritalinmerge" "metforminmergev"
Holen Sie sich eines:
> polys = readOGR(dsn="PG:dbname='gis'","ccsm_polygons")
OGR data source with driver: PostgreSQL
Source: "PG:dbname='gis'", layer: "ccsm_polygons"
with 32768 features and 4 fields
Feature type: wkbMultiPolygon with 2 dimensions
Was habe ich
> summary(polys)
Object of class SpatialPolygonsDataFrame
Coordinates:
min max
x -179.2969 180.7031
y -90.0000 90.0000
Is projected: NA
proj4string : [NA]
Data attributes:
area perimeter ccsm_polys ccsm_pol_1
Min. :1.000 Min. :5.000 Min. : 2 Min. : 1
1st Qu.:1.000 1st Qu.:5.000 1st Qu.: 8194 1st Qu.: 8193
Median :1.000 Median :5.000 Median :16386 Median :16384
Mean :1.016 Mean :5.016 Mean :16386 Mean :16384
3rd Qu.:1.000 3rd Qu.:5.000 3rd Qu.:24577 3rd Qu.:24576
Max. :2.000 Max. :6.000 Max. :32769 Max. :32768
Andernfalls können Sie die Datenbankfunktionalität von R verwenden und die Tabellen direkt abfragen.
> require(RPostgreSQL)
Loading required package: RPostgreSQL
Loading required package: DBI
> m <- dbDriver("PostgreSQL")
> con <- dbConnect(m, dbname="gis")
> q="SELECT ST_AsText(the_geom) AS geom from ccsm_polygons LIMIT 10;"
> rs = dbSendQuery(con,q)
> df = fetch(rs,n=-1)
Das gibt die Feature-Geometrie zurück df$geom
, in die Sie konvertieren müssen, um mit sp
Klassenobjekten (SpatialPolygons, SpatialPoints, SpatialLines) etwas zu tun. Die readWKT-Funktion in rgeos kann dabei helfen.
Die Dinge, auf die Sie achten müssen, sind normalerweise Dinge wie Datenbankspalten, die nicht auf R-Datentypen abgebildet werden können. Sie können SQL in die Abfrage einbeziehen, um Konvertierungen, Filterungen oder Einschränkungen vorzunehmen. Damit sollten Sie jedoch beginnen.
rgadl
? Ich bin in Ubuntu 13.04 ...readOGR
Methode eine SQL anstelle einer vollständigen Tabelle zu verwenden?where
Klausel hinzuzufügen und diese über an OGR zu übergeben,setAttributeFilter
aber alles muss in C- und C ++ - Code erfolgen ...Wenn Sie Daten in Postgis haben, exportieren Sie diese nicht in Shapefile. Aus meiner Sicht ist es eine Art Rückschritt.
Sie können Ihre Postgis-Datenbank mit SQL-Anweisungen aus R abfragen, sie als Datenrahmen importieren und, da Sie mit R vertraut sind, alle Geostatistiken ausführen, die Sie von dort aus benötigen. Ich glaube, Sie können Ihr geostatistisches Ergebnis auch wieder in Postgis exportieren.
Mithilfe von SQL mit Postgis-Funktionen können Sie auch alle Arten von räumlichen Analysen durchführen, z. B. Überlagerungsoperationen, Entfernungen usw.
Zum Zeichnen von Karten würde ich QGIS verwenden , eine OpenSource-GIS-Software, die Postgis direkt lesen kann (soweit ich weiß, dass dies das ursprüngliche Ziel des Projekts war), und die kommende Version 2.0 wird mit vielen Funktionen geliefert, um großartig aussehende Karten zu erstellen .
quelle
Das neu eingeführte sf-Paket (Nachfolger von sp) bietet die Funktionen
st_read()
undst_read_db()
. Nach diesem Tutorial und meiner Erfahrung nach ist es schneller als die bereits erwähnten Möglichkeiten. Da sf wahrscheinlich eines Tages sp ersetzen wird, ist es auch ein guter Anruf, jetzt nachzuschauen;)Sie können auch mit RPostgreSQL auf die Datenbank zugreifen:
Mit können
st_write()
Sie Daten hochladen.quelle
Sie können alle Tools für jeden Schritt Ihrer Lösung gleichzeitig verwenden.
Wir können Ihnen eine genauere Antwort geben, wenn Sie uns weitere Einzelheiten zu Ihrem Problem mitteilen
quelle
Ich würde auch eine Kombination aus rgdal und RPostgreSQL verwenden. Also derselbe Code wie bei @Guillaume, mit Ausnahme eines tryCatch, der mehr Zeilen verarbeitet, eines pseudozufälligen Tabellennamens und der Verwendung einer nicht protokollierten Tabelle für eine bessere Leistung. (Anmerkung für mich: Wir können die TEMP-Tabelle nicht verwenden, da sie in readOGR nicht sichtbar ist.)
Verwendung:
Aber das ist immer noch schmerzhaft langsam:
Für eine kleine Gruppe von Polygonen (6 Features, 22 Felder):
Postgis-Teil:
readOGR-Teil:
quelle
Es gibt jetzt ein RPostGIS- Paket, mit dem PostGIS-Geoms mit SQL-Abfragen in R importiert werden können.
quelle
Sie können auch rgdal und RPostreSQL kombinieren. Diese Beispielfunktion erstellt eine temporäre Tabelle mit RPostgreSQL und sendet sie zur Ausgabe eines Geo-Objekts an readOGR. Das ist wirklich ineffizient und hässlich, aber es funktioniert ganz gut. Beachten Sie, dass die Abfrage eine SELECT-Abfrage sein muss und der Benutzer Schreibzugriff auf die Datenbank haben muss.
Sie können es mit so etwas wie aufrufen:
quelle
Wenn Sie eine Abfrage mit 'ST_AsText (geom) as geomwkt' zurückgeben und das Ergebnis in Daten abrufen, können Sie Folgendes verwenden:
Immer noch schmerzhaft langsam .... 1 Sekunde für 100 Geoms bei einem Test.
quelle
Geotuple - https://github.com/rhansson/geotuple ist eine Web-App, die R-Server und PostGIS verbindet (mit RPostgreSQL)
quelle