Impor shp ke Postgis menggunakan Python dan ogr

14

Saya hanya mengekspor Tabel Postgis ke shp menggunakan tips ini, tetapi saya tidak dapat mengimpor shp ke Postgis menggunakan perpustakaan yang sama (ogr). Ada ide? Terima kasih banyak f.

franco_b
sumber
1
Apakah Anda benar-benar perlu menggunakan python untuk melakukannya, atau Anda hanya mencoba mengimpor file? Saya yakin yang perlu Anda lakukan adalah mengimpor file kemudian menggunakan ogr2ogr pada baris perintah ogr2ogr -f "PostgreSQL" PG:”dbname=DBNAME host=localhost" file.shp -nln TABLENAME
Jesse Crocker

Jawaban:

29

Dalam Python murni, tanpa menggunakan modul subproses (os.sistem sudah tidak digunakan lagi) untuk memanggil ogr2ogratau shp2pgsql, misalnya):

1) dengan ogr

2) dengan ogr dan psycopg2 dari buku Python Geospatial Development (Eric Westra), Bab 7, hal.219

import os.path  
import psycopg2
import osgeo.ogr  
connection = psycopg2.connect("dbname=... user=...")  
cursor = connection.cursor()  
cursor.execute("DELETE FROM countries")  
srcFile = os.path.join("DISTAL-data", "TM_WORLD_BORDERS-0.3","TM_WORLD_BORDERS-0.3.shp")  
shapefile = osgeo.ogr.Open(srcFile)    
layer = shapefile.GetLayer(0)    
for i in range(layer.GetFeatureCount()):  
    feature = layer.GetFeature(i)  
    name = feature.GetField("NAME").decode("Latin-1")  
    wkt = feature.GetGeometryRef().ExportToWkt()  
    cursor.execute("INSERT INTO countries (name,outline) " +"VALUES (%s, ST_GeometryFromText(%s, " +"4326))", (name.encode("utf8"), wkt))  

connection.commit()  

3) hanya dengan psycopg2

4) dengan psycopg2 dan perpustakaan spasial lainnya

gen
sumber