[postgis-tickets] [PostGIS] #3818: Triangle WKT importer checks the M dimension to determine if the triangle is closed. Other geometyr types don't
PostGIS
trac at osgeo.org
Thu Aug 24 03:59:07 PDT 2017
#3818: Triangle WKT importer checks the M dimension to determine if the triangle
is closed. Other geometyr types don't
---------------------+---------------------------
Reporter: rouault | Owner: pramsey
Type: defect | Status: new
Priority: medium | Milestone: PostGIS 2.3.4
Component: postgis | Version: 2.3.x
Keywords: |
---------------------+---------------------------
select 'TRIANGLE M ((0 0 0, 5 10 0, 10 0 0, 0 0 1))'::geometry; -- fails
whereas
select 'POLYGON M ((0 0 0, 5 10 0, 10 0 0, 0 0 1))'::geometry; -- succeeds
Full discussion extract from IRC:
{{{
[12:41] <EvenR> strk: I see that st_isclosed(st_geomfromtext('LINESTRING
ZM(0 0 0 0,0 0 0 1)')) returns True. Do you know if it is on purpose that
ST_IsClosed() ignores the M component. I think that makes sense.
OGR_G_IsClosed() currently check all X,Y,Z,M which cause isses when
importing some shapefiles where the M component of the last point is
different than the first point (which is somehow logical)
[12:47] <strk> I don't know if it's intentional. anything in docs about it
? and how about OGC standards ? (I tihnk IsClosed is defined there)
[12:47] <strk> check also Z, is Z also ignored ?
[12:47] <EvenR> Z is taken into account
[12:47] <strk> I know for sure that for topology we want to ignore, maybe
there's custom code there to avoid ST_IsClosed for specifically that
[12:49] <strk> if (FLAGS_GET_Z(line->flags)) return
ptarray_is_closed_3d(line->points);
[12:49] <strk> return ptarray_is_closed_2d(line->points);
[12:49] <strk> we also have ptarray_is_closed, checking *all* dimensions
[12:50] <EvenR> https://postgis.net/docs/ST_IsClosed.html doesn't talk
about the M componeent. SQL/MM part 3 says that ST_IsClosed() <==>
ST_Boundary().ST_IsEmpty()
[12:50] <sigq> Title: ST_IsClosed (at postgis.net)
[12:50] <strk> but it seems to be ony used by the TIN parser
[12:51] <strk> defined by boundary, ouch
[12:51] <EvenR> yes I can't really make sense of that definition
[12:51] <strk> I usually do the contrary: empty boundary is for closed
lines
[12:52] <strk> what's a line's boundary ?
[12:52] <strk> the endpoints
[12:52] <strk> a closed line has no endpoint
[12:52] <strk> it does have them only for the purpose of defining it
(structurally)
[12:52] <strk> but not topologically
[12:52] <EvenR> ok I see
[12:52] <strk> M doesn't really fit in topology
[12:52] <EvenR> doesn't really help with the M stuff. But the M dimension
is a hack
[12:53] <strk> it's really just for adding more info on the *structure*,
not the topology
[12:53] <strk> so I'd say it's ok to disreguard M for ST_IsClosed
[12:53] <EvenR> ok thanks. I don't want to annoy you more on this.
Probably that I'll align OGR_G_IsClosed() on PostGIS ST_IsClosed()
behaviour (so ignoring M as well)
[12:53] <strk> as it is a topological check (but then I guess
documentation should be clear on this fact)
[12:54] <strk> now I dunno if hte Triangle (not TIN, I was wrong) parser
is intentionally checking M
[12:54] <strk> but it sounds like an inconsistency
}}}
Perhaps the doc of ST_IsClosed() should mention the M dimension is ignored
too
--
Ticket URL: <https://trac.osgeo.org/postgis/ticket/3818>
PostGIS <http://trac.osgeo.org/postgis/>
The PostGIS Trac is used for bug, enhancement & task tracking, a user and developer wiki, and a view into the subversion code repository of PostGIS project.
More information about the postgis-tickets
mailing list