[prev in list] [next in list] [prev in thread] [next in thread]
List: r-sig-geo
Subject: [R-sig-Geo] Calculating road (i.e. linear feature) density using spatstat::density.psp()
From: Adrian Baddeley <adrian.baddeley () uwa ! edu ! au>
Date: 2015-03-19 0:42:35
Message-ID: CF5661163F77A44781208D9AC4FDEA72014010A2989A () IS-WIN-376 ! staffad ! uwa ! edu ! au
[Download RAW message or body]
Matt Strimas-Mackey <strimas@zoology.ubc.ca> writes:
> Note: I previously posted this question to Stack Exchange,
> but haven't receive a response.
Questions about the spatstat package can best be addressed directly to the authors.
> I have a large (~70MB) shapefile of roads and want to convert this to a
> raster with road density/length in each cell. Ideally I'd like to do this in R.
spatstat::pixellate.psp will do this.
Use the "..." arguments to specify the raster dimensions.
L <- as.psp(YourData)
Z <- pixellate(L, dimyx=512)
The resulting image values give the total length of fragments of lines in each pixel. \
To get values which are lengths per unit area, divide by the pixel area:
Z <- Z/with(Z, xstep * ystep)
> In a previous post on this listserv, the spatstat::density.psp() function
> has been recommended for this task.
Uh, no, that function does something else.
> 1. How can I interpret the output of the density.psp function?
As the help file states, density.psp computes the convolution of the Gaussian kernel \
with the lines. Intuitively, this means that density.psp 'smears' the lines into \
two-dimensional space. So density(L) is like a blurred version of pixellate(L).
In fact density(L) is very similar to blur(pixellate(L)) where blur is another \
spatstat function that blurs an image.
> What are the units?
Units are length^(-1), i.e. line length per unit area
> 2. How can I choose the sigma parameter in density.psp so the results align
> with the more direct, intuitive approach above?
They do not agree unless sigma is very small.
'sigma' is the bandwidth of the Gaussian kernel.
The value of density.psp(L) at a given pixel u, is something like the total amount of \
line length in a circle of radius sigma around the pixel u, except that it's really a \
weighted average of such contributions from different circle radii.
> 3. Bonus: what is the kernel line density actually doing?
> I have some sense for how these approaches work for points,
> but don't see how that extends to lines.
Imagine replacing each line by a fine grid of points, each point having a 'weight'
equal to the length of line that it replaced. Then apply density.ppp to these points \
with weights. The result is the density.psp output.
Adrian Baddeley
spatstat author
Prof Adrian Baddeley FAA
Curtin University
_______________________________________________
R-sig-Geo mailing list
R-sig-Geo@r-project.org
https://stat.ethz.ch/mailman/listinfo/r-sig-geo
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic