我试图在一组固定的地理区域内创建Voronoi多边形(又名Dirichlet镶嵌或Thiessen多边形).但是,我在R中找到一个方法会遇到地图边界内的多边形.我的主要目标是获得准确的面积计算(不仅仅是生成视觉图).例如,以下内容直观地传达了我想要实现的目标:
library(maps)
library(deldir)
data(countyMapEnv)
counties <- map('county', c('maryland,carroll','maryland,frederick', 'maryland,montgomery', 'maryland,howard'), interior=FALSE)
x <- c(-77.208703, -77.456582, -77.090600, -77.035668, -77.197144)
y <- c(39.188603, 39.347019, 39.672818, 39.501898, 39.389203)
points(x,y)
vt <- deldir(x, y, rw=counties$range)
plot(vt, wlines="tess", lty="solid", add=TRUE)
Run Code Online (Sandbox Code Playgroud)
产生以下内容:

从概念上讲,我想counties与之相交vt,应该提供一组由县界限定的多边形,并为每个多边形进行准确的面积计算.现在,vt$summary为每个多边形提供面积计算,但除了一个内部多边形之外,它们显然被夸大了,并且deldir()似乎只接受其rw参数的矩形包围.我是R的geospacial能力的新手,所以我可以接受超出我上面概述的其他方法.
我有点(例如,lat,lon对的细胞塔位置),我需要得到它们形成的Voronoi细胞的多边形.
from scipy.spatial import Voronoi
tower = [[ 24.686 , 46.7081],
[ 24.686 , 46.7081],
[ 24.686 , 46.7081]]
c = Voronoi(towers)
Run Code Online (Sandbox Code Playgroud)
现在,我需要为每个单元格的lat,lon坐标获取多边形边界(以及该多边形所包围的质心).我需要这个Voronoi也是有限的.意味着边界不会变为无穷大,而是在边界框内.
当用户点击它时,我需要突出显示不规则的形状.我对如何做的想法是绘制一个与形状匹配的多边形,用颜色填充它并改变不透明度使其半透明.不幸的是我找不到任何关于如何做到这一点.基本上,我想绘制填充多边形,将其叠加到我的地图上,然后能够解散(或隐藏)它.我怎么能做到这一点?
我正在处理IfcFace.我给了一个带孔的简单多边形,我需要将它转换成多个没有孔的简单多边形,以便CAD进一步处理它.一点点演示ilustration:
我最好的方法是做一个约束的delaunay三角剖分并将三角形重新加入更大的多边形.像这样:
但是由于浮点精度和算法不稳定性,delaunay三角剖分甚至更多的约束部分往往因难以输入而失败.我的输入有时会生成高度为1e-8且基本长度为1的三角形.
是否有更好的更强大的算法来实现这种转换?
我有一组顶点(称为A),我想找到所有边界顶点,使得此边框顶点集是形状的轮廓.
A中的许多顶点都是多余的,因为它们在形状内部,我想摆脱这些顶点.
我的问题类似于找到顶点边(多边形)的最佳算法,但我需要它来处理非凸多边形的情况.
编辑:澄清:下图是凹多边形.这就是我所说的非凸.如果我对它运行凸包算法,它将不会保留多边形的凹陷部分.(除非我弄错了).
![]()
我在多边形的边界内和边界上有一组顶点:[[x1,y1],[x2,y2] ...]我想减少集合,使顶点只是形状的边框轮廓.
我正在使用python和matplotlib来创建几个封闭的多边形.然后我需要用填充物填充它们,这可以通过set_hatch完成.
http://matplotlib.org/api/artist_api.html#matplotlib.patches.Patch.set_hatch
http://matplotlib.org/examples/pylab_examples/hatch_demo.html
不幸的是我正在使用灰度图像,我需要比默认提供的更多的阴影 - 我更愿意提供一个位图(或一些类似的图像),它可以平铺而不是使用具有不同密度的这些阴影.
我对其他python库(pyglet,pygame,PIL等)开放,但我更喜欢解决方案是在python中.
在R中,我有SpatialPolygons包含几百个多边形的单个对象(即多多边形).我想将此SpatialPolygons对象拆分为一个列表Polygons(即孔应保持附加到父多边形).
知道怎么做吗?
编辑:
使用sp包中提供的以下示例:
# simple example, from vignette("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)
Run Code Online (Sandbox Code Playgroud)
然后跑out = lapply(SpP@polygons, slot, "Polygons").我得到三个列表Polygons(即Srs1,Srs2,Srs3).
但是,我试图解决的情况与此示例略有不同.SpatialPolygons我试图拆分的对象是使用gUnaryUnion函数(在RGEOS包中)完成几何联合的结果.如果我申请out <- lapply(merged.polygons@polygons, slot, "Polygons"),我会获得一个唯一的Polygon对象列表(nb不是Polygons …
使用Emgu CV我从道路网络图像中的轮廓中提取了一组闭合多边形.多边形代表道路轮廓.结果如下所示,绘制在OpenStreetMaps地图上(来自Emgu CV的'像素'形式的多边形已转换为要绘制的纬度/经度形式).
代表道路轮廓的多边形集:
我现在想要计算这组多边形的Voronoi图,这将帮助我找到道路的中心线.但在Emgu CV中,我只能找到一种方法来获得一组点的Voronoi图.这是通过找到点集的Delaunay三角剖分(使用Subdiv2D类)然后使用GetVoronoiFacets计算voronoi面来完成的.
我已经尝试计算由集合中所有多边形定义的点的Voronoi图(每个多边形是一个点列表),但这给了我一个非常复杂的Voronoi图,正如人们可能期望的那样:
点集的Voronoi图:
该图像显示了第一张图片的较小部分(为清楚起见,因为它是如此复杂).事实上,图中的某些线条似乎代表了道路中心线,但是还有很多其他线路,很难找到提取"好"线的标准.
我面临的另一个潜在问题是,正如你应该能够从第一张图片中看出的那样,一些多边形在其他人的内部,所以我们不处于一组不相交的闭合多边形的标准情况.也就是说,有时道路位于一个多边形的外边界和另一个多边形的内边界之间.
我正在寻找关于如何使用Emgu CV(或Open CV)计算多边形集的Voronoi图的建议,希望能够克服我已经概述的第二个问题.我也对其他建议如何在不使用Emgu CV的情况下实现这一点.
我想根据高程将多边形层切割成两部分(上部和下部).多边形可能是凸的或凹的,并且要切割的位置可能彼此不同.轮廓线的间隔为5米,这意味着我可能需要生成具有更多浓缩轮廓线的轮廓,例如1米间隔.有关如何做到这一点的想法,更好的在ArcGIS或R?以下是Q的运行示例:
library(sp)
library(raster)
r<-raster(ncol=100,nrow=100)
values(r)<-rep(1:100,100)
plot(r) ### I have no idea why half of the value is negative...
p1<-cbind(c(-100,-90,-50,-100),c(60,70,30,30,60))
p2<-cbind(c(0,50,100,0),c(0,-25,10,0))
p1p<-Polygons(list(Polygon(p1,hole=T)),"p1")
p2p<-Polygons(list(Polygon(p2,hole=T)),"p2")
p<-SpatialPolygons(list(p1p,p2p),1:2)
plot(p,add=T)
segments(-90,80,-90,20) ##where the polygon could be devided
segments(50,20,50,-30) ##
Run Code Online (Sandbox Code Playgroud)
提前谢谢〜
马尔科
我在天空图上有一系列点。我想找到这些点占据的面积。
为此,我需要找到包围这些点的多边形的顶点 - 将这些点转换为等积投影,然后计算出面积。
除了如何计算包围图形上的点的多边形的顶点之外,我还编写了所有代码。做这个的最好方式是什么?