void GDALMergeFaces::run() { OGRGeometry * geo; leadingView.resetReading(); OGRFeature * f; std::set<int> indizes; while (f = leadingView.getNextFeature()) { indizes.insert(f->GetFieldAsInteger(this->attriubteName.c_str())); } //int cluster_id = 1; int counter = 1; foreach (int cluster_id, indizes) { //while(geo = joinCluster(cluster_id)) { //cluster_id++; geo = joinCluster(cluster_id); if (counter % 100 == 0) { DM::Logger(DM::Standard) << "merged " << counter << "/" << indizes.size(); } counter++; if (!geo) continue; if (wkbMultiPolygon == geo->getGeometryType()){ geo = geo->UnionCascaded(); OGRMultiPolygon * mgeo = (OGRMultiPolygon*) geo; if (mgeo->getNumGeometries() == 0) { continue; } geo = mgeo->getGeometryRef(0); int n = mgeo->getNumGeometries(); for (int i = 0; i < n; i++) { OGRFeature * f = combinedView.createFeature(); f->SetGeometry(mgeo->getGeometryRef(i)); f->SetField("test_id", counter); } continue; } OGRFeature * f = combinedView.createFeature(); f->SetGeometry(geo); }