1+ #include < gtest/gtest.h>
2+
3+ #include < citygml/citygml.h>
4+
5+ #include < plateau/geometry/geo_coordinate.h>
6+ #include < plateau/dataset/standard_map_grid.h>
7+
8+ using namespace citygml ;
9+ using namespace plateau ::dataset;
10+ using namespace plateau ::geometry;
11+
12+ TEST (StandardMapGrid, Level5000_WithinBounds) {
13+ const auto extent = StandardMapGrid (" 08EE54" ).getExtent (); // Level5000
14+ const auto expected = GeoCoordinate (37.4689 , 138.7113 , 0 );
15+
16+ std::stringstream ss;
17+ ss << " Extent bounds: (" << extent.min .latitude << " , " << extent.min .longitude << " ) - ("
18+ << extent.max .latitude << " , " << extent.max .longitude << " )\n "
19+ << " Expected point: (" << expected.latitude << " , " << expected.longitude << " )" ;
20+ SCOPED_TRACE (ss.str ());
21+ ASSERT_TRUE (
22+ extent.max .latitude >= expected.latitude &&
23+ extent.max .longitude >= expected.longitude &&
24+ extent.min .latitude <= expected.latitude &&
25+ extent.min .longitude <= expected.longitude
26+ );
27+ }
28+
29+ TEST (StandardMapGrid, Level5000_OutOfBounds) {
30+ const auto extent = StandardMapGrid (" 08EE54" ).getExtent (); // Level5000
31+ const auto nonexpected = GeoCoordinate (37.4659 , 138.7283 , 0 );
32+
33+ std::stringstream ss;
34+ ss << " Extent bounds: (" << extent.min .latitude << " , " << extent.min .longitude << " ) - ("
35+ << extent.max .latitude << " , " << extent.max .longitude << " )\n "
36+ << " Non-expected point: (" << nonexpected.latitude << " , " << nonexpected.longitude << " )" ;
37+ SCOPED_TRACE (ss.str ());
38+ ASSERT_FALSE (
39+ extent.max .latitude >= nonexpected.latitude &&
40+ extent.max .longitude >= nonexpected.longitude &&
41+ extent.min .latitude <= nonexpected.latitude &&
42+ extent.min .longitude <= nonexpected.longitude
43+ );
44+ }
45+
46+ TEST (StandardMapGrid, Level2500_WithinBounds) {
47+ const auto extent = StandardMapGrid (" 08EE554" ).getExtent (); // Level2500
48+ const auto expected = GeoCoordinate (37.4661 , 138.7678 , 0 );
49+
50+ std::stringstream ss;
51+ ss << " Extent bounds: (" << extent.min .latitude << " , " << extent.min .longitude << " ) - ("
52+ << extent.max .latitude << " , " << extent.max .longitude << " )\n "
53+ << " Expected point: (" << expected.latitude << " , " << expected.longitude << " )" ;
54+ SCOPED_TRACE (ss.str ());
55+ ASSERT_TRUE (
56+ extent.max .latitude >= expected.latitude &&
57+ extent.max .longitude >= expected.longitude &&
58+ extent.min .latitude <= expected.latitude &&
59+ extent.min .longitude <= expected.longitude
60+ );
61+ }
62+
63+ TEST (StandardMapGrid, Level2500_OutOfBounds) {
64+ const auto extent = StandardMapGrid (" 08EE554" ).getExtent (); // Level2500
65+ const auto nonexpected = GeoCoordinate (37.4631 , 138.7848 , 0 );
66+
67+ std::stringstream ss;
68+ ss << " Extent bounds: (" << extent.min .latitude << " , " << extent.min .longitude << " ) - ("
69+ << extent.max .latitude << " , " << extent.max .longitude << " )\n "
70+ << " Non-expected point: (" << nonexpected.latitude << " , " << nonexpected.longitude << " )" ;
71+ SCOPED_TRACE (ss.str ());
72+ ASSERT_FALSE (
73+ extent.max .latitude >= nonexpected.latitude &&
74+ extent.max .longitude >= nonexpected.longitude &&
75+ extent.min .latitude <= nonexpected.latitude &&
76+ extent.min .longitude <= nonexpected.longitude
77+ );
78+ }
79+
80+ TEST (StandardMapGrid, isWithinTest) {
81+ // Level50000とLevel5000の包含関係
82+ const auto grid50000 = StandardMapGrid (" 09AE" );
83+ const auto grid5000 = StandardMapGrid (" 09AE09" );
84+ const auto grid2500 = StandardMapGrid (" 09AE091" );
85+ const auto grid1000 = StandardMapGrid (" 09AE091A" );
86+ const auto grid500 = StandardMapGrid (" 09AE0911" );
87+
88+ // 同じコードは包含関係にある
89+ ASSERT_TRUE (grid50000.isWithin (grid50000));
90+ ASSERT_TRUE (grid5000.isWithin (grid5000));
91+
92+ // Level50000は下位レベルを包含する
93+ ASSERT_TRUE (grid50000.isWithin (grid5000));
94+ ASSERT_TRUE (grid50000.isWithin (grid2500));
95+ ASSERT_TRUE (grid50000.isWithin (grid1000));
96+ ASSERT_TRUE (grid50000.isWithin (grid500));
97+
98+ // Level5000は下位レベルを包含する
99+ ASSERT_TRUE (grid5000.isWithin (grid2500));
100+ ASSERT_TRUE (grid5000.isWithin (grid1000));
101+ ASSERT_TRUE (grid5000.isWithin (grid500));
102+
103+ // 下位レベルは上位レベルを包含しない
104+ ASSERT_FALSE (grid5000.isWithin (grid50000));
105+ ASSERT_FALSE (grid2500.isWithin (grid50000));
106+ ASSERT_FALSE (grid2500.isWithin (grid5000));
107+ }
108+
109+ TEST (StandardMapGrid, invalidGridCode) {
110+ // 無効な図郭コードのテスト
111+ ASSERT_FALSE (StandardMapGrid (" invalid" ).isValid ());
112+ ASSERT_FALSE (StandardMapGrid (" 09" ).isValid ()); // 短すぎる
113+ ASSERT_FALSE (StandardMapGrid (" 09AE09-1-1" ).isValid ()); // 長すぎる
114+ ASSERT_FALSE (StandardMapGrid (" 09ZZ09" ).isValid ()); // 無効な文字
115+ }
116+
117+ TEST (StandardMapGrid, levelCheck) {
118+ // 各レベルの判定テスト
119+ ASSERT_EQ (StandardMapGrid (" 09AE" ).getLevel (), 0 ); // Level50000
120+ ASSERT_EQ (StandardMapGrid (" 09AE09" ).getLevel (), 1 ); // Level5000
121+ ASSERT_EQ (StandardMapGrid (" 09AE091" ).getLevel (), 2 ); // Level2500
122+ ASSERT_EQ (StandardMapGrid (" 09AE091A" ).getLevel (), 3 ); // Level1000
123+ ASSERT_EQ (StandardMapGrid (" 09AE0911" ).getLevel (), 4 ); // Level500
124+ }
0 commit comments