[R-sig-Geo] Distribute points along lines

Roger Bivand Roger.Bivand at nhh.no
Sun Jul 5 21:07:34 CEST 2009


On Sun, 5 Jul 2009, Agustin Lobo wrote:

> 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.

Good, thanks, I'll release soon.

>
> 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.

Maybe try SpatialLinesLengths() in sp for the lines case. The polygon case 
is much harder, because the topology has to be built. It can be done using 
the topology built in GRASS. Perimiter is OK, but anything more requires a 
GIS.

Roger

>
> 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
>>> 
>>> 
>> 
>

-- 
Roger Bivand
Economic Geography Section, Department of Economics, Norwegian School of
Economics and Business Administration, Helleveien 30, N-5045 Bergen,
Norway. voice: +47 55 95 93 55; fax +47 55 95 95 43
e-mail: Roger.Bivand at nhh.no



More information about the R-sig-Geo mailing list