{"word_count": 494, "character_count": 4454}
Pourquoi Combiner R et PostGIS ?Combiner R et PostGIS permet d'utiliser dans un environnement de travail intégré regroupant à la fois la puissance de R (gestion des données, traitements statistiques, ...) et la puissance de PostGIS (géotraitements, requêtes spatiales, ...) sans rupture de charge. Cette alliance permet notamment de : traiter, analyser et cartographier les données (R) ; bénéficier des dernières évolutions de PostGIS 2 (gestion topologique, indexation, géotraitements, ...) ; structurer les données de façon efficace (PostGIS) ; favoriser le recherche reproductible (R &#38; PostGIS). Et tout cela avec les avantages du libre et du gratuit (nombreuses mises à jour, grosse communauté d'utilisateurs). Bref,  Cette combinaison permet d'offrir un environnement de développement complet et puissant adapté à la très grande majorité des traitements utiles en géographie, en statistique et géomatique. Que demander de plus...PrérequisPour commencer, il faut faire quelques installations :installer R (http://www.r-project.org/)installer et configurer PostGIS (http://postgis.net/install/ &#38; http://postgis.net/docs/postgis_installation.html)Comment transférer les données de R à PostGIS et inversement ?Théoriquement, il est possible d'importer et d'exporter des spatialdataframes dans PostGis  avec le package rgdal. Néanmoins, après de nombreux essais infructueux,  une solution basée sur l'import/export des géométries au format WKT s’avère nettement  plus efficace. La meilleure solution trouvée sur le web est proposée sur le site de Philipp Hunziker. Sur ce site, l'auteur propose deux fonctions permettant d'importer ou d'exporter les géométries et les tables attributaires.  Les fonctions proposées sur ce site ne gérant ni les projections ni l'import de polygones uniques, je propose ci-dessous une version un petit peu mise mise à jour.Une fois le script Rpostgis.R téléchargé et sourcé, la fonction dbWriteSpatial() permet de transférer un spatialdataframe vers PostGIS.La fonction dbReadSpatial() permet de de transférer un une table PostGIS vers un spatialdataframeExemple d'utilisation :# Paramètres de connexioncon &#60;- dbConnect(dbDriver("PostgreSQL"), dbname="test")# Shapfile -&#62; R -&#62; PostGISdf &#60;- readOGR(dsn ="geom/",layer = "polys")dbWriteSpatial(con, df, schemaname="public", tablename="newtable", replace=T,srid=3035)# PostGIS -&#62; Rspdf &#60;- dbReadSpatial(con, schemaname="public", tablename="newtable", geomcol="geom")proj4string(spdf)head(spdf@data)plot(spdf)Exécuter une requête PostGIS dans RL’exécution de requêtes PostGIS dans R s'effectue avec le package RPostgreSQL# Appel du package RPostgreSQLrequire(RPostgreSQL)# Définition des paramètres de connexioncon &#60;- dbConnect(dbDriver("PostgreSQL"), dbname="test")# Requête (e.g zone tampon)q&#60;-"CREATE TABLE nom-de-ma-nouvelle-table-postgis- AS SELECT id,ST_Buffer(geom,200000) AS geom FROM nom-de-ma-table-postgis"# Envoi de la requête vers PostGISres&#60;-dbSendQuery(con,q)# Libération des ressources pour effectuer éventuellement une autre requêtedbClearResult(res)Un exemple de traitement simple (e.g. Polygons -&#62; polylines) source("sources/Rpostgis.R")# 1. Connexioncon &#60;- dbConnect(dbDriver("PostgreSQL"), dbname="test")# 2. Transfert d'une couche sur les pays européens dans PostGISdf &#60;- readOGR(dsn ="data/",layer = "NUTS0_RG_20M_2006")dbWriteSpatial(con, df, schemaname="public", tablename="pays", replace=T,srid=3035)# 3. Exécution d'un requête (Polygones -&#62; polylignes)q&#60;-"CREATE TABLE bound AS SELECT id,ST_Boundary(geom) AS geom FROM pays"res&#60;-dbSendQuery(con,q)dbClearResult(res)# 4. Récupération du résultat dans Rdf2 &#60;- dbReadSpatial(con, schemaname="public", tablename="bound", geomcol="geom")# 5.  Affichagepar(mfrow=c(1,2))plot(df,col="red")plot(df2,col="red")par(mfrow=c(1,1))# 6. Nettoyage de la base PostGISres1&#60;-dbSendQuery(con,"SELECT DropGeometryTable('bound')")dbClearResult(res1)res2&#60;-dbSendQuery(con,"SELECT DropGeometryTable('pays')")dbClearResult(res2) ConclusionSi l'exemple montré ici est simple (il aurait pu être effectué intégralement dans R sans PostGIS), il montre néanmoins un aperçu des possibilités offertes par l'articulation R&#60;-&#62;PostGIS ainsi que la logique d'une telle utilisation.  Dans un prochain billet, je montrerai comment utiliser cet environnement de développement pour réaliser une généralisation cartographique qui conserve la topologie.