Importa shp in Postgis usando Python e ogr


14

Esporta semplicemente una tabella Postgis in shp usando questi suggerimenti ma non riesco a importare un shp in Postgis usando la stessa libreria (ogr). Qualche idea? Grazie mille f.


1
Hai davvero bisogno di usare Python per farlo, o stai solo cercando di importare il file? Cado che devi fare è importare il file quindi utilizzare ogr2ogr dalla riga di comando ogr2ogr -f "PostgreSQL" PG:”dbname=DBNAME host=localhost" file.shp -nln TABLENAME
Jesse Crocker

Risposte:


29

In Python puro, senza utilizzare il modulo di sottoprocesso (os.system è obsoleto) per chiamare ogr2ogro shp2pgsql, ad esempio):

1) con ogr

2) con ogr e psycopg2 dal libro Python Geospatial Development (Eric Westra), capitolo 7, p.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) solo con psycopg2

4) con psycopg2 e altre librerie spaziali

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.