Python에서 PostGIS 테이블을 Shapefile로 변환 하시겠습니까?


10

PostGIS 테이블을 pgsql2shp를 사용하지 않고 shapefile로 변환하고 싶습니다.

shapefile에 지오메트리를 만들려면 Xmin, Ymin 및 Xmax, Ymax를 제공해야하며 PostGIS 테이블에있는 지오메트리는 불규칙한 모양입니다 (경계 상자를 사용하여 외부를 얻을 수는 있지만 포함됩니다) 내 ineterest 영역보다 더 넓은 영역). 작업을 수행 할 수있는 방법이 있습니까?

프로그래밍 방식으로 파이썬을 사용하고 싶습니다.

답변:


12

파이썬으로 프로그래밍 방식으로 작업하려면 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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.