diff --git a/src/main.cpp b/src/main.cpp index 0356f89..c09b23a 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -34,7 +34,7 @@ std::vector vector_casemap(HeightMap* heightmap, int interval) { int num_contours = (heightmap->max - heightmap->min)/interval; std::vector vector_contours; -omp_set_num_threads(8); +omp_set_num_threads(12); #pragma omp parallel { @@ -43,7 +43,7 @@ omp_set_num_threads(8); for (int i = 1; i <= num_contours; i++) { vec_private.push_back(produce_casemap(heightmap, heightmap->min + interval*i)); - std::cout << "Execute thread " << omp_get_num_threads << " "; + std::cout << "Execute thread " << omp_get_num_threads() << " "; } #pragma omp critical vector_contours.insert(vector_contours.end(), vec_private.begin(), vec_private.end()); @@ -52,7 +52,7 @@ omp_set_num_threads(8); return vector_contours; } -void write_output_file(CaseMap* casemap, const char *filepath) +void write_output_file(std::vector casemaps, const char *filepath) { const char *pszDriverName = "ESRI Shapefile"; @@ -78,7 +78,7 @@ void write_output_file(CaseMap* casemap, const char *filepath) OGRLayer *poLayer; - poLayer = poDS->CreateLayer( "contours", &casemap->reference_system, wkbPoint, NULL ); + poLayer = poDS->CreateLayer( "contours", &(casemaps[0]).reference_system, wkbPoint, NULL ); if( poLayer == NULL ) { printf( "Layer creation failed.\n" ); @@ -94,41 +94,44 @@ void write_output_file(CaseMap* casemap, const char *filepath) printf( "Creating Name field failed.\n" ); exit( 1 ); } - - for (int i = 0; iheight*casemap->width; i++) { - if (*(casemap->cases + i) != 0 && *(casemap->cases + i) != 15) - { - int x_int = i%casemap->width; - int y_int = casemap->height*casemap->width - i/casemap->width; - double x = double(x_int); - double y = double(y_int); - - OGRFeature *poFeature; - - poFeature = OGRFeature::CreateFeature( poLayer->GetLayerDefn() ); - poFeature->SetField( "Name", *(casemap->cases + i) ); - - //OGRSpatialReference local; - - //auto poCT = OGRCreateCoordinateTransformation( &local, &casemap->reference_system ); - - /* - if( poCT == NULL || !poCT->Transform( 1, &x, &y ) ) - printf( "Transformation failed.\n" ); - */ - OGRPoint pt; - pt.setX( x ); - pt.setY( y ); - - poFeature->SetGeometry( &pt ); - - if( poLayer->CreateFeature( poFeature ) != OGRERR_NONE ) + for (int j = 0; j < casemaps.size(); j++) + { + CaseMap* casemap = &casemaps[j]; + for (int i = 0; iheight*casemap->width; i++) { + if (*(casemap->cases + i) != 0 && *(casemap->cases + i) != 15) { - printf( "Failed to create feature in shapefile.\n" ); - exit( 1 ); - } + int x_int = i%casemap->width; + int y_int = casemap->height*casemap->width - i/casemap->width; + double x = double(x_int); + double y = double(y_int); - OGRFeature::DestroyFeature( poFeature ); + OGRFeature *poFeature; + + poFeature = OGRFeature::CreateFeature( poLayer->GetLayerDefn() ); + poFeature->SetField( "Name", *(casemap->cases + i) ); + + //OGRSpatialReference local; + + //auto poCT = OGRCreateCoordinateTransformation( &local, &casemap->reference_system ); + + /* + if( poCT == NULL || !poCT->Transform( 1, &x, &y ) ) + printf( "Transformation failed.\n" ); + */ + OGRPoint pt; + pt.setX( x ); + pt.setY( y ); + + poFeature->SetGeometry( &pt ); + + if( poLayer->CreateFeature( poFeature ) != OGRERR_NONE ) + { + printf( "Failed to create feature in shapefile.\n" ); + exit( 1 ); + } + + OGRFeature::DestroyFeature( poFeature ); + } } } @@ -165,6 +168,7 @@ int main(int argc, const char* argv[]) //std::cout << "\n"; } */ - write_output_file(&casemap, "out.shp"); - vector_casemap(&map, 1); + + auto casemaps = vector_casemap(&map, 5); + write_output_file(casemaps, "out.shp"); } \ No newline at end of file