I have an sf
object, a map divided into districts. I would like to calculate the centroid of each district (using st_point_on_surface
) and then the relative distance between each centroid, like a distance matrix on which I can perform calculations (like keep ones that are within a certain radius) and get a db with each district identifiers and a list of those that match the criteria.
Sorry in advance for the lack of reproducible code. What is the easiest way to go about it?
Thanks in advance
If you want to stay within sf
, try:
library(sf)
# I got my Irak map from UN's OCHA, see: https://data.humdata.org/dataset/iraq-admin-level-1-boundaries
shp_irak01 <- st_read(dsn = "./irq-administrative-divisions-shapefiles/irq_admbnda_adm1_cso_20190603.shp")
#The centroids:
shp_centroid <- st_point_on_surface(x = shp_irak01)
#The euclidian distance matrix:
mtx_distance <- st_distance(shp_centroid, shp_centroid)
mtx_distance
Units: [m]
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,...until18]
[1,] 0.0 665051.7 484956.1 295870.9 383276.14 449273.4 309551.40 277419.82 338721.4 458264.2 438887.2
[2,] 665051.7 0.0 206781.0 408086.2 287295.37 624344.0 378896.62 451360.03 494695.5 860740.2 751176.7
[3,] 484956.1 206781.0 0.0 205871.6 160931.72 570092.5 251440.27 332638.38 410021.2 766396.3 672788.5
[4,] 295870.9 408086.2 205871.6 0.0 189849.79 526919.9 203679.02 260171.36 360077.9 661294.1 592026.7
[5,] 383276.1 287295.4 160931.7 189849.8 0.00 410667.4 96030.18 175862.79 249100.0 607665.1 512029.2
[6,] 449273.4 624344.0 570092.5 526919.9 410667.36 0.0 335212.34 266829.78 168229.3 261881.0 141057.5
[7,] 309551.4 378896.6 251440.3 203679.0 96030.18 335212.3 0.00 81209.73 167546.7 514984.8 424189.9
[8,] 277419.8 451360.0 332638.4 260171.4 175862.79 266829.8 81209.73 0.00 100377.7 433844.3 345162.4
[9,] 338721.4 494695.5 410021.2 360077.9 249100.03 168229.3 167546.72 100377.65 0.0 366935.5 264039.4
[10,] 458264.2 860740.2 766396.3 661294.1 607665.14 261881.0 514984.82 433844.32 366935.5 0.0 120940.2
[11,] 438887.2 751176.7 672788.5 592026.7 512029.23 141057.5 424189.92 345162.43 264039.4 120940.2 0.0
[12,] 236774.0 434018.5 275796.9 160698.5 147862.67 367278.5 78884.14 102143.31 202413.5 509250.3 433156.4
[13,] 339045.0 649972.5 556320.0 469992.6 396524.64 122292.9 305687.02 225374.60 155304.3 212297.2 122084.4
[14,] 552966.6 202333.0 244743.0 370890.8 186402.59 424966.6 243458.18 294501.93 310734.5 669733.2 556160.8
[15,] 325331.4 801693.1 681103.2 551881.7 529148.71 276836.1 433248.41 353886.47 314515.2 135975.2 171322.4
[16,] 264036.5 613728.6 499989.6 396476.1 344132.89 185842.8 249137.50 168288.85 133007.6 269034.3 198147.7
[17,] 504238.7 168077.1 131432.6 277522.5 121527.11 479013.4 210879.43 283915.79 335117.1 701926.8 597103.5
[18,] 404859.5 326577.9 258506.4 284146.2 108878.33 315038.5 100818.86 138534.47 168707.2 535609.5 430059.8