Skip to content

Commit f5e7d1c

Browse files
program--hellkite500
authored andcommitted
fix: define epsg table, resolves #567
1 parent cac9341 commit f5e7d1c

File tree

3 files changed

+13
-43
lines changed

3 files changed

+13
-43
lines changed

include/geopackage/proj.hpp

+3-2
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
#define NGEN_GEOPACKAGE_PROJ_HPP
33

44
#include <boost/geometry/srs/projection.hpp>
5+
#include <unordered_map>
56

67
namespace ngen {
78
namespace srs {
@@ -21,8 +22,8 @@ struct epsg
2122
static srs_type get(uint32_t srid);
2223

2324
private:
24-
static const srs_type epsg5070_;
25-
static const srs_type epsg3857_;
25+
using def_type = std::unordered_map<int, srs_type>;
26+
static const def_type defs_;
2627
};
2728

2829
} // namespace srs

src/geopackage/CMakeLists.txt

-11
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,3 @@
1-
string(COMPARE EQUAL "${CMAKE_CXX_COMPILER_ID}" "IntelLLVM" _cmp)
2-
if (NOT _cmp)
3-
message(WARNING "[NGen::geopackage] wkb.cpp cannot be optimized with "
4-
"${CMAKE_CXX_COMPILER_ID} due to a suspected optimizer/boost issue:\n"
5-
"https://github.com/NOAA-OWP/ngen/issues/567.\n"
6-
"Use IntelLLVM if optimization for this source file is required.")
7-
# !! Required due to optimizer issue with either clang or
8-
# !! boost::geometry::srs::transformation
9-
set_source_files_properties(wkb.cpp PROPERTIES COMPILE_OPTIONS "-O0;-fno-sanitize=all")
10-
endif()
11-
121
add_library(geopackage proj.cpp
132
geometry.cpp
143
properties.cpp

src/geopackage/proj.cpp

+10-30
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,22 @@
11
#include "proj.hpp"
2-
#include <boost/geometry/srs/projections/epsg.hpp>
32

43
namespace ngen {
54
namespace srs {
65

7-
const epsg::srs_type epsg::epsg5070_ =
8-
epsg::srs_type(bg::srs::dpar::proj_aea)
9-
(bg::srs::dpar::ellps_grs80)
10-
(bg::srs::dpar::towgs84, {0,0,0,0,0,0,0})
11-
(bg::srs::dpar::lat_0, 23)
12-
(bg::srs::dpar::lon_0, -96)
13-
(bg::srs::dpar::lat_1, 29.5)
14-
(bg::srs::dpar::lat_2, 45.5)
15-
(bg::srs::dpar::x_0, 0)
16-
(bg::srs::dpar::y_0, 0);
17-
18-
const epsg::srs_type epsg::epsg3857_ =
19-
epsg::srs_type(bg::srs::dpar::proj_merc)
20-
(bg::srs::dpar::units_m)
21-
(bg::srs::dpar::no_defs)
22-
(bg::srs::dpar::a, 6378137)
23-
(bg::srs::dpar::b, 6378137)
24-
(bg::srs::dpar::lat_ts, 0)
25-
(bg::srs::dpar::lon_0, 0)
26-
(bg::srs::dpar::x_0, 0)
27-
(bg::srs::dpar::y_0, 0)
28-
(bg::srs::dpar::k, 1);
6+
const epsg::def_type epsg::defs_ = {
7+
{4326, epsg::srs_type(bg::srs::dpar::proj_longlat)(bg::srs::dpar::ellps_wgs84)(bg::srs::dpar::datum_wgs84)(bg::srs::dpar::no_defs)},
8+
{5070, epsg::srs_type(bg::srs::dpar::proj_aea)(bg::srs::dpar::ellps_grs80)(bg::srs::dpar::towgs84, {0,0,0,0,0,0,0})(bg::srs::dpar::lat_0, 23)(bg::srs::dpar::lon_0, -96)(bg::srs::dpar::lat_1, 29.5)(bg::srs::dpar::lat_2, 45.5)(bg::srs::dpar::x_0, 0)(bg::srs::dpar::y_0, 0)},
9+
{3857, epsg::srs_type(bg::srs::dpar::proj_merc)(bg::srs::dpar::units_m)(bg::srs::dpar::no_defs)(bg::srs::dpar::a, 6378137)(bg::srs::dpar::b, 6378137)(bg::srs::dpar::lat_ts, 0)(bg::srs::dpar::lon_0, 0)(bg::srs::dpar::x_0, 0)(bg::srs::dpar::y_0, 0)(bg::srs::dpar::k, 1)}
10+
};
2911

3012
auto epsg::get(uint32_t srid) -> srs_type
3113
{
32-
switch (srid) {
33-
case 5070:
34-
return epsg5070_;
35-
case 3857:
36-
return epsg3857_;
37-
default:
38-
return bg::projections::detail::epsg_to_parameters(srid);
14+
15+
if (defs_.count(srid) == 0) {
16+
throw std::runtime_error("SRID " + std::to_string(srid) + " is not supported. Project the input data to EPSG:5070 or EPSG:4326.");
3917
}
18+
19+
return defs_.at(srid);
4020
}
4121

4222
} // namespace srs

0 commit comments

Comments
 (0)