Distribute points along lines
Roger, your newer code works fine, thanks. I'm doing: > fl1 <- readOGR(dsn="/media/Transcend/MONTSENY2008/MONTSENY_UAV2/Linies_CastVila1",layer="Linies_CastVila1") > plot(fl1) > points(spsample(fl1[4,],5,offset=0.0,type="regular")) and points start at the starting point of the line. Regarding the length, by now I'm using coordinates() to get the length of each line, i.e. > max(dist(as.matrix(coordinates(fl1)[[1]][[1]]))) for the first line. Is there a simpler syntax? I found the [[1]][[1]] by trial and error, don't actually understand why the simpler command > as.matrix(coordinates(fl1)[[1]]) does not work I think it would make sense having a field length in the object as you mentioned, and perhaps also area for polygons. Or maybe just having a function sparealen() to calculate length of lines and length of each side, perimeter and area of polygons would be more appropriate. Thanks Agus
Roger Bivand wrote:
On Sun, 5 Jul 2009, Agustin Lobo wrote:
Roger, Roger Bivand wrote:
so a proportion in [0,1], but it seems to work backwards at present, with an offset of 0 anchoring to the final, not the first, point.
Would it be too hard adding the offset to the first point? And actually ordering the points starting from the initial point of the line?
The problem was that sp:::sample.Line() was not handling a zero-length line segment (two identical consecutive coordinates in a Line object) properly, provoking an error when offset was set to 0. I've committed changes to sourceforge: cvs -z3 \ -d:pserver:anonymous at r-spatial.cvs.sourceforge.net:/cvsroot/r-spatial \ co -P sp (all one line), then R CMD INSTALL sp to try out. I have also reversed the meaning of offset for lines, 0 is now the start coordinate of the Line object. If possible, could you please check out the revision, install it from source, and try it - it resolves the problem for your case as far as I can tell.
I'm actually trying to set real field sampling sites, so this matters. The best would be being able to set the first point in the line and then the nb of points for random sites (as it is currently done) and the length interval for regular sampling. By now I can adjust the nb. of points for the interval I want if the length of the line is known, but how can I calculate the length of the lines? calcLength requires another type of spatial object.
calcLength() is in PBSmapping. Adding a length slot to Line objects is an option, or rather providing length methods which would be less invasive. I'll take a look.
Thanks, please let me know. By now I measure the actual length in qgis.
There are LineLength(), LinesLength(), and SpatialLinesLengths() functions in sp, more used internally than exposed, but should be OK. I've converted LineLength() to use C code, so they can now also measure lengths in km even if the data are in geographical coordinates (assuming WGS84), as in spDistsN1(). Roger
Agus
-------------- next part -------------- A non-text attachment was scrubbed... Name: alobolistas.vcf Type: text/x-vcard Size: 251 bytes Desc: not available URL: <https://stat.ethz.ch/pipermail/r-sig-geo/attachments/20090705/016a29cd/attachment.vcf>