Conversione della tabella PostGIS in Shapefile in Python?


10

Voglio convertire una tabella PostGIS in uno shapefile (senza usare pgsql2shp).

Per creare una geometria nello shapefile devo dare Xmin, Ymin e Xmax, Ymax e la geometria che ho nella mia tabella PostGIS è di forma irregolare (posso ottenere l'esterno usando il riquadro di delimitazione ma includendo qualche area extra più della mia area di più ineterest). Esiste un metodo con cui posso eseguire l'attività?

Voglio fare la cosa a livello di codice e usando Python.

Risposte:


12

Se vuoi farlo a livello di codice con Python, probabilmente GDAL / OGR è il modo migliore per farlo. Guarda il codice di esempio di esempio che copia sulla tabella da PostgreSQL nel file SHP. L'esempio non è perfetto ma è possibile modificarlo facilmente per adattarlo alle proprie esigenze.

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()

Se il tuo ambiente di programmazione è Windows, puoi scaricare GDAL / OGR da qui . Alcuni buoni materiali di partenza che puoi trovare qui . Spero che sia d'aiuto.


1

Posso consigliarvi di dare un'occhiata alla biblioteca GDAL / OGR: http://www.gdal.org/ogr/index.html

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.