¿Convertir la tabla PostGIS a Shapefile en Python?

10

Quiero convertir una tabla PostGIS en un archivo de forma (sin usar pgsql2shp).

Para crear una geometría en el archivo de forma, tengo que dar Xmin, Ymin y Xmax, Ymax, y la geometría que tengo en mi tabla PostGIS es de forma irregular (puedo obtener el exterior usando el cuadro delimitador, pero eso incluirá un área extra más que mi área de interés). ¿Hay algún método por el cual pueda hacer la tarea?

Quiero hacer la cosa mediante programación y usando Python.

Vicky
fuente

Respuestas:

12

Si desea hacerlo mediante programación con Python, entonces probablemente GDAL / OGR es la mejor manera de hacerlo. Mire el ejemplo de código de ejemplo que se copia en la tabla de PostgreSQL en el archivo SHP. El ejemplo no es perfecto, pero puede modificarlo fácilmente para adaptarlo a sus necesidades.

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 su entorno de programación es Windows, puede descargar GDAL / OGR desde aquí . Algunos buenos materiales de partida que puedes encontrar aquí . Espero eso ayude.

Mario Miler
fuente
1

Puedo aconsejarle que eche un vistazo a la biblioteca GDAL / OGR: http://www.gdal.org/ogr/index.html

Alex Markov
fuente