#ifndef RADIX_RADIXGEO_COORDINATECONVERSION_HH_ #define RADIX_RADIXGEO_COORDINATECONVERSION_HH_ #include "radixcore/visibility.hh" #include #include namespace radix { class RADIX_PUBLIC CoordinateConversion { public: /** * @brief validate Validates coordinate * @param latitude latitude coordinate * @param longitude longitude coordinate * Throws std::out_of_range exception if latitude is outside [-90.,90.] or * longitude must be [-180,180). */ template static void validate(data_type latitude, data_type longitude); /** * @brief validate Validates coordinate * @parm point where point.first is latitutde and point.second is longitude * Throws std::out_of_range exception if latitude is outside [-90.,90.] or * longitude must be [-180,180). */ template static void validate(const std::pair& point); }; // class CoordinateConversion template void CoordinateConversion::validate( const std::pair& point) { CoordinateConversion::validate(point.first, point.second); } template void CoordinateConversion::validate(data_type latitude, data_type longitude) { if (latitude < data_type(-90.0) || latitude > data_type(90.0) || longitude < data_type(-180.0) || longitude >= data_type(180.0)) { std::ostringstream oss; oss << "Invalid coordinate [" << latitude << "," << longitude << "].\nLatitude must be [-90,90] and longitude must be " "[-180,180)."; throw std::out_of_range(oss.str()); } } } // namespace radix #endif /** RADIX_RADIXGEO_COORDINATECONVERSION_HH_ */