使用C API迭代GEOS Polygon中的点

时间:2014-06-03 14:04:48

标签: c geos

如何迭代GEOS Polygon中的点而不将其转换为WKT字符串?目前我们正在做这样的事情:

GEOSGeometry *geom = GEOSGeomFromWKT("POLYGON ((1 1, 2 1, 2 2, 1 2, 11))");
char geomAsWKT[900] = GEOSGeomToWKT(geom);
/* Iterate over the geomAsWKT to get the points */

我尝试过的所有功能(GEOSGeomGetPointNGEOSGeom_getCoordSeq和其他一些功能)仅适用于LinearRing

1 个答案:

答案 0 :(得分:3)

要迭代多边形的点,您必须通过调用LinearRing 来获取GEOSGetExteriorRing,如下所示。

此示例适用于MultiPolygonPolygon s。此示例打印构成多面的LinearRings中点的所有x,y坐标。如果inputGeom是Polygon,它也可以工作。

GEOSGeometry *inputGeom = GEOSGeomFromWKT("MULTIPOLYGON (((30 20, 45 40, 10 40, 30 20)), ((15 5, 40 10, 10 20, 5 10, 15 5)))");
const GEOSGeometry *linearRing;
const GEOSCoordSequence *coordSeq;
int numGeom = GEOSGetNumGeometries(inputGeom);
int n;
for (n=0; n < numGeom; n++) {
    linearRing = GEOSGetExteriorRing(GEOSGetGeometryN(inputGeom, n));
    printf("%s\n", GEOSGeomToWKT(linearRing));
    unsigned int numPoints, p;
    numPoints = GEOSGeomGetNumPoints(linearRing);
    for (p=0; p < numPoints; p++) {
        double xCoord, yCoord;
        coordSeq = GEOSGeom_getCoordSeq(linearRing);
        GEOSCoordSeq_getX(coordSeq, p, &xCoord);
        GEOSCoordSeq_getY(coordSeq, p, &yCoord);

        printf("%f, %f\n", xCoord, yCoord);
    }
}

就我的目的而言,多边形从来没有漏洞,所以这就是我所需要的。