You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1970 lines
65 KiB
1970 lines
65 KiB
#ifndef SQL_GIS_SRS_SRS_H_INCLUDED
|
|
#define SQL_GIS_SRS_SRS_H_INCLUDED
|
|
|
|
// Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved.
|
|
//
|
|
// This program is free software; you can redistribute it and/or modify
|
|
// it under the terms of the GNU General Public License, version 2.0,
|
|
// as published by the Free Software Foundation.
|
|
//
|
|
// This program is also distributed with certain software (including
|
|
// but not limited to OpenSSL) that is licensed under separate terms,
|
|
// as designated in a particular file or component or in included license
|
|
// documentation. The authors of MySQL hereby grant you an additional
|
|
// permission to link the program and your derivative works with the
|
|
// separately licensed software that they have included with MySQL.
|
|
//
|
|
// This program is distributed in the hope that it will be useful,
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
// GNU General Public License, version 2.0, for more details.
|
|
//
|
|
// You should have received a copy of the GNU General Public License
|
|
// along with this program; if not, write to the Free Software
|
|
// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
|
|
#include <cmath>
|
|
#include <cstdint>
|
|
#include <string>
|
|
|
|
#include "my_dbug.h"
|
|
#include "sql/gis/srid.h"
|
|
|
|
namespace gis {
|
|
namespace srs {
|
|
|
|
/// Spatial reference system type.
|
|
enum class Srs_type : std::uint8_t { UNKNOWN = 0, PROJECTED, GEOGRAPHIC };
|
|
|
|
/// Projection method. Values are EPSG codes.
|
|
enum class Projection_type : std::uint32_t {
|
|
UNKNOWN = 0,
|
|
POPULAR_VISUALISATION_PSEUDO_MERCATOR = 1024,
|
|
LAMBERT_AZIMUTHAL_EQUAL_AREA_SPHERICAL = 1027,
|
|
EQUIDISTANT_CYLINDRICAL = 1028,
|
|
EQUIDISTANT_CYLINDRICAL_SPHERICAL = 1029,
|
|
KROVAK_NORTH_ORIENTATED = 1041,
|
|
KROVAK_MODIFIED = 1042,
|
|
KROVAK_MODIFIED_NORTH_ORIENTATED = 1043,
|
|
LAMBERT_CONIC_CONFORMAL_2SP_MICHIGAN = 1051,
|
|
COLOMBIA_URBAN = 1052,
|
|
LAMBERT_CONIC_CONFORMAL_1SP = 9801,
|
|
LAMBERT_CONIC_CONFORMAL_2SP = 9802,
|
|
LAMBERT_CONIC_CONFORMAL_2SP_BELGIUM = 9803,
|
|
MERCATOR_VARIANT_A = 9804,
|
|
MERCATOR_VARIANT_B = 9805,
|
|
CASSINI_SOLDNER = 9806,
|
|
TRANSVERSE_MERCATOR = 9807,
|
|
TRANSVERSE_MERCATOR_SOUTH_ORIENTATED = 9808,
|
|
OBLIQUE_STEREOGRAPHIC = 9809,
|
|
POLAR_STEREOGRAPHIC_VARIANT_A = 9810,
|
|
NEW_ZEALAND_MAP_GRID = 9811,
|
|
HOTINE_OBLIQUE_MERCATOR_VARIANT_A = 9812,
|
|
LABORDE_OBLIQUE_MERCATOR = 9813,
|
|
HOTINE_OBLIQUE_MERCATOR_VARIANT_B = 9815,
|
|
TUNISIA_MINING_GRID = 9816,
|
|
LAMBERT_CONIC_NEAR_CONFORMAL = 9817,
|
|
AMERICAN_POLYCONIC = 9818,
|
|
KROVAK = 9819,
|
|
LAMBERT_AZIMUTHAL_EQUAL_AREA = 9820,
|
|
ALBERS_EQUAL_AREA = 9822,
|
|
TRANSVERSE_MERCATOR_ZONED_GRID_SYSTEM = 9824,
|
|
LAMBERT_CONIC_CONFORMAL_WEST_ORIENTATED = 9826,
|
|
BONNE_SOUTH_ORIENTATED = 9828,
|
|
POLAR_STEREOGRAPHIC_VARIANT_B = 9829,
|
|
POLAR_STEREOGRAPHIC_VARIANT_C = 9830,
|
|
GUAM_PROJECTION = 9831,
|
|
MODIFIED_AZIMUTHAL_EQUIDISTANT = 9832,
|
|
HYPERBOLIC_CASSINI_SOLDNER = 9833,
|
|
LAMBERT_CYLINDRICAL_EQUAL_AREA_SPHERICAL = 9834,
|
|
LAMBERT_CYLINDRICAL_EQUAL_AREA = 9835
|
|
};
|
|
|
|
/// Coordinate axis direction.
|
|
enum class Axis_direction : std::uint8_t {
|
|
UNSPECIFIED = 0,
|
|
NORTH,
|
|
SOUTH,
|
|
EAST,
|
|
WEST,
|
|
OTHER
|
|
};
|
|
|
|
/// Superclass for all spatial reference systems.
|
|
class Spatial_reference_system {
|
|
public:
|
|
Spatial_reference_system() = default;
|
|
Spatial_reference_system(const Spatial_reference_system &) = default;
|
|
Spatial_reference_system(Spatial_reference_system &&) = default;
|
|
|
|
virtual ~Spatial_reference_system() {}
|
|
|
|
/**
|
|
Get the type of spatial refrence system: projected, geometric,
|
|
etc.
|
|
|
|
@return SRS type
|
|
*/
|
|
virtual Srs_type srs_type() const = 0;
|
|
|
|
/**
|
|
Clone the object.
|
|
|
|
@return A new Spatial_reference_system object
|
|
*/
|
|
virtual Spatial_reference_system *clone() = 0;
|
|
|
|
/**
|
|
Retrieve the axis direction of the spatial
|
|
reference system.
|
|
|
|
@param axis axis number, zero indexed
|
|
@return Axis direction
|
|
*/
|
|
virtual Axis_direction axis_direction(const int axis) const = 0;
|
|
|
|
/**
|
|
Retrieve the angular unit relative to radians.
|
|
|
|
@return Conversion factor.
|
|
*/
|
|
virtual double angular_unit() const = 0;
|
|
|
|
/**
|
|
* Retrieve how long the unit of the spatial reference system is in meters.
|
|
*
|
|
* @return Conversion factor
|
|
*/
|
|
virtual double linear_unit() const = 0;
|
|
/**
|
|
Retrieve the prime meridian relative to Greenwich.
|
|
|
|
The prime meridian is returned in the angular unit of the
|
|
SRS. Positive numbers are East of Greenwich.
|
|
|
|
@see angular_unit
|
|
|
|
@return Prime meridian.
|
|
*/
|
|
virtual double prime_meridian() const = 0;
|
|
|
|
/// Checks if this SRS can be changed to another SRS without causing
|
|
/// computational incompatibilities.
|
|
///
|
|
/// This means checking that all values in the two SRSs that affect
|
|
/// computations are the same. The syntax of the SRS definitions may still
|
|
/// vary, e.g., by using different names or by having different authority
|
|
/// codes.
|
|
///
|
|
/// In some cases, e.g., unknown projection methods, we don't know how to
|
|
/// compare the two SRSs. In that case, we fail by saying that the SRSs are
|
|
/// not the same.
|
|
///
|
|
/// The operation is not commutative. The SRS parameter is allowed to have a
|
|
/// TOWGS84 specification even though this object doesn't. The opposite is not
|
|
/// necessarily true. If this object lacks TOWGS84 information, transformation
|
|
/// operations are forbidden on this SRS. Adding that possibility changes what
|
|
/// computations are available, but it doesn't change the result of any
|
|
/// computation that can currently be done.
|
|
///
|
|
/// An SRS that is currently identified as WGS 84 may both add and remove
|
|
/// TOWGS84 information as long as the parameters are all 0. Adding a
|
|
/// non-all-zero TOWGS84 clause to a WGS 84 SRS is not allowed.
|
|
///
|
|
/// @param srs The SRS to compare with.
|
|
///
|
|
/// @retval true The two SRSs are semantically the same.
|
|
/// @retval false The two SRSs are semantically different, or we don't know
|
|
/// how to compare them.
|
|
virtual bool can_be_modified_to(
|
|
const Spatial_reference_system &srs) const = 0;
|
|
|
|
/// Retrieve the proj4 parameter string.
|
|
///
|
|
/// If the SRS can't be represented as a proj4 parameter string, an empty
|
|
/// string is returned.
|
|
///
|
|
/// @return Proj4 parameter string or empty string.
|
|
virtual std::string proj4_parameters() const { return std::string(); }
|
|
|
|
/// Checks if this SRS has valid Bursa Wolf parameters.
|
|
///
|
|
/// @retval true Transformation parameters are specified.
|
|
/// @retval false Transformation parameters are not specified.
|
|
virtual bool has_towgs84() const = 0;
|
|
|
|
/// Checks if this SRS is WGS 84 or a projection based on WGS 84.
|
|
///
|
|
/// @retval true This SRS is WGS 84 or a projection of WGS 84.
|
|
/// @retval false This SRS is neither WGS 84 or a projection of WGS 84.
|
|
virtual bool is_wgs84_based() const = 0;
|
|
};
|
|
|
|
namespace wkt_parser {
|
|
struct Geographic_cs;
|
|
} // namespace wkt_parser
|
|
|
|
/// A geographic (longitude-latitude) spatial reference system.
|
|
class Geographic_srs : public Spatial_reference_system {
|
|
private:
|
|
/// Semi-major axis of ellipsoid
|
|
double m_semi_major_axis;
|
|
/// Inverse flattening of ellipsoid
|
|
double m_inverse_flattening;
|
|
/// Bursa Wolf transformation parameters used to transform to WGS84.
|
|
double m_towgs84[7];
|
|
/// Longitude of the prime meridian relative to the Greenwich
|
|
/// Meridian (measured in m_angular_unit). Positive values are East
|
|
/// of Greenwich.
|
|
double m_prime_meridian;
|
|
/// Conversion factor for the angular unit relative to radians.
|
|
double m_angular_unit;
|
|
/// Direction of x and y axis, respectively.
|
|
Axis_direction m_axes[2];
|
|
/// Whether this SRS is WGS 84.
|
|
bool m_is_wgs84;
|
|
|
|
public:
|
|
Geographic_srs()
|
|
: m_semi_major_axis(NAN),
|
|
m_inverse_flattening(NAN),
|
|
m_prime_meridian(NAN),
|
|
m_angular_unit(NAN),
|
|
m_is_wgs84(false) {
|
|
for (double &d : m_towgs84) d = NAN;
|
|
for (Axis_direction &d : m_axes) d = Axis_direction::UNSPECIFIED;
|
|
}
|
|
|
|
virtual Srs_type srs_type() const override { return Srs_type::GEOGRAPHIC; }
|
|
|
|
virtual Spatial_reference_system *clone() override {
|
|
return new Geographic_srs(*this);
|
|
}
|
|
|
|
/**
|
|
Initialize from parse tree.
|
|
|
|
@param[in] srid Spatial reference system ID to use when reporting errors
|
|
@param[in] g Parser output
|
|
|
|
@retval true An error has occurred. The error has been flagged.
|
|
@retval false Success
|
|
*/
|
|
virtual bool init(srid_t srid, wkt_parser::Geographic_cs *g);
|
|
|
|
bool has_towgs84() const override {
|
|
// Either none or all parameters are specified.
|
|
return !std::isnan(m_towgs84[0]);
|
|
}
|
|
|
|
bool is_wgs84_based() const override { return m_is_wgs84; }
|
|
|
|
Axis_direction axis_direction(const int axis) const override {
|
|
DBUG_ASSERT(axis >= 0 && axis <= 1);
|
|
return m_axes[axis];
|
|
}
|
|
|
|
double semi_major_axis() const { return m_semi_major_axis; }
|
|
|
|
double inverse_flattening() const { return m_inverse_flattening; }
|
|
|
|
double linear_unit() const override { return 1.0; }
|
|
double angular_unit() const override { return m_angular_unit; }
|
|
|
|
double prime_meridian() const override { return m_prime_meridian; }
|
|
|
|
bool can_be_modified_to(const Spatial_reference_system &srs) const override;
|
|
|
|
std::string proj4_parameters() const override;
|
|
};
|
|
|
|
namespace wkt_parser {
|
|
struct Projected_cs;
|
|
} // namespace wkt_parser
|
|
|
|
/// A projected spatial reference system.
|
|
class Projected_srs : public Spatial_reference_system {
|
|
private:
|
|
/// The geographic SRS this SRS is projected from.
|
|
Geographic_srs m_geographic_srs;
|
|
/// Converson factor for the linar unit relative to meters.
|
|
double m_linear_unit;
|
|
/// Direction of x and y axis, respectively.
|
|
Axis_direction m_axes[2];
|
|
|
|
protected:
|
|
/// Checks if the parameters that are common to all projections can safely be
|
|
/// modified to another SRS without causing computational differences.
|
|
///
|
|
/// This function is called by can_be_modified_to() in subclasses to check if
|
|
/// the common parameters match. Projected_srs::can_be_modified_to is abstract
|
|
/// to avoid that subclasses forget to implement can_be_modified_to().
|
|
///
|
|
/// @see Spatial_reference_system::can_be_modified_to
|
|
///
|
|
/// @param srs The SRS to compare with.
|
|
///
|
|
/// @retval true The common projection parameters are the same in both SRSs.
|
|
/// @retval false The two SRSs differ in the common projection parameters.
|
|
bool common_proj_parameters_can_be_modified_to(
|
|
const Spatial_reference_system &srs) const;
|
|
|
|
public:
|
|
Projected_srs() : m_linear_unit(NAN) {
|
|
for (Axis_direction &d : m_axes) d = Axis_direction::UNSPECIFIED;
|
|
}
|
|
|
|
virtual Srs_type srs_type() const override { return Srs_type::PROJECTED; }
|
|
|
|
/**
|
|
Initialize from parse tree.
|
|
|
|
@param[in] srid Spatial reference system ID to use when reporting errors
|
|
@param[in] p Parser output
|
|
|
|
@retval true An error has occurred. The error has been flagged.
|
|
@retval false Success
|
|
*/
|
|
virtual bool init(srid_t srid, wkt_parser::Projected_cs *p);
|
|
|
|
/**
|
|
Get the map projection method.
|
|
|
|
@return Projection type
|
|
*/
|
|
virtual Projection_type projection_type() const = 0;
|
|
|
|
Axis_direction axis_direction(const int axis) const override {
|
|
DBUG_ASSERT(axis >= 0 && axis <= 1);
|
|
return m_axes[axis];
|
|
}
|
|
|
|
double linear_unit() const override { return m_linear_unit; }
|
|
double angular_unit() const override {
|
|
return m_geographic_srs.angular_unit();
|
|
}
|
|
|
|
double prime_meridian() const override {
|
|
return m_geographic_srs.prime_meridian();
|
|
}
|
|
|
|
bool has_towgs84() const override { return m_geographic_srs.has_towgs84(); }
|
|
|
|
bool is_wgs84_based() const override {
|
|
return m_geographic_srs.is_wgs84_based();
|
|
}
|
|
};
|
|
|
|
/// A projected SRS of an unknown projection type.
|
|
///
|
|
/// This SRS can be used as any other projected SRS, but since the
|
|
/// projection type is unkown, geometries in this SRS can't be
|
|
/// transformed to other SRSs.
|
|
class Unknown_projected_srs : public Projected_srs {
|
|
public:
|
|
virtual Spatial_reference_system *clone() override {
|
|
return new Unknown_projected_srs(*this);
|
|
}
|
|
|
|
virtual bool init(srid_t srid, wkt_parser::Projected_cs *p) override;
|
|
|
|
virtual Projection_type projection_type() const override {
|
|
return Projection_type::UNKNOWN;
|
|
}
|
|
|
|
bool can_be_modified_to(const Spatial_reference_system &) const override {
|
|
// We don't know how to compare this SRS with other SRSs.
|
|
return false;
|
|
}
|
|
};
|
|
|
|
/// A Popular Visualisation Pseudo Mercator projection (EPSG 1024).
|
|
class Popular_visualisation_pseudo_mercator_srs : public Projected_srs {
|
|
private:
|
|
/// Latitude chosen as origin of y-coordinates (EPSG 8801).
|
|
double m_latitude_of_origin;
|
|
/// Longitude chosen as origin of x-coordinates (central meridian)
|
|
/// (EPSG 8802).
|
|
double m_longitude_of_origin;
|
|
/// Value added to x-coordinates (EPSG 8806).
|
|
double m_false_easting;
|
|
/// Value added to y-coordinates (EPSG 8807).
|
|
double m_false_northing;
|
|
|
|
public:
|
|
Popular_visualisation_pseudo_mercator_srs()
|
|
: m_latitude_of_origin(NAN),
|
|
m_longitude_of_origin(NAN),
|
|
m_false_easting(NAN),
|
|
m_false_northing(NAN) {}
|
|
|
|
virtual Spatial_reference_system *clone() override {
|
|
return new Popular_visualisation_pseudo_mercator_srs(*this);
|
|
}
|
|
|
|
virtual bool init(srid_t srid, wkt_parser::Projected_cs *p) override;
|
|
|
|
virtual Projection_type projection_type() const override {
|
|
return Projection_type::POPULAR_VISUALISATION_PSEUDO_MERCATOR;
|
|
}
|
|
|
|
bool can_be_modified_to(const Spatial_reference_system &) const override;
|
|
};
|
|
|
|
/// A Lambert Azimuthal Equal Area (Spherical) projection (EPSG 1027).
|
|
class Lambert_azimuthal_equal_area_spherical_srs : public Projected_srs {
|
|
private:
|
|
/// Latitude chosen as origin of y-coordinates (EPSG 8801).
|
|
double m_latitude_of_origin;
|
|
/// Longitude chosen as origin of x-coordinates (central meridian)
|
|
/// (EPSG 8802).
|
|
double m_longitude_of_origin;
|
|
/// Value added to x-coordinates (EPSG 8806).
|
|
double m_false_easting;
|
|
/// Value added to y-coordinates (EPSG 8807).
|
|
double m_false_northing;
|
|
|
|
public:
|
|
Lambert_azimuthal_equal_area_spherical_srs()
|
|
: m_latitude_of_origin(NAN),
|
|
m_longitude_of_origin(NAN),
|
|
m_false_easting(NAN),
|
|
m_false_northing(NAN) {}
|
|
|
|
virtual Spatial_reference_system *clone() override {
|
|
return new Lambert_azimuthal_equal_area_spherical_srs(*this);
|
|
}
|
|
|
|
virtual bool init(srid_t srid, wkt_parser::Projected_cs *p) override;
|
|
|
|
virtual Projection_type projection_type() const override {
|
|
return Projection_type::LAMBERT_AZIMUTHAL_EQUAL_AREA_SPHERICAL;
|
|
}
|
|
|
|
bool can_be_modified_to(const Spatial_reference_system &) const override;
|
|
};
|
|
|
|
/// An Equidistant Cylindrical projection (EPSG 1028).
|
|
class Equidistant_cylindrical_srs : public Projected_srs {
|
|
private:
|
|
/// Latitude of the first parallel of intersection between the cone
|
|
/// and the ellipsoid (EPSG 8823).
|
|
double m_standard_parallel_1;
|
|
/// Longitude chosen as origin of x-coordinates (central meridian)
|
|
/// (EPSG 8802).
|
|
double m_longitude_of_origin;
|
|
/// Value added to x-coordinates (EPSG 8806).
|
|
double m_false_easting;
|
|
/// Value added to y-coordinates (EPSG 8807).
|
|
double m_false_northing;
|
|
|
|
public:
|
|
Equidistant_cylindrical_srs()
|
|
: m_standard_parallel_1(NAN),
|
|
m_longitude_of_origin(NAN),
|
|
m_false_easting(NAN),
|
|
m_false_northing(NAN) {}
|
|
|
|
virtual Spatial_reference_system *clone() override {
|
|
return new Equidistant_cylindrical_srs(*this);
|
|
}
|
|
|
|
virtual bool init(srid_t srid, wkt_parser::Projected_cs *p) override;
|
|
|
|
virtual Projection_type projection_type() const override {
|
|
return Projection_type::EQUIDISTANT_CYLINDRICAL;
|
|
}
|
|
|
|
bool can_be_modified_to(const Spatial_reference_system &) const override;
|
|
};
|
|
|
|
/// An Equidistant Cylindrical (Spherical) projection (EPSG 1029).
|
|
class Equidistant_cylindrical_spherical_srs : public Projected_srs {
|
|
private:
|
|
/// Latitude of the first parallel of intersection between the cone
|
|
/// and the ellipsoid (EPSG 8823).
|
|
double m_standard_parallel_1;
|
|
/// Longitude chosen as origin of x-coordinates (central meridian)
|
|
/// (EPSG 8802).
|
|
double m_longitude_of_origin;
|
|
/// Value added to x-coordinates (EPSG 8806).
|
|
double m_false_easting;
|
|
/// Value added to y-coordinates (EPSG 8807).
|
|
double m_false_northing;
|
|
|
|
public:
|
|
Equidistant_cylindrical_spherical_srs()
|
|
: m_standard_parallel_1(NAN),
|
|
m_longitude_of_origin(NAN),
|
|
m_false_easting(NAN),
|
|
m_false_northing(NAN) {}
|
|
|
|
virtual Spatial_reference_system *clone() override {
|
|
return new Equidistant_cylindrical_spherical_srs(*this);
|
|
}
|
|
|
|
virtual bool init(srid_t srid, wkt_parser::Projected_cs *p) override;
|
|
|
|
virtual Projection_type projection_type() const override {
|
|
return Projection_type::EQUIDISTANT_CYLINDRICAL_SPHERICAL;
|
|
}
|
|
|
|
bool can_be_modified_to(const Spatial_reference_system &) const override;
|
|
};
|
|
|
|
/// A Krovak (North Orientated) projection (EPSG 1041).
|
|
class Krovak_north_orientated_srs : public Projected_srs {
|
|
private:
|
|
/// Latitude of the point at which the azimuth of the central line
|
|
/// is defined (EPSG 8811).
|
|
double m_latitude_of_center;
|
|
/// The meridian along which the northing axis increments and also
|
|
/// across which parallels of latitude increment towards the north
|
|
/// pole (EPSG 8833).
|
|
double m_longitude_of_center;
|
|
/// The rotation applied to spherical coordinates, measured on the
|
|
/// conformal sphere in the plane of the meridian of origin (EPSG
|
|
/// 1036).
|
|
double m_azimuth;
|
|
/// Latitude of the parallel on which the projection is based. This
|
|
/// latitude is not geographic, but is defined on the conformal
|
|
/// sphere AFTER its rotation to obtain the oblique aspect of the
|
|
/// projection (EPSG 8818).
|
|
double m_pseudo_standard_parallel_1;
|
|
/// The factor by which the map grid is reduced or enlarged at the
|
|
/// pseudo-standard parallel (EPSG 8819).
|
|
double m_scale_factor;
|
|
/// Value added to x-coordinates (EPSG 8806).
|
|
double m_false_easting;
|
|
/// Value added to y-coordinates (EPSG 8807).
|
|
double m_false_northing;
|
|
|
|
public:
|
|
Krovak_north_orientated_srs()
|
|
: m_latitude_of_center(NAN),
|
|
m_longitude_of_center(NAN),
|
|
m_azimuth(NAN),
|
|
m_pseudo_standard_parallel_1(NAN),
|
|
m_scale_factor(NAN),
|
|
m_false_easting(NAN),
|
|
m_false_northing(NAN) {}
|
|
|
|
virtual Spatial_reference_system *clone() override {
|
|
return new Krovak_north_orientated_srs(*this);
|
|
}
|
|
|
|
virtual bool init(srid_t srid, wkt_parser::Projected_cs *p) override;
|
|
|
|
virtual Projection_type projection_type() const override {
|
|
return Projection_type::KROVAK_NORTH_ORIENTATED;
|
|
}
|
|
|
|
bool can_be_modified_to(const Spatial_reference_system &) const override;
|
|
};
|
|
|
|
/// A Krovak Modified projection (EPSG 1042).
|
|
class Krovak_modified_srs : public Projected_srs {
|
|
private:
|
|
/// Latitude of the point at which the azimuth of the central line
|
|
/// is defined (EPSG 8811).
|
|
double m_latitude_of_center;
|
|
/// The meridian along which the northing axis increments and also
|
|
/// across which parallels of latitude increment towards the north
|
|
/// pole (EPSG 8833).
|
|
double m_longitude_of_center;
|
|
/// The rotation applied to spherical coordinates, measured on the
|
|
/// conformal sphere in the plane of the meridian of origin (EPSG
|
|
/// 1036).
|
|
double m_azimuth;
|
|
/// Latitude of the parallel on which the projection is based. This
|
|
/// latitude is not geographic, but is defined on the conformal
|
|
/// sphere AFTER its rotation to obtain the oblique aspect of the
|
|
/// projection (EPSG 8818).
|
|
double m_pseudo_standard_parallel_1;
|
|
/// The factor by which the map grid is reduced or enlarged at the
|
|
/// pseudo-standard parallel (EPSG 8819).
|
|
double m_scale_factor;
|
|
/// Value added to x-coordinates (EPSG 8806).
|
|
double m_false_easting;
|
|
/// Value added to y-coordinates (EPSG 8807).
|
|
double m_false_northing;
|
|
/// The first ordinate of the evaluation point (EPSG 8617).
|
|
double m_evaluation_point_ordinate_1;
|
|
/// The second ordinate of the evaluation point(EPSG 8618).
|
|
double m_evaluation_point_ordinate_2;
|
|
/// Coefficient C1 used in polynomial transformation (EPSG 1026).
|
|
double m_c1;
|
|
/// Coefficient C2 used in polynomial transformation (EPSG 1027).
|
|
double m_c2;
|
|
/// Coefficient C3 used in polynomial transformation (EPSG 1028).
|
|
double m_c3;
|
|
/// Coefficient C4 used in polynomial transformation (EPSG 1029).
|
|
double m_c4;
|
|
/// Coefficient C5 used in polynomial transformation (EPSG 1030).
|
|
double m_c5;
|
|
/// Coefficient C6 used in polynomial transformation (EPSG 1031).
|
|
double m_c6;
|
|
/// Coefficient C7 used in polynomial transformation (EPSG 1032).
|
|
double m_c7;
|
|
/// Coefficient C8 used in polynomial transformation (EPSG 1033).
|
|
double m_c8;
|
|
/// Coefficient C9 used in polynomial transformation (EPSG 1034).
|
|
double m_c9;
|
|
/// Coefficient C10 used in polynomial transformation (EPSG 1035).
|
|
double m_c10;
|
|
|
|
public:
|
|
Krovak_modified_srs()
|
|
: m_latitude_of_center(NAN),
|
|
m_longitude_of_center(NAN),
|
|
m_azimuth(NAN),
|
|
m_pseudo_standard_parallel_1(NAN),
|
|
m_scale_factor(NAN),
|
|
m_false_easting(NAN),
|
|
m_false_northing(NAN),
|
|
m_evaluation_point_ordinate_1(NAN),
|
|
m_evaluation_point_ordinate_2(NAN),
|
|
m_c1(NAN),
|
|
m_c2(NAN),
|
|
m_c3(NAN),
|
|
m_c4(NAN),
|
|
m_c5(NAN),
|
|
m_c6(NAN),
|
|
m_c7(NAN),
|
|
m_c8(NAN),
|
|
m_c9(NAN),
|
|
m_c10(NAN) {}
|
|
|
|
virtual Spatial_reference_system *clone() override {
|
|
return new Krovak_modified_srs(*this);
|
|
}
|
|
|
|
virtual bool init(srid_t srid, wkt_parser::Projected_cs *p) override;
|
|
|
|
virtual Projection_type projection_type() const override {
|
|
return Projection_type::KROVAK_MODIFIED;
|
|
}
|
|
|
|
bool can_be_modified_to(const Spatial_reference_system &) const override;
|
|
};
|
|
|
|
/// A Krovak Modified (North Orientated) projection (EPSG 1043).
|
|
class Krovak_modified_north_orientated_srs : public Projected_srs {
|
|
private:
|
|
/// Latitude of the point at which the azimuth of the central line
|
|
/// is defined (EPSG 8811).
|
|
double m_latitude_of_center;
|
|
/// The meridian along which the northing axis increments and also
|
|
/// across which parallels of latitude increment towards the north
|
|
/// pole (EPSG 8833).
|
|
double m_longitude_of_center;
|
|
/// The rotation applied to spherical coordinates, measured on the
|
|
/// conformal sphere in the plane of the meridian of origin (EPSG
|
|
/// 1036).
|
|
double m_azimuth;
|
|
/// Latitude of the parallel on which the projection is based. This
|
|
/// latitude is not geographic, but is defined on the conformal
|
|
/// sphere AFTER its rotation to obtain the oblique aspect of the
|
|
/// projection (EPSG 8818).
|
|
double m_pseudo_standard_parallel_1;
|
|
/// The factor by which the map grid is reduced or enlarged at the
|
|
/// pseudo-standard parallel (EPSG 8819).
|
|
double m_scale_factor;
|
|
/// Value added to x-coordinates (EPSG 8806).
|
|
double m_false_easting;
|
|
/// Value added to y-coordinates (EPSG 8807).
|
|
double m_false_northing;
|
|
/// The first ordinate of the evaluation point (EPSG 8617).
|
|
double m_evaluation_point_ordinate_1;
|
|
/// The second ordinate of the evaluation point(EPSG 8618).
|
|
double m_evaluation_point_ordinate_2;
|
|
/// Coefficient C1 used in polynomial transformation (EPSG 1026).
|
|
double m_c1;
|
|
/// Coefficient C2 used in polynomial transformation (EPSG 1027).
|
|
double m_c2;
|
|
/// Coefficient C3 used in polynomial transformation (EPSG 1028).
|
|
double m_c3;
|
|
/// Coefficient C4 used in polynomial transformation (EPSG 1029).
|
|
double m_c4;
|
|
/// Coefficient C5 used in polynomial transformation (EPSG 1030).
|
|
double m_c5;
|
|
/// Coefficient C6 used in polynomial transformation (EPSG 1031).
|
|
double m_c6;
|
|
/// Coefficient C7 used in polynomial transformation (EPSG 1032).
|
|
double m_c7;
|
|
/// Coefficient C8 used in polynomial transformation (EPSG 1033).
|
|
double m_c8;
|
|
/// Coefficient C9 used in polynomial transformation (EPSG 1034).
|
|
double m_c9;
|
|
/// Coefficient C10 used in polynomial transformation (EPSG 1035).
|
|
double m_c10;
|
|
|
|
public:
|
|
Krovak_modified_north_orientated_srs()
|
|
: m_latitude_of_center(NAN),
|
|
m_longitude_of_center(NAN),
|
|
m_azimuth(NAN),
|
|
m_pseudo_standard_parallel_1(NAN),
|
|
m_scale_factor(NAN),
|
|
m_false_easting(NAN),
|
|
m_false_northing(NAN),
|
|
m_evaluation_point_ordinate_1(NAN),
|
|
m_evaluation_point_ordinate_2(NAN),
|
|
m_c1(NAN),
|
|
m_c2(NAN),
|
|
m_c3(NAN),
|
|
m_c4(NAN),
|
|
m_c5(NAN),
|
|
m_c6(NAN),
|
|
m_c7(NAN),
|
|
m_c8(NAN),
|
|
m_c9(NAN),
|
|
m_c10(NAN) {}
|
|
|
|
virtual Spatial_reference_system *clone() override {
|
|
return new Krovak_modified_north_orientated_srs(*this);
|
|
}
|
|
|
|
virtual bool init(srid_t srid, wkt_parser::Projected_cs *p) override;
|
|
|
|
virtual Projection_type projection_type() const override {
|
|
return Projection_type::KROVAK_MODIFIED_NORTH_ORIENTATED;
|
|
}
|
|
|
|
bool can_be_modified_to(const Spatial_reference_system &) const override;
|
|
};
|
|
|
|
/// A Lambert Conic Conformal (2SP Michigan) projection (EPSG 1051).
|
|
class Lambert_conic_conformal_2sp_michigan_srs : public Projected_srs {
|
|
private:
|
|
/// Latitude of the false origin, at which the false easting and
|
|
/// northing is defined (EPSG 8821).
|
|
double m_latitude_of_origin;
|
|
/// Longitude (central meridian) of the false origin, at which the
|
|
/// false easting and northing is defined (EPSG 8822).
|
|
double m_longitude_of_origin;
|
|
/// Latitude of the first parallel of intersection between the cone
|
|
/// and the ellipsoid (EPSG 8823).
|
|
double m_standard_parallel_1;
|
|
/// Latitude of the second parallel of intersection between the cone
|
|
/// and the ellipsoid (EPSG 8824).
|
|
double m_standard_parallel_2;
|
|
/// Easting value assigned to the false origin (EPSG 8826).
|
|
double m_false_easting;
|
|
/// Northing value assigned to the false origin (EPSG 8827).
|
|
double m_false_northing;
|
|
/// Ellipsoid scaling factor (EPSG 1038).
|
|
double m_ellipsoid_scale_factor;
|
|
|
|
public:
|
|
Lambert_conic_conformal_2sp_michigan_srs()
|
|
: m_latitude_of_origin(NAN),
|
|
m_longitude_of_origin(NAN),
|
|
m_standard_parallel_1(NAN),
|
|
m_standard_parallel_2(NAN),
|
|
m_false_easting(NAN),
|
|
m_false_northing(NAN),
|
|
m_ellipsoid_scale_factor(NAN) {}
|
|
|
|
virtual Spatial_reference_system *clone() override {
|
|
return new Lambert_conic_conformal_2sp_michigan_srs(*this);
|
|
}
|
|
|
|
virtual bool init(srid_t srid, wkt_parser::Projected_cs *p) override;
|
|
|
|
virtual Projection_type projection_type() const override {
|
|
return Projection_type::LAMBERT_CONIC_CONFORMAL_2SP_MICHIGAN;
|
|
}
|
|
|
|
bool can_be_modified_to(const Spatial_reference_system &) const override;
|
|
};
|
|
|
|
/// A Colombia Urban projection(EPSG 1052).
|
|
class Colombia_urban_srs : public Projected_srs {
|
|
private:
|
|
/// Latitude chosen as origin of y-coordinates (EPSG 8801).
|
|
double m_latitude_of_origin;
|
|
/// Longitude chosen as origin of x-coordinates (central meridian)
|
|
/// (EPSG 8802).
|
|
double m_longitude_of_origin;
|
|
/// Value added to x-coordinates (EPSG 8806).
|
|
double m_false_easting;
|
|
/// Value added to y-coordinates (EPSG 8807).
|
|
double m_false_northing;
|
|
/// The height of the projection plane at its origin (EPSG 1039).
|
|
double m_projection_plane_height_at_origin;
|
|
|
|
public:
|
|
Colombia_urban_srs()
|
|
: m_latitude_of_origin(NAN),
|
|
m_longitude_of_origin(NAN),
|
|
m_false_easting(NAN),
|
|
m_false_northing(NAN),
|
|
m_projection_plane_height_at_origin(NAN) {}
|
|
|
|
virtual Spatial_reference_system *clone() override {
|
|
return new Colombia_urban_srs(*this);
|
|
}
|
|
|
|
virtual bool init(srid_t srid, wkt_parser::Projected_cs *p) override;
|
|
|
|
virtual Projection_type projection_type() const override {
|
|
return Projection_type::COLOMBIA_URBAN;
|
|
}
|
|
|
|
bool can_be_modified_to(const Spatial_reference_system &) const override;
|
|
};
|
|
|
|
/// A Lambert Conic Conformal (1SP) projection, alias Lambert Conic
|
|
/// Conformal or LCC (EPSG 9801).
|
|
class Lambert_conic_conformal_1sp_srs : public Projected_srs {
|
|
private:
|
|
/// Latitude chosen as origin of y-coordinates (EPSG 8801).
|
|
double m_latitude_of_origin;
|
|
/// Longitude chosen as origin of x-coordinates (central meridian)
|
|
/// (EPSG 8802).
|
|
double m_longitude_of_origin;
|
|
/// Multiplier for reducing a distance obtained from a map to the
|
|
/// actual distance on the datum of the map (EPSG 8805).
|
|
double m_scale_factor;
|
|
/// Value added to x-coordinates (EPSG 8806).
|
|
double m_false_easting;
|
|
/// Value added to y-coordinates (EPSG 8807).
|
|
double m_false_northing;
|
|
|
|
public:
|
|
Lambert_conic_conformal_1sp_srs()
|
|
: m_latitude_of_origin(NAN),
|
|
m_longitude_of_origin(NAN),
|
|
m_scale_factor(NAN),
|
|
m_false_easting(NAN),
|
|
m_false_northing(NAN) {}
|
|
|
|
virtual Spatial_reference_system *clone() override {
|
|
return new Lambert_conic_conformal_1sp_srs(*this);
|
|
}
|
|
|
|
virtual bool init(srid_t srid, wkt_parser::Projected_cs *p) override;
|
|
|
|
virtual Projection_type projection_type() const override {
|
|
return Projection_type::LAMBERT_CONIC_CONFORMAL_1SP;
|
|
}
|
|
|
|
bool can_be_modified_to(const Spatial_reference_system &) const override;
|
|
};
|
|
|
|
/// A Lambert Conic Conformal (2SP) projection, alias Lambert Conic
|
|
/// Conformal or LCC (EPSG 9802).
|
|
class Lambert_conic_conformal_2sp_srs : public Projected_srs {
|
|
private:
|
|
/// Latitude of the false origin, at which the false easting and
|
|
/// northing is defined (EPSG 8821).
|
|
double m_latitude_of_origin;
|
|
/// Longitude (central meridian) of the false origin, at which the
|
|
/// false easting and northing is defined (EPSG 8822).
|
|
double m_longitude_of_origin;
|
|
/// Latitude of the first parallel of intersection between the cone
|
|
/// and the ellipsoid (EPSG 8823).
|
|
double m_standard_parallel_1;
|
|
/// Latitude of the second parallel of intersection between the cone
|
|
/// and the ellipsoid (EPSG 8824).
|
|
double m_standard_parallel_2;
|
|
/// Easting value assigned to the false origin (EPSG 8826).
|
|
double m_false_easting;
|
|
/// Northing value assigned to the false origin (EPSG 8827).
|
|
double m_false_northing;
|
|
|
|
public:
|
|
Lambert_conic_conformal_2sp_srs()
|
|
: m_latitude_of_origin(NAN),
|
|
m_longitude_of_origin(NAN),
|
|
m_standard_parallel_1(NAN),
|
|
m_standard_parallel_2(NAN),
|
|
m_false_easting(NAN),
|
|
m_false_northing(NAN) {}
|
|
|
|
virtual Spatial_reference_system *clone() override {
|
|
return new Lambert_conic_conformal_2sp_srs(*this);
|
|
}
|
|
|
|
virtual bool init(srid_t srid, wkt_parser::Projected_cs *p) override;
|
|
|
|
virtual Projection_type projection_type() const override {
|
|
return Projection_type::LAMBERT_CONIC_CONFORMAL_2SP;
|
|
}
|
|
|
|
bool can_be_modified_to(const Spatial_reference_system &) const override;
|
|
};
|
|
|
|
/// A Lambert Conic Conformal (2SP Belgium) projection (EPSG 9803).
|
|
class Lambert_conic_conformal_2sp_belgium_srs : public Projected_srs {
|
|
private:
|
|
/// Latitude of the false origin, at which the false easting and
|
|
/// northing is defined (EPSG 8821).
|
|
double m_latitude_of_origin;
|
|
/// Longitude (central meridian) of the false origin, at which the
|
|
/// false easting and northing is defined (EPSG 8822).
|
|
double m_longitude_of_origin;
|
|
/// Latitude of the first parallel of intersection between the cone
|
|
/// and the ellipsoid (EPSG 8823).
|
|
double m_standard_parallel_1;
|
|
/// Latitude of the second parallel of intersection between the cone
|
|
/// and the ellipsoid (EPSG 8824).
|
|
double m_standard_parallel_2;
|
|
/// Easting value assigned to the false origin (EPSG 8826).
|
|
double m_false_easting;
|
|
/// Northing value assigned to the false origin (EPSG 8827).
|
|
double m_false_northing;
|
|
|
|
public:
|
|
Lambert_conic_conformal_2sp_belgium_srs()
|
|
: m_latitude_of_origin(NAN),
|
|
m_longitude_of_origin(NAN),
|
|
m_standard_parallel_1(NAN),
|
|
m_standard_parallel_2(NAN),
|
|
m_false_easting(NAN),
|
|
m_false_northing(NAN) {}
|
|
|
|
virtual Spatial_reference_system *clone() override {
|
|
return new Lambert_conic_conformal_2sp_belgium_srs(*this);
|
|
}
|
|
|
|
virtual bool init(srid_t srid, wkt_parser::Projected_cs *p) override;
|
|
|
|
virtual Projection_type projection_type() const override {
|
|
return Projection_type::LAMBERT_CONIC_CONFORMAL_2SP_BELGIUM;
|
|
}
|
|
|
|
bool can_be_modified_to(const Spatial_reference_system &) const override;
|
|
};
|
|
|
|
/// A Mercator (variant A) projection, alias Mercator (EPSG 9804).
|
|
class Mercator_variant_a_srs : public Projected_srs {
|
|
private:
|
|
/// Latitude chosen as origin of y-coordinates (EPSG 8801).
|
|
double m_latitude_of_origin;
|
|
/// Longitude chosen as origin of x-coordinates (central meridian)
|
|
/// (EPSG 8802).
|
|
double m_longitude_of_origin;
|
|
/// Multiplier for reducing a distance obtained from a map to the
|
|
/// actual distance on the datum of the map (EPSG 8805).
|
|
double m_scale_factor;
|
|
/// Value added to x-coordinates (EPSG 8806).
|
|
double m_false_easting;
|
|
/// Value added to y-coordinates (EPSG 8807).
|
|
double m_false_northing;
|
|
|
|
public:
|
|
Mercator_variant_a_srs()
|
|
: m_latitude_of_origin(NAN),
|
|
m_longitude_of_origin(NAN),
|
|
m_scale_factor(NAN),
|
|
m_false_easting(NAN),
|
|
m_false_northing(NAN) {}
|
|
|
|
virtual Spatial_reference_system *clone() override {
|
|
return new Mercator_variant_a_srs(*this);
|
|
}
|
|
|
|
virtual bool init(srid_t srid, wkt_parser::Projected_cs *p) override;
|
|
|
|
virtual Projection_type projection_type() const override {
|
|
return Projection_type::MERCATOR_VARIANT_A;
|
|
}
|
|
|
|
bool can_be_modified_to(const Spatial_reference_system &) const override;
|
|
};
|
|
|
|
/// A Mercator (variant B) projection, alias Mercator (EPSG 9805).
|
|
class Mercator_variant_b_srs : public Projected_srs {
|
|
private:
|
|
/// Latitude of the first parallel of intersection between the cone
|
|
/// and the ellipsoid (EPSG 8823).
|
|
double m_standard_parallel_1;
|
|
/// Longitude chosen as origin of x-coordinates (central meridian)
|
|
/// (EPSG 8802).
|
|
double m_longitude_of_origin;
|
|
/// Value added to x-coordinates (EPSG 8806).
|
|
double m_false_easting;
|
|
/// Value added to y-coordinates (EPSG 8807).
|
|
double m_false_northing;
|
|
|
|
public:
|
|
Mercator_variant_b_srs()
|
|
: m_standard_parallel_1(NAN),
|
|
m_longitude_of_origin(NAN),
|
|
m_false_easting(NAN),
|
|
m_false_northing(NAN) {}
|
|
|
|
virtual Spatial_reference_system *clone() override {
|
|
return new Mercator_variant_b_srs(*this);
|
|
}
|
|
|
|
virtual bool init(srid_t srid, wkt_parser::Projected_cs *p) override;
|
|
|
|
virtual Projection_type projection_type() const override {
|
|
return Projection_type::MERCATOR_VARIANT_B;
|
|
}
|
|
|
|
bool can_be_modified_to(const Spatial_reference_system &) const override;
|
|
};
|
|
|
|
/// A Cassini-Soldner projection, alias Cassini (EPSG 9806).
|
|
class Cassini_soldner_srs : public Projected_srs {
|
|
private:
|
|
/// Latitude chosen as origin of y-coordinates (EPSG 8801).
|
|
double m_latitude_of_origin;
|
|
/// Longitude chosen as origin of x-coordinates (central meridian)
|
|
/// (EPSG 8802).
|
|
double m_longitude_of_origin;
|
|
/// Value added to x-coordinates (EPSG 8806).
|
|
double m_false_easting;
|
|
/// Value added to y-coordinates (EPSG 8807).
|
|
double m_false_northing;
|
|
|
|
public:
|
|
Cassini_soldner_srs()
|
|
: m_latitude_of_origin(NAN),
|
|
m_longitude_of_origin(NAN),
|
|
m_false_easting(NAN),
|
|
m_false_northing(NAN) {}
|
|
|
|
virtual Spatial_reference_system *clone() override {
|
|
return new Cassini_soldner_srs(*this);
|
|
}
|
|
|
|
virtual bool init(srid_t srid, wkt_parser::Projected_cs *p) override;
|
|
|
|
virtual Projection_type projection_type() const override {
|
|
return Projection_type::CASSINI_SOLDNER;
|
|
}
|
|
|
|
bool can_be_modified_to(const Spatial_reference_system &) const override;
|
|
};
|
|
|
|
/// A Transverse Mercator projection, alias Gauss-Boaga, Gauss-Krüger
|
|
/// or TM (EPSG 9807).
|
|
class Transverse_mercator_srs : public Projected_srs {
|
|
private:
|
|
/// Latitude chosen as origin of y-coordinates (EPSG 8801).
|
|
double m_latitude_of_origin;
|
|
/// Longitude chosen as origin of x-coordinates (central meridian)
|
|
/// (EPSG 8802).
|
|
double m_longitude_of_origin;
|
|
/// Multiplier for reducing a distance obtained from a map to the
|
|
/// actual distance on the datum of the map (EPSG 8805).
|
|
double m_scale_factor;
|
|
/// Value added to x-coordinates (EPSG 8806).
|
|
double m_false_easting;
|
|
/// Value added to y-coordinates (EPSG 8807).
|
|
double m_false_northing;
|
|
|
|
public:
|
|
Transverse_mercator_srs()
|
|
: m_latitude_of_origin(NAN),
|
|
m_longitude_of_origin(NAN),
|
|
m_scale_factor(NAN),
|
|
m_false_easting(NAN),
|
|
m_false_northing(NAN) {}
|
|
|
|
virtual Spatial_reference_system *clone() override {
|
|
return new Transverse_mercator_srs(*this);
|
|
}
|
|
|
|
virtual bool init(srid_t srid, wkt_parser::Projected_cs *p) override;
|
|
|
|
virtual Projection_type projection_type() const override {
|
|
return Projection_type::TRANSVERSE_MERCATOR;
|
|
}
|
|
|
|
bool can_be_modified_to(const Spatial_reference_system &) const override;
|
|
};
|
|
|
|
/// A Transverse Mercator (South Orientated) projection, alias
|
|
/// Gauss-Conform (EPSG 9808).
|
|
class Transverse_mercator_south_orientated_srs : public Projected_srs {
|
|
private:
|
|
/// Latitude chosen as origin of y-coordinates (EPSG 8801).
|
|
double m_latitude_of_origin;
|
|
/// Longitude chosen as origin of x-coordinates (central meridian)
|
|
/// (EPSG 8802).
|
|
double m_longitude_of_origin;
|
|
/// Multiplier for reducing a distance obtained from a map to the
|
|
/// actual distance on the datum of the map (EPSG 8805).
|
|
double m_scale_factor;
|
|
/// Value added to x-coordinates (EPSG 8806).
|
|
double m_false_easting;
|
|
/// Value added to y-coordinates (EPSG 8807).
|
|
double m_false_northing;
|
|
|
|
public:
|
|
Transverse_mercator_south_orientated_srs()
|
|
: m_latitude_of_origin(NAN),
|
|
m_longitude_of_origin(NAN),
|
|
m_scale_factor(NAN),
|
|
m_false_easting(NAN),
|
|
m_false_northing(NAN) {}
|
|
|
|
virtual Spatial_reference_system *clone() override {
|
|
return new Transverse_mercator_south_orientated_srs(*this);
|
|
}
|
|
|
|
virtual bool init(srid_t srid, wkt_parser::Projected_cs *p) override;
|
|
|
|
virtual Projection_type projection_type() const override {
|
|
return Projection_type::TRANSVERSE_MERCATOR_SOUTH_ORIENTATED;
|
|
}
|
|
|
|
bool can_be_modified_to(const Spatial_reference_system &) const override;
|
|
};
|
|
|
|
/// An Oblique stereographic projection, alias Double stereographic
|
|
/// (EPSG 9809).
|
|
class Oblique_stereographic_srs : public Projected_srs {
|
|
private:
|
|
/// Latitude chosen as origin of y-coordinates (EPSG 8801).
|
|
double m_latitude_of_origin;
|
|
/// Longitude chosen as origin of x-coordinates (central meridian)
|
|
/// (EPSG 8802).
|
|
double m_longitude_of_origin;
|
|
/// Multiplier for reducing a distance obtained from a map to the
|
|
/// actual distance on the datum of the map (EPSG 8805).
|
|
double m_scale_factor;
|
|
/// Value added to x-coordinates (EPSG 8806).
|
|
double m_false_easting;
|
|
/// Value added to y-coordinates (EPSG 8807).
|
|
double m_false_northing;
|
|
|
|
public:
|
|
Oblique_stereographic_srs()
|
|
: m_latitude_of_origin(NAN),
|
|
m_longitude_of_origin(NAN),
|
|
m_scale_factor(NAN),
|
|
m_false_easting(NAN),
|
|
m_false_northing(NAN) {}
|
|
|
|
virtual Spatial_reference_system *clone() override {
|
|
return new Oblique_stereographic_srs(*this);
|
|
}
|
|
|
|
virtual bool init(srid_t srid, wkt_parser::Projected_cs *p) override;
|
|
|
|
virtual Projection_type projection_type() const override {
|
|
return Projection_type::OBLIQUE_STEREOGRAPHIC;
|
|
}
|
|
|
|
bool can_be_modified_to(const Spatial_reference_system &) const override;
|
|
};
|
|
|
|
/// A Polar Stereographic (variant A) projection (EPSG 9810).
|
|
class Polar_stereographic_variant_a_srs : public Projected_srs {
|
|
private:
|
|
/// Latitude chosen as origin of y-coordinates (EPSG 8801).
|
|
double m_latitude_of_origin;
|
|
/// Longitude chosen as origin of x-coordinates (central meridian)
|
|
/// (EPSG 8802).
|
|
double m_longitude_of_origin;
|
|
/// Multiplier for reducing a distance obtained from a map to the
|
|
/// actual distance on the datum of the map (EPSG 8805).
|
|
double m_scale_factor;
|
|
/// Value added to x-coordinates (EPSG 8806).
|
|
double m_false_easting;
|
|
/// Value added to y-coordinates (EPSG 8807).
|
|
double m_false_northing;
|
|
|
|
public:
|
|
Polar_stereographic_variant_a_srs()
|
|
: m_latitude_of_origin(NAN),
|
|
m_longitude_of_origin(NAN),
|
|
m_scale_factor(NAN),
|
|
m_false_easting(NAN),
|
|
m_false_northing(NAN) {}
|
|
|
|
virtual Spatial_reference_system *clone() override {
|
|
return new Polar_stereographic_variant_a_srs(*this);
|
|
}
|
|
|
|
virtual bool init(srid_t srid, wkt_parser::Projected_cs *p) override;
|
|
|
|
virtual Projection_type projection_type() const override {
|
|
return Projection_type::POLAR_STEREOGRAPHIC_VARIANT_A;
|
|
}
|
|
|
|
bool can_be_modified_to(const Spatial_reference_system &) const override;
|
|
};
|
|
|
|
/// A New Zealand Map Grid projection (EPSG 9811).
|
|
class New_zealand_map_grid_srs : public Projected_srs {
|
|
private:
|
|
/// Latitude chosen as origin of y-coordinates (EPSG 8801).
|
|
double m_latitude_of_origin;
|
|
/// Longitude chosen as origin of x-coordinates (central meridian)
|
|
/// (EPSG 8802).
|
|
double m_longitude_of_origin;
|
|
/// Value added to x-coordinates (EPSG 8806).
|
|
double m_false_easting;
|
|
/// Value added to y-coordinates (EPSG 8807).
|
|
double m_false_northing;
|
|
|
|
public:
|
|
New_zealand_map_grid_srs()
|
|
: m_latitude_of_origin(NAN),
|
|
m_longitude_of_origin(NAN),
|
|
m_false_easting(NAN),
|
|
m_false_northing(NAN) {}
|
|
|
|
virtual Spatial_reference_system *clone() override {
|
|
return new New_zealand_map_grid_srs(*this);
|
|
}
|
|
|
|
virtual bool init(srid_t srid, wkt_parser::Projected_cs *p) override;
|
|
|
|
virtual Projection_type projection_type() const override {
|
|
return Projection_type::NEW_ZEALAND_MAP_GRID;
|
|
}
|
|
|
|
bool can_be_modified_to(const Spatial_reference_system &) const override;
|
|
};
|
|
|
|
/// A Hotine Oblique Mercator (variant A) projection, alias Rectified
|
|
/// skew orthomorphic (EPSG 9812).
|
|
class Hotine_oblique_mercator_variant_a_srs : public Projected_srs {
|
|
private:
|
|
/// Latitude of the point at which the azimuth of the central line
|
|
/// is defined (EPSG 8811).
|
|
double m_latitude_of_center;
|
|
/// Longitude of the point at which the azimuth of the central line
|
|
/// is defined (EPSG 8812).
|
|
double m_longitude_of_center;
|
|
/// Direction east of north of the great circle which is the central
|
|
/// line (EPSG 8813).
|
|
double m_azimuth;
|
|
/// Angle at the natural origin through which the natural SRS is
|
|
/// rotated to make the projection north axis parallel with true
|
|
/// north (EPSG 8814).
|
|
double m_rectified_grid_angle;
|
|
/// Multiplier for reducing a distance obtained from a map to the
|
|
/// actual distance on the datum of the map (EPSG 8815).
|
|
double m_scale_factor;
|
|
/// Value added to x-coordinates (EPSG 8806).
|
|
double m_false_easting;
|
|
/// Value added to y-coordinates (EPSG 8807).
|
|
double m_false_northing;
|
|
|
|
public:
|
|
Hotine_oblique_mercator_variant_a_srs()
|
|
: m_latitude_of_center(NAN),
|
|
m_longitude_of_center(NAN),
|
|
m_azimuth(NAN),
|
|
m_rectified_grid_angle(NAN),
|
|
m_scale_factor(NAN),
|
|
m_false_easting(NAN),
|
|
m_false_northing(NAN) {}
|
|
|
|
virtual Spatial_reference_system *clone() override {
|
|
return new Hotine_oblique_mercator_variant_a_srs(*this);
|
|
}
|
|
|
|
virtual bool init(srid_t srid, wkt_parser::Projected_cs *p) override;
|
|
|
|
virtual Projection_type projection_type() const override {
|
|
return Projection_type::HOTINE_OBLIQUE_MERCATOR_VARIANT_A;
|
|
}
|
|
|
|
bool can_be_modified_to(const Spatial_reference_system &) const override;
|
|
};
|
|
|
|
/// A Laborde Oblique Mercator projection (EPSG 9813).
|
|
class Laborde_oblique_mercator_srs : public Projected_srs {
|
|
private:
|
|
/// Latitude of the point at which the azimuth of the central line
|
|
/// is defined (EPSG 8811).
|
|
double m_latitude_of_center;
|
|
/// Longitude of the point at which the azimuth of the central line
|
|
/// is defined (EPSG 8812).
|
|
double m_longitude_of_center;
|
|
/// Direction east of north of the great circle which is the central
|
|
/// line (EPSG 8813).
|
|
double m_azimuth;
|
|
/// Multiplier for reducing a distance obtained from a map to the
|
|
/// actual distance on the datum of the map (EPSG 8815).
|
|
double m_scale_factor;
|
|
/// Value added to x-coordinates (EPSG 8806).
|
|
double m_false_easting;
|
|
/// Value added to y-coordinates (EPSG 8807).
|
|
double m_false_northing;
|
|
|
|
public:
|
|
Laborde_oblique_mercator_srs()
|
|
: m_latitude_of_center(NAN),
|
|
m_longitude_of_center(NAN),
|
|
m_azimuth(NAN),
|
|
m_scale_factor(NAN),
|
|
m_false_easting(NAN),
|
|
m_false_northing(NAN) {}
|
|
|
|
virtual Spatial_reference_system *clone() override {
|
|
return new Laborde_oblique_mercator_srs(*this);
|
|
}
|
|
|
|
virtual bool init(srid_t srid, wkt_parser::Projected_cs *p) override;
|
|
|
|
virtual Projection_type projection_type() const override {
|
|
return Projection_type::LABORDE_OBLIQUE_MERCATOR;
|
|
}
|
|
|
|
bool can_be_modified_to(const Spatial_reference_system &) const override;
|
|
};
|
|
|
|
/// A Hotine Oblique Mercator (variant B) projection, alias Rectified
|
|
/// skew orthomorphic (EPSG 9815).
|
|
class Hotine_oblique_mercator_variant_b_srs : public Projected_srs {
|
|
private:
|
|
/// Latitude of the point at which the azimuth of the central line
|
|
/// is defined (EPSG 8811).
|
|
double m_latitude_of_center;
|
|
/// Longitude of the point at which the azimuth of the central line
|
|
/// is defined (EPSG 8812).
|
|
double m_longitude_of_center;
|
|
/// Direction east of north of the great circle which is the central
|
|
/// line (EPSG 8813).
|
|
double m_azimuth;
|
|
/// Angle at the natural origin through which the natural SRS is
|
|
/// rotated to make the projection north axis parallel with true
|
|
/// north (EPSG 8814).
|
|
double m_rectified_grid_angle;
|
|
/// Multiplier for reducing a distance obtained from a map to the
|
|
/// actual distance on the datum of the map (EPSG 8815).
|
|
double m_scale_factor;
|
|
/// Easting value assigned to the projection center (EPSG 8816).
|
|
double m_false_easting;
|
|
/// Northing value assigned to the projection center (EPSG 8817).
|
|
double m_false_northing;
|
|
|
|
public:
|
|
Hotine_oblique_mercator_variant_b_srs()
|
|
: m_latitude_of_center(NAN),
|
|
m_longitude_of_center(NAN),
|
|
m_azimuth(NAN),
|
|
m_rectified_grid_angle(NAN),
|
|
m_scale_factor(NAN),
|
|
m_false_easting(NAN),
|
|
m_false_northing(NAN) {}
|
|
|
|
virtual Spatial_reference_system *clone() override {
|
|
return new Hotine_oblique_mercator_variant_b_srs(*this);
|
|
}
|
|
|
|
virtual bool init(srid_t srid, wkt_parser::Projected_cs *p) override;
|
|
|
|
virtual Projection_type projection_type() const override {
|
|
return Projection_type::HOTINE_OBLIQUE_MERCATOR_VARIANT_B;
|
|
}
|
|
|
|
bool can_be_modified_to(const Spatial_reference_system &) const override;
|
|
};
|
|
|
|
/// A Tunisia Mining Grid projection (EPSG 9816).
|
|
class Tunisia_mining_grid_srs : public Projected_srs {
|
|
private:
|
|
/// Latitude of the false origin, at which the false easting and
|
|
/// northing is defined (EPSG 8821).
|
|
double m_latitude_of_origin;
|
|
/// Longitude (central meridian) of the false origin, at which the
|
|
/// false easting and northing is defined (EPSG 8822).
|
|
double m_longitude_of_origin;
|
|
/// Easting value assigned to the false origin (EPSG 8826).
|
|
double m_false_easting;
|
|
/// Northing value assigned to the false origin (EPSG 8827).
|
|
double m_false_northing;
|
|
|
|
public:
|
|
Tunisia_mining_grid_srs()
|
|
: m_latitude_of_origin(NAN),
|
|
m_longitude_of_origin(NAN),
|
|
m_false_easting(NAN),
|
|
m_false_northing(NAN) {}
|
|
|
|
virtual Spatial_reference_system *clone() override {
|
|
return new Tunisia_mining_grid_srs(*this);
|
|
}
|
|
|
|
virtual bool init(srid_t srid, wkt_parser::Projected_cs *p) override;
|
|
|
|
virtual Projection_type projection_type() const override {
|
|
return Projection_type::TUNISIA_MINING_GRID;
|
|
}
|
|
|
|
bool can_be_modified_to(const Spatial_reference_system &) const override;
|
|
};
|
|
|
|
/// A Lambert Conic Near-Conformal projection (EPSG 9817).
|
|
class Lambert_conic_near_conformal_srs : public Projected_srs {
|
|
private:
|
|
/// Latitude chosen as origin of y-coordinates (EPSG 8801).
|
|
double m_latitude_of_origin;
|
|
/// Longitude chosen as origin of x-coordinates (central meridian)
|
|
/// (EPSG 8802).
|
|
double m_longitude_of_origin;
|
|
/// Multiplier for reducing a distance obtained from a map to the
|
|
/// actual distance on the datum of the map (EPSG 8805).
|
|
double m_scale_factor;
|
|
/// Value added to x-coordinates (EPSG 8806).
|
|
double m_false_easting;
|
|
/// Value added to y-coordinates (EPSG 8807).
|
|
double m_false_northing;
|
|
|
|
public:
|
|
Lambert_conic_near_conformal_srs()
|
|
: m_latitude_of_origin(NAN),
|
|
m_longitude_of_origin(NAN),
|
|
m_scale_factor(NAN),
|
|
m_false_easting(NAN),
|
|
m_false_northing(NAN) {}
|
|
|
|
virtual Spatial_reference_system *clone() override {
|
|
return new Lambert_conic_near_conformal_srs(*this);
|
|
}
|
|
|
|
virtual bool init(srid_t srid, wkt_parser::Projected_cs *p) override;
|
|
|
|
virtual Projection_type projection_type() const override {
|
|
return Projection_type::LAMBERT_CONIC_NEAR_CONFORMAL;
|
|
}
|
|
|
|
bool can_be_modified_to(const Spatial_reference_system &) const override;
|
|
};
|
|
|
|
/// An American Polyconic projection, alias Polyconic (EPSG 9818).
|
|
class American_polyconic_srs : public Projected_srs {
|
|
private:
|
|
/// Latitude chosen as origin of y-coordinates (EPSG 8801).
|
|
double m_latitude_of_origin;
|
|
/// Longitude chosen as origin of x-coordinates (central meridian)
|
|
/// (EPSG 8802).
|
|
double m_longitude_of_origin;
|
|
/// Value added to x-coordinates (EPSG 8806).
|
|
double m_false_easting;
|
|
/// Value added to y-coordinates (EPSG 8807).
|
|
double m_false_northing;
|
|
|
|
public:
|
|
American_polyconic_srs()
|
|
: m_latitude_of_origin(NAN),
|
|
m_longitude_of_origin(NAN),
|
|
m_false_easting(NAN),
|
|
m_false_northing(NAN) {}
|
|
|
|
virtual Spatial_reference_system *clone() override {
|
|
return new American_polyconic_srs(*this);
|
|
}
|
|
|
|
virtual bool init(srid_t srid, wkt_parser::Projected_cs *p) override;
|
|
|
|
virtual Projection_type projection_type() const override {
|
|
return Projection_type::AMERICAN_POLYCONIC;
|
|
}
|
|
|
|
bool can_be_modified_to(const Spatial_reference_system &) const override;
|
|
};
|
|
|
|
/// A Krovak projection (EPSG 9819).
|
|
class Krovak_srs : public Projected_srs {
|
|
private:
|
|
/// Latitude of the point at which the azimuth of the central line
|
|
/// is defined (EPSG 8811).
|
|
double m_latitude_of_center;
|
|
/// The meridian along which the northing axis increments and also
|
|
/// across which parallels of latitude increment towards the north
|
|
/// pole (EPSG 8833).
|
|
double m_longitude_of_center;
|
|
/// The rotation applied to spherical coordinates, measured on the
|
|
/// conformal sphere in the plane of the meridian of origin (EPSG
|
|
/// 1036).
|
|
double m_azimuth;
|
|
/// Latitude of the parallel on which the projection is based. This
|
|
/// latitude is not geographic, but is defined on the conformal
|
|
/// sphere AFTER its rotation to obtain the oblique aspect of the
|
|
/// projection (EPSG 8818).
|
|
double m_pseudo_standard_parallel_1;
|
|
/// The factor by which the map grid is reduced or enlarged at the
|
|
/// pseudo-standard parallel (EPSG 8819).
|
|
double m_scale_factor;
|
|
/// Value added to x-coordinates (EPSG 8806).
|
|
double m_false_easting;
|
|
/// Value added to y-coordinates (EPSG 8807).
|
|
double m_false_northing;
|
|
|
|
public:
|
|
Krovak_srs()
|
|
: m_latitude_of_center(NAN),
|
|
m_longitude_of_center(NAN),
|
|
m_azimuth(NAN),
|
|
m_pseudo_standard_parallel_1(NAN),
|
|
m_scale_factor(NAN),
|
|
m_false_easting(NAN),
|
|
m_false_northing(NAN) {}
|
|
|
|
virtual Spatial_reference_system *clone() override {
|
|
return new Krovak_srs(*this);
|
|
}
|
|
|
|
virtual bool init(srid_t srid, wkt_parser::Projected_cs *p) override;
|
|
|
|
virtual Projection_type projection_type() const override {
|
|
return Projection_type::KROVAK;
|
|
}
|
|
|
|
bool can_be_modified_to(const Spatial_reference_system &) const override;
|
|
};
|
|
|
|
/// A Lambert Azimuthal Equal Area projection, alias Lambert Equal
|
|
/// Area or LAEA (EPSG 9820).
|
|
class Lambert_azimuthal_equal_area_srs : public Projected_srs {
|
|
private:
|
|
/// Latitude chosen as origin of y-coordinates (EPSG 8801).
|
|
double m_latitude_of_origin;
|
|
/// Longitude chosen as origin of x-coordinates (central meridian)
|
|
/// (EPSG 8802).
|
|
double m_longitude_of_origin;
|
|
/// Value added to x-coordinates (EPSG 8806).
|
|
double m_false_easting;
|
|
/// Value added to y-coordinates (EPSG 8807).
|
|
double m_false_northing;
|
|
|
|
public:
|
|
Lambert_azimuthal_equal_area_srs()
|
|
: m_latitude_of_origin(NAN),
|
|
m_longitude_of_origin(NAN),
|
|
m_false_easting(NAN),
|
|
m_false_northing(NAN) {}
|
|
|
|
virtual Spatial_reference_system *clone() override {
|
|
return new Lambert_azimuthal_equal_area_srs(*this);
|
|
}
|
|
|
|
virtual bool init(srid_t srid, wkt_parser::Projected_cs *p) override;
|
|
|
|
virtual Projection_type projection_type() const override {
|
|
return Projection_type::LAMBERT_AZIMUTHAL_EQUAL_AREA;
|
|
}
|
|
|
|
bool can_be_modified_to(const Spatial_reference_system &) const override;
|
|
};
|
|
|
|
/// An Albers Equal Area projection, alias Albers (EPSG 9822).
|
|
class Albers_equal_area_srs : public Projected_srs {
|
|
private:
|
|
/// Latitude of the false origin, at which the false easting and
|
|
/// northing is defined (EPSG 8821).
|
|
double m_latitude_of_origin;
|
|
/// Longitude (central meridian) of the false origin, at which the
|
|
/// false easting and northing is defined (EPSG 8822).
|
|
double m_longitude_of_origin;
|
|
/// Latitude of the first parallel of intersection between the cone
|
|
/// and the ellipsoid (EPSG 8823).
|
|
double m_standard_parallel_1;
|
|
/// Latitude of the second parallel of intersection between the cone
|
|
/// and the ellipsoid (EPSG 8824).
|
|
double m_standard_parallel_2;
|
|
/// Easting value assigned to the false origin (EPSG 8826).
|
|
double m_false_easting;
|
|
/// Northing value assigned to the false origin (EPSG 8827).
|
|
double m_false_northing;
|
|
|
|
public:
|
|
Albers_equal_area_srs()
|
|
: m_latitude_of_origin(NAN),
|
|
m_longitude_of_origin(NAN),
|
|
m_standard_parallel_1(NAN),
|
|
m_standard_parallel_2(NAN),
|
|
m_false_easting(NAN),
|
|
m_false_northing(NAN) {}
|
|
|
|
virtual Spatial_reference_system *clone() override {
|
|
return new Albers_equal_area_srs(*this);
|
|
}
|
|
|
|
virtual bool init(srid_t srid, wkt_parser::Projected_cs *p) override;
|
|
|
|
virtual Projection_type projection_type() const override {
|
|
return Projection_type::ALBERS_EQUAL_AREA;
|
|
}
|
|
|
|
bool can_be_modified_to(const Spatial_reference_system &) const override;
|
|
};
|
|
|
|
/// A Transverse Mercator Zoned Grid System projection (EPSG 9824).
|
|
class Transverse_mercator_zoned_grid_system_srs : public Projected_srs {
|
|
private:
|
|
/// Latitude chosen as origin of y-coordinates (EPSG 8801).
|
|
double m_latitude_of_origin;
|
|
/// The longitude of the western limit of the first zone (EPSG
|
|
/// 8830).
|
|
double m_initial_longitude;
|
|
/// The longitude width of a zone (EPSG 8831).
|
|
double m_zone_width;
|
|
/// Multiplier for reducing a distance obtained from a map to the
|
|
/// actual distance on the datum of the map (EPSG 8805).
|
|
double m_scale_factor;
|
|
/// Value added to x-coordinates (EPSG 8806).
|
|
double m_false_easting;
|
|
/// Value added to y-coordinates (EPSG 8807).
|
|
double m_false_northing;
|
|
|
|
public:
|
|
Transverse_mercator_zoned_grid_system_srs()
|
|
: m_latitude_of_origin(NAN),
|
|
m_initial_longitude(NAN),
|
|
m_zone_width(NAN),
|
|
m_scale_factor(NAN),
|
|
m_false_easting(NAN),
|
|
m_false_northing(NAN) {}
|
|
|
|
virtual Spatial_reference_system *clone() override {
|
|
return new Transverse_mercator_zoned_grid_system_srs(*this);
|
|
}
|
|
|
|
virtual bool init(srid_t srid, wkt_parser::Projected_cs *p) override;
|
|
|
|
virtual Projection_type projection_type() const override {
|
|
return Projection_type::TRANSVERSE_MERCATOR_ZONED_GRID_SYSTEM;
|
|
}
|
|
|
|
bool can_be_modified_to(const Spatial_reference_system &) const override;
|
|
};
|
|
|
|
/// A Lambert Conic Conformal (West Orientated) projection (EPSG 9826).
|
|
class Lambert_conic_conformal_west_orientated_srs : public Projected_srs {
|
|
private:
|
|
/// Latitude chosen as origin of y-coordinates (EPSG 8801).
|
|
double m_latitude_of_origin;
|
|
/// Longitude chosen as origin of x-coordinates (central meridian)
|
|
/// (EPSG 8802).
|
|
double m_longitude_of_origin;
|
|
/// Multiplier for reducing a distance obtained from a map to the
|
|
/// actual distance on the datum of the map (EPSG 8805).
|
|
double m_scale_factor;
|
|
/// Value added to x-coordinates (EPSG 8806).
|
|
double m_false_easting;
|
|
/// Value added to y-coordinates (EPSG 8807).
|
|
double m_false_northing;
|
|
|
|
public:
|
|
Lambert_conic_conformal_west_orientated_srs()
|
|
: m_latitude_of_origin(NAN),
|
|
m_longitude_of_origin(NAN),
|
|
m_scale_factor(NAN),
|
|
m_false_easting(NAN),
|
|
m_false_northing(NAN) {}
|
|
|
|
virtual Spatial_reference_system *clone() override {
|
|
return new Lambert_conic_conformal_west_orientated_srs(*this);
|
|
}
|
|
|
|
virtual bool init(srid_t srid, wkt_parser::Projected_cs *p) override;
|
|
|
|
virtual Projection_type projection_type() const override {
|
|
return Projection_type::LAMBERT_CONIC_CONFORMAL_WEST_ORIENTATED;
|
|
}
|
|
|
|
bool can_be_modified_to(const Spatial_reference_system &) const override;
|
|
};
|
|
|
|
/// A Bonne (South Orientated) projection (EPSG 9828).
|
|
class Bonne_south_orientated_srs : public Projected_srs {
|
|
private:
|
|
/// Latitude chosen as origin of y-coordinates (EPSG 8801).
|
|
double m_latitude_of_origin;
|
|
/// Longitude chosen as origin of x-coordinates (central meridian)
|
|
/// (EPSG 8802).
|
|
double m_longitude_of_origin;
|
|
/// Value added to x-coordinates (EPSG 8806).
|
|
double m_false_easting;
|
|
/// Value added to y-coordinates (EPSG 8807).
|
|
double m_false_northing;
|
|
|
|
public:
|
|
Bonne_south_orientated_srs()
|
|
: m_latitude_of_origin(NAN),
|
|
m_longitude_of_origin(NAN),
|
|
m_false_easting(NAN),
|
|
m_false_northing(NAN) {}
|
|
|
|
virtual Spatial_reference_system *clone() override {
|
|
return new Bonne_south_orientated_srs(*this);
|
|
}
|
|
|
|
virtual bool init(srid_t srid, wkt_parser::Projected_cs *p) override;
|
|
|
|
virtual Projection_type projection_type() const override {
|
|
return Projection_type::BONNE_SOUTH_ORIENTATED;
|
|
}
|
|
|
|
bool can_be_modified_to(const Spatial_reference_system &) const override;
|
|
};
|
|
|
|
/// A Polar Stereographic (variant B) projection (EPSG 9829).
|
|
class Polar_stereographic_variant_b_srs : public Projected_srs {
|
|
private:
|
|
/// The parallel on which the scale factor is defined to be unity
|
|
/// (EPSG 8832).
|
|
double m_standard_parallel;
|
|
/// The meridian along which the northing axis increments and also
|
|
/// across which parallels of latitude increment towards the north
|
|
/// pole (EPSG 8833).
|
|
double m_longitude_of_origin;
|
|
/// Value added to x-coordinates (EPSG 8806).
|
|
double m_false_easting;
|
|
/// Value added to y-coordinates (EPSG 8807).
|
|
double m_false_northing;
|
|
|
|
public:
|
|
Polar_stereographic_variant_b_srs()
|
|
: m_standard_parallel(NAN),
|
|
m_longitude_of_origin(NAN),
|
|
m_false_easting(NAN),
|
|
m_false_northing(NAN) {}
|
|
|
|
virtual Spatial_reference_system *clone() override {
|
|
return new Polar_stereographic_variant_b_srs(*this);
|
|
}
|
|
|
|
virtual bool init(srid_t srid, wkt_parser::Projected_cs *p) override;
|
|
|
|
virtual Projection_type projection_type() const override {
|
|
return Projection_type::POLAR_STEREOGRAPHIC_VARIANT_B;
|
|
}
|
|
|
|
bool can_be_modified_to(const Spatial_reference_system &) const override;
|
|
};
|
|
|
|
/// A Polar Stereographic (variant C) projection (EPSG 9830).
|
|
class Polar_stereographic_variant_c_srs : public Projected_srs {
|
|
private:
|
|
/// The parallel on which the scale factor is defined to be unity
|
|
/// (EPSG 8832).
|
|
double m_standard_parallel;
|
|
/// The meridian along which the northing axis increments and also
|
|
/// across which parallels of latitude increment towards the north
|
|
/// pole (EPSG 8833).
|
|
double m_longitude_of_origin;
|
|
/// Easting value assigned to the false origin (EPSG 8826).
|
|
double m_false_easting;
|
|
/// Northing value assigned to the false origin (EPSG 8827).
|
|
double m_false_northing;
|
|
|
|
public:
|
|
Polar_stereographic_variant_c_srs()
|
|
: m_standard_parallel(NAN),
|
|
m_longitude_of_origin(NAN),
|
|
m_false_easting(NAN),
|
|
m_false_northing(NAN) {}
|
|
|
|
virtual Spatial_reference_system *clone() override {
|
|
return new Polar_stereographic_variant_c_srs(*this);
|
|
}
|
|
|
|
virtual bool init(srid_t srid, wkt_parser::Projected_cs *p) override;
|
|
|
|
virtual Projection_type projection_type() const override {
|
|
return Projection_type::POLAR_STEREOGRAPHIC_VARIANT_C;
|
|
}
|
|
|
|
bool can_be_modified_to(const Spatial_reference_system &) const override;
|
|
};
|
|
|
|
/// A Guam Projection projection (EPSG 9831).
|
|
class Guam_projection_srs : public Projected_srs {
|
|
private:
|
|
/// Latitude chosen as origin of y-coordinates (EPSG 8801).
|
|
double m_latitude_of_origin;
|
|
/// Longitude chosen as origin of x-coordinates (central meridian)
|
|
/// (EPSG 8802).
|
|
double m_longitude_of_origin;
|
|
/// Value added to x-coordinates (EPSG 8806).
|
|
double m_false_easting;
|
|
/// Value added to y-coordinates (EPSG 8807).
|
|
double m_false_northing;
|
|
|
|
public:
|
|
Guam_projection_srs()
|
|
: m_latitude_of_origin(NAN),
|
|
m_longitude_of_origin(NAN),
|
|
m_false_easting(NAN),
|
|
m_false_northing(NAN) {}
|
|
|
|
virtual Spatial_reference_system *clone() override {
|
|
return new Guam_projection_srs(*this);
|
|
}
|
|
|
|
virtual bool init(srid_t srid, wkt_parser::Projected_cs *p) override;
|
|
|
|
virtual Projection_type projection_type() const override {
|
|
return Projection_type::GUAM_PROJECTION;
|
|
}
|
|
|
|
bool can_be_modified_to(const Spatial_reference_system &) const override;
|
|
};
|
|
|
|
/// A Modified Azimuthal Equidistant projection (EPSG 9832).
|
|
class Modified_azimuthal_equidistant_srs : public Projected_srs {
|
|
private:
|
|
/// Latitude chosen as origin of y-coordinates (EPSG 8801).
|
|
double m_latitude_of_origin;
|
|
/// Longitude chosen as origin of x-coordinates (central meridian)
|
|
/// (EPSG 8802).
|
|
double m_longitude_of_origin;
|
|
/// Value added to x-coordinates (EPSG 8806).
|
|
double m_false_easting;
|
|
/// Value added to y-coordinates (EPSG 8807).
|
|
double m_false_northing;
|
|
|
|
public:
|
|
Modified_azimuthal_equidistant_srs()
|
|
: m_latitude_of_origin(NAN),
|
|
m_longitude_of_origin(NAN),
|
|
m_false_easting(NAN),
|
|
m_false_northing(NAN) {}
|
|
|
|
virtual Spatial_reference_system *clone() override {
|
|
return new Modified_azimuthal_equidistant_srs(*this);
|
|
}
|
|
|
|
virtual bool init(srid_t srid, wkt_parser::Projected_cs *p) override;
|
|
|
|
virtual Projection_type projection_type() const override {
|
|
return Projection_type::MODIFIED_AZIMUTHAL_EQUIDISTANT;
|
|
}
|
|
|
|
bool can_be_modified_to(const Spatial_reference_system &) const override;
|
|
};
|
|
|
|
/// A Hyperbolic Cassini-Soldner projection (EPSG 9833).
|
|
class Hyperbolic_cassini_soldner_srs : public Projected_srs {
|
|
private:
|
|
/// Latitude chosen as origin of y-coordinates (EPSG 8801).
|
|
double m_latitude_of_origin;
|
|
/// Longitude chosen as origin of x-coordinates (central meridian)
|
|
/// (EPSG 8802).
|
|
double m_longitude_of_origin;
|
|
/// Value added to x-coordinates (EPSG 8806).
|
|
double m_false_easting;
|
|
/// Value added to y-coordinates (EPSG 8807).
|
|
double m_false_northing;
|
|
|
|
public:
|
|
Hyperbolic_cassini_soldner_srs()
|
|
: m_latitude_of_origin(NAN),
|
|
m_longitude_of_origin(NAN),
|
|
m_false_easting(NAN),
|
|
m_false_northing(NAN) {}
|
|
|
|
virtual Spatial_reference_system *clone() override {
|
|
return new Hyperbolic_cassini_soldner_srs(*this);
|
|
}
|
|
|
|
virtual bool init(srid_t srid, wkt_parser::Projected_cs *p) override;
|
|
|
|
virtual Projection_type projection_type() const override {
|
|
return Projection_type::HYPERBOLIC_CASSINI_SOLDNER;
|
|
}
|
|
|
|
bool can_be_modified_to(const Spatial_reference_system &) const override;
|
|
};
|
|
|
|
/// A Lambert Cylindrical Equal Area (Spherical) projection (EPSG
|
|
/// 9834).
|
|
class Lambert_cylindrical_equal_area_spherical_srs : public Projected_srs {
|
|
private:
|
|
/// Latitude of the first parallel of intersection between the cone
|
|
/// and the ellipsoid (EPSG 8823).
|
|
double m_standard_parallel_1;
|
|
/// Longitude chosen as origin of x-coordinates (central meridian)
|
|
/// (EPSG 8802).
|
|
double m_longitude_of_origin;
|
|
/// Value added to x-coordinates (EPSG 8806).
|
|
double m_false_easting;
|
|
/// Value added to y-coordinates (EPSG 8807).
|
|
double m_false_northing;
|
|
|
|
public:
|
|
Lambert_cylindrical_equal_area_spherical_srs()
|
|
: m_standard_parallel_1(NAN),
|
|
m_longitude_of_origin(NAN),
|
|
m_false_easting(NAN),
|
|
m_false_northing(NAN) {}
|
|
|
|
virtual Spatial_reference_system *clone() override {
|
|
return new Lambert_cylindrical_equal_area_spherical_srs(*this);
|
|
}
|
|
|
|
virtual bool init(srid_t srid, wkt_parser::Projected_cs *p) override;
|
|
|
|
virtual Projection_type projection_type() const override {
|
|
return Projection_type::LAMBERT_CYLINDRICAL_EQUAL_AREA_SPHERICAL;
|
|
}
|
|
|
|
bool can_be_modified_to(const Spatial_reference_system &) const override;
|
|
};
|
|
|
|
/// A Lambert Cylindrical Equal Area projection (EPSG 9835).
|
|
class Lambert_cylindrical_equal_area_srs : public Projected_srs {
|
|
private:
|
|
/// Latitude of the first parallel of intersection between the cone
|
|
/// and the ellipsoid (EPSG 8823).
|
|
double m_standard_parallel_1;
|
|
/// Longitude chosen as origin of x-coordinates (central meridian)
|
|
/// (EPSG 8802).
|
|
double m_longitude_of_origin;
|
|
/// Value added to x-coordinates (EPSG 8806).
|
|
double m_false_easting;
|
|
/// Value added to y-coordinates (EPSG 8807).
|
|
double m_false_northing;
|
|
|
|
public:
|
|
Lambert_cylindrical_equal_area_srs()
|
|
: m_standard_parallel_1(NAN),
|
|
m_longitude_of_origin(NAN),
|
|
m_false_easting(NAN),
|
|
m_false_northing(NAN) {}
|
|
|
|
virtual Spatial_reference_system *clone() override {
|
|
return new Lambert_cylindrical_equal_area_srs(*this);
|
|
}
|
|
|
|
virtual bool init(srid_t srid, wkt_parser::Projected_cs *p) override;
|
|
|
|
virtual Projection_type projection_type() const override {
|
|
return Projection_type::LAMBERT_CYLINDRICAL_EQUAL_AREA;
|
|
}
|
|
|
|
bool can_be_modified_to(const Spatial_reference_system &) const override;
|
|
};
|
|
|
|
/**
|
|
Parse an SRS definition WKT string.
|
|
|
|
The parser understands WKT as defined by the \<horz cs\>
|
|
specification in OGC 01-009.
|
|
|
|
If the string is successfully parsed, a new SRS object will be
|
|
allocated on the heap. The caller is responsible for deleting it.
|
|
|
|
If an error occurs, no object is allocated.
|
|
|
|
@param[in] srid Spatial reference system ID to use when reporting errors
|
|
@param[in] begin Start of WKT string in UTF-8
|
|
@param[in] end End of WKT string (one past the last byte)
|
|
@param[out] result Spatial reference system
|
|
|
|
@retval true An error has occurred
|
|
@retval false Success
|
|
*/
|
|
bool parse_wkt(srid_t srid, const char *begin, const char *end,
|
|
Spatial_reference_system **result);
|
|
|
|
} // namespace srs
|
|
} // namespace gis
|
|
|
|
#endif // SQL_GIS_SRS_SRS_H_INCLUDED
|
|
|