Opened 9 years ago

Closed 9 years ago

Last modified 9 years ago

#603 closed defect (fixed)

shp2pgsql: "-w" produces invalid WKT for MULTI* objects

Reported by: Mike Taves Owned by: pramsey
Priority: medium Milestone: PostGIS 1.5.2
Component: postgis Version: trunk
Keywords: shp2pgsql Cc:

Description

When using the "-w" option for WKT output on MULTILINESTRING/MULTIPOLYGON shapefiles, the output is invalid.
For example, using a two feature shapefile where the first is a single polygon and the second is a two-piece multipolygon:

$ shp2pgsql -s 4326 -w foopoly.shp
Shapefile type: Polygon
Postgis type: MULTIPOLYGON[2]
...
INSERT INTO "foopoly" ("fooname",the_geom) VALUES ('triangle',GeomFromText('SRID=4326;MULTIPOLYGON(SRID=4326;((-0.573744292237443 0.445890410958904,-0.436301369863014 0.257305936073059,-0.660045662100457 0.209360730593607,-0.573744292237443 0.445890410958904)))', 4326));
INSERT INTO "foopoly" ("fooname",the_geom) VALUES ('split shape',GeomFromText('SRID=4326;MULTIPOLYGON(SRID=4326;((-0.100684931506849 0.365981735159817,-0.0335616438356166 0.199771689497717,-0.209360730593607 0.225342465753425,-0.100684931506849 0.365981735159817)),SRID=4326;((-0.212557077625571 0.190182648401827,-0.0367579908675799 0.161415525114155,-0.167808219178082 0.0463470319634702,-0.212557077625571 0.190182648401827)))', 4326));
...

Attachments (2)

foopoly.zip (1.7 KB) - added by Mike Taves 9 years ago.
multipolygon example
postgis-shp2pgsql-wkt.patch (1.1 KB) - added by mcayland 9 years ago.

Download all attachments as: .zip

Change History (9)

comment:1 Changed 9 years ago by mcayland

Hi Mike,

Can you attach your example shapefile so I can take a look at this?

Mark.

Changed 9 years ago by Mike Taves

Attachment: foopoly.zip added

multipolygon example

comment:2 Changed 9 years ago by Mike Taves

I've tested with several other shapefiles, and I've confirmed this happens with any simple line and polygon shapefiles. (But it does not apply to point shapefiles).

The only possible way to avoid this bug and produce valid WKT is if the polygon or line files are not multi- objects, and the "-S" flag is used (this won't work with "foopoly" since it uses multi- objects).

comment:3 Changed 9 years ago by pramsey

HWGEOM support is only required to load into pre-1.0 versions of PostGIS... are you testing this for completeness or for your own use? I'm willing to fix it in 1.5 if someone has a legitimate use for it, but for 2.0+ it must be removed :)

Changed 9 years ago by mcayland

Attachment: postgis-shp2pgsql-wkt.patch added

comment:4 Changed 9 years ago by mcayland

Already beat you to it ;)

Mike, please can you try the attached branch against 1.5? It's reasonably safe to apply as it's small and only does anything when -w is specified.

comment:5 Changed 9 years ago by Mike Taves

The patch works to produce usable SQL that is successfully loaded into postgres.

INSERT INTO "foopoly" ("fooname",the_geom) VALUES ('triangle',GeomFromText('SRID=26910;MULTIPOLYGON(((-0.573744292237443 0.445890410958904,-0.436301369863014 0.257305936073059,-0.660045662100457 0.209360730593607,-0.573744292237443 0.445890410958904)))', 26910));
INSERT INTO "foopoly" ("fooname",the_geom) VALUES ('split shape',GeomFromText('SRID=26910;MULTIPOLYGON(((-0.100684931506849 0.365981735159817,-0.0335616438356166 0.199771689497717,-0.209360730593607 0.225342465753425,-0.100684931506849 0.365981735159817)),((-0.212557077625571 0.190182648401827,-0.0367579908675799 0.161415525114155,-0.167808219178082 0.0463470319634702,-0.212557077625571 0.190182648401827)))', 26910));

However I get this warning for each feature (twice for :

WARNING:  OGC WKT expected, EWKT provided - use GeomFromEWKT() for this

I think a better patch would set SRID = -1 for all geometries (not just inner). But a warning is fine at this stage.

Regarding the future of this feature: I don't rely on it, but I've found it helpful for some debugging. I won't miss it if it is removed for v2.0.

comment:6 Changed 9 years ago by mcayland

Resolution: fixed
Status: newclosed

Yeah, that's because the old 0.9 installations don't have the separate EWKT/EWKB functions.

I've committed the patch to 1.5 branch at r5989 and trunk at r5990. Paul, I'll leave it you to remove this functionality later as a separate task on trunk, although I also have used it on occasions to debug shapefile content. Maybe we should just bring it up to date, i.e. using the correct EWKT functions, since the code overhead from this now really small given that liblwgeom does all the magic.

comment:7 Changed 9 years ago by robe

Milestone: PostGIS 2.0.0PostGIS 1.5.2
Note: See TracTickets for help on using tickets.