แปลงตาราง PostGIS เป็น Shapefile ใน Python หรือไม่


10

ฉันต้องการแปลงตาราง PostGIS เป็น shapefile (โดยไม่ต้องใช้ pgsql2shp)

ในการสร้างรูปทรงเรขาคณิตใน shapefile ฉันต้องให้ Xmin, Ymin และ Xmax, Ymax และรูปทรงเรขาคณิตที่ฉันมีในตาราง PostGIS ของฉันเป็นรูปทรงที่ไม่สม่ำเสมอ (ฉันสามารถรับภายนอกโดยใช้กล่องขอบ แต่จะรวม บางพื้นที่พิเศษมากกว่าพื้นที่ ineterest ของฉัน) มีวิธีใดบ้างที่ฉันสามารถทำงานให้สำเร็จได้?

ฉันต้องการทำสิ่งที่เขียนโปรแกรมและใช้ Python

คำตอบ:


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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.