[R-sig-Geo] Calculate shortest distance between points belonging to different polygons

Ivan Palmegiani pan.sapiens.it at gmail.com
Wed Feb 18 05:32:01 CET 2015


Dear Adrian,

Thank you very much!

I made the change you suggested and the outcome is not exactly the one I 
wanted...but it's very close to it!

 > library(spatstat)
 > nn.within.pol<-nndist(randp.df[,c(2,3)], by=factor(randp.df$Polygon_ID))
 > nn.within.pol

                            1                   2                 3     
               4                     5                   6               
7                     8                   9         10              
11                    12              13
   [1,]  77758.488  71978.036 33715.961  62236.2421  84528.6758 
47206.9703 26370.4913  39448.7910  40198.916  68559.0147  67769.69 
39298.45411  2579.422
   [2,]  63404.130  93535.612 64780.940  21597.4530  32485.1889 
1391.8891 38473.2915  69642.7457  24374.408  15070.9926  70237.22 
35217.62792 49217.807
   [3,]  37861.018  53839.721 27587.333  59658.5379  58107.6351 
35133.6718 48282.9013  75710.3428  48898.652  52273.7298 33882.71    
59.85628 36756.945
   ...
  [98,] 114435.572 111577.598 73735.852  65518.7127 102369.5236 
65629.7084 29330.3308    955.2648  39271.208  81234.4457 107270.98 
74005.63912 30371.918
  [99,]  32283.616  52705.045 28666.796  61665.1649  55854.9164 
36094.8633 53239.2478  81208.2781  52669.590  52158.4953  30242.29 
3166.00894 42467.270
[100,]  38187.593  53418.183 27001.456  60050.0374  58795.8736 
35555.5710 48200.6059  75445.7086  49047.448  52858.1932  33791.42 
705.25663 36323.229

In fact, I realized that I do not need to make recourse to /aggregate()/ 
because in the matrix above I already have the information I need. I 
just need to extract it.
Is there any way to prevent the function to calculate the distance 
between a point and its nn within the same group (i.e. distance [1, 13]; 
[2, 6]; [3, 12]; etc.)?

If not, I will just extract the second shortest distance per point (the 
shortest one is certainly within the same group) and I will get exactly 
the information I need.

Thanks again!

Sincerely,

Ivan


On 17-Feb-15 16:01, Adrian Baddeley wrote:
> Ivan Palmegiani <pan.sapiens.it at gmail.com> writes:
>
>> I'm handling a SpatialPointsDataFrame with 100 ramdom points distributed
>> within 13 different polygons.
>>
>   > randp
>>                       coordinates   Point_ID   Polygon_ ID
>> 0  (690926.8, 7522595)         1_hs                    13
>> 1  (696727.1, 7576122)         2_hs                      6
>> I need to calculate the shortest distance between points belonging to
>> different polygons. Basically I'd like to do what nndist {spatstat} does.
>> The difference is that the distance should be calculated between
>> groups of points instead of within a group of points.
>                Well, nndist {spatstat} does that too.
>
>> I tried to use "aggregate" as suggested below but it didn't work out for me.
>> http://www.inside-r.org/packages/cran/spatstat/docs/nndist
>> Please find my try below:
>>   > randp.df<-data.frame(randp)
>>   > randp.hs.df
>>          Point_ID     coords.x1      coords.x2   Polygon_ ID
>> 0            1_hs     690926.8       7522595 13
>> 1            2_hs     696727.1       7576122 6
>> 2            3_hs     723480.7       7546594 12
>> library(spatstat)
>> # Calculate nearest neighbors within a polygon
>>   > nn.within.pol<-nndist(randp.df[,c(2,3)],by=marks(randp.df$Polygon_ID))
>                'marks' is not appropriate here.
>                marks() is a function that extracts the marks from a marked point pattern (class 'ppp')
>                but you are applying it to a numeric vector. The result is NULL.
>
>                The argument 'by' should be a factor that determines the grouping.
>
>                Just change 'marks' to 'factor' so that the numeric polygon ID will be treated as a factor,
>
>   nn.within.pol<-nndist(randp.df[,c(2,3)],by=factor(randp.df$Polygon_ID))
>   
>                 and proceed as before (also changing the other instances of 'marks' to 'factor')
>
>
>
> Adrian Baddeley
> spatstat author
>
>


	[[alternative HTML version deleted]]



More information about the R-sig-Geo mailing list