|
1 | 1 | #include "proj.hpp" |
2 | | -#include <boost/geometry/srs/projections/epsg.hpp> |
3 | 2 |
|
4 | 3 | namespace ngen { |
5 | 4 | namespace srs { |
6 | 5 |
|
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 | +}; |
29 | 11 |
|
30 | 12 | auto epsg::get(uint32_t srid) -> srs_type |
31 | 13 | { |
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."); |
39 | 17 | } |
| 18 | + |
| 19 | + return defs_.at(srid); |
40 | 20 | } |
41 | 21 |
|
42 | 22 | } // namespace srs |
|
0 commit comments