Re: [postgis-users] line_interpolate_point does not return a point that intersects the line
D'oh. Totally forgot about DWithin! Problem, solved. Thanks very much! -Francis On 3 May 2010 18:24, strk wrote: > On Mon, May 03, 2010 at 06:15:14PM +1000, Francis Markham wrote: > > Mmm, so it is a floating point issue - the distance is > 9.57711783686133e-12 > > meters. Is there anyway to specify a tolerance for ST_Intersects and > > similar predicates? > > You may use DWithin() for a tolerance-based intersection approach. > No built-in tolerance for others. > > --strk; > > () Free GIS & Flash consultant/developer > /\ http://strk.keybit.net/services.html > ___ > postgis-users mailing list > postgis-users@postgis.refractions.net > http://postgis.refractions.net/mailman/listinfo/postgis-users > ___ postgis-users mailing list postgis-users@postgis.refractions.net http://postgis.refractions.net/mailman/listinfo/postgis-users
Re: [postgis-users] line_interpolate_point does not return a point that intersects the line
On Mon, May 03, 2010 at 06:15:14PM +1000, Francis Markham wrote: > Mmm, so it is a floating point issue - the distance is 9.57711783686133e-12 > meters. Is there anyway to specify a tolerance for ST_Intersects and > similar predicates? You may use DWithin() for a tolerance-based intersection approach. No built-in tolerance for others. --strk; () Free GIS & Flash consultant/developer /\ http://strk.keybit.net/services.html ___ postgis-users mailing list postgis-users@postgis.refractions.net http://postgis.refractions.net/mailman/listinfo/postgis-users
Re: [postgis-users] line_interpolate_point does not return a point that intersects the line
Mmm, so it is a floating point issue - the distance is 9.57711783686133e-12 meters. Is there anyway to specify a tolerance for ST_Intersects and similar predicates? -Francis On 3 May 2010 17:53, strk wrote: > On Mon, May 03, 2010 at 04:41:09PM +1000, Francis Markham wrote: > > Hi all, > > > > I think I've got a bit of a problem with snapping points to lines. I had > > thought that using line_interpolate_point(..., line_locate_point(...)) > would > > do the trick, but this seems not to be the case: > > Francis, > thing is that the constructive functions have to deal with representability > of numbers which means you won't always get the exact point of intersection > but rather the best approximation of it. > Instead the predicates (like ST_Intersects) give you the exact answer. > You may try the distance functions to see how much the intersection point > is off the line, should be a really low number. > > --strk; > > > gis=# SELECT ST_AsText(v.the_geom), ST_SRID(v.the_geom), > > ST_AsText(r.the_geom), ST_SRID(r.the_geom) FROM road_segments AS r, > venues > > AS v WHERE v.venue_id = 29 AND r.gid = 100982; > > > > st_astext | st_srid > > | > > st_astext| st_srid > > > --+-+-+- > > POINT(415185.606066865 7827721.52951473) | 28353 | > > LINESTRING(415250.679102704 7827994.85292521,415218.694181662 > > 7827642.44920486) | 28353 > > (1 row) > > > > gis=# SELECT ST_Intersects(ST_line_interpolate_point(r.the_geom, > > ST_line_locate_point(r.the_geom, v.the_geom)), r.the_geom) FROM > > road_segments AS r, venues AS v WHERE v.venue_id = 29 AND r.gid = 100982; > > > > st_intersects > > --- > > f > > (1 row) > > > > gis=# SELECT postgis_full_version(); > > > > > > postgis_full_version > > > > > POSTGIS="1.4.1" GEOS="3.2.1-CAPI-1.6.1" PROJ="Rel. 4.7.1, 23 September > > 2009" USE_STATS > > (1 row) > > > > > > > > Any assistance would be much appreciated. > > > > Thanks, > > > > -Francis Markham > > > ___ > > postgis-users mailing list > > postgis-users@postgis.refractions.net > > http://postgis.refractions.net/mailman/listinfo/postgis-users > > > -- > > () Free GIS & Flash consultant/developer > /\ http://strk.keybit.net/services.html > ___ > postgis-users mailing list > postgis-users@postgis.refractions.net > http://postgis.refractions.net/mailman/listinfo/postgis-users > ___ postgis-users mailing list postgis-users@postgis.refractions.net http://postgis.refractions.net/mailman/listinfo/postgis-users
Re: [postgis-users] line_interpolate_point does not return a point that intersects the line
On Mon, May 03, 2010 at 04:41:09PM +1000, Francis Markham wrote: > Hi all, > > I think I've got a bit of a problem with snapping points to lines. I had > thought that using line_interpolate_point(..., line_locate_point(...)) would > do the trick, but this seems not to be the case: Francis, thing is that the constructive functions have to deal with representability of numbers which means you won't always get the exact point of intersection but rather the best approximation of it. Instead the predicates (like ST_Intersects) give you the exact answer. You may try the distance functions to see how much the intersection point is off the line, should be a really low number. --strk; > gis=# SELECT ST_AsText(v.the_geom), ST_SRID(v.the_geom), > ST_AsText(r.the_geom), ST_SRID(r.the_geom) FROM road_segments AS r, venues > AS v WHERE v.venue_id = 29 AND r.gid = 100982; > > st_astext | st_srid > | > st_astext| st_srid > --+-+-+- > POINT(415185.606066865 7827721.52951473) | 28353 | > LINESTRING(415250.679102704 7827994.85292521,415218.694181662 > 7827642.44920486) | 28353 > (1 row) > > gis=# SELECT ST_Intersects(ST_line_interpolate_point(r.the_geom, > ST_line_locate_point(r.the_geom, v.the_geom)), r.the_geom) FROM > road_segments AS r, venues AS v WHERE v.venue_id = 29 AND r.gid = 100982; > > st_intersects > --- > f > (1 row) > > gis=# SELECT postgis_full_version(); > > > postgis_full_version > > POSTGIS="1.4.1" GEOS="3.2.1-CAPI-1.6.1" PROJ="Rel. 4.7.1, 23 September > 2009" USE_STATS > (1 row) > > > > Any assistance would be much appreciated. > > Thanks, > > -Francis Markham > ___ > postgis-users mailing list > postgis-users@postgis.refractions.net > http://postgis.refractions.net/mailman/listinfo/postgis-users -- () Free GIS & Flash consultant/developer /\ http://strk.keybit.net/services.html ___ postgis-users mailing list postgis-users@postgis.refractions.net http://postgis.refractions.net/mailman/listinfo/postgis-users
[postgis-users] line_interpolate_point does not return a point that intersects the line
Hi all, I think I've got a bit of a problem with snapping points to lines. I had thought that using line_interpolate_point(..., line_locate_point(...)) would do the trick, but this seems not to be the case: gis=# SELECT ST_AsText(v.the_geom), ST_SRID(v.the_geom), ST_AsText(r.the_geom), ST_SRID(r.the_geom) FROM road_segments AS r, venues AS v WHERE v.venue_id = 29 AND r.gid = 100982; st_astext | st_srid | st_astext| st_srid --+-+-+- POINT(415185.606066865 7827721.52951473) | 28353 | LINESTRING(415250.679102704 7827994.85292521,415218.694181662 7827642.44920486) | 28353 (1 row) gis=# SELECT ST_Intersects(ST_line_interpolate_point(r.the_geom, ST_line_locate_point(r.the_geom, v.the_geom)), r.the_geom) FROM road_segments AS r, venues AS v WHERE v.venue_id = 29 AND r.gid = 100982; st_intersects --- f (1 row) gis=# SELECT postgis_full_version(); postgis_full_version POSTGIS="1.4.1" GEOS="3.2.1-CAPI-1.6.1" PROJ="Rel. 4.7.1, 23 September 2009" USE_STATS (1 row) Any assistance would be much appreciated. Thanks, -Francis Markham ___ postgis-users mailing list postgis-users@postgis.refractions.net http://postgis.refractions.net/mailman/listinfo/postgis-users