Merge pull request #961 from vissarion/feature/webmerc_projection

Add Web Mercator projection
This commit is contained in:
Vissarion Fisikopoulos 2022-02-14 17:51:53 +02:00 committed by GitHub
commit acd3517328
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 44 additions and 9 deletions

View File

@ -292,6 +292,7 @@ enum value_proj
proj_wag2,
proj_wag3,
proj_wag7,
proj_webmerc,
proj_wink1,
proj_wink2
};

View File

@ -1609,7 +1609,7 @@ namespace detail
{3584, srs::dpar::parameters<>(proj_lcc)(lat_1,41.48333333333333)(lat_2,41.28333333333333)(lat_0,41)(lon_0,-70.5)(x_0,500000.0001016001)(y_0,0)(ellps_grs80)(towgs84,srs::detail::towgs84<>(0,0,0,0,0,0,0))(to_meter,0.3048006096012192)(no_defs)},
{3585, srs::dpar::parameters<>(proj_lcc)(lat_1,42.68333333333333)(lat_2,41.71666666666667)(lat_0,41)(lon_0,-71.5)(x_0,200000)(y_0,750000)(ellps_grs80)(towgs84,srs::detail::towgs84<>(0,0,0,0,0,0,0))(units_m)(no_defs)},
{3586, srs::dpar::parameters<>(proj_lcc)(lat_1,42.68333333333333)(lat_2,41.71666666666667)(lat_0,41)(lon_0,-71.5)(x_0,200000.0001016002)(y_0,750000)(ellps_grs80)(towgs84,srs::detail::towgs84<>(0,0,0,0,0,0,0))(to_meter,0.3048006096012192)(no_defs)},
{3587, srs::dpar::parameters<>(proj_lcc)(lat_1,45.7)(lat_2,44.18333333333333)(lat_0,43.31666666666667)(lon_0,-84.36666666666666)(x_0,6000000)(y_0,0)(ellps_grs80)(towgs84,srs::detail::towgs84<>(0,0,0,0,0,0,0))(units_m)(no_defs)},
{3587, srs::dpar::parameters<>(proj_webmerc)(lon_0,0)(x_0,0)(y_0,0)(ellps_wgs84)(srs::dpar::datum_wgs84)(units_m)(no_defs)},
{3588, srs::dpar::parameters<>(proj_lcc)(lat_1,45.7)(lat_2,44.18333333333333)(lat_0,43.31666666666667)(lon_0,-84.36666666666666)(x_0,5999999.999976001)(y_0,0)(ellps_grs80)(towgs84,srs::detail::towgs84<>(0,0,0,0,0,0,0))(to_meter,0.3048)(no_defs)},
{3589, srs::dpar::parameters<>(proj_lcc)(lat_1,47.08333333333334)(lat_2,45.48333333333333)(lat_0,44.78333333333333)(lon_0,-87)(x_0,8000000)(y_0,0)(ellps_grs80)(towgs84,srs::detail::towgs84<>(0,0,0,0,0,0,0))(units_m)(no_defs)},
{3590, srs::dpar::parameters<>(proj_lcc)(lat_1,47.08333333333334)(lat_2,45.48333333333333)(lat_0,44.78333333333333)(lon_0,-87)(x_0,7999999.999968001)(y_0,0)(ellps_grs80)(towgs84,srs::detail::towgs84<>(0,0,0,0,0,0,0))(to_meter,0.3048)(no_defs)},
@ -1807,7 +1807,7 @@ namespace detail
{3782, srs::dpar::parameters<>(proj_tmerc)(lat_0,0)(lon_0,-120)(k,0.9999)(x_0,0)(y_0,0)(ellps_grs80)(units_m)(no_defs)},
{3783, srs::dpar::parameters<>(proj_tmerc)(lat_0,-25.06855261111111)(lon_0,-130.1129671111111)(k,1)(x_0,14200)(y_0,15500)(ellps_wgs84)(towgs84,srs::detail::towgs84<>(0,0,0,0,0,0,0))(units_m)(no_defs)},
{3784, srs::dpar::parameters<>(proj_utm)(zone,9)(south)(ellps_intl)(towgs84,srs::detail::towgs84<>(185,165,42,0,0,0,0))(units_m)(no_defs)},
{3785, srs::dpar::parameters<>(proj_merc)(lat_ts,0)(lon_0,0)(k,1)(x_0,0)(y_0,0)(r,6378137)(units_m)(no_defs)},
{3785, srs::dpar::parameters<>(proj_webmerc)(lon_0,0)(x_0,0)(y_0,0)(ellps_wgs84)(srs::dpar::datum_wgs84)(units_m)(no_defs)},
{3786, srs::dpar::parameters<>(proj_eqc)(lat_ts,0)(lat_0,0)(lon_0,0)(x_0,0)(y_0,0)(r,6371007)(units_m)(no_defs)},
{3787, srs::dpar::parameters<>(proj_tmerc)(lat_0,0)(lon_0,15)(k,0.9999)(x_0,500000)(y_0,-5000000)(ellps_bessel)(towgs84,srs::detail::towgs84<>(577.326,90.129,463.919,5.137,1.474,5.297,2.4232))(units_m)(no_defs)},
{3788, srs::dpar::parameters<>(proj_tmerc)(lat_0,0)(lon_0,166)(k,1)(x_0,3500000)(y_0,10000000)(ellps_grs80)(towgs84,srs::detail::towgs84<>(0,0,0,0,0,0,0))(units_m)(no_defs)},
@ -1857,6 +1857,7 @@ namespace detail
//{3848},
//{3849},
//{3850},
{3857, srs::dpar::parameters<>(proj_webmerc)(lon_0,0)(x_0,0)(y_0,0)(ellps_wgs84)(srs::dpar::datum_wgs84)(units_m)(no_defs)},
{3920, srs::dpar::parameters<>(proj_utm)(zone,20)(ellps_clrk66)(towgs84,srs::detail::towgs84<>(11,72,-101,0,0,0,0))(units_m)(no_defs)},
{3942, srs::dpar::parameters<>(proj_lcc)(lat_1,41.25)(lat_2,42.75)(lat_0,42)(lon_0,3)(x_0,1700000)(y_0,1200000)(ellps_grs80)(towgs84,srs::detail::towgs84<>(0,0,0,0,0,0,0))(units_m)(no_defs)},
{3943, srs::dpar::parameters<>(proj_lcc)(lat_1,42.25)(lat_2,43.75)(lat_0,43)(lon_0,3)(x_0,1700000)(y_0,2200000)(ellps_grs80)(towgs84,srs::detail::towgs84<>(0,0,0,0,0,0,0))(units_m)(no_defs)},

