SPIT can't do this (due to bug #747 mentioned above), so you will need a different method.
Here are a few tools that you can try (and as far as I know, they all work with 3D geometries):
- shp2pgsql: command-line program, installed with PostGIS
- shp2pgsql-gui / PostGIS Shapefile and DBF loader: installed with PostGIS, look for it in either pgAdmin III plugins (puzzle icon) or (on MS Windows) Start > Programs > PostGIS for PostgreSQL
- PostGIS Manager: Python plugin for Quantum GIS, GUI built for
shp2pgsql
- ogr2ogr: command-line program, installed with GDAL/OGR, good for converting other types of files (other than just Shapefiles)
- ogr2ogr-gui: a nice GUI by Inventis
I have looked at your data and the book example, the problem is that there are three invalid polygons in data that are processed in the book:
GSHHS_l_L1.shp
ID = 92-W
POLYGON ((-180.0 71.514793999999995,-179.69008299999999 71.577888999999999,-178.648889 71.577416999999997,-178.40644399999999 71.549916999999994,-177.406306 71.244167000000004,-177.877444 71.022889000000006,-179.500111 70.863749999999996,-179.93011100000001 70.979583000000005,-180.0 70.962072000000006))
ID = 486-W
POLYGON ((-180.0 -16.799126,-179.84419399999999 -16.691278,-179.80041700000001 -16.789193999999998,-179.850472 -16.878361000000002,-180.0 -16.959561))
GSHHS_l_L2.shp
ID = 7333-W
POLYGON ((-180.0 65.393473,-179.76583299999999 65.428332999999995,-179.95416700000001 65.385555999999994,-179.90972199999999 65.316389,-180.0 65.321635))
Because this is an example it would be easiest to delete those polygons from the dataset or just add one if statement in you code
if geometry.IsValid():
cursor.execute("INSERT INTO gshhs (level, geom) VALUES (%s, ST_GeomFromText(%s, 4326))", (level, wkt))
Best Answer
It's not possible to load geometries that have these errors into PostGIS using WKB. If you look at the source of
ST_GeomFromWKB
orST_GeomFromEWKB
, you'll see that they're both hardcoded to tell the WKB parser to check that (a) each ring has at least four points, and (b) each ring is closed.If you want to correct these geometries, it'll be easiest to first work with a tool that doesn't have these restrictions. (Though it might be fun to try and catch the parsing error and just pad in some extra well-chosen hex characters.)