Si tiene la capacidad del controlador PostGIS en el paquete rgdal, entonces solo se trata de crear una cadena de conexión y usarla. Aquí me estoy conectando a mi base de datos local gis
usando credenciales predeterminadas, por lo que mi DSN es bastante simple. Es posible que deba agregar un host, nombre de usuario o contraseña. Consulte los documentos de gdal para obtener información.
> require(rgdal)
> dsn="PG:dbname='gis'"
¿Qué tablas hay en esa base de datos?
> ogrListLayers(dsn)
[1] "ccsm_polygons" "nongp" "WrldTZA"
[4] "nongpritalin" "ritalinmerge" "metforminmergev"
Conseguir uno:
> 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
Que tengo
> 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
De lo contrario, puede utilizar la funcionalidad de la base de datos de R y consultar las tablas directamente.
> 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)
Eso devuelve la geometría de la característica df$geom
, que necesitará convertir a sp
objetos de clase (SpatialPolygons, SpatialPoints, SpatialLines) para hacer cualquier cosa. La función readWKT en rgeos puede ayudar con eso.
Las cosas a tener en cuenta son, por lo general, cosas como columnas de bases de datos que no pueden asignarse a tipos de datos R. Puede incluir SQL en la consulta para realizar conversiones, filtrar o limitar. Sin embargo, esto debería ayudarte a comenzar.
rgadl
? Estoy en Ubuntu 13.04 ...readOGR
método usar un sql en lugar de una tabla completa?where
cláusula y pasarla a OGR a través de,setAttributeFilter
pero todo eso debe hacerse en código C y C ++ ...Si tiene datos en Postgis, no los exporte a shapefile. Desde mi punto de vista, es un paso atrás.
Puede consultar su base de datos postgis desde R utilizando sentencias SQL, importándolas como marcos de datos y, dado que está familiarizado con R, realice todas las estadísticas geográficas que necesite desde allí. Creo que también puede exportar su resultado geoestadístico a postgis.
Usando SQL con Postgis Functions también puede hacer todo tipo de análisis espacial, como operaciones de superposición, distancias, etc.
Para el trazado de mapas, usaría QGIS , un software OpenSource GIS, que puede leer postgis directamente (hasta donde sé que ese era el objetivo inicial del proyecto), y la próxima versión 2.0 viene con muchas características para producir mapas de gran apariencia .
fuente
El paquete sf recientemente introducido (sucesor de sp) proporciona las funciones
st_read()
yst_read_db()
. Después de este tutorial y desde mi experiencia, es más rápido que las formas ya mencionadas. Como sf probablemente reemplazará a sp algún día, también es una buena decisión tener que mirar ahora;)También puede acceder a la base de datos utilizando RPostgreSQL:
Con
st_write()
usted puede cargar datos.fuente
Puede utilizar todas las herramientas al mismo tiempo en función de cada paso de su solución.
Podríamos proporcionarle una respuesta más específica si nos da más detalles de su problema
fuente
También usaría una combinación de rgdal y RPostgreSQL. Entonces, el mismo código que @Guillaume, excepto con un tryCatch que maneja más líneas, un nombre de tabla pseudoaleatorio y el uso de una tabla no registrada para un mejor rendimiento. (Nota para mí: no podemos usar la tabla TEMP, porque no es visible desde readOGR)
Uso:
Pero, esto todavía es dolorosamente lento:
Para un pequeño conjunto de polígonos (6 características, 22 campos):
parte postgis:
parte de readOGR:
fuente
Ahora hay un paquete RPostGIS que puede importar geoms PostGIS en R con consultas SQL.
fuente
También puede combinar rgdal y RPostreSQL. Esta función de ejemplo crea una tabla temporal con RPostgreSQL y la envía a readOGR para la salida de un objeto espacial. Esto es realmente ineficiente y feo, pero funciona bastante bien. Tenga en cuenta que la consulta debe ser una consulta SELECT y el usuario debe tener acceso de escritura a la base de datos.
Puedes llamarlo con algo como:
fuente
Si devuelve una consulta con 'ST_AsText (geom) como geomwkt' y obtiene el resultado en datos, puede usar:
Todavía dolorosamente lento ... 1 segundo por 100 geoms en una prueba.
fuente
Geotuple - https://github.com/rhansson/geotuple es una aplicación web que conecta R-Server y PostGIS (usando RPostgreSQL)
fuente