OGRGeometry *OGRMultiPoint::clone() const { OGRMultiPoint *poNewGC; poNewGC = new OGRMultiPoint; poNewGC->assignSpatialReference( getSpatialReference() ); for( int i = 0; i < getNumGeometries(); i++ ) { poNewGC->addGeometry( getGeometryRef(i) ); } return poNewGC; }
void OGRSOSIDataSource::buildOGRMultiPoint(int nNumCoo, long iSerial) { if (papoBuiltGeometries[iSerial] != NULL) { return; } OGRMultiPoint *poMP = new OGRMultiPoint(); long i; double dfEast = 0, dfNorth = 0; for (i=(nNumCoo>1)?2:1; i<=nNumCoo; i++) { LC_GetTK(i, &dfEast, &dfNorth); OGRPoint poP = OGRPoint(dfEast, dfNorth); poMP->addGeometry(&poP); /*poP will be cloned before returning*/ } papoBuiltGeometries[iSerial] = poMP; }
//--------------------------------------------------------- bool COGR_DataSource::_Write_Geometry(CSG_Shape *pShape, OGRFeature *pFeature) { if( pShape && pFeature ) { int iPoint, iPart; TSG_Point sgPoint; OGRPoint Point; OGRMultiPoint Points; OGRLineString Line; OGRMultiLineString Lines; OGRLinearRing Ring; OGRPolygon Polygon; switch( pShape->Get_Type() ) { //------------------------------------------------- case SHAPE_TYPE_Point: sgPoint = pShape->Get_Point(0); Point.setX(sgPoint.x); Point.setY(sgPoint.y); return( pFeature->SetGeometry(&Point) == OGRERR_NONE ); //------------------------------------------------- case SHAPE_TYPE_Points: for(iPart=0; iPart<pShape->Get_Part_Count(); iPart++) { for(iPoint=0; iPoint<pShape->Get_Point_Count(iPart); iPoint++) { sgPoint = pShape->Get_Point(iPoint, iPart); Point.setX(sgPoint.x); Point.setY(sgPoint.y); Points.addGeometry(&Point); } } return( pFeature->SetGeometry(&Points) == OGRERR_NONE ); //------------------------------------------------- case SHAPE_TYPE_Line: if( pShape->Get_Part_Count() == 1 ) { _Write_Line(pShape, &Line, 0); return( pFeature->SetGeometry(&Line) == OGRERR_NONE ); } else { for(iPart=0; iPart<pShape->Get_Part_Count(); iPart++) { if( _Write_Line(pShape, &Line, iPart) ) { Lines.addGeometry(&Line); } } return( pFeature->SetGeometry(&Lines) == OGRERR_NONE ); } //------------------------------------------------- case SHAPE_TYPE_Polygon: for(iPart=0; iPart<pShape->Get_Part_Count(); iPart++) { if( _Write_Line(pShape, &Ring, iPart) ) { Polygon.addRing(&Ring); } } return( pFeature->SetGeometry(&Polygon) == OGRERR_NONE ); //------------------------------------------------- default: break; } } return( false ); }