我想知道QGIS几何工具->多边形质心到底是如何计算点坐标的。例如,是否将多边形的边界划分为小点,以两对两点(长度和宽度)为最大距离,并将这两条线的交点作为质心?
我想知道QGIS几何工具->多边形质心到底是如何计算点坐标的。例如,是否将多边形的边界划分为小点,以两对两点(长度和宽度)为最大距离,并将这两条线的交点作为质心?
Answers:
如果QGIS使用作为JTS端口的GEOS计算质心,则算法为http://tsusiatsoftware.net/jts/javadoc/com/vividsolutions/jts/algorithm/CentroidArea.html。关于该理论,javadoc中有一个链接到http://www.faqs.org/faqs/graphics/algorithms-faq/,请参见第2.02节:如何计算多边形的质心?
可以将多边形的质心(也称为质心或重心)计算为多边形的一部分划分为三角形的质心的加权总和。三角形的质心只是其三个顶点的平均值,即,它的坐标为(x1 + x2 + x3)/ 3和(y1 + y2 + y3)/ 3。这建议首先对多边形进行三角剖分,然后形成每个三角形的质心的总和,并按每个三角形的面积加权,然后将总和归一化为总多边形面积。确实可以,但是有一种更简单的方法:三角剖分不一定是一个分区,而是可以使用正负三角形的三角形(具有正负面积),就像在计算多边形的面积时所使用的那样。这导致了一个非常简单的算法,可以根据三角质心的总和及其符号区域加权来计算质心。三角形可以视为由任意固定点(例如,多边形的顶点v0)和多边形的连续边的两个端点((v1,v2),(v2,v3)等)形成的三角形。顶点为a,b,c的三角形的整数是此表达式的一半:(b [X]-a [X])*(c [Y]-a [Y])-(c [X]-a [X] )*(b [Y]-a [Y]);
Code available at ftp://cs.smith.edu/pub/code/centroid.c (3K). Reference: [Gems IV] pp.3-6; also includes code.
在我看来,该方法是准确的。如果要检查如何使用坐标值以及是否存在舍入误差等,可以查看JTS或GEOS的源代码。