/* * Perform the polygonization, if it has not already been carried out. */ void Polygonizer::polygonize() { // check if already computed if (polyList!=NULL) return; polyList=new vector<Polygon*>(); if (graph==NULL) // No valid geometries added { return; } dangles=graph->deleteDangles(); cutEdges=graph->deleteCutEdges(); vector<polygonizeEdgeRing*> *edgeRingList=graph->getEdgeRings(); #if DEBUG cerr<<"Polygonizer::polygonize(): "<<edgeRingList->size()<<" edgeRings in graph"<<endl; #endif vector<polygonizeEdgeRing*> *validEdgeRingList=new vector<polygonizeEdgeRing*>(); invalidRingLines=new vector<LineString*>(); findValidRings(edgeRingList, validEdgeRingList, invalidRingLines); #if DEBUG cerr<<" "<<validEdgeRingList->size()<<" valid"<<endl; cerr<<" "<<invalidRingLines->size()<<" invalid"<<endl; #endif delete edgeRingList; findShellsAndHoles(validEdgeRingList); #if DEBUG cerr<<" "<<holeList->size()<<" holes"<<endl; cerr<<" "<<shellList->size()<<" shells"<<endl; #endif assignHolesToShells(holeList, shellList); for (int i=0;i<(int)shellList->size();i++) { polygonizeEdgeRing *er=(*shellList)[i]; polyList->push_back(er->getPolygon()); } delete validEdgeRingList; }
/* public */ void Polygonizer::polygonize() { // check if already computed if (polyList!=NULL) return; polyList=new vector<Polygon*>(); // if no geometries were supplied it's possible graph could be null if (graph==NULL) return; graph->deleteDangles(dangles); graph->deleteCutEdges(cutEdges); vector<EdgeRing*> edgeRingList; graph->getEdgeRings(edgeRingList); #if GEOS_DEBUG cerr<<"Polygonizer::polygonize(): "<<edgeRingList.size()<<" edgeRings in graph"<<endl; #endif vector<EdgeRing*> validEdgeRingList; invalidRingLines.clear(); /* what if it was populated already ? we should clean ! */ findValidRings(edgeRingList, validEdgeRingList, invalidRingLines); #if GEOS_DEBUG cerr<<" "<<validEdgeRingList.size()<<" valid"<<endl; cerr<<" "<<invalidRingLines.size()<<" invalid"<<endl; #endif findShellsAndHoles(validEdgeRingList); #if GEOS_DEBUG cerr<<" "<<holeList.size()<<" holes"<<endl; cerr<<" "<<shellList.size()<<" shells"<<endl; #endif assignHolesToShells(holeList, shellList); for (unsigned int i=0, n=shellList.size(); i<n; ++i) { EdgeRing *er=shellList[i]; polyList->push_back(er->getPolygon()); } }