Importe o shp para o Postgis usando Python e ogr

13

Acabo de exportar uma tabela do Postgis para o shp usando essas dicas, mas não consigo importar um shp para o Postgis usando a mesma biblioteca (ogr). Qualquer ideia? Muito obrigado f.

franco_b
fonte
1
Você realmente precisa usar python para fazer isso ou está apenas tentando importar o arquivo? Eu caio você precisa fazer é importar o arquivo, em seguida, usar ogr2ogr na linha de comando ogr2ogr -f "PostgreSQL" PG:”dbname=DBNAME host=localhost" file.shp -nln TABLENAME
Jesse Crocker

Respostas:

28

No Python puro, sem usar o módulo de subprocesso (o sistema.s está obsoleto) para chamar ogr2ogrou shp2pgsql, por exemplo):

1) com ogr

2) com ogr e psycopg2 do livro Python Geospatial Development (Eric Westra), capítulo 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) somente com psycopg2

4) com psycopg2 e outras bibliotecas espaciais

gene
fonte