On 7/23/2013 11:16 AM, Denis Rouzaud wrote:
I was thinking of the case where you have something like his:


**********************
*                    *
*                    *
*         X          *
*                    *
*                    *
*                    *
*                    *
******A     B*********

I added A & B to the linestring above. Linestrings have an implied direction based on their direction of digitization. So in the above example if the line start point is A and the line end point is B then X is on right side of the line as you walk along the line.

The way I would solve the right/left-ness of a line is to project the point X onto the line AB then isolate the segment within the AB and compute the cross product of the segment of AB and a line from the start of segment to X and if if Z is negative then the point is on right positive=left, zero it is one the centerline.

-Steve

This might be a particular case, but I don't know the answer (as a human
;) )

Or did I miss your point ?

Cheers,

Denis




On 07/23/2013 05:03 PM, Andreas Neumann wrote:
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
[email protected]
http://lists.osgeo.org/cgi-bin/mailman/listinfo/postgis-users

_______________________________________________
postgis-users mailing list
[email protected]
http://lists.osgeo.org/cgi-bin/mailman/listinfo/postgis-users

_______________________________________________
postgis-users mailing list
[email protected]
http://lists.osgeo.org/cgi-bin/mailman/listinfo/postgis-users

Reply via email to