How to find point related to set of coordinates?

后端 未结 2 1420
梦谈多话
梦谈多话 2021-02-11 00:32

I have a set of about 5000 geographical (WGS84) coordinates. All of them are inside 40km square.

Is there any algorithm / R function to find point, inside square and not

2条回答
  •  孤街浪徒
    2021-02-11 01:15

    I think that if the point you seek isn't on the edge of the box then it has to be at a vertex of the voronoi tesselation of the points. If it is on the edge of the box then it has to be on the intersection of the box and an edge of the voronoi tesselation.

    So if you compute the voronoi tesselation and then use rgeos to intersect it with the box, that gives you a set of possible points. You can then use the FNN package to compute the neighbour distances from those possible points to the data points, sort, and find the possible point with the biggest nearest neighbour.

    That gives you an exact point without any of this gridding business. If it wasn't so close to bedtime I'd sort out some code to do it. You probably want the deldir package or voronoi tesselations. It might even already do the box intersection...

    Okay, not quite bedtime. Here's the solution:

    findM <- function(pts,xmin,xmax,ymin,ymax){
      require(deldir)
      require(FNN)
      d = deldir(pts[,1],pts[,2],rw=c(xmin,xmax,ymin,ymax))
    
      vpts = rbind(as.matrix(d$dirsgs[,1:2]),as.matrix(d$dirsgs[,3:4]))
      vpts = rbind(vpts,cbind(c(xmin,xmax,xmin,xmax),c(ymin,ymin,ymax,ymax)))
      vpts = vpts[!duplicated(vpts),]
    
      nn = get.knnx(pts,vpts,k=1)
      ptmin = which(nn$nn.dist==max(nn$nn.dist))
    
      list(point = vpts[ptmin,,drop=FALSE], dist = nn$nn.dist[ptmin])
    }
    

    Edited version now returns one point and adds the corner points as possibles.

提交回复
热议问题