Coded location

This commit is contained in:
Dan Paulat 2022-01-25 21:39:28 -06:00
parent f25bb63ea0
commit ecf5b1f5f0
6 changed files with 428 additions and 3 deletions

View file

@ -0,0 +1,199 @@
#include <scwx/awips/coded_location.hpp>
#include <gtest/gtest.h>
#include <boost/log/trivial.hpp>
namespace scwx
{
namespace awips
{
static const std::string logPrefix_ = "[scwx::awips::coded_location.test] ";
TEST(CodedLocation, WFO100W)
{
std::vector<std::string> data = {
"LAT...LON 4896 10015 4789 10017 4787 9995 4842 9987",
" 4842 9955 4897 9958"};
CodedLocation location;
bool dataValid = location.Parse(data);
ASSERT_EQ(dataValid, true);
auto coordinates = location.coordinates();
ASSERT_EQ(coordinates.size(), 6);
EXPECT_DOUBLE_EQ(coordinates[0].latitude_, 48.96);
EXPECT_DOUBLE_EQ(coordinates[0].longitude_, -100.15);
EXPECT_DOUBLE_EQ(coordinates[1].latitude_, 47.89);
EXPECT_DOUBLE_EQ(coordinates[1].longitude_, -100.17);
EXPECT_DOUBLE_EQ(coordinates[2].latitude_, 47.87);
EXPECT_DOUBLE_EQ(coordinates[2].longitude_, -99.95);
EXPECT_DOUBLE_EQ(coordinates[3].latitude_, 48.42);
EXPECT_DOUBLE_EQ(coordinates[3].longitude_, -99.87);
EXPECT_DOUBLE_EQ(coordinates[4].latitude_, 48.42);
EXPECT_DOUBLE_EQ(coordinates[4].longitude_, -99.55);
EXPECT_DOUBLE_EQ(coordinates[5].latitude_, 48.97);
EXPECT_DOUBLE_EQ(coordinates[5].longitude_, -99.58);
}
TEST(CodedLocation, WFOWestWrap)
{
std::vector<std::string> data = {
"LAT...LON 4896 10015 4789 18100 4787 9995 4842 9987",
" 4842 9955 4897 9958"};
CodedLocation location;
bool dataValid = location.Parse(data);
ASSERT_EQ(dataValid, true);
auto coordinates = location.coordinates();
ASSERT_EQ(coordinates.size(), 6);
EXPECT_DOUBLE_EQ(coordinates[0].latitude_, 48.96);
EXPECT_DOUBLE_EQ(coordinates[0].longitude_, -100.15);
EXPECT_DOUBLE_EQ(coordinates[1].latitude_, 47.89);
EXPECT_DOUBLE_EQ(coordinates[1].longitude_, 179.00);
EXPECT_DOUBLE_EQ(coordinates[2].latitude_, 47.87);
EXPECT_DOUBLE_EQ(coordinates[2].longitude_, -99.95);
EXPECT_DOUBLE_EQ(coordinates[3].latitude_, 48.42);
EXPECT_DOUBLE_EQ(coordinates[3].longitude_, -99.87);
EXPECT_DOUBLE_EQ(coordinates[4].latitude_, 48.42);
EXPECT_DOUBLE_EQ(coordinates[4].longitude_, -99.55);
EXPECT_DOUBLE_EQ(coordinates[5].latitude_, 48.97);
EXPECT_DOUBLE_EQ(coordinates[5].longitude_, -99.58);
}
TEST(CodedLocation, WFOGuam)
{
std::vector<std::string> data = {
"LAT...LON 1360 14509 1371 14495 1348 14463 1325 14492"};
CodedLocation location;
bool dataValid = location.Parse(data, "PGUM");
ASSERT_EQ(dataValid, true);
auto coordinates = location.coordinates();
ASSERT_EQ(coordinates.size(), 4);
EXPECT_DOUBLE_EQ(coordinates[0].latitude_, 13.60);
EXPECT_DOUBLE_EQ(coordinates[0].longitude_, 145.09);
EXPECT_DOUBLE_EQ(coordinates[1].latitude_, 13.71);
EXPECT_DOUBLE_EQ(coordinates[1].longitude_, 144.95);
EXPECT_DOUBLE_EQ(coordinates[2].latitude_, 13.48);
EXPECT_DOUBLE_EQ(coordinates[2].longitude_, 144.63);
EXPECT_DOUBLE_EQ(coordinates[3].latitude_, 13.25);
EXPECT_DOUBLE_EQ(coordinates[3].longitude_, 144.92);
}
TEST(CodedLocation, WFOGuamWrap)
{
std::vector<std::string> data = {
"LAT...LON 1360 14509 1371 18195 1348 14463 1325 14492"};
CodedLocation location;
bool dataValid = location.Parse(data, "PGUM");
ASSERT_EQ(dataValid, true);
auto coordinates = location.coordinates();
ASSERT_EQ(coordinates.size(), 4);
EXPECT_DOUBLE_EQ(coordinates[0].latitude_, 13.60);
EXPECT_DOUBLE_EQ(coordinates[0].longitude_, -145.09);
EXPECT_DOUBLE_EQ(coordinates[1].latitude_, 13.71);
EXPECT_DOUBLE_EQ(coordinates[1].longitude_, 178.05);
EXPECT_DOUBLE_EQ(coordinates[2].latitude_, 13.48);
EXPECT_DOUBLE_EQ(coordinates[2].longitude_, -144.63);
EXPECT_DOUBLE_EQ(coordinates[3].latitude_, 13.25);
EXPECT_DOUBLE_EQ(coordinates[3].longitude_, -144.92);
}
TEST(CodedLocation, NC100W)
{
std::vector<std::string> data = {
"LAT...LON 46680254 49089563 47069563 44650254"};
CodedLocation location;
bool dataValid = location.Parse(data);
ASSERT_EQ(dataValid, true);
auto coordinates = location.coordinates();
ASSERT_EQ(coordinates.size(), 4);
EXPECT_DOUBLE_EQ(coordinates[0].latitude_, 46.68);
EXPECT_DOUBLE_EQ(coordinates[0].longitude_, -102.54);
EXPECT_DOUBLE_EQ(coordinates[1].latitude_, 49.08);
EXPECT_DOUBLE_EQ(coordinates[1].longitude_, -95.63);
EXPECT_DOUBLE_EQ(coordinates[2].latitude_, 47.06);
EXPECT_DOUBLE_EQ(coordinates[2].longitude_, -95.63);
EXPECT_DOUBLE_EQ(coordinates[3].latitude_, 44.65);
EXPECT_DOUBLE_EQ(coordinates[3].longitude_, -102.54);
}
TEST(CodedLocation, NCWashington)
{
std::vector<std::string> data = {
"LAT...LON 49112272 49092189 48662129 48022117 47452115",
" 47072129 46622149 46502228 46292349 46442456",
" 46722439 47802499 48522503 48422448 48252386",
" 48332313"};
CodedLocation location;
bool dataValid = location.Parse(data);
ASSERT_EQ(dataValid, true);
auto coordinates = location.coordinates();
ASSERT_EQ(coordinates.size(), 16);
EXPECT_DOUBLE_EQ(coordinates[0].latitude_, 49.11);
EXPECT_DOUBLE_EQ(coordinates[0].longitude_, -122.72);
EXPECT_DOUBLE_EQ(coordinates[1].latitude_, 49.09);
EXPECT_DOUBLE_EQ(coordinates[1].longitude_, -121.89);
EXPECT_DOUBLE_EQ(coordinates[14].latitude_, 48.25);
EXPECT_DOUBLE_EQ(coordinates[14].longitude_, -123.86);
EXPECT_DOUBLE_EQ(coordinates[15].latitude_, 48.33);
EXPECT_DOUBLE_EQ(coordinates[15].longitude_, -123.13);
}
TEST(CodedLocation, NCMaine)
{
std::vector<std::string> data = {
"LAT...LON 47316870 47216795 46466767 45436766 44756779",
" 44216834 43816943 43706970 43837006 44497009",
" 45306974 46356946 46976921"};
CodedLocation location;
bool dataValid = location.Parse(data);
ASSERT_EQ(dataValid, true);
auto coordinates = location.coordinates();
ASSERT_EQ(coordinates.size(), 13);
EXPECT_DOUBLE_EQ(coordinates[0].latitude_, 47.31);
EXPECT_DOUBLE_EQ(coordinates[0].longitude_, -68.70);
EXPECT_DOUBLE_EQ(coordinates[1].latitude_, 47.21);
EXPECT_DOUBLE_EQ(coordinates[1].longitude_, -67.95);
EXPECT_DOUBLE_EQ(coordinates[11].latitude_, 46.35);
EXPECT_DOUBLE_EQ(coordinates[11].longitude_, -69.46);
EXPECT_DOUBLE_EQ(coordinates[12].latitude_, 46.97);
EXPECT_DOUBLE_EQ(coordinates[12].longitude_, -69.21);
}
} // namespace awips
} // namespace scwx

View file

@ -8,7 +8,8 @@ find_package(BZip2)
find_package(GTest)
set(SRC_MAIN source/scwx/wxtest.cpp)
set(SRC_AWIPS_TESTS source/scwx/awips/pvtec.test.cpp
set(SRC_AWIPS_TESTS source/scwx/awips/coded_location.test.cpp
source/scwx/awips/pvtec.test.cpp
source/scwx/awips/text_product_file.test.cpp)
set(SRC_COMMON_TESTS source/scwx/common/color_table.test.cpp)
set(SRC_QT_MANAGER_TESTS source/scwx/qt/manager/settings_manager.test.cpp)