[postgis-users] LineString resulting in empty Polygon geometry in generalization processing
Marco Boeringa
marco at boeringa.demon.nl
Sat Aug 7 08:33:16 PDT 2021
Hi all,
When I run the below code (WKT geometry included in the code), the
original LineString geometry is returned as an empty Polygon geometry in
the 'way_generalized' column of the created view (this is how DBeaver
shows it listed in table view, in pgAdmin the Geometry Viewer won't show
anything).
Is this the expected outcome? I haven't seen this issue popup before,
and it caused a full stop in my processing of OpenStreetMap Planet data,
as PostgreSQL / PostGIS errored out with a
"Geometry type (Polygon) does not match column type (LineString)"
type error when the processing flow attempted to insert the geometry in
the final result table. So PostgreSQL / PostGIS also recognizes it as a
Polygon geometry.
Now I have seen dimensional collapse before, as in another issue we
recently discussed here, and some PostGIS functions are documented to
potentially return a lower dimension geometry, but in this case it is
recognized as higher dimension one, albeit an "empty" Polygon.
Note that this line hits the date line, it is this object from
OpenStreetMap:
https://www.openstreetmap.org/way/908501985
Marco
*** CODE: ***
CREATE VIEW test2 AS SELECT way,CASE
WHEN
ST_NPoints(ST_Transform(ST_SimplifyVW(ST_Transform(way::geometry(GEOMETRY,
4326),
'+proj=hammer'),
400.0),
'+proj=hammer',
4326)) < 2 THEN way::geometry(GEOMETRY,
4326)
ELSE
CASE
WHEN
ST_IsValid(ST_Transform(ST_SimplifyVW(ST_Transform(way::geometry(GEOMETRY,
4326),
'+proj=hammer'),
400.0),
'+proj=hammer',
4326)) THEN
ST_Transform(ST_SimplifyVW(ST_Transform(way::geometry(GEOMETRY,
4326),
'+proj=hammer'),
400.0),
'+proj=hammer',
4326)
ELSE
CASE
WHEN ST_IsValid
(CASE WHEN ST_NPoints
(CASE WHEN
ST_IsValid(ST_SimplifyPreserveTopology(ST_Transform(way::geometry(GEOMETRY,
4326),
'+proj=hammer'),
30.0)) THEN
ST_SimplifyPreserveTopology(ST_Transform(way::geometry(GEOMETRY,
4326),
'+proj=hammer'),
30.0)
ELSE ST_Transform(way::geometry(GEOMETRY,
4326),
'+proj=hammer')
END) >= 3 THEN ST_Transform
(CASE WHEN
ST_IsValid(ST_SimplifyPreserveTopology(ST_Transform(way::geometry(GEOMETRY,
4326),
'+proj=hammer'),
30.0)) THEN
ST_SimplifyPreserveTopology(ST_Transform(way::geometry(GEOMETRY,
4326),
'+proj=hammer'),
30.0)
ELSE ST_Transform(way::geometry(GEOMETRY,
4326),
'+proj=hammer')
END,
'+proj=hammer',
4326)
ELSE way
END) THEN CASE WHEN ST_NPoints
(CASE WHEN
ST_IsValid(ST_SimplifyPreserveTopology(ST_Transform(way::geometry(GEOMETRY,
4326),
'+proj=hammer'),
30.0)) THEN
ST_SimplifyPreserveTopology(ST_Transform(way::geometry(GEOMETRY,
4326),
'+proj=hammer'),
30.0)
ELSE ST_Transform(way::geometry(GEOMETRY,
4326),
'+proj=hammer')
END) >= 3 THEN ST_Transform
(CASE WHEN
ST_IsValid(ST_SimplifyPreserveTopology(ST_Transform(way::geometry(GEOMETRY,
4326),
'+proj=hammer'),
30.0)) THEN
ST_SimplifyPreserveTopology(ST_Transform(way::geometry(GEOMETRY,
4326),
'+proj=hammer'),
30.0)
ELSE ST_Transform(way::geometry(GEOMETRY,
4326),
'+proj=hammer')
END,
'+proj=hammer',
4326)
ELSE way
END
ELSE
CASE
WHEN
ST_IsValid(ST_CollectionExtract(ST_MakeValid(ST_SimplifyVW(way,
4e-08)),
3)) THEN
ST_CollectionExtract(ST_MakeValid(ST_SimplifyVW(way,
4e-08)),
3)
ELSE
CASE
WHEN
ST_IsValid(ST_Transform(ST_SimplifyVW(ST_Transform(way::geometry(GEOMETRY,
4326),
'+proj=hammer'),
400.0),
'+proj=hammer',
4326)) THEN
ST_Transform(ST_SimplifyVW(ST_Transform(way::geometry(GEOMETRY,
4326),
'+proj=hammer'),
400.0),
'+proj=hammer',
4326)
ELSE way::geometry(GEOMETRY,
4326)
END
END
END
END
END AS way_generalized FROM (SELECT ST_GeomFromText('LINESTRING
(179.9345326 66.6525225, 179.9349511 66.6521355, 179.9356913 66.651081,
179.9361205 66.6506048, 179.9397398 66.6485957, 179.9438882 66.6466073,
179.9452185 66.6460885, 179.9465918 66.6458333, 179.9489522 66.6456207,
179.9532437 66.6453144, 179.957428 66.6449487, 179.9589729 66.644685,
179.9608612 66.6435876, 179.9620628 66.6428049, 179.9632934 66.641673,
179.9656462 66.6397847, 179.9662435 66.6393901, 179.968813 66.6379373,
179.9728575 66.6373146, 179.9772827 66.6375222, 179.980566 66.6383147,
179.9850388 66.6392392, 179.9884647 66.6394656, 179.9954119 66.6399939,
179.9987826 66.6403544, 180 66.6405909)',4326) AS way) AS foo
More information about the postgis-users
mailing list