View File

@ -1821,7 +1821,7 @@ BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_BEG(epsg, 3781) srs::spar::paramet
BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_BEG(epsg, 3782) srs::spar::parameters<srs::spar::proj_tmerc,srs::spar::lat_0<>,srs::spar::lon_0<>,srs::spar::k<>,srs::spar::x_0<>,srs::spar::y_0<>,srs::spar::ellps_grs80,srs::spar::units_m,srs::spar::no_defs> BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_MID() (srs::spar::proj_tmerc(),srs::spar::lat_0<>(0),srs::spar::lon_0<>(-120),srs::spar::k<>(0.9999),srs::spar::x_0<>(0),srs::spar::y_0<>(0)) BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_END()
BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_BEG(epsg, 3783) srs::spar::parameters<srs::spar::proj_tmerc,srs::spar::lat_0<>,srs::spar::lon_0<>,srs::spar::k<>,srs::spar::x_0<>,srs::spar::y_0<>,srs::spar::ellps_wgs84,srs::spar::towgs84<>,srs::spar::units_m,srs::spar::no_defs> BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_MID() (srs::spar::proj_tmerc(),srs::spar::lat_0<>(-25.06855261111111),srs::spar::lon_0<>(-130.1129671111111),srs::spar::k<>(1),srs::spar::x_0<>(14200),srs::spar::y_0<>(15500),srs::spar::ellps_wgs84(),srs::spar::towgs84<>(0,0,0,0,0,0,0)) BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_END()
BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_BEG(epsg, 3784) srs::spar::parameters<srs::spar::proj_utm,srs::spar::zone<9>,srs::spar::south,srs::spar::ellps_intl,srs::spar::towgs84<>,srs::spar::units_m,srs::spar::no_defs> BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_MID() (srs::spar::proj_utm(),srs::spar::zone<9>(),srs::spar::south(),srs::spar::ellps_intl(),srs::spar::towgs84<>(185,165,42,0,0,0,0)) BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_END()
BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_BEG(epsg, 3785) srs::spar::parameters<srs::spar::proj_merc,srs::spar::lat_ts<>,srs::spar::lon_0<>,srs::spar::k<>,srs::spar::x_0<>,srs::spar::y_0<>,srs::spar::r<>,srs::spar::units_m,srs::spar::no_defs> BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_MID() (srs::spar::proj_merc(),srs::spar::lat_ts<>(0),srs::spar::lon_0<>(0),srs::spar::k<>(1),srs::spar::x_0<>(0),srs::spar::y_0<>(0),srs::spar::r<>(6378137)) BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_END()
BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_BEG(epsg, 3785) srs::spar::parameters<srs::spar::proj_webmerc,srs::spar::lon_0<>,srs::spar::x_0<>,srs::spar::y_0<>,srs::spar::ellps_wgs84,srs::spar::datum_wgs84,srs::spar::units_m,srs::spar::no_defs> BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_MID() (srs::spar::proj_webmerc(),srs::spar::lon_0<>(0),srs::spar::x_0<>(0),srs::spar::y_0<>(0)) BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_END()
BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_BEG(epsg, 3786) srs::spar::parameters<srs::spar::proj_eqc,srs::spar::lat_ts<>,srs::spar::lat_0<>,srs::spar::lon_0<>,srs::spar::x_0<>,srs::spar::y_0<>,srs::spar::r<>,srs::spar::units_m,srs::spar::no_defs> BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_MID() (srs::spar::proj_eqc(),srs::spar::lat_ts<>(0),srs::spar::lat_0<>(0),srs::spar::lon_0<>(0),srs::spar::x_0<>(0),srs::spar::y_0<>(0),srs::spar::r<>(6371007)) BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_END()
BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_BEG(epsg, 3787) srs::spar::parameters<srs::spar::proj_tmerc,srs::spar::lat_0<>,srs::spar::lon_0<>,srs::spar::k<>,srs::spar::x_0<>,srs::spar::y_0<>,srs::spar::ellps_bessel,srs::spar::towgs84<>,srs::spar::units_m,srs::spar::no_defs> BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_MID() (srs::spar::proj_tmerc(),srs::spar::lat_0<>(0),srs::spar::lon_0<>(15),srs::spar::k<>(0.9999),srs::spar::x_0<>(500000),srs::spar::y_0<>(-5000000),srs::spar::ellps_bessel(),srs::spar::towgs84<>(577.326,90.129,463.919,5.137,1.474,5.297,2.4232)) BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_END()
BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_BEG(epsg, 3788) srs::spar::parameters<srs::spar::proj_tmerc,srs::spar::lat_0<>,srs::spar::lon_0<>,srs::spar::k<>,srs::spar::x_0<>,srs::spar::y_0<>,srs::spar::ellps_grs80,srs::spar::towgs84<>,srs::spar::units_m,srs::spar::no_defs> BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_MID() (srs::spar::proj_tmerc(),srs::spar::lat_0<>(0),srs::spar::lon_0<>(166),srs::spar::k<>(1),srs::spar::x_0<>(3500000),srs::spar::y_0<>(10000000),srs::spar::ellps_grs80(),srs::spar::towgs84<>(0,0,0,0,0,0,0)) BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_END()
@ -1871,6 +1871,7 @@ BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_BEG(epsg, 3824) srs::spar::paramet
//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_BEG(epsg, 3848)
//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_BEG(epsg, 3849)
//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_BEG(epsg, 3850)
BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_BEG(epsg, 3857) srs::spar::parameters<srs::spar::proj_webmerc,srs::spar::lon_0<>,srs::spar::x_0<>,srs::spar::y_0<>,srs::spar::ellps_wgs84,srs::spar::datum_wgs84,srs::spar::units_m,srs::spar::no_defs> BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_MID() (srs::spar::proj_webmerc(),srs::spar::lon_0<>(0),srs::spar::x_0<>(0),srs::spar::y_0<>(0)) BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_END()
BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_BEG(epsg, 3920) srs::spar::parameters<srs::spar::proj_utm,srs::spar::zone<20>,srs::spar::ellps_clrk66,srs::spar::towgs84<>,srs::spar::units_m,srs::spar::no_defs> BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_MID() (srs::spar::proj_utm(),srs::spar::zone<20>(),srs::spar::ellps_clrk66(),srs::spar::towgs84<>(11,72,-101,0,0,0,0)) BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_END()
BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_BEG(epsg, 3942) srs::spar::parameters<srs::spar::proj_lcc,srs::spar::lat_1<>,srs::spar::lat_2<>,srs::spar::lat_0<>,srs::spar::lon_0<>,srs::spar::x_0<>,srs::spar::y_0<>,srs::spar::ellps_grs80,srs::spar::towgs84<>,srs::spar::units_m,srs::spar::no_defs> BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_MID() (srs::spar::proj_lcc(),srs::spar::lat_1<>(41.25),srs::spar::lat_2<>(42.75),srs::spar::lat_0<>(42),srs::spar::lon_0<>(3),srs::spar::x_0<>(1700000),srs::spar::y_0<>(1200000),srs::spar::ellps_grs80(),srs::spar::towgs84<>(0,0,0,0,0,0,0)) BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_END()
BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_BEG(epsg, 3943) srs::spar::parameters<srs::spar::proj_lcc,srs::spar::lat_1<>,srs::spar::lat_2<>,srs::spar::lat_0<>,srs::spar::lon_0<>,srs::spar::x_0<>,srs::spar::y_0<>,srs::spar::ellps_grs80,srs::spar::towgs84<>,srs::spar::units_m,srs::spar::no_defs> BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_MID() (srs::spar::proj_lcc(),srs::spar::lat_1<>(42.25),srs::spar::lat_2<>(43.75),srs::spar::lat_0<>(43),srs::spar::lon_0<>(3),srs::spar::x_0<>(1700000),srs::spar::y_0<>(2200000),srs::spar::ellps_grs80(),srs::spar::towgs84<>(0,0,0,0,0,0,0)) BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_END()

