Convertir une table PostGIS en Shapefile en Python?

10

Je souhaite convertir une table PostGIS en un fichier de formes (sans utiliser pgsql2shp).

Afin de créer une géométrie dans le fichier de formes, je dois donner les Xmin, Ymin et Xmax, Ymax, et la géométrie que j'ai dans ma table PostGIS est de forme irrégulière (je peux obtenir l'extérieur en utilisant le cadre de délimitation, mais cela inclura une zone supplémentaire plus que ma zone la moins intéressante). Existe-t-il une méthode par laquelle je peux accomplir la tâche?

Je veux faire la chose par programme et en utilisant Python.

Vicky
la source

Réponses:

12

Si vous voulez le faire par programme avec Python, alors probablement GDAL / OGR est la meilleure façon de le faire. Regardez l'exemple de code exemple qui copie sur la table de PostgreSQL dans le fichier SHP. L'exemple n'est pas parfait mais vous pouvez facilement le modifier pour l'adapter à vos besoins.

import os
os.environ['PATH'] = "c:\\Program Files\\GDAL\\bin" + ';' + os.environ['PATH']
os.environ['GDAL_DRIVER_PATH'] = "c:\\Program Files\\GDAL\\bin\\gdal\\plugins-optional"
os.environ['GDAL_DATA'] = "c:\\Program Files\\GDAL\\bin\\gdal-data"
import ogr

conn=ogr.Open("PG: host=192.168.5.3 dbname=some_database user=postgres password=xxxx")
if conn is None:
    print 'Could not open a database or GDAL is not correctly installed!'
    sys.exit(1)

output = "d:\\points.shp"

# Schema definition of SHP file
out_driver = ogr.GetDriverByName( 'ESRI Shapefile' )
out_ds = out_driver.CreateDataSource(output)
out_srs = None
out_layer = out_ds.CreateLayer("point", out_srs, ogr.wkbPoint)
fd = ogr.FieldDefn('name',ogr.OFTString)
out_layer.CreateField(fd)


layer = conn.GetLayerByName("point_data")
#layer = conn.ExecuteSQL(sql)

feat = layer.GetNextFeature()
while feat is not None:
    featDef = ogr.Feature(out_layer.GetLayerDefn())
    featDef.SetGeometry(feat.GetGeometryRef())
    featDef.SetField('name',feat.TITLE)
    out_layer.CreateFeature(featDef)
    feat.Destroy()
    feat = layer.GetNextFeature()

conn.Destroy()
out_ds.Destroy()

Si votre environnement de programmation est Windows, vous pouvez télécharger GDAL / OGR à partir d' ici . Quelques bons matériaux de départ que vous pouvez trouver ici . J'espère que cela aide.

Mario Miler
la source
1

Je peux vous conseiller de jeter un œil à la bibliothèque GDAL / OGR: http://www.gdal.org/ogr/index.html

Alex Markov
la source