On May 29, 2009, at 4:50 AM, Hamish wrote:

Dwight wrote:
I am looking for a way to force the polylines (from GPS
tracks) to terminate at the points (from averaged
waypoints). One possibility would be to snap each terminal
node to the nearest point (within a threshold), with the
point coordinates taking precedence.


Hi Dwight,

try 'v.distance output=' + v.patch + v.clean.


Hamish

Thanks, Hamish. That is very close to what I want, but I am having some difficulty closing the gap.

In the simplest circumstance, the part of the line closest to the point is the node on the end, so your suggested procedure extends the line to the point. However, the original node is still a node (rather than a vertex), so there is a simple line segment attached to the end of a polyline segment. I was hoping to find a way to end up with a single polyline so that any kink generated at the end will be straightened out using v.generalize method=sliding_averaging.

Any ideas on how to accomplish this? Can two-line nodes be converted to a vertex within a threshold distance of a reference point or if one of the connected line segments is shorter than a threshold?

Under other circumstances, the part of the line closest to the point is somewhere along the line segment rather than at the end, resulting in a "Y" configuration. I thought I could use v.clean to break the original polyline where the v.distance segment intersects, which would generate a dangle that could then be removed with v.clean. However, I had trouble with each of these steps. Here is what I did, using a point near each terminus of a line.

v.distance -p from=terminus to=trail from_type=point to_type=line output=trail_connections dmax=20 upload=dist column=dist
v.patch input=trail,trail_connections output=trail_patched
v.clean input=trail_patched output=trail_break type=line tool=break thresh=1 v.clean input=trail_break output=trail_rmdangle type=line tool=rmdangle thresh=20

v.distance created lines that were about 6 and 13 ft long that intersected the trail line at about 8 and 14 ft away from each terminus, respectively (creating a "Y" on each end).

v.clean tool=break clipped the trail at the second intersection, but not the first (confirmed using v.digit). What causes this difference in behavior?

v.clean tool=rmdangle removed both of the line segments generated by v.distance, but did not remove what appears to be a 14 ft dangle created by the v.clean tool=break step. Why was the 14 ft dangle not removed (in v.digit it has a green X on one end and a red X on the other, and it is shorter than the threshold).

There are enough problems here that I am beginning to think that I don't understand what should be happening. Can someone straighten me out?

Thanks, -Dwight

_______________________________________________
grass-user mailing list
grass-user@lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/grass-user

Reply via email to