mirror of
https://github.com/ciphervance/supercell-wx.git
synced 2025-10-30 16:40:05 +00:00
Updating radar site display fields to be more human-friendly
- Latitude/longitude in degrees N/S/E/W - Radar types with hyphens - Sort by raw decimal values
This commit is contained in:
parent
1bc6e714f5
commit
6e7a13494a
11 changed files with 186 additions and 5 deletions
16
wxdata/source/scwx/common/characters.cpp
Normal file
16
wxdata/source/scwx/common/characters.cpp
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
#include <scwx/common/characters.hpp>
|
||||
|
||||
namespace scwx
|
||||
{
|
||||
namespace common
|
||||
{
|
||||
|
||||
namespace Unicode
|
||||
{
|
||||
|
||||
const std::string kDegree {"\302\260"};
|
||||
|
||||
} // namespace Unicode
|
||||
|
||||
} // namespace common
|
||||
} // namespace scwx
|
||||
77
wxdata/source/scwx/common/geographic.cpp
Normal file
77
wxdata/source/scwx/common/geographic.cpp
Normal file
|
|
@ -0,0 +1,77 @@
|
|||
#include <scwx/common/geographic.hpp>
|
||||
#include <scwx/common/characters.hpp>
|
||||
|
||||
#include <format>
|
||||
|
||||
namespace scwx
|
||||
{
|
||||
namespace common
|
||||
{
|
||||
|
||||
static std::string GetDegreeString(double degrees,
|
||||
DegreeStringType type,
|
||||
const std::string& suffix);
|
||||
|
||||
std::string GetLatitudeString(double latitude, DegreeStringType type)
|
||||
{
|
||||
std::string suffix {};
|
||||
|
||||
if (latitude > 0.0)
|
||||
{
|
||||
suffix = " N";
|
||||
}
|
||||
else if (latitude < 0.0)
|
||||
{
|
||||
suffix = " S";
|
||||
}
|
||||
|
||||
return GetDegreeString(latitude, type, suffix);
|
||||
}
|
||||
|
||||
std::string GetLongitudeString(double longitude, DegreeStringType type)
|
||||
{
|
||||
std::string suffix {};
|
||||
|
||||
if (longitude > 0.0)
|
||||
{
|
||||
suffix = " E";
|
||||
}
|
||||
else if (longitude < 0.0)
|
||||
{
|
||||
suffix = " W";
|
||||
}
|
||||
|
||||
return GetDegreeString(longitude, type, suffix);
|
||||
}
|
||||
|
||||
static std::string GetDegreeString(double degrees,
|
||||
DegreeStringType type,
|
||||
const std::string& suffix)
|
||||
{
|
||||
std::string degreeString {};
|
||||
|
||||
degrees = std::fabs(degrees);
|
||||
|
||||
switch (type)
|
||||
{
|
||||
case DegreeStringType::Decimal:
|
||||
degreeString =
|
||||
std::format("{:.6f}{}{}", degrees, Unicode::kDegree, suffix);
|
||||
break;
|
||||
case DegreeStringType::DegreesMinutesSeconds:
|
||||
{
|
||||
uint32_t dd = static_cast<uint32_t>(degrees);
|
||||
degrees = (degrees - dd) * 60.0;
|
||||
uint32_t mm = static_cast<uint32_t>(degrees);
|
||||
double ss = (degrees - mm) * 60.0;
|
||||
degreeString = std::format(
|
||||
"{}{} {}' {:.2f}\"{}", dd, Unicode::kDegree, mm, ss, suffix);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return degreeString;
|
||||
}
|
||||
|
||||
} // namespace common
|
||||
} // namespace scwx
|
||||
Loading…
Add table
Add a link
Reference in a new issue