Importez shp dans Postgis en utilisant Python et ogr

14

Je viens d'exporter une table Postgis vers shp en utilisant ces conseils, mais je ne suis pas en mesure d'importer un shp vers Postgis en utilisant la même bibliothèque (ogr). Une idée? Merci beaucoup f.

franco_b
la source
1
Avez-vous vraiment besoin d'utiliser python pour le faire, ou essayez-vous simplement d'importer le fichier? Je tombe que vous devez faire est d'importer le fichier puis d'utiliser ogr2ogr sur la ligne de commande ogr2ogr -f "PostgreSQL" PG:”dbname=DBNAME host=localhost" file.shp -nln TABLENAME
Jesse Crocker

Réponses:

29

En Python pur, sans utiliser le module de sous-processus (os.system est déconseillé) pour appeler ogr2ogrou shp2pgsql, par exemple):

1) avec ogr

2) avec ogr et psycopg2 du livre Python Geospatial Development (Eric Westra), Chapter 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) avec psycopg2 uniquement

4) avec psycopg2 et d'autres bibliothèques spatiales

gène
la source