#603 closed defect (fixed)
shp2pgsql: "-w" produces invalid WKT for MULTI* objects
Reported by: | mwtoews | Owned by: | pramsey |
---|---|---|---|
Priority: | medium | Milestone: | PostGIS 1.5.2 |
Component: | postgis | Version: | master |
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)
Change History (9)
comment:1 by , 14 years ago
comment:2 by , 14 years ago
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 by , 14 years ago
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
by , 14 years ago
Attachment: | postgis-shp2pgsql-wkt.patch added |
---|
comment:4 by , 14 years ago
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 by , 14 years ago
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 by , 14 years ago
Resolution: | → fixed |
---|---|
Status: | new → closed |
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 by , 14 years ago
Milestone: | PostGIS 2.0.0 → PostGIS 1.5.2 |
---|
Hi Mike,
Can you attach your example shapefile so I can take a look at this?
Mark.