Преобразование таблицы PostGIS в Shapefile в Python?

10

Я хочу преобразовать таблицу PostGIS в шейп-файл (без использования pgsql2shp).

Чтобы создать геометрию в шейп-файле, я должен дать Xmin, Ymin и Xmax, Ymax, а геометрия, которую я имею в моей таблице PostGIS, имеет неправильную форму (я могу получить внешний вид с помощью ограничительной рамки, но это будет включать какая-то дополнительная территория больше, чем моя область неинтересная). Есть ли способ, которым я могу выполнить задачу?

Я хочу сделать это программно и используя Python.

Vicky
источник

Ответы:

12

Если вы хотите сделать это программно с Python, то, вероятно, GDAL / OGR - лучший способ сделать это. Посмотрите на пример кода, который копирует таблицу из PostgreSQL в файл SHP. Пример не идеален, но вы можете легко изменить его под свои нужды.

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

Если ваша среда программирования Windows, вы можете скачать GDAL / OGR здесь . Некоторые хорошие исходные материалы вы можете найти здесь . Надеюсь, поможет.

Марио Милер
источник
1

Я могу посоветовать вам взглянуть на библиотеку GDAL / OGR: http://www.gdal.org/ogr/index.html

Алекс Марков
источник