多边形面上一点的算法

GISPolygon可以是凹多边形,而且还可以带孔,一般我们把多边形的外轮廓叫做外环(Exterior Ring)把孔叫做内环(Interior Ring)。一个多边形必须且只能有一个外环,可以有若干个内环。所谓多边形上一点(Point On Surface)就是指一个必须落在多边形面上而不是空白处(凹多边形的凹口处和带孔多边形的孔洞里)的点。如下图

image

很多时候我们需要获得这样的点,例如给多边形加标注时,我们不希望标注显示在多边形的外面。

获得面上点的方法如下:

首先获得一个种子点,一般是多边形的几何中心。然后以此点做横线与多边形的所有环相交,将交点以X分量从左向右排序。此时的交点一定是如下的序列:

0~1,2~3,…,i~i+1其中数值表示序列下标。,如下图:

clip_image002[4]

我们只需要在ii+1两点取点,这个点的X分量一定在面上。一般我们取中点。然后以此点做纵线与多边形的所有环相交,将交点以Y分量从上向下排序,我们会得到与上面相似的点序列。如下图

clip_image002[6]

从这个序列的i点和i+1点中取中间位置,我们就得到一个多边形面上的点。下图是带孔的情况。

clip_image002[8]

紫色的点是最终结果。

代码下载

 

posted on 2009-12-03 11:28  索夫特威尔  阅读(1326)  评论(1编辑  收藏  举报

导航