我正在从OpenStreetMap数据库中提取水体的名称,并使用Geos库根据它们的几何图形的质心获取它们的标签long/lat:
geos::geom::Geometry* geometry = BuildInternalGeometry();
geos::geom::Coordinate centroidCoord;
bool result = geometry->getCentroid(centroidCoord);然而,有几个水体的形状不规则,导致质心的位置落在水多边形之外,在地图上看上去不太合适。有什么程序可以用来找出几何学中最接近质心的内部点吗?
我已经找到了Geos库的getInteriorPoint方法,但是根据我所知道的,如果返回一个随机点,保证在几何范围内,但不一定接近质心。
发布于 2020-07-31 17:28:05
虽然Jeffrey的回答没有完全回答这个问题( Geos库似乎不支持多边形部分),但它确实给了我一个想法,嗯……2关于如何在多边形质心附近定位内部点的想法。
第一个想法(更容易、不太精确)涉及到对几何体顶点的迭代,并使用最接近外部质心的顶点作为新的质心:
auto coords = geometry->getCoordinates();
for (auto i = 0; i < coords.get()->getSize(); i++)
{
double dist = coords.get()->getAt(i).distance(coordPoint);
if (dist < nearest)
{
nearest = dist;
closestCoord = coords.get()->getAt(i);
}
}
return closestCoord;然而,新的质心坐标总是位于多边形的边缘,而不是它的内部。
为了得到几何学中的东西,地理信息系统附带的delaunay三角剖分类可以用来生成内部三角形多边形。这些多边形的质心可以被查询,最接近外部质心的三角形质心可以用作位于几何学内的质心点。
发布于 2020-07-30 13:39:10
有什么程序可以用来找出几何学中最接近质心的内部点吗?
你知道,最接近的点将位于水多边形的一个部分(除非它在内部)。直截了当的算法是:
for all segments of the water polygon
find distance between centroid and current segment, get closest point on segment
remember the best distance and positionhttps://stackoverflow.com/questions/63174232
复制相似问题