Konwertujesz tabelę PostGIS na Shapefile w Pythonie?

10

Chcę przekonwertować tabelę PostGIS na plik shapefile (bez użycia pgsql2shp).

Aby stworzyć geometrię w pliku kształtu, muszę podać Xmin, Ymin i Xmax, Ymax, a geometria, którą mam w mojej tabeli PostGIS, ma kształt nieregularny (mogę uzyskać zewnętrzną stronę za pomocą ramki granicznej, ale będzie to obejmować jakiś dodatkowy obszar większy niż mój obszar zainteresowania). Czy jest jakaś metoda, dzięki której mogę wykonać zadanie?

Chcę to zrobić programowo i przy użyciu Pythona.

Vicky
źródło

Odpowiedzi:

12

Jeśli chcesz to zrobić programowo za pomocą Pythona, prawdopodobnie najlepszym sposobem na to jest GDAL / OGR. Spójrz na przykładowy kod, który kopiuje z tabeli PostgreSQL do pliku SHP. Przykład nie jest idealny, ale możesz go łatwo zmodyfikować, aby dopasować do swoich potrzeb.

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

Jeśli twoje środowisko programistyczne to Windows, możesz pobrać GDAL / OGR stąd . Kilka dobrych materiałów wyjściowych można znaleźć tutaj . Mam nadzieję, że to pomoże.

Mario Miler
źródło
1

Radzę zajrzeć do biblioteki GDAL / OGR: http://www.gdal.org/ogr/index.html

Alex Markov
źródło