I have a vector of points. According to a regular grid, I need to (randomly) sample a certain number n of these points in each cell of the grid. Such number n is given in a column of the attribute table of the grid. How would you do this?
I have half idea to play with the coordinates and Monte Carlo, but I have the feeling that I’m not thinking GIS and there must be a easier way.
Thank you for any hint
···
Best regards,
Dr. Margherita DI LEO
Scientific / technical project officer
European Commission - DG JRC
Institute for Environment and Sustainability (IES)
Via Fermi, 2749
I-21027 Ispra (VA) - Italy - TP 261
Disclaimer: The views expressed are purely those of the writer and may not in any circumstance be regarded as stating an official position of the European Commission.
Actually, my approach with be little changed either way; without know of a better GRASS-only approach, the kind of thing I have done is to:
(1) write-out to a text file for all grids x, y, value
(2) index the lines, producing, id, x, y, value
(3) in R randomly sample the index
(4) from (3) you have id, x, y, value for the random sample
(5) import (4) into grass using v.in.ascii
This will take a little scripting…
Best,
Tom
···
On Tue, Feb 17, 2015 at 8:49 AM, Margherita Di Leo <diregola@gmail.com> wrote:
Hi,
I have a vector of points. According to a regular grid, I need to (randomly) sample a certain number n of these points in each cell of the grid. Such number n is given in a column of the attribute table of the grid. How would you do this?
I have half idea to play with the coordinates and Monte Carlo, but I have the feeling that I’m not thinking GIS and there must be a easier way.
Thank you for any hint
–
Best regards,
Dr. Margherita DI LEO
Scientific / technical project officer
European Commission - DG JRC
Institute for Environment and Sustainability (IES)
Via Fermi, 2749
I-21027 Ispra (VA) - Italy - TP 261
Disclaimer: The views expressed are purely those of the writer and may not in any circumstance be regarded as stating an official position of the European Commission.
On Tue, Feb 17, 2015 at 4:49 PM, Margherita Di Leo <diregola@gmail.com> wrote:
Hi,
I have a vector of points. According to a regular grid, I need to (randomly)
sample a certain number n of these points in each cell of the grid. Such
number n is given in a column of the attribute table of the grid. How would
you do this?
With a small script this should be doable:
- generate the grid as polygons (v.mkgrid)
- loop over each polygon
- fetch category number or v.extract
- fetch corresponding number of points to be created from DB
- v.random, using the current grid polygon for restricted creation feature http://grass.osgeo.org/grass70/manuals/v.random.html#restriction-to-vector-areas
- save point map
- patch all point maps into single resulting map
- remove single point maps
On Tue, Feb 17, 2015 at 5:30 PM, Markus Neteler <neteler@osgeo.org> wrote:
On Tue, Feb 17, 2015 at 4:49 PM, Margherita Di Leo <diregola@gmail.com>
wrote:
> Hi,
>
> I have a vector of points. According to a regular grid, I need to
(randomly)
> sample a certain number n of these points in each cell of the grid. Such
> number n is given in a column of the attribute table of the grid. How
would
> you do this?
With a small script this should be doable:
- generate the grid as polygons (v.mkgrid)
- loop over each polygon
- fetch category number or v.extract
- fetch corresponding number of points to be created from DB
- v.random, using the current grid polygon for restricted creation
feature
Here lies the problem. I need to randomly pick points that are already
existing. Example: for grid cell that has ID 42, I have 50 points, and have
to randomly pick 7 out of these 50.
- save point map
- patch all point maps into single resulting map
- remove single point maps
Something like this...
Markus
--
Best regards,
Dr. Margherita DI LEO
Scientific / technical project officer
European Commission - DG JRC
Institute for Environment and Sustainability (IES)
Via Fermi, 2749
I-21027 Ispra (VA) - Italy - TP 261
Disclaimer: The views expressed are purely those of the writer and may not
in any circumstance be regarded as stating an official position of the
European Commission.
Maybe you can use a database selection approach for example in sqlite.
First update your points with your grid cell ID and then randomly select
7 rows from the selection where the grid cell ID == 42.
On Tue, Feb 17, 2015 at 5:30 PM, Markus Neteler <neteler@osgeo.org> wrote:
On Tue, Feb 17, 2015 at 4:49 PM, Margherita Di Leo <diregola@gmail.com> wrote:
Hi,
I have a vector of points. According to a regular grid, I need to (randomly)
sample a certain number n of these points in each cell of the grid. Such
number n is given in a column of the attribute table of the grid. How would
you do this?
With a small script this should be doable:
generate the grid as polygons (v.mkgrid)
loop over each polygon
fetch category number or v.extract
fetch corresponding number of points to be created from DB
Here lies the problem. I need to randomly pick points that are already existing. Example: for grid cell that has ID 42, I have 50 points, and have to randomly pick 7 out of these 50.
save point map
patch all point maps into single resulting map
remove single point maps
Something like this…
Markus
–
Best regards,
Dr. Margherita DI LEO
Scientific / technical project officer
European Commission - DG JRC
Institute for Environment and Sustainability (IES)
Via Fermi, 2749
I-21027 Ispra (VA) - Italy - TP 261
Disclaimer: The views expressed are purely those of the writer and may not in any circumstance be regarded as stating an official position of the European Commission.