| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 | import Cartesian3 from "./Cartesian3.js";import Cartographic from "./Cartographic.js";import defaultValue from "./defaultValue.js";import defined from "./defined.js";import DeveloperError from "./DeveloperError.js";import Ellipsoid from "./Ellipsoid.js";/** * A simple map projection where longitude and latitude are linearly mapped to X and Y by multiplying * them by the {@link Ellipsoid#maximumRadius}.  This projection * is commonly known as geographic, equirectangular, equidistant cylindrical, or plate carrée.  It * is also known as EPSG:4326. * * @alias GeographicProjection * @constructor * * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid. * * @see WebMercatorProjection */function GeographicProjection(ellipsoid) {  this._ellipsoid = defaultValue(ellipsoid, Ellipsoid.WGS84);  this._semimajorAxis = this._ellipsoid.maximumRadius;  this._oneOverSemimajorAxis = 1.0 / this._semimajorAxis;}Object.defineProperties(GeographicProjection.prototype, {  /**   * Gets the {@link Ellipsoid}.   *   * @memberof GeographicProjection.prototype   *   * @type {Ellipsoid}   * @readonly   */  ellipsoid: {    get: function () {      return this._ellipsoid;    },  },});/** * Projects a set of {@link Cartographic} coordinates, in radians, to map coordinates, in meters. * X and Y are the longitude and latitude, respectively, multiplied by the maximum radius of the * ellipsoid.  Z is the unmodified height. * * @param {Cartographic} cartographic The coordinates to project. * @param {Cartesian3} [result] An instance into which to copy the result.  If this parameter is *        undefined, a new instance is created and returned. * @returns {Cartesian3} The projected coordinates.  If the result parameter is not undefined, the *          coordinates are copied there and that instance is returned.  Otherwise, a new instance is *          created and returned. */GeographicProjection.prototype.project = function (cartographic, result) {  // Actually this is the special case of equidistant cylindrical called the plate carree  const semimajorAxis = this._semimajorAxis;  const x = cartographic.longitude * semimajorAxis;  const y = cartographic.latitude * semimajorAxis;  const z = cartographic.height;  if (!defined(result)) {    return new Cartesian3(x, y, z);  }  result.x = x;  result.y = y;  result.z = z;  return result;};/** * Unprojects a set of projected {@link Cartesian3} coordinates, in meters, to {@link Cartographic} * coordinates, in radians.  Longitude and Latitude are the X and Y coordinates, respectively, * divided by the maximum radius of the ellipsoid.  Height is the unmodified Z coordinate. * * @param {Cartesian3} cartesian The Cartesian position to unproject with height (z) in meters. * @param {Cartographic} [result] An instance into which to copy the result.  If this parameter is *        undefined, a new instance is created and returned. * @returns {Cartographic} The unprojected coordinates.  If the result parameter is not undefined, the *          coordinates are copied there and that instance is returned.  Otherwise, a new instance is *          created and returned. */GeographicProjection.prototype.unproject = function (cartesian, result) {  //>>includeStart('debug', pragmas.debug);  if (!defined(cartesian)) {    throw new DeveloperError("cartesian is required");  }  //>>includeEnd('debug');  const oneOverEarthSemimajorAxis = this._oneOverSemimajorAxis;  const longitude = cartesian.x * oneOverEarthSemimajorAxis;  const latitude = cartesian.y * oneOverEarthSemimajorAxis;  const height = cartesian.z;  if (!defined(result)) {    return new Cartographic(longitude, latitude, height);  }  result.longitude = longitude;  result.latitude = latitude;  result.height = height;  return result;};export default GeographicProjection;
 |