Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

sp::over() for point in polygon analysis

I have a shapefile named "ind_adm" and a SpatialPointsDataFrame called "pnts". The "pnts" contains points generated at random, and some of the points overlap with the polygon. See picture below. enter image description here

Now, I want do do a point in polygon analysis, i.e. I want to find out which points lie inside the gray polygon representing the boundary of India. For this I am using the over() function in the sp library.

pt.in.poly <- sp::over(ind_adm, pnts, fn = mean) #do the join 

However, the output I am getting is

    >pt.in.poly     values     0 6.019467 

I should actually get the index of the points that are "in" the polygon.

Where am I going wrong?

like image 801
DotPi Avatar asked Sep 25 '13 10:09

DotPi


2 Answers

Found this concise and intuitive syntax for over:

   pnts[ind_adm,]  

from this Intro document

like image 162
Arto Pihlaja Avatar answered Sep 22 '22 09:09

Arto Pihlaja


You should not supply a function. You are aggregating the attribute values of your points over the geometry of the polygon, (i.e. the number returned is the mean of the attribute of the points that fall within the polygon). In addition you have your x and y the wrong way round for what you want to do. Should be...

over( pnts , ind_adm , fn = NULL)  
like image 43
Simon O'Hanlon Avatar answered Sep 24 '22 09:09

Simon O'Hanlon