简体   繁体   English

结合Voronoi多边形和地图

[英]Combine Voronoi polygons and maps

I would like to combine Voronoi polygons with map, in order to use this later for spatial analysis. 我想将Voronoi多边形与地图结合起来,以便稍后用于空间分析。 I have number of points and shapefile that i want to combine and then save as shapefile/spatial polygons. 我有多个点和shapefile,我想要组合,然后保存为shapefile /空间多边形。 To get voronoi polygons i use function from this topic . 要获得voronoi多边形,我使用本主题中的函数。

My code is as follows: 我的代码如下:

coords<-data.frame(LONG=c(16.9252,16.9363,16.9408,16.8720,16.9167,16.9461,16.9093,16.9457,16.9171,16.8506,16.9471,16.8723,16.9444,16.9212,16.8809,16.9191,16.8968,16.8719,16.9669,16.8845),
LAT=c(52.4064,52.4266,52.3836,52.3959,52.4496,52.3924,52.4012,52.3924,52.3777,52.4368,52.4574,52.3945,52.4572,52.3962,52.3816,52.3809,52.3956,52.3761,52.4236,52.4539))

My map is available here: https://docs.google.com/file/d/0B-ZJyVlQBsqlSURiN284dF9YNUk/edit 我的地图位于: https//docs.google.com/file/d/0B-ZJyVlQBsqlSURiN284dF9YNUk/edit

library(rgdal)
voronoipolygons <- function(x) {
  require(deldir)
  if (.hasSlot(x, 'coords')) {
    crds <- x@coords  
  } else crds <- x
  z <- deldir(crds[,1], crds[,2])
  w <- tile.list(z)
  polys <- vector(mode='list', length=length(w))
  require(sp)
  for (i in seq(along=polys)) {
    pcrds <- cbind(w[[i]]$x, w[[i]]$y)
    pcrds <- rbind(pcrds, pcrds[1,])
    polys[[i]] <- Polygons(list(Polygon(pcrds)), ID=as.character(i))
  }
  SP <- SpatialPolygons(polys)
  voronoi <- SpatialPolygonsDataFrame(SP, data=data.frame(x=crds[,1],
                                                          y=crds[,2], row.names=sapply(slot(SP, 'polygons'), 
                                                                                       function(x) slot(x, 'ID'))))
}

And my code to get voronoipolygons: 我的代码来获取voronoipolygons:

pzn.coords<-voronoipolygons(coords)
plot(pznall)
plot(pzn.coords,add=T)
points(coords$LONG,coords$LAT)

result: 结果: 在此输入图像描述

I wan to have this voronoi polygon inside my map as new spatialpolygon. 我想把我的地图中的这个voronoi多边形作为新的空间多边形。

I would be grateful for anwsers! 对于冬天我会很感激!

Edit: 编辑:

To be clear, i want to achieve something like this (this lines should be created from voronoi polygons): 要清楚,我想实现这样的东西(这些行应该从voronoi多边形创建):

在此输入图像描述

Slightly modified function, takes an additional spatial polygons argument and extends to that box: 略微修改的函数,采用额外的空间多边形参数并扩展到该框:

voronoipolygons <- function(x,poly) {
  require(deldir)
  if (.hasSlot(x, 'coords')) {
    crds <- x@coords  
  } else crds <- x
  bb = bbox(poly)
  rw = as.numeric(t(bb))
  z <- deldir(crds[,1], crds[,2],rw=rw)
  w <- tile.list(z)
  polys <- vector(mode='list', length=length(w))
  require(sp)
  for (i in seq(along=polys)) {
    pcrds <- cbind(w[[i]]$x, w[[i]]$y)
    pcrds <- rbind(pcrds, pcrds[1,])
    polys[[i]] <- Polygons(list(Polygon(pcrds)), ID=as.character(i))
  }
  SP <- SpatialPolygons(polys)

  voronoi <- SpatialPolygonsDataFrame(SP, data=data.frame(x=crds[,1],
                                                          y=crds[,2], row.names=sapply(slot(SP, 'polygons'), 
                                                                                       function(x) slot(x, 'ID'))))

  return(voronoi)

}

Then do: 然后做:

pzn.coords<-voronoipolygons(coords,pznall)
library(rgeos)
gg = gIntersection(pznall,pzn.coords,byid=TRUE)
plot(gg)

Note that gg is a SpatialPolygons object, and you might get a warning about mismatched proj4 strings. 请注意, gg是一个SpatialPolygons对象,您可能会收到有关不匹配的proj4字符串的警告。 You may need to assign the proj4 string to one or other of the objects. 您可能需要将proj4字符串分配给一个或另一个对象。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM