我正在从OpenStreetMap数据库中提取水体的名称,并使用Geos库基于其几何形状的质心获得它们的标签long/lat:
geos::geom::Geometry* geometry = BuildInternalGeometry();
geos::geom::Coordinate centroidCoord;
bool result = geometry->getCentroid(centroidCoord);
然而,有几个水体形状不规则,导致质心的位置远离水体多边形,使其在地图上看时显得格格不入。 有没有一种方法,我可以用它来找到一个几何体的内点,最接近它的质心?
我找到了Geos库的getInteriorPoint
方法,但从我可以看出,如果返回了一个保证在几何图形内但不一定靠近质心的随机点。
有没有一种方法,我可以用它来找到一个几何体的内点,最接近它的质心?
你知道最近的点将位于水多边形的一段上(除非它在内部)。 简单的算法是:
for all segments of the water polygon
find distance between centroid and current segment, get closest point on segment
remember the best distance and position