Example #1
0
OGRPolygon* OGRGMELayer::WindPolygonCCW( OGRPolygon *poPolygon )
{
    CPLAssert( NULL != poPolygon );

    OGRLinearRing* poRing = poPolygon->getExteriorRing();
    if (poRing == NULL) {
        return poPolygon;
    }

    // If the linear ring is CW re-wind it CCW
    if (poRing->isClockwise() ) {
      poRing->reverseWindingOrder();
    }

    /* Interior rings. */
    const int nCount = poPolygon->getNumInteriorRings();
    for( int i = 0; i < nCount; ++i ) {
        poRing = poPolygon->getInteriorRing( i );
        if (poRing == NULL)
            continue;
        // If the linear ring is CW re-wind it CCW

        if (poRing->isClockwise() ) {
            poRing->reverseWindingOrder();
        }
    }

    return poPolygon;
}
Example #2
0
json_object* OGRGMEPolygonToGeoJSON( OGRPolygon* poPolygon )
{
    CPLAssert( NULL != poPolygon );

    /* Generate "coordinates" array object. */
    json_object* pjoCoordinates = NULL;
    pjoCoordinates = json_object_new_array();

    /* Exterior ring. */
    OGRLinearRing* poRing = poPolygon->getExteriorRing();
    if (poRing == NULL) {
        json_object_put(pjoCoordinates);
        return NULL;
    }

    json_object* pjoRing = NULL;
    // If the linear ring is CW re-wind it CCW
    if (poRing->isClockwise() ) {
      poRing->reverseWindingOrder();
    }

    pjoRing = OGRGMELineCoordsToGeoJSON( poRing );
    json_object_array_add( pjoCoordinates, pjoRing );

    /* Interior rings. */
    const int nCount = poPolygon->getNumInteriorRings();
    for( int i = 0; i < nCount; ++i ) {
        poRing = poPolygon->getInteriorRing( i );
        if (poRing == NULL)
            continue;
        // If the linear ring is CW re-wind it CCW
        if (poRing->isClockwise() ) {
            poRing->reverseWindingOrder();
        }
        pjoRing = OGRGMELineCoordsToGeoJSON( poRing );
        json_object_array_add( pjoCoordinates, pjoRing );
    }

    return pjoCoordinates;
}