[postgis-users] Left of/Right of test

Randall, Eric ERandall at eriecountygov.org
Tue Jul 23 08:34:43 PDT 2013


If  line goes from A to B and point is P, 
 
 v = (Ay-By)*Px+(Bx-Ax)*Py+(Ax*By-Bx*Ay)
 
 v>0: "Left"
 v<0: "Right"
 v=0: "On the line" 
(or in front of B / behind A)

Example:


select sites_gid, roads_gid, case when
 
(  st_y(st_startpoint(sline)) - st_y(st_endpoint(sline)) ) * st_x(cpoint) 
+  (   st_x(st_endpoint(sline)) -  st_x(st_startpoint(sline))   ) * st_y(cpoint)
+  (  st_x(st_startpoint(sline)) * st_y(st_endpoint(sline)) - st_x(st_endpoint(sline)) 
* st_y(st_startpoint(sline))  ) > 0
 
then 'L' 
 
when
 
(  st_y(st_startpoint(sline)) - st_y(st_endpoint(sline)) ) * st_x(cpoint) 
+  (   st_x(st_endpoint(sline)) -  st_x(st_startpoint(sline))   ) * st_y(cpoint)
+  (  st_x(st_startpoint(sline)) * st_y(st_endpoint(sline)) - st_x(st_endpoint(sline)) 
* st_y(st_startpoint(sline))  ) < 0
 
then 'R'
 
when 
 
(  st_y(st_startpoint(sline)) - st_y(st_endpoint(sline)) ) * st_x(cpoint) 
+  (   st_x(st_endpoint(sline)) -  st_x(st_startpoint(sline))   ) * st_y(cpoint)
+  (  st_x(st_startpoint(sline)) * st_y(st_endpoint(sline)) - st_x(st_endpoint(sline)) 
* st_y(st_startpoint(sline))  ) = 0
 
then null
 
end
 
as side

from ...



Eric Randall,   GIS DB Admin/Analyst
County of Erie, Pa
140 West 6th Street
Room 111
Erie, Pa 16501
Ph. 814-451-6063
Fx. 814-451-7000


L'unica via d'uscita è dentro
--Alice


-----Original Message-----
From: postgis-users-bounces at lists.osgeo.org [mailto:postgis-users-bounces at lists.osgeo.org] On Behalf Of Andreas Neumann
Sent: Tuesday, July 23, 2013 11:03 AM
To: Denis Rouzaud
Cc: PostGIS Users Discussion
Subject: Re: [postgis-users] Left of/Right of test

Hi Denis,

Thank you for your reply.

Actually I really want to test a LINESTRING against POLYGON centroids (determined with ST_PointOnSurface), not just a line against a point.

Is this question not answerable? As a human I can determine it. I am aware about the edge cases where a point is on the line, but in my case this can't happen as the data comes from a correctly defined polygon mosaic.

>From the lines of a polygon mosaic (directed lines node to node, no double lines) I want to label what is left and what is right of a polygon border. My theme is usage zones and I should label what is left and right of the polygon border.

Andreas

Am 23.07.2013 16:48, schrieb Denis Rouzaud:
> Oops, here is the complete code:
> 
> pointGeom << ST_Intersection( ST_MakeLine(
>              ST_MakePoint(ST_XMin(lineGeom), ST_Y(pointGeom)),
>              ST_MakePoint(ST_XMax(lineGeom), ST_Y(pointGeom))
>                           ), lineGeom
>                                                                 )
> 
> 
> 
> On 07/23/2013 04:31 PM, Denis Rouzaud wrote:
>> Hi Andreas,
>>
>> Do you mean you want to test to a segment?
>>
>> Because, I can't see a true answer for a line.
>>
>> If you want to do test to a segment, it should do the job to test if 
>> the intersection with the horizontal line (dy=0) over your point and 
>> your input line is on the left/right to your point.
>>
>> So, maybe test:
>>
>> pointGeom << ST_Intersection( ST_MakeLine(
>>             ST_MakePoint(ST_XMin(lineGeom), ST_Y(pointGeom)),
>>             ST_MakePoint(ST_XMax(lineGeom), ST_Y(pointGeom))
>>                                                                )
>>
>> You have to handle the case where your segment is horizontal, but 
>> then a simple test with ST_Xmin/max should be enough.
>>
>> Cheers,
>>
>> Denis
>>
>> On 07/23/2013 03:54 PM, Andreas Neumann wrote:
>>> Hi,
>>>
>>> I want to test a point if it is left-of or right-of a given LINESTRING.
>>> I found the << >> and &< &> but they do not behave like I expected.
>>>
>>> Perhaps it is because they only test on the bounding box level and 
>>> not on the real geometry?
>>>
>>> Is there a left/right of test available on the geometry instead of 
>>> the bounding box?
>>>
>>> Thank you,
>>> Andreas
>>> _______________________________________________
>>> 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