PostGIS-Tabelle in Python in Shapefile konvertieren?

10

Ich möchte eine PostGIS-Tabelle in ein Shapefile konvertieren (ohne pgsql2shp zu verwenden).

Um eine Geometrie im Shapefile zu erstellen, muss ich Xmin, Ymin und Xmax, Ymax angeben, und die Geometrie, die ich in meiner PostGIS-Tabelle habe, ist unregelmäßig geformt (ich kann das Äußere mit einem Begrenzungsrahmen erhalten, aber das schließt ein etwas mehr Fläche als meine uninteressante Fläche). Gibt es eine Methode, mit der ich die Aufgabe erledigen kann?

Ich möchte das Ding programmgesteuert und mit Python machen.

Vicky
quelle

Antworten:

12

Wenn Sie dies programmgesteuert mit Python tun möchten, ist GDAL / OGR wahrscheinlich der beste Weg, dies zu tun. Schauen Sie sich den Beispielcode an, der eine Tabelle aus PostgreSQL in eine SHP-Datei kopiert. Das Beispiel ist nicht perfekt, aber Sie können es leicht an Ihre Bedürfnisse anpassen.

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

Wenn Ihre Programmierumgebung Windows ist, können Sie GDAL / OGR hier herunterladen . Einige gute Ausgangsmaterialien finden Sie hier . Ich hoffe es hilft.

Mario Miler
quelle
1

Ich kann Ihnen raten, einen Blick in die GDAL / OGR-Bibliothek zu werfen: http://www.gdal.org/ogr/index.html

Alex Markov
quelle