我目前正在开发一个从线创建多边形的应用程序,我遇到了一个小问题:
我有一组点,代表一条线。我想创建一个多边形,显示具有特定宽度的线(例如,对于街道)。我有几个想法如何计算外部多边形点,但我认为它们太复杂了......
我最好的想法是如下图所示:线的每个点必须至少投射到两个点:两个点必须与下一个线段成90°并且距离是首选多边形宽度的一半。
这很好用,你可以看到图中多边形的结束和起点。现在复杂的部分:用这种方法,在一个角落,每个点得到四个点。但是这些点对于外部多边形是不正确的,因为它们处于形状中。线相交并创建了一个丑陋的多边形。
如何找到这样的多边形的正确点?我认为我的方法太复杂,无法解决这个问题。
任何人都可以帮我解决这个问题(可能非常常见)吗?
信息:我用openstreetmap
标记了这一点,因为像Mapnik这样的渲染器也有这个问题。
答案 0 :(得分:4)
您正在寻找的是多边形(或线)偏移算法。顺便说一下,这不一定是一个容易解决的问题:An algorithm for inflating/deflating (offsetting, buffering) polygons。
在过去的几周里,我一直致力于Maperitive的线偏移算法。在我的情况下,我只需要偏移该行,所以我没有寻找在其周围创建缓冲多边形的解决方案,但我想这个算法可以在将来进一步扩展:
基本流程(粗略,但魔鬼在细节中):
要注意的一些事项: