本文整理汇总了C++中OGRLinearRing::isClockwise方法的典型用法代码示例。如果您正苦于以下问题:C++ OGRLinearRing::isClockwise方法的具体用法?C++ OGRLinearRing::isClockwise怎么用?C++ OGRLinearRing::isClockwise使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类OGRLinearRing
的用法示例。
在下文中一共展示了OGRLinearRing::isClockwise方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: WindPolygonCCW
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;
}
示例2: OGRGMEPolygonToGeoJSON
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;
}
示例3: extrude_envelope
Surface* Building::extrude_envelope() const
{
Surface* envelope = new Surface(SurfaceType::Envelope,0,_length,_width,_height);
OGRLinearRing* ringFt = _footprint->getExteriorRing();
if(ringFt->isClockwise())
adjust_winding_ccw(ringFt);
envelope->addChild(new Surface(SurfaceType::Footprint,_footprint,_length,_width,0.));
//extrude roof
OGRLinearRing* ringRoof = new OGRLinearRing;
for(int i=0; i<ringFt->getNumPoints(); i++)
ringRoof->addPoint(ringFt->getX(i),ringFt->getY(i),_height);
OGRPolygon plyRoof;
plyRoof.addRingDirectly(ringRoof);
envelope->addChild(new Surface(SurfaceType::Roof,&plyRoof,_length,_width,0.));
//extrude walls
for(int i=0; i<ringFt->getNumPoints()-1; i++)
{
OGRLinearRing* ringWall = new OGRLinearRing;
ringWall->addPoint(ringFt->getX(i),ringFt->getY(i),0);
ringWall->addPoint(ringFt->getX(i+1),ringFt->getY(i+1),0);
ringWall->addPoint(ringFt->getX(i+1),ringFt->getY(i+1),_height);
ringWall->addPoint(ringFt->getX(i),ringFt->getY(i),_height);
ringWall->addPoint(ringFt->getX(i),ringFt->getY(i),0);
OGRPolygon plyWall;
plyWall.addRingDirectly(ringWall);
OGRPoint pt1(ringFt->getX(i),ringFt->getY(i),0);
OGRPoint pt2(ringFt->getX(i+1),ringFt->getY(i+1),0);
envelope->addChild(new Wall(&plyWall,pt1.Distance(&pt2),_height,&pt1,&pt2));
}
return envelope;
}
示例4: switch
OGRErr
OGROCIWritableLayer::TranslateElementGroup( OGRGeometry *poGeometry )
{
switch( wkbFlatten(poGeometry->getGeometryType()) )
{
case wkbPoint:
{
OGRPoint *poPoint = (OGRPoint *) poGeometry;
PushElemInfo( nOrdinalCount+1, 1, 1 );
PushOrdinal( poPoint->getX() );
PushOrdinal( poPoint->getY() );
if( nDimension == 3 )
PushOrdinal( poPoint->getZ() );
return OGRERR_NONE;
}
case wkbLineString:
{
OGRLineString *poLine = (OGRLineString *) poGeometry;
int iVert;
PushElemInfo( nOrdinalCount+1, 2, 1 );
for( iVert = 0; iVert < poLine->getNumPoints(); iVert++ )
{
PushOrdinal( poLine->getX(iVert) );
PushOrdinal( poLine->getY(iVert) );
if( nDimension == 3 )
PushOrdinal( poLine->getZ(iVert) );
}
return OGRERR_NONE;
}
case wkbPolygon:
{
OGRPolygon *poPoly = (OGRPolygon *) poGeometry;
int iRing;
for( iRing = -1; iRing < poPoly->getNumInteriorRings(); iRing++ )
{
OGRLinearRing *poRing;
int iVert;
if( iRing == -1 )
poRing = poPoly->getExteriorRing();
else
poRing = poPoly->getInteriorRing(iRing);
if( iRing == -1 )
PushElemInfo( nOrdinalCount+1, 1003, 1 );
else
PushElemInfo( nOrdinalCount+1, 2003, 1 );
if( (iRing == -1 && poRing->isClockwise())
|| (iRing != -1 && !poRing->isClockwise()) )
{
for( iVert = poRing->getNumPoints()-1; iVert >= 0; iVert-- )
{
PushOrdinal( poRing->getX(iVert) );
PushOrdinal( poRing->getY(iVert) );
if( nDimension == 3 )
PushOrdinal( poRing->getZ(iVert) );
}
}
else
{
for( iVert = 0; iVert < poRing->getNumPoints(); iVert++ )
{
PushOrdinal( poRing->getX(iVert) );
PushOrdinal( poRing->getY(iVert) );
if( nDimension == 3 )
PushOrdinal( poRing->getZ(iVert) );
}
}
}
return OGRERR_NONE;
}
default:
{
return OGRERR_FAILURE;
}
}
}