Konversi tabel PostGIS ke Shapefile dengan Python?

10

Saya ingin mengubah tabel PostGIS menjadi shapefile (tanpa menggunakan pgsql2shp).

Untuk membuat geometri di shapefile saya harus memberikan Xmin, Ymin dan Xmax, Ymax, dan geometri yang saya miliki di tabel PostGIS saya adalah yang berbentuk tidak teratur (saya bisa mendapatkan eksterior menggunakan kotak pembatas tetapi itu akan mencakup beberapa area ekstra lebih dari area saya paling tidak aktif) Apakah ada metode yang saya bisa menyelesaikan tugas?

Saya ingin melakukan hal itu secara terprogram dan menggunakan Python.

Vicky
sumber

Jawaban:

12

Jika Anda ingin melakukannya secara terprogram dengan Python maka mungkin GDAL / OGR adalah cara terbaik untuk melakukannya. Lihatlah contoh kode contoh yang menyalin di atas meja dari PostgreSQL ke file SHP. Contoh tidak sempurna tetapi Anda dapat dengan mudah memodifikasinya agar sesuai dengan kebutuhan Anda.

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

Jika lingkungan pemrograman Anda adalah Windows, maka Anda dapat mengunduh GDAL / OGR dari sini . Beberapa bahan awal yang baik dapat Anda temukan di sini . Semoga ini bisa membantu.

Mario Miler
sumber
1

Saya dapat menyarankan Anda untuk melihat perpustakaan GDAL / OGR: http://www.gdal.org/ogr/index.html

Alex Markov
sumber