123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144 |
- "use strict";
- var __importDefault = (this && this.__importDefault) || function (mod) {
- return (mod && mod.__esModule) ? mod : { "default": mod };
- };
- Object.defineProperty(exports, "__esModule", { value: true });
- var meta_1 = require("@turf/meta");
- var helpers_1 = require("@turf/helpers");
- var clone_1 = __importDefault(require("@turf/clone"));
- /**
- * Converts a WGS84 GeoJSON object into Mercator (EPSG:900913) projection
- *
- * @name toMercator
- * @param {GeoJSON|Position} geojson WGS84 GeoJSON object
- * @param {Object} [options] Optional parameters
- * @param {boolean} [options.mutate=false] allows GeoJSON input to be mutated (significant performance increase if true)
- * @returns {GeoJSON} Projected GeoJSON
- * @example
- * var pt = turf.point([-71,41]);
- * var converted = turf.toMercator(pt);
- *
- * //addToMap
- * var addToMap = [pt, converted];
- */
- function toMercator(geojson, options) {
- if (options === void 0) { options = {}; }
- return convert(geojson, "mercator", options);
- }
- exports.toMercator = toMercator;
- /**
- * Converts a Mercator (EPSG:900913) GeoJSON object into WGS84 projection
- *
- * @name toWgs84
- * @param {GeoJSON|Position} geojson Mercator GeoJSON object
- * @param {Object} [options] Optional parameters
- * @param {boolean} [options.mutate=false] allows GeoJSON input to be mutated (significant performance increase if true)
- * @returns {GeoJSON} Projected GeoJSON
- * @example
- * var pt = turf.point([-7903683.846322424, 5012341.663847514]);
- * var converted = turf.toWgs84(pt);
- *
- * //addToMap
- * var addToMap = [pt, converted];
- */
- function toWgs84(geojson, options) {
- if (options === void 0) { options = {}; }
- return convert(geojson, "wgs84", options);
- }
- exports.toWgs84 = toWgs84;
- /**
- * Converts a GeoJSON coordinates to the defined `projection`
- *
- * @private
- * @param {GeoJSON} geojson GeoJSON Feature or Geometry
- * @param {string} projection defines the projection system to convert the coordinates to
- * @param {Object} [options] Optional parameters
- * @param {boolean} [options.mutate=false] allows GeoJSON input to be mutated (significant performance increase if true)
- * @returns {GeoJSON} Converted GeoJSON
- */
- function convert(geojson, projection, options) {
- if (options === void 0) { options = {}; }
- // Optional parameters
- options = options || {};
- var mutate = options.mutate;
- // Validation
- if (!geojson)
- throw new Error("geojson is required");
- // Handle Position
- if (Array.isArray(geojson) && helpers_1.isNumber(geojson[0]))
- geojson =
- projection === "mercator"
- ? convertToMercator(geojson)
- : convertToWgs84(geojson);
- // Handle GeoJSON
- else {
- // Handle possible data mutation
- if (mutate !== true)
- geojson = clone_1.default(geojson);
- meta_1.coordEach(geojson, function (coord) {
- var newCoord = projection === "mercator"
- ? convertToMercator(coord)
- : convertToWgs84(coord);
- coord[0] = newCoord[0];
- coord[1] = newCoord[1];
- });
- }
- return geojson;
- }
- /**
- * Convert lon/lat values to 900913 x/y.
- * (from https://github.com/mapbox/sphericalmercator)
- *
- * @private
- * @param {Array<number>} lonLat WGS84 point
- * @returns {Array<number>} Mercator [x, y] point
- */
- function convertToMercator(lonLat) {
- var D2R = Math.PI / 180,
- // 900913 properties
- A = 6378137.0, MAXEXTENT = 20037508.342789244;
- // compensate longitudes passing the 180th meridian
- // from https://github.com/proj4js/proj4js/blob/master/lib/common/adjust_lon.js
- var adjusted = Math.abs(lonLat[0]) <= 180 ? lonLat[0] : lonLat[0] - sign(lonLat[0]) * 360;
- var xy = [
- A * adjusted * D2R,
- A * Math.log(Math.tan(Math.PI * 0.25 + 0.5 * lonLat[1] * D2R)),
- ];
- // if xy value is beyond maxextent (e.g. poles), return maxextent
- if (xy[0] > MAXEXTENT)
- xy[0] = MAXEXTENT;
- if (xy[0] < -MAXEXTENT)
- xy[0] = -MAXEXTENT;
- if (xy[1] > MAXEXTENT)
- xy[1] = MAXEXTENT;
- if (xy[1] < -MAXEXTENT)
- xy[1] = -MAXEXTENT;
- return xy;
- }
- /**
- * Convert 900913 x/y values to lon/lat.
- * (from https://github.com/mapbox/sphericalmercator)
- *
- * @private
- * @param {Array<number>} xy Mercator [x, y] point
- * @returns {Array<number>} WGS84 [lon, lat] point
- */
- function convertToWgs84(xy) {
- // 900913 properties.
- var R2D = 180 / Math.PI;
- var A = 6378137.0;
- return [
- (xy[0] * R2D) / A,
- (Math.PI * 0.5 - 2.0 * Math.atan(Math.exp(-xy[1] / A))) * R2D,
- ];
- }
- /**
- * Returns the sign of the input, or zero
- *
- * @private
- * @param {number} x input
- * @returns {number} -1|0|1 output
- */
- function sign(x) {
- return x < 0 ? -1 : x > 0 ? 1 : 0;
- }
|