[postgis-users] Obtaining nearest points between two linestrings
Christian Heine
christian at geosci.usyd.edu.au
Fri Dec 8 00:12:15 PST 2006
> > I was trying to find a way to obtain the coordinates of the nearest
> > points between two linestring. I play some time with the distance,
> > line_locate_point, line_interpolate_point and other functions but I
> > didn't find a way to get the information I want. I think that what
> > I'm trying to find is a function like line_locate_point that obtain
> > the point on one linestring nearest to another linestring.
Apologies - pressed the send button too quickly - didn't read that you are
trying to compare two linestrings... Please disregard my earlier message.
Christian
> >
> > I know that there may be lot of cases in wich the "nearest point"
> > could be more than one (e.g . parallel segments, two linestring
> > with two sections of parallel segments at the minimum distance,
> > etc), but at least I want to get one (any) of this points.
> >
> > I also try a workaround creating a buffer around one of the
> > linestring using the distance between the linestrings as width,
> > finding the intersection between the buffer and the other
> > linestring and obtaining the centroid of the result, but I couldn't
> > make this works.
>
> below an old message by Micheal Fuhr in reply to a simliar problem I
> had finding the _longest_ distance between two points in a polygon.
> With some tinkering you should be able to tackle your problem.
>
> HTH,
> Christian
>
>
>
>
> Date: Wednesday, 1 February 2006 12:57:21 PM Australia/Sydney
> From: Michael Fuhr
> Subject: Re: [postgis-users] Longest axis of a polygon
> To: PostGIS Users Discussion
> Reply-To: PostGIS Users Discussion
>
> On Tue, Jan 31, 2006 at 05:01:13PM +1100, Christian Heine wrote:
> > > I'm not familiar with solving this problem so maybe this isn't
> > > correct or what you need, but could you look for the pair of points
> > > on the polygon's (simplified) exterior ring or convex hull
> separated
> > > by the most distance? It would be easy to iterate through the
> > > points in a function.
> >
> > Thanks for the suggestion! I looked at convexhull() and this seems
> > to be quite ok for my purposes -
> > How do I loop over a set of points in PostGIS/SQL?
>
> Here's a function that I've only minimally tested. As I said, I'm
> not familiar with solving this particular problem so corrections
> or improvements are welcome. One possible problem is that for
> certain geometries the function might return a linestring that lies
> entirely outside the geometry, except for the endpoints; a crescent
> comes to mind.
>
> CREATE FUNCTION longestaxis(geom geometry) RETURNS geometry AS $$
> DECLARE
> hull geometry := convexhull(geom);
> ering geometry;
> len double precision;
> maxlen double precision := -1;
> maxi integer;
> maxj integer;
> BEGIN
> IF geometrytype(hull) IN ('POINT', 'LINESTRING') THEN
> RETURN hull;
> END IF;
>
> ering := exteriorring(hull);
>
> FOR i IN 1 .. npoints(ering) - 2 LOOP
> FOR j IN i + 1 .. npoints(ering) - 1 LOOP
> len := distance(pointn(ering, i), pointn(ering, j));
> IF len > maxlen THEN
> maxlen := len;
> maxi := i;
> maxj := j;
> END IF;
> END LOOP;
> END LOOP;
>
> RETURN makeline(pointn(ering, maxi), pointn(ering, maxj));
> END;
> $$ LANGUAGE plpgsql IMMUTABLE STRICT;
>
> --
> Michael Fuhr
> _______________________________________________
> postgis-users mailing list
> postgis-users at postgis.refractions.net
> http://postgis.refractions.net/mailman/listinfo/postgis-users
>
>
>
>
> _______________________________________________
> postgis-users mailing list
> postgis-users at postgis.refractions.net
> http://postgis.refractions.net/mailman/listinfo/postgis-users
>
>
--
Christian Heine
Ph.D. candidate
EarthByte Group <www.earthbyte.org>
School of Geosciences
The University of Sydney
Australia
P +61 2 9351 4257 F +61 2 9036 6588
<www.geosci.usyd.edu.au/~christian>
----------------------------------------------------------------
This message was sent using IMP, the Internet Messaging Program.
More information about the postgis-users
mailing list