[postgis-users] How can I detect that geom != st_reverse(geom) for linestrings?

Paragon Corporation lr at pcorp.us
Wed Sep 2 14:44:28 PDT 2015


Steve,

Forgot to mention -- there was  subtle bug in ST_OrderingEquals that prevented it from using a spatial index, which Vicky pointed out.  I fixed it for not yet released 2.1.9

https://trac.osgeo.org/postgis/ticket/3236

So sadly to be safe, you have to throw in an additional && if you need it to utilize spatial index.



-----Original Message-----
From: Paragon Corporation [mailto:lr at pcorp.us] 
Sent: Wednesday, September 02, 2015 5:40 PM
To: 'PostGIS Users Discussion' <postgis-users at lists.osgeo.org>
Subject: RE: [postgis-users] How can I detect that geom != st_reverse(geom) for linestrings?

Have you tried 

ST_OrderingEquals  ?

-----Original Message-----
From: postgis-users-bounces at lists.osgeo.org [mailto:postgis-users-bounces at lists.osgeo.org] On Behalf Of Stephen Woodbridge
Sent: Wednesday, September 02, 2015 5:05 PM
To: postgis-users at lists.osgeo.org
Subject: Re: [postgis-users] How can I detect that geom != st_reverse(geom) for linestrings?

Hi Bob,

Yes, for now I'm just taking a pgrouting path and reversing some of the edges so the coordinates flow correctly from end to end of the path. But it just dawned on me that I can change the test to geom::text = st_reverse(geom)::text and this will avoid the precision issue I was worded about.

It just seems like we should have a function that allows us to check for
sameness:

create or replace st_isSameGeometry(a geometry, b geometry) returns boolean language sql as $_$ select a::text=b::text; $_$;

-Steve

On 9/2/2015 4:37 PM, Basques, Bob (CI-StPaul) wrote:
> Hi Steve,
>
> I think you almost need to check every point from at least one 
> linestring against the other linestring.
>
> You could check just one end, but they could still be the same but the 
> other end different.  Also you could have line strings with the same 
> end points, but different intermediate points.
>
> Your st_astext approach seems to be the most full proof, if it s just 
> the direction that you are looking for, then you may need to do a 
> double (or triple condition) pass if the line strings are congruent.
> You would need to check the ends against each other after finding out 
> that they match up in physical space in order to get direction.
>
> bobb
>
>
>
>
>> On Sep 2, 2015, at 3:23 PM, Stephen Woodbridge 
>> <woodbri at swoodbridge.com> wrote:
>>
>> Hi all,
>>
>> I just noticed that it is not obvious how to determine that geom and
>> st_reverse(geom) are different!
>>
>> It seems that by definition st_equals(geom, st_reverse(geom)) is true 
>> as is geom = st_reverse(geom). So this seems to be by definition, but 
>> it brings up the question how to quickly and efficiently determine 
>> that they are also different, even if they are "equal".
>>
>> I'm doing st_astext(geom) != st_astext(st_reverse(geom)) but I worry 
>> about precision issues doing this. I suppose I could also check if 
>> the st_startpoint() of the two are the same, but that seems 
>> problematic also.
>>
>> Thoughts, -Steve _______________________________________________
>> postgis-users mailing list postgis-users at lists.osgeo.org 
>> http://lists.osgeo.org/cgi-bin/mailman/listinfo/postgis-users
>
> _______________________________________________ postgis-users mailing 
> list postgis-users at lists.osgeo.org 
> http://lists.osgeo.org/cgi-bin/mailman/listinfo/postgis-users
>

_______________________________________________
postgis-users mailing list
postgis-users at lists.osgeo.org
http://lists.osgeo.org/cgi-bin/mailman/listinfo/postgis-users




More information about the postgis-users mailing list