View File

@ -2,8 +2,9 @@
// Copyright (c) 2008-2015 Barend Gehrels, Amsterdam, the Netherlands.
// This file was modified by Oracle on 2017, 2018, 2019.
// Modifications copyright (c) 2017-2019, Oracle and/or its affiliates.
// This file was modified by Oracle on 2017, 2018, 2019, 2022.
// Modifications copyright (c) 2017-2022, Oracle and/or its affiliates.
// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle.
// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle.
// Use, modification and distribution is subject to the Boost Software License,
@ -206,19 +207,46 @@ namespace projections
}
};
/*!
\brief Web Mercator projection
\ingroup projections
\tparam Geographic latlong point type
\tparam Cartesian xy point type
\tparam Parameters parameter type
\par Projection characteristics
- Cylindrical
- Spheroid
- Ellipsoid
*/
template <typename T, typename Parameters>
struct webmerc_spheroid : public detail::merc::base_merc_spheroid<T, Parameters>
{
template <typename Params>
inline webmerc_spheroid(Params const&, Parameters & par)
{
par.k0 = 1;
}
};
#ifndef DOXYGEN_NO_DETAIL
namespace detail
{
// Static projection
BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION_FI2(srs::spar::proj_merc, merc_spheroid, merc_ellipsoid)
BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION_FI2(srs::spar::proj_merc, merc_spheroid,
merc_ellipsoid)
BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION_FI(srs::spar::proj_webmerc,
webmerc_spheroid)
// Factory entry(s)
BOOST_GEOMETRY_PROJECTIONS_DETAIL_FACTORY_ENTRY_FI2(merc_entry, merc_spheroid, merc_ellipsoid)
BOOST_GEOMETRY_PROJECTIONS_DETAIL_FACTORY_ENTRY_FI2(merc_entry, merc_spheroid,
merc_ellipsoid)
BOOST_GEOMETRY_PROJECTIONS_DETAIL_FACTORY_ENTRY_FI(webmerc_entry, webmerc_spheroid)
BOOST_GEOMETRY_PROJECTIONS_DETAIL_FACTORY_INIT_BEGIN(merc_init)
{
BOOST_GEOMETRY_PROJECTIONS_DETAIL_FACTORY_INIT_ENTRY(merc, merc_entry)
BOOST_GEOMETRY_PROJECTIONS_DETAIL_FACTORY_INIT_ENTRY(webmerc, webmerc_entry)
}
} // namespace detail
@ -229,4 +257,3 @@ namespace projections
}} // namespace boost::geometry
#endif // BOOST_GEOMETRY_PROJECTIONS_MERC_HPP

