16

I just export a PostGIS Table to shp using this tips but I'm not able to import a shp to PostGIS using the same library(ogr). Any idea?

Taras
  • 32,823
  • 4
  • 66
  • 137
franco_b
  • 522
  • 1
  • 6
  • 15
  • 1
    Do you really need to use python to do it, or are you just trying to import the file? I fall you need to do is import the file then use ogr2ogr on the command line
    ogr2ogr -f "PostgreSQL" PG:”dbname=DBNAME host=localhost" file.shp -nln TABLENAME
    – Jesse Crocker Mar 18 '14 at 16:37

1 Answers1

32

In pure Python, without using the subprocess module (os.system is deprecated) to call ogr2ogr or shp2pgsql, for example):

1) with ogr

2) with ogr and psycopg2 from the book 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) with psycopg2 only

4) with psycopg2 and other spatial libraries

gene
  • 54,868
  • 3
  • 110
  • 187