Si vous avez une capacité de pilote PostGIS dans le package rgdal, il suffit de créer une chaîne de connexion et de l'utiliser. Ici, je me connecte à ma base de données locale en gis
utilisant des informations d'identification par défaut, donc mon DSN est plutôt simple. Vous devrez peut-être ajouter un hôte, un nom d'utilisateur ou un mot de passe. Voir la documentation de gdal pour plus d'informations.
> require(rgdal)
> dsn="PG:dbname='gis'"
Quelles tables se trouvent dans cette base de données?
> ogrListLayers(dsn)
[1] "ccsm_polygons" "nongp" "WrldTZA"
[4] "nongpritalin" "ritalinmerge" "metforminmergev"
Prends en un:
> 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
Qu'est-ce que j'ai?
> 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
Sinon, vous pouvez utiliser la fonctionnalité de base de données de R et interroger directement les tables.
> 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)
Cela renvoie la géométrie de l' entité dans df$geom
laquelle vous devrez convertir en sp
objets de classe (SpatialPolygons, SpatialPoints, SpatialLines) pour faire quoi que ce soit avec. La fonction readWKT dans rgeos peut vous aider.
Les éléments à prendre en compte sont généralement des éléments tels que des colonnes de base de données qui ne peuvent pas être mappés à des types de données R. Vous pouvez inclure SQL dans la requête pour effectuer des conversions, filtrer ou limiter. Cela devrait cependant vous aider à démarrer.
rgadl
? Je suis dans Ubuntu 13.04 ...readOGR
méthode d'utiliser un sql au lieu d'une table complète?where
clause et de la transmettre à OGR viasetAttributeFilter
mais que tout doit être fait en code C et C ++ ...Si vous avez des données dans Postgis, ne les exportez pas vers le fichier de formes. De mon point de vue, c'est une sorte de recul.
Vous pouvez interroger votre base de données Postgis à partir de R à l'aide d'instructions SQL, les importer en tant que cadres de données et, comme vous connaissez R, faire toutes les géostatistiques dont vous avez besoin à partir de là. Je pense que vous pouvez également réexporter votre résultat géostatistique vers postgis.
En utilisant SQL avec les fonctions Postgis, vous pouvez également effectuer toutes sortes d'analyses spatiales, telles que des opérations de superposition, des distances, etc.
Pour le traçage de cartes, j'utiliserais QGIS , un logiciel SIG OpenSource, qui peut lire directement les postgis (pour autant que je sache que c'était l'objectif initial du projet), et la prochaine version 2.0 est livrée avec de nombreuses fonctionnalités pour produire de superbes cartes .
la source
Le nouveau sf-package (successeur de sp) fournit les fonctions
st_read()
etst_read_db()
. Après ce tutoriel et d'après mon expérience, c'est plus rapide que les moyens déjà mentionnés. Comme sf remplacera probablement sp un jour c'est aussi un bon appel à regarder maintenant;)vous pouvez également accéder à la base de données en utilisant RPostgreSQL:
Avec
st_write()
vous pouvez télécharger des données.la source
Vous pouvez utiliser tous les outils en même temps en fonction de chaque étape de votre solution.
Nous pourrions vous fournir une réponse plus spécifique si vous nous donniez plus de détails sur votre problème
la source
J'irais également sur une combinaison de rgdal et RPostgreSQL. Donc, même code que @Guillaume, sauf avec un tryCatch qui gère plus de lignes, un nom de table pseudo-aléatoire et l'utilisation d'une table non enregistrée pour de meilleures performances. (Remarque pour moi-même: nous ne pouvons pas utiliser la table TEMP, car elle n'est pas visible depuis readOGR)
Usage:
Mais, c'est encore douloureusement lent:
Pour un petit ensemble de polygones (6 entités, 22 champs):
partie postgis:
partie readOGR:
la source
Il existe maintenant un package RPostGIS qui peut importer des géomètres PostGIS dans R avec des requêtes SQL.
la source
Vous pouvez également combiner rgdal et RPostreSQL. Cet exemple de fonction crée une table temporaire avec RPostgreSQL et l'envoie à readOGR pour la sortie d'un objet spatial. C'est vraiment inefficace et moche, mais cela fonctionne assez bien. Notez que la requête doit être une requête SELECT et que l'utilisateur doit avoir un accès en écriture à la base de données.
Vous pouvez l'appeler avec quelque chose comme:
la source
Si vous renvoyez une requête avec 'ST_AsText (geom) as geomwkt' et récupérez le résultat dans les données, vous pouvez utiliser:
Toujours douloureusement lent .... 1 seconde pour 100 geoms sur un test.
la source
Geotuple - https://github.com/rhansson/geotuple est une application web qui connecte R-Server et PostGIS (en utilisant RPostgreSQL)
la source