View File

@ -316,6 +316,7 @@ struct proj_vandg4 {};
struct proj_wag2 {};
struct proj_wag3 {};
struct proj_wag7 {};
struct proj_webmerc {};
struct proj_wink1 {};
struct proj_wink2 {};
@ -859,6 +860,7 @@ BOOST_GEOMETRY_PROJECTIONS_DETAIL_REGISTER_PROJ(proj_vandg4)
BOOST_GEOMETRY_PROJECTIONS_DETAIL_REGISTER_PROJ(proj_wag2)
BOOST_GEOMETRY_PROJECTIONS_DETAIL_REGISTER_PROJ(proj_wag3)
BOOST_GEOMETRY_PROJECTIONS_DETAIL_REGISTER_PROJ(proj_wag7)
BOOST_GEOMETRY_PROJECTIONS_DETAIL_REGISTER_PROJ(proj_webmerc)
BOOST_GEOMETRY_PROJECTIONS_DETAIL_REGISTER_PROJ(proj_wink1)
BOOST_GEOMETRY_PROJECTIONS_DETAIL_REGISTER_PROJ(proj_wink2)

View File

@ -232,6 +232,7 @@ void test_all()
test_forward<P>("wag5", 4.897000, 52.371000, 379647.914735, 6771982.379506, "+proj=wag5 +ellps=WGS84 +units=m");
test_forward<P>("wag6", 4.897000, 52.371000, 446107.907415, 5523551.121434, "+proj=wag6 +ellps=WGS84 +units=m");
test_forward<P>("wag7", 4.897000, 52.371000, 366407.198644, 6169832.906560, "+proj=wag7 +ellps=WGS84 +units=m");
test_forward<P>("webmerc", 4.897000, 52.1849, 545131.546415, 6833633.829215, "+proj=webmerc +ellps=WGS84 +units=m");
test_forward<P>("weren", 4.897000, 52.371000, 402668.037596, 7243190.025762, "+proj=weren +ellps=WGS84 +units=m");
test_forward<P>("wink1", 4.897000, 52.371000, 438979.742911, 5829913.052335, "+proj=wink1 +ellps=WGS84 +units=m");
test_forward<P>("wink2", 4.897000, 52.371000, 472810.645318, 6313461.757868, "+proj=wink2 +ellps=WGS84 +units=m");
@ -344,6 +345,7 @@ void test_all()
test_inverse<P>("wag4", 365021.547713, 6300040.998324, 4.897000, 52.371000, "+proj=wag4 +ellps=WGS84 +units=m");
test_inverse<P>("wag5", 379647.914735, 6771982.379506, 4.897000, 52.371000, "+proj=wag5 +ellps=WGS84 +units=m");
test_inverse<P>("wag6", 446107.907415, 5523551.121434, 4.897000, 52.371000, "+proj=wag6 +ellps=WGS84 +units=m");
test_inverse<P>("webmerc", 545131.546415, 6833633.829215, 4.897000, 52.1849, "+proj=webmerc +ellps=WGS84 +units=m");
test_inverse<P>("weren", 402668.037596, 7243190.025762, 4.897000, 52.371000, "+proj=weren +ellps=WGS84 +units=m"); // F/I: 0.003779
test_inverse<P>("wink1", 438979.742911, 5829913.052335, 4.897000, 52.371000, "+proj=wink1 +ellps=WGS84 +units=m");

View File

@ -244,6 +244,7 @@ void test_all()
test_forward<bg::projections::wag5_spheroid>(amsterdam, utrecht, "+ellps=sphere +units=m");
test_forward<bg::projections::wag6_spheroid>(amsterdam, utrecht, "+ellps=sphere +units=m");
test_forward<bg::projections::wag7_spheroid>(amsterdam, utrecht, "+ellps=sphere +units=m", 2);
test_forward<bg::projections::webmerc_spheroid>(amsterdam, utrecht, "+ellps=WGS84 +units=m", 22);
test_forward<bg::projections::weren_spheroid>(amsterdam, utrecht, "+ellps=sphere +units=m", 4);
test_forward<bg::projections::wink1_spheroid>(amsterdam, utrecht, "+ellps=sphere +units=m", 3);
test_forward<bg::projections::wink2_spheroid>(amsterdam, utrecht, "+ellps=sphere +units=m", 4);