[GRASS-user] v.kernel - Points weighted with attribute ?

Taïs tgrippa at ulb.ac.be
Mon Oct 28 05:08:58 PDT 2019


Hi Micha, Moritz,


I successfully create the kernel density raster. Thanks a lot for your 
support ;)

I tried with ~62.000 points on a computational region of +- 1000 cols by 
1000 rows, with 10 m. spatial resolution.


FYI, I had to change the type of the weights column from "double 
precision" to "integer" because I had this error message when it was on 
double precision:


/Error in matrix(rep(w, n[1]), nrow = n[1], ncol = nx, byrow
= TRUE) *  :
   non-numeric argument to binary operator
Calls: sp.kde -> fhat
/


Taïs


Le 25/10/19 à 13:36, Micha Silver a écrit :
>
> Hi Taïs
>
>
> Thanks for testing.
>
> As Moritz mentioned, the important parameter in spatial kernel density 
> is the bandwidth.
>
> Here attached is an improved script that uses the spatialEco R package 
> (instead of density.ppp from spatstat). To run this, you'll need to 
> install spatialEco in your R environment.
>
>
> This package allows to specify both the bandwidth and the target 
> raster extents and resolution. In this script I take the extents and 
> resolution from the GRASS region. Bandwidth is specified on the 
> command line.
>
> So to try this, in your running GRASS session:
>
>
> Rscript kernel_density.R <GRASS point vector> <weight column> <bandwidth>
>
>
> I also attached two images in a test I did, with bandwidths of 10,000 
> and 20,000.
>
>
> Hope this helps,
>
> Micha
>
>
> On 10/25/19 12:17 PM, Taïs wrote:
>>
>> Hi Micha,
>>
>>
>> I successfully run your R script. However to output is weird and I 
>> don't know how to fix it.
>>
>> In v.kernel, you can setup the "raduis" parameter to control what I 
>> assume to be the size of the kernel (of the moving window). I made 
>> one test with radius=300 and another with value 3000. The result of 
>> the first is more what I would expect in terms of spatial variability.
>>
>>
>> When I try your script, the output raster has a size of 128x128 which 
>> did not correspond at all to my computational region, and thus the 
>> resolution is not the same as the one defined in the computational 
>> region.
>>
>>
>> The other thing is that I'm wondering if it is possible to control 
>> the size of the moving window with the "density" function in R. I 
>> already tried the 'n' parameter but it doesn't change anything..
>>
>>
>> I also tried with real weights (the number of inhabitants) and a 
>> unity weighting (value 1 for all points) to see it there is a change 
>> and there is which proof the weights affect the output :)
>>
>>
>> Le 22/10/19 à 13:41, Micha Silver a écrit :
>>>
>>> Here is the script.
>>>
>>> Let me know how it goes. (I might try to take time to make it into a 
>>> GRASS addon)
>>>
>>>
>>> On 10/22/19 2:33 PM, Taïs wrote:
>>>>
>>>> Hi Micha, thanks for your repply.
>>>>
>>>>
>>>> For my own need, I think your solution is enough and I would like 
>>>> to try if you agree to send the R script.
>>>>
>>>>
>>>>
>>>> Le 22/10/19 à 12:53, Micha Silver a écrit :
>>>>>
>>>>> On 10/21/19 1:33 PM, Tais wrote:
>>>>>> Hi all,
>>>>>>
>>>>>> I would like to compute a raster density map ("heat map") from 
>>>>>> vector points using v.kernel. The points represent house 
>>>>>> addresses. However, I would need to weight the points with a 
>>>>>> value stored in the attribute table (number of inhabitants). I 
>>>>>> saw on the module manual page that this functionality is a "known 
>>>>>> issue".
>>>>>>
>>>>>> I imagined a solution to by-passe the limitation: duplicate each 
>>>>>> point as many time as needed (according to the value stored in 
>>>>>> the attribute table) and use this new layer directly in v.kernel. 
>>>>>> However, I think it will definitely not be the most efficient way 
>>>>>> to do the trick. Do you have an alternative in mind ?
>>>>>>
>>>>>> Of course the best solution would be that someone in the 
>>>>>> development community would have the time and the kindness to 
>>>>>> implement this function directly in the module (I'm not skilled 
>>>>>> in C and thus cannot try myself).
>>>>>>
>>>>>
>>>>> Maybe not the answer you are looking for, but you can create a 
>>>>> weighted kernel density in R. I can send an R script that is 
>>>>> intended to be run from within a GRASS session. It accepts a point 
>>>>> vector and attrib column, and creates a kernel density raster, 
>>>>> weighted by the attribute values (using the R defaults for 
>>>>> bandwidth and Gaussian kernel)
>>>>>
>>>>> Requires, of course, that R is installed, with the packages: 
>>>>> spatstat, raster, rgrass7.
>>>>>
>>>>>
>>>>>> NB: Sorry if I should have posted this on the developer mailing 
>>>>>> list. I hesitated but decided to post here finally.
>>>>>>
>>>>>> Best,
>>>>>>
>>>>> -- 
>>>>> Micha Silver
>>>>> Ben Gurion Univ.
>>>>> Sde Boker, Remote Sensing Lab
>>>>> cell: +972-523-665918
>>> -- 
>>> Micha Silver
>>> Ben Gurion Univ.
>>> Sde Boker, Remote Sensing Lab
>>> cell: +972-523-665918
> -- 
> Micha Silver
> Ben Gurion Univ.
> Sde Boker, Remote Sensing Lab
> cell: +972-523-665918
-------------- section suivante --------------
Une pièce jointe HTML a été nettoyée...
URL: <http://lists.osgeo.org/pipermail/grass-user/attachments/20191028/c47e5582/attachment.html>
-------------- section suivante --------------
Une pièce jointe autre que texte a été nettoyée...
Nom: tgrippa.vcf
Type: text/x-vcard
Taille: 4 octets
Desc: non disponible
URL: <http://lists.osgeo.org/pipermail/grass-user/attachments/20191028/c47e5582/attachment.vcf>


More information about the grass-user mailing list