How to compute greatest distance between polygon c

2019-09-04 23:12发布

问题:

I have a SpatialPolygons(DataFrame) object, e.g. SpP

library(sp)    
Sr1 = Polygon(cbind(c(2,4,4,1,2),c(2,3,5,4,2)))
Sr2 = Polygon(cbind(c(5,4,2,5),c(2,3,2,2)))
Sr3 = Polygon(cbind(c(4,4,5,10,4),c(5,3,2,5,5)))
Sr4 = Polygon(cbind(c(5,6,6,5,5),c(4,4,3,3,4)), hole = TRUE)
Srs1 = Polygons(list(Sr1), "s1")
Srs2 = Polygons(list(Sr2), "s2")
Srs3 = Polygons(list(Sr3, Sr4), "s3/4")
SpP = SpatialPolygons(list(Srs1,Srs2,Srs3), 1:3)

I would like to, for each polygon, calculate the greatest distance between its centroid (coordinates(SpP)) to any other point within the same polygon (I assume this furtherest away point will be on the edge?).

Can someone show me how to do that?

回答1:

Here is a simple function I created that for a given polygon calculates the centroid, and the uses basic geometry to find with point is furthest from the centroid, returning its coordinates:

library(sp)
library(rgeos)
library(ggplot2)

Sr2 = Polygon(cbind(c(5,4,2,5),c(2,3,2,2)))
Srs2=Polygons(list(Sr2), "s2")
spPol=SpatialPolygons(list(Srs2))

find_furthest_point=function(polygon){
  coords=fortify(polygon)[,c(1:2)]  
  center=as.data.frame(gCentroid(polygon))
  longs=coords[,1]
  lats=coords[,2]

  dist_fx=function(long, lat, center=center){
    dist=sqrt((long-center[1])^2+(lat-center[2])^2)
    return(dist)
  }
  dists=mapply(dist_fx, longs, lats, MoreArgs=list(center))
  furthest_index=as.integer(which(dists==max(dists)))
  furthest=coords[furthest_index,]  
  return(furthest)
}

find_furthest_point(Sr2)