0

I am not able to import a shapefile to PostGIS using the same library (OGR). I am using below link but it gives me error. Import shp to Postgis using Python and ogr

Error:

Traceback (most recent call last):

File "C:/Users/n/.qgis2/python/plugins\Importtool\Import_tool.py", line 223, in select_output_file_5

layer = shapefile.GetLayer(0)

AttributeError: 'NoneType' object has no attribute 'GetLayer'

nmtoken
  • 13,355
  • 5
  • 38
  • 87
Ashwin Bhayal
  • 225
  • 1
  • 4
  • 14
  • 1
    double check that you got the filename correct for your shapefile. osgeo.ogr.Open(srcFile) returns None if it can't find or open the file – Steven Kay Aug 05 '15 at 09:14
  • 1
    srcFile = os.path.join("DISTAL-data", "TM_WORLD_BORDERS-0.3","C:\Users\n\Downloads\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()
    cur.execute("INSERT INTO countries (name,outline) " +"VALUES (%s, ST_GeometryFromText(%s, " +"4326))", (name.encode("utf8"), wkt)) conn.commit()
    – Ashwin Bhayal Aug 06 '15 at 05:30

1 Answers1

3

the problem is this line...

srcFile = os.path.join("DISTAL-data", "TM_WORLD_BORDERS-0.3","C:\Users\n\Downloads\TM_WORLD_BORDERS-0.3\TM_WORLD_BORDE‌​RS-0.3.shp")

os.path.join() will create this file path (under windows)

\DISTAL-data\TM_WORLD_BORDERS-0.3\C:\Users\n\Downloads\TM_WORLD_BORDERS-0.3\TM_WORLD_BORDERS-0.3.shp

which probably isn't a valid path. Just replace it with

srcFile = 'C:\Users\n\Downloads\TM_WORLD_BORDERS-0.3\TM_WORLD_BORDERS-0.3.shp'

and it should work.

Steven Kay
  • 20,405
  • 5
  • 31
  • 82