X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDRO_tests%2Ftest_HYDROData_LandCoverMap.cxx;h=8b0fed78a6f510b004093cce123c32c603c17658;hb=39b1848f103d89cfb544a1651b3fbf221fc2c401;hp=1b71f65242b6651c056e844b0da681ae4e128d68;hpb=7c7ba3cac8a7177a01cd37a883e4d4a0641b4a7c;p=modules%2Fhydro.git diff --git a/src/HYDRO_tests/test_HYDROData_LandCoverMap.cxx b/src/HYDRO_tests/test_HYDROData_LandCoverMap.cxx index 1b71f652..8b0fed78 100644 --- a/src/HYDRO_tests/test_HYDROData_LandCoverMap.cxx +++ b/src/HYDRO_tests/test_HYDROData_LandCoverMap.cxx @@ -43,6 +43,8 @@ #include #include #include +#include +#include #define _DEVDEBUG_ #include "HYDRO_trace.hxx" @@ -1146,7 +1148,7 @@ void test_HYDROData_LandCoverMap::test_copy() aDoc->Close(); } -void test_HYDROData_LandCoverMap::test_shp_clc_classification() +void test_HYDROData_LandCoverMap::test_shp_clc_classification_perf() { Handle(HYDROData_Document) aDoc = HYDROData_Document::Document(1); QString aFileName = REF_DATA_PATH + "/CLC_decoupe.shp"; @@ -1162,7 +1164,15 @@ void test_HYDROData_LandCoverMap::test_shp_clc_classification() Handle(HYDROData_LandCoverMap) LCM = Handle(HYDROData_LandCoverMap)::DownCast( aDoc->CreateObject( KIND_LAND_COVER_MAP ) ); HYDROData_MapOfFaceToStricklerType aMapFace2ST; - for ( int i = 100; i <= 300; i++ ) +#ifdef NDEBUG + int SI = 100; + int EI = 300; +#else + int SI = 150; + int EI = 200; +#endif + + for ( int i = SI; i <= EI; i++ ) { TopoDS_Shape aShape = PolygonFaces(i); if ( aShape.IsNull() ) @@ -1171,10 +1181,14 @@ void test_HYDROData_LandCoverMap::test_shp_clc_classification() } LCM->StoreLandCovers(aMapFace2ST); - //TopoDS_Shape aSh = LCM->GetShape(); - std::vector pnts; - int N = 100000; + std::vector pnts; +#ifdef NDEBUG + int N = 1000; //1000*1000 points; uniform distribution for release mode +#else + int N = 100; +#endif + pnts.reserve(N); double x0 = 448646.91897505691; double x1 = 487420.3990381231; @@ -1182,10 +1196,85 @@ void test_HYDROData_LandCoverMap::test_shp_clc_classification() double y1 = 6392203.4117361344; for (size_t i=0; i < N; i++) { - double px = x0 + (x1-x0)/(double)N; - double py = y0 + (y1-y0)/(double)N; - pnts.push_back(gp_Pnt2d(px,py)); + for (size_t j=0; j < N; j++) + { + double px = x0 + (x1-x0)*((double)i/(double)N); + double py = y0 + (y1-y0)*((double)j/(double)N); + pnts.push_back(gp_XY(px,py)); + } } - std::vector > TRes; + OSD_Timer aTimer; + std::vector > TRes; + aTimer.Start(); + LCM->ClassifyPoints(pnts, TRes); + aTimer.Stop(); +#ifdef NDEBUG + CPPUNIT_ASSERT( aTimer.ElapsedTime() < 1.4); + aTimer.Show(); +#endif +} + +void test_HYDROData_LandCoverMap::test_shp_clc_classification_check() +{ + Handle(HYDROData_Document) aDoc = HYDROData_Document::Document(1); + QString aFileName = REF_DATA_PATH + "/CLC_decoupe.shp"; + HYDROData_ShapeFile anImporter; + QStringList PolygonList; + TopTools_SequenceOfShape PolygonFaces; + int Type = -1; + int aStat = anImporter.ImportPolygons(aDoc, aFileName, PolygonList, PolygonFaces, Type); + CPPUNIT_ASSERT(aStat == 1); + Handle(HYDROData_LandCoverMap) LCM = Handle(HYDROData_LandCoverMap)::DownCast( aDoc->CreateObject( KIND_LAND_COVER_MAP ) ); + HYDROData_MapOfFaceToStricklerType aMapFace2ST; + + aMapFace2ST.Add( TopoDS::Face( PolygonFaces(172) ), "Tissu urbain continu" ); + aMapFace2ST.Add( TopoDS::Face( PolygonFaces(179) ), "Aéroports" ); + aMapFace2ST.Add( TopoDS::Face( PolygonFaces(185) ), "Rizières" ); + aMapFace2ST.Add( TopoDS::Face( PolygonFaces(187) ), "Vignobles" ); + aMapFace2ST.Add( TopoDS::Face( PolygonFaces(190) ), "Oliveraies" ); + aMapFace2ST.Add( TopoDS::Face( PolygonFaces(196) ), "Estuaires" ); + + LCM->StoreLandCovers(aMapFace2ST); + + TopoDS_Shape Sh = LCM->GetShape(); + + std::vector pnts; + pnts.push_back(gp_XY(0,0)); + + pnts.push_back(gp_XY(468380, 6382300)); + pnts.push_back(gp_XY(468380, 6382900)); + pnts.push_back(gp_XY(468380, 6383200)); + pnts.push_back(gp_XY(468250, 6384700)); + pnts.push_back(gp_XY(470350, 6384700)); + pnts.push_back(gp_XY(469279.642874048, 6385132.45048612 )); + + std::vector > TRes; LCM->ClassifyPoints(pnts, TRes); + + CPPUNIT_ASSERT (TRes[0].empty()); + CPPUNIT_ASSERT (TRes[1].empty()); + CPPUNIT_ASSERT (TRes[2].empty()); + CPPUNIT_ASSERT_EQUAL (*TRes[3].begin(), QString("Estuaires")); + CPPUNIT_ASSERT_EQUAL (*TRes[4].begin(), QString("Oliveraies")); + CPPUNIT_ASSERT_EQUAL (*TRes[5].begin(), QString("Vignobles")); + + //std::less comparator; so compare first and second elem safely + CPPUNIT_ASSERT_EQUAL (*TRes[6].begin(), QString("Estuaires")); + CPPUNIT_ASSERT_EQUAL (*(++TRes[6].begin()), QString("Tissu urbain continu")); + + /// + Handle(HYDROData_StricklerTable) aTable = Handle(HYDROData_StricklerTable)::DownCast( aDoc->CreateObject( KIND_STRICKLER_TABLE ) ); + CPPUNIT_ASSERT_EQUAL( true, aTable->Import( DEF_STR_PATH ) ); + std::vector coeffs; + LCM->ClassifyPoints(pnts, aTable, coeffs, 0.0, true); + + CPPUNIT_ASSERT_EQUAL (coeffs[0], 0.0); + CPPUNIT_ASSERT_EQUAL (coeffs[1], 0.0); + CPPUNIT_ASSERT_EQUAL (coeffs[2], 0.0); + CPPUNIT_ASSERT_EQUAL (coeffs[3], 1.0522); + CPPUNIT_ASSERT_EQUAL (coeffs[4], 1.0223); + CPPUNIT_ASSERT_EQUAL (coeffs[5], 1.0221); + CPPUNIT_ASSERT_EQUAL (coeffs[6], 1.0522); + } +