giser-convert-crs 1.0.0 → 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +195 -231
- package/dist/giserConvertCrs.esm.js +857 -459
- package/dist/giserConvertCrs.esm.js.map +1 -0
- package/dist/giserConvertCrs.min.js +2 -0
- package/dist/giserConvertCrs.min.js.map +1 -0
- package/dist/giserConvertCrs.umd.js +857 -459
- package/dist/giserConvertCrs.umd.js.map +1 -0
- package/dist/index.d.ts +184 -117
- package/package.json +21 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"giserConvertCrs.esm.js","sources":["../src/gps.js","../src/projection.js","../src/wkt.js","../src/giserConvertCrs.js"],"sourcesContent":["const PI = Math.PI;\nconst X_PI = PI * 3000.0 / 180.0;\nconst SEMI_MAJOR_AXIS = 6378245.0;\nconst ECCENTRICITY_SQUARED = 0.00669342162296594323;\nconst EPSG3857_RADIUS = 6378137.0;\nconst EPSG3857_MAX_LAT = 85.0511287798066;\n\nconst ERR_LONLAT = 'Invalid coordinate: longitude and latitude must be finite numbers.';\nconst ERR_PLANE = 'Invalid coordinate: x and y must be finite numbers.';\n\n/**\n * Hot-path scratch buffers.\n *\n * Every write below is consumed within the same synchronous call frame\n * (never across an await / callback boundary), so sharing these buffers is\n * safe and removes the per-point allocations that dominated batch runs.\n */\nconst _delta = [0, 0];\nconst _forward = [0, 0];\nconst _back = [0, 0];\n\nfunction assertLonLat(lon, lat) {\n if (!Number.isFinite(lon) || !Number.isFinite(lat)) {\n throw new Error(ERR_LONLAT);\n }\n}\n\nfunction assertPlane(x, y) {\n if (!Number.isFinite(x) || !Number.isFinite(y)) {\n throw new Error(ERR_PLANE);\n }\n}\n\nfunction outOfChina(lat, lon) {\n if (Array.isArray(lat)) {\n return outOfChina(lat[1], lat[0]);\n }\n return lon < 72.004 || lon > 137.8347 || lat < 0.8293 || lat > 55.8271;\n}\n\nfunction transformLat(x, y) {\n let ret = -100.0 + 2.0 * x + 3.0 * y + 0.2 * y * y + 0.1 * x * y + 0.2 * Math.sqrt(Math.abs(x));\n ret += (20.0 * Math.sin(6.0 * x * PI) + 20.0 * Math.sin(2.0 * x * PI)) * 2.0 / 3.0;\n ret += (20.0 * Math.sin(y * PI) + 40.0 * Math.sin(y / 3.0 * PI)) * 2.0 / 3.0;\n ret += (160.0 * Math.sin(y / 12.0 * PI) + 320.0 * Math.sin(y * PI / 30.0)) * 2.0 / 3.0;\n return ret;\n}\n\nfunction transformLon(x, y) {\n let ret = 300.0 + x + 2.0 * y + 0.1 * x * x + 0.1 * x * y + 0.1 * Math.sqrt(Math.abs(x));\n ret += (20.0 * Math.sin(6.0 * x * PI) + 20.0 * Math.sin(2.0 * x * PI)) * 2.0 / 3.0;\n ret += (20.0 * Math.sin(x * PI) + 40.0 * Math.sin(x / 3.0 * PI)) * 2.0 / 3.0;\n ret += (150.0 * Math.sin(x / 12.0 * PI) + 300.0 * Math.sin(x / 30.0 * PI)) * 2.0 / 3.0;\n return ret;\n}\n\n/**\n * Writes the GCJ-02 offset for (lat, lon) into `out` as [dLat, dLon].\n * Allocation-free core of the public `delta()`.\n */\nfunction deltaInto(lat, lon, out) {\n const x = lon - 105.0;\n const y = lat - 35.0;\n let dLat = transformLat(x, y);\n let dLon = transformLon(x, y);\n const radLat = lat / 180.0 * PI;\n const sinLat = Math.sin(radLat);\n const magic = 1 - ECCENTRICITY_SQUARED * sinLat * sinLat;\n const sqrtMagic = Math.sqrt(magic);\n\n out[0] = (dLat * 180.0) / ((SEMI_MAJOR_AXIS * (1 - ECCENTRICITY_SQUARED)) / (magic * sqrtMagic) * PI);\n out[1] = (dLon * 180.0) / (SEMI_MAJOR_AXIS / sqrtMagic * Math.cos(radLat) * PI);\n}\n\nfunction delta(lat, lon) {\n deltaInto(lat, lon, _delta);\n return { lat: _delta[0], lon: _delta[1] };\n}\n\n/* ------------------------------------------------------------------ *\n * Allocation-free transform cores: (lon, lat, out) => out\n * ------------------------------------------------------------------ */\n\nfunction wgs84_gcj02Into(wgsLon, wgsLat, out) {\n if (outOfChina(wgsLat, wgsLon)) {\n out[0] = wgsLon;\n out[1] = wgsLat;\n return out;\n }\n deltaInto(wgsLat, wgsLon, _delta);\n out[0] = wgsLon + _delta[1];\n out[1] = wgsLat + _delta[0];\n return out;\n}\n\nfunction gcj02_wgs84Into(gcjLon, gcjLat, out) {\n if (outOfChina(gcjLat, gcjLon)) {\n out[0] = gcjLon;\n out[1] = gcjLat;\n return out;\n }\n deltaInto(gcjLat, gcjLon, _delta);\n out[0] = gcjLon - _delta[1];\n out[1] = gcjLat - _delta[0];\n return out;\n}\n\nfunction gcj02_wgs84_preciseInto(gcjLon, gcjLat, out) {\n if (outOfChina(gcjLat, gcjLon)) {\n out[0] = gcjLon;\n out[1] = gcjLat;\n return out;\n }\n\n let wgsLon = gcjLon;\n let wgsLat = gcjLat;\n\n for (let i = 0; i < 5; i++) {\n wgs84_gcj02Into(wgsLon, wgsLat, _forward);\n const dLon = _forward[0] - gcjLon;\n const dLat = _forward[1] - gcjLat;\n wgsLon -= dLon;\n wgsLat -= dLat;\n if (Math.abs(dLon) < 1e-11 && Math.abs(dLat) < 1e-11) break;\n }\n\n out[0] = wgsLon;\n out[1] = wgsLat;\n return out;\n}\n\nfunction gcj02_bd09llInto(gcjLon, gcjLat, out) {\n const z = Math.sqrt(gcjLon * gcjLon + gcjLat * gcjLat) + 0.00002 * Math.sin(gcjLat * X_PI);\n const theta = Math.atan2(gcjLat, gcjLon) + 0.000003 * Math.cos(gcjLon * X_PI);\n out[0] = z * Math.cos(theta) + 0.0065;\n out[1] = z * Math.sin(theta) + 0.006;\n return out;\n}\n\nfunction bd09ll_gcj02Into(bdLon, bdLat, out) {\n const x = bdLon - 0.0065;\n const y = bdLat - 0.006;\n const z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * X_PI);\n const theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * X_PI);\n out[0] = z * Math.cos(theta);\n out[1] = z * Math.sin(theta);\n return out;\n}\n\nfunction bd09ll_gcj02_preciseInto(bdLon, bdLat, out) {\n bd09ll_gcj02Into(bdLon, bdLat, out);\n let gLon = out[0];\n let gLat = out[1];\n for (let i = 0; i < 2; i++) {\n gcj02_bd09llInto(gLon, gLat, _back);\n gLon -= (_back[0] - bdLon);\n gLat -= (_back[1] - bdLat);\n }\n out[0] = gLon;\n out[1] = gLat;\n return out;\n}\n\nfunction wgs84_epsg3857Into(lon, lat, out) {\n const clampedLat = Math.max(-EPSG3857_MAX_LAT, Math.min(EPSG3857_MAX_LAT, lat));\n const x = lon * EPSG3857_RADIUS * PI / 180.0;\n const radLat = clampedLat * PI / 180.0;\n out[0] = x;\n out[1] = EPSG3857_RADIUS * Math.log(Math.tan(PI / 4.0 + radLat / 2.0));\n return out;\n}\n\nfunction epsg3857_wgs84Into(x, y, out) {\n out[0] = (x / (EPSG3857_RADIUS * PI)) * 180.0;\n out[1] = (2.0 * Math.atan(Math.exp(y / EPSG3857_RADIUS)) - PI / 2.0) * 180.0 / PI;\n return out;\n}\n\n/**\n * GCJ-02 -> EPSG:3857. The datum shift is inverted before projecting, so\n * `precise` selects the fixed-point inverse instead of the fast one-off\n * approximation — mirroring `gcj02_wgs84_precise`. Defaults to `true`.\n */\nfunction gcj02_epsg3857Into(lon, lat, out, precise = true) {\n (precise ? gcj02_wgs84_preciseInto : gcj02_wgs84Into)(lon, lat, _back);\n return wgs84_epsg3857Into(_back[0], _back[1], out);\n}\n\n/** BD-09 -> EPSG:3857. `precise` behaves as in {@link gcj02_epsg3857Into}. */\nfunction bd09ll_epsg3857Into(lon, lat, out, precise = true) {\n if (precise) {\n bd09ll_gcj02_preciseInto(lon, lat, _forward);\n gcj02_wgs84_preciseInto(_forward[0], _forward[1], _back);\n return wgs84_epsg3857Into(_back[0], _back[1], out);\n }\n bd09ll_gcj02Into(lon, lat, _forward);\n gcj02_wgs84Into(_forward[0], _forward[1], _back);\n return wgs84_epsg3857Into(_back[0], _back[1], out);\n}\n\nfunction wgs84_bd09llInto(wgsLon, wgsLat, out) {\n wgs84_gcj02Into(wgsLon, wgsLat, _forward);\n return gcj02_bd09llInto(_forward[0], _forward[1], out);\n}\n\nfunction bd09ll_wgs84Into(bdLon, bdLat, out) {\n bd09ll_gcj02Into(bdLon, bdLat, _forward);\n return gcj02_wgs84Into(_forward[0], _forward[1], out);\n}\n\nfunction bd09ll_wgs84_preciseInto(bdLon, bdLat, out) {\n bd09ll_gcj02_preciseInto(bdLon, bdLat, _forward);\n return gcj02_wgs84_preciseInto(_forward[0], _forward[1], out);\n}\n\nfunction epsg3857_gcj02Into(x, y, out) {\n epsg3857_wgs84Into(x, y, _forward);\n return wgs84_gcj02Into(_forward[0], _forward[1], out);\n}\n\nfunction epsg3857_bd09llInto(x, y, out) {\n epsg3857_wgs84Into(x, y, _forward);\n return wgs84_bd09llInto(_forward[0], _forward[1], out);\n}\n\n/* ------------------------------------------------------------------ *\n * Public array-returning API (validated at the boundary)\n * ------------------------------------------------------------------ */\n\n/** Validates then delegates to an allocation-free core. */\nconst expose = (into, validate = assertLonLat) => (lon, lat) => {\n validate(lon, lat);\n return into(lon, lat, [0, 0]);\n};\n\nconst wgs84_gcj02 = expose(wgs84_gcj02Into);\nconst gcj02_wgs84 = expose(gcj02_wgs84Into);\nconst gcj02_wgs84_precise = expose(gcj02_wgs84_preciseInto);\nconst gcj02_bd09ll = expose(gcj02_bd09llInto);\nconst bd09ll_gcj02 = expose(bd09ll_gcj02Into);\nconst bd09ll_gcj02_precise = expose(bd09ll_gcj02_preciseInto);\nconst wgs84_bd09ll = expose(wgs84_bd09llInto);\nconst bd09ll_wgs84 = expose(bd09ll_wgs84Into);\nconst bd09ll_wgs84_precise = expose(bd09ll_wgs84_preciseInto);\nconst wgs84_epsg3857 = expose(wgs84_epsg3857Into);\nconst epsg3857_wgs84 = expose(epsg3857_wgs84Into, assertPlane);\nconst epsg3857_gcj02 = expose(epsg3857_gcj02Into, assertPlane);\nconst epsg3857_bd09ll = expose(epsg3857_bd09llInto, assertPlane);\n\nconst gcj02_epsg3857 = (lon, lat, precise = true) => {\n assertLonLat(lon, lat);\n return gcj02_epsg3857Into(lon, lat, [0, 0], precise);\n};\n\nconst bd09ll_epsg3857 = (lon, lat, precise = true) => {\n assertLonLat(lon, lat);\n return bd09ll_epsg3857Into(lon, lat, [0, 0], precise);\n};\n\n/**\n * WGS-84 -> GCJ-02 as `[lon, lat]`, matching every other entry point.\n * Previously took `(lat, lon)` and returned a `{ lat, lon }` object.\n */\nfunction gcj_encrypt(wgsLon, wgsLat) {\n return wgs84_gcj02(wgsLon, wgsLat);\n}\n\nconst GPS = {\n PI,\n x_pi: X_PI,\n EARTH_RADIUS: EPSG3857_RADIUS,\n\n delta,\n transformLat,\n transformLon,\n outOfChina,\n\n wgs84_gcj02,\n gcj02_wgs84,\n gcj02_wgs84_precise,\n gcj02_bd09ll,\n bd09ll_gcj02,\n bd09ll_gcj02_precise,\n wgs84_bd09ll,\n bd09ll_wgs84,\n bd09ll_wgs84_precise,\n wgs84_epsg3857,\n epsg3857_wgs84,\n gcj02_epsg3857,\n epsg3857_gcj02,\n bd09ll_epsg3857,\n epsg3857_bd09ll,\n\n gcj_encrypt,\n\n /** @deprecated internal helper, kept so existing callers keep working. */\n _assertLonLat: assertLonLat\n};\n\n/**\n * Allocation-free cores keyed by `<from>_<to>`, consumed by\n * ProjectionTransform so batch runs never allocate a result array.\n */\nGPS._into = {\n wgs84_gcj02: wgs84_gcj02Into,\n gcj02_wgs84: gcj02_wgs84Into,\n gcj02_wgs84_precise: gcj02_wgs84_preciseInto,\n gcj02_bd09ll: gcj02_bd09llInto,\n bd09ll_gcj02: bd09ll_gcj02Into,\n bd09ll_gcj02_precise: bd09ll_gcj02_preciseInto,\n wgs84_bd09ll: wgs84_bd09llInto,\n bd09ll_wgs84: bd09ll_wgs84Into,\n bd09ll_wgs84_precise: bd09ll_wgs84_preciseInto,\n wgs84_epsg3857: wgs84_epsg3857Into,\n epsg3857_wgs84: epsg3857_wgs84Into,\n gcj02_epsg3857: gcj02_epsg3857Into,\n epsg3857_gcj02: epsg3857_gcj02Into,\n bd09ll_epsg3857: bd09ll_epsg3857Into,\n epsg3857_bd09ll: epsg3857_bd09llInto\n};\n\nexport default GPS;","import GPS from './gps.js';\n\nconst crs = {\n bd09ll: '+proj=longlat +datum=BD09',\n gcj02: '+proj=longlat +datum=GCJ02',\n wgs84: '+proj=longlat +datum=WGS84 +no_defs',\n cgcs2000: '+proj=longlat +ellps=GRS80 +no_defs',\n epsg3857: '+proj=merc +a=6378137 +b=6378137 +lat_ts=0 +lon_0=0 +x_0=0 +y_0=0 +k=1 +units=m +nadgrids=@null +wktext +no_defs'\n};\n\nconst CRS_ALIASES = {\n 'bd-09': 'bd09ll',\n 'bd09': 'bd09ll',\n 'bd09ll': 'bd09ll',\n 'bd-09ll': 'bd09ll',\n 'epsg:4326': 'wgs84',\n 'epsg4326': 'wgs84',\n '4326': 'wgs84',\n 'cgcs2000': 'wgs84',\n 'cgcs-2000': 'wgs84',\n 'cgcs 2000': 'wgs84',\n 'epsg:4490': 'wgs84',\n 'epsg4490': 'wgs84',\n '4490': 'wgs84',\n 'gcj-02': 'gcj02',\n 'gcj02': 'gcj02',\n 'wgs-84': 'wgs84',\n 'wgs84': 'wgs84',\n 'epsg:3857': 'epsg3857',\n 'epsg3857': 'epsg3857',\n '3857': 'epsg3857',\n 'epsg:900913': 'epsg3857',\n 'epsg900913': 'epsg3857',\n '900913': 'epsg3857',\n 'mercator': 'epsg3857',\n 'webmercator': 'epsg3857'\n};\n\n/**\n * proj4 strings accepted as input, mapped to a `crs` key.\n *\n * Keys are matched after whitespace collapsing + lowercasing, so the many\n * spellings of the same datum in the wild all resolve. Values are normalised\n * through `CRS_ALIASES` before use (CGCS2000 folds onto WGS-84 at民用精度).\n */\nconst PROJ4_TO_CRS = {\n [crs.wgs84]: 'wgs84',\n [crs.cgcs2000]: 'cgcs2000',\n [crs.gcj02]: 'gcj02',\n [crs.bd09ll]: 'bd09ll',\n [crs.epsg3857]: 'epsg3857',\n\n // common WGS-84 spellings\n '+proj=longlat +datum=wgs84': 'wgs84',\n '+proj=longlat +ellps=wgs84': 'wgs84',\n '+proj=longlat +ellps=wgs84 +no_defs': 'wgs84',\n '+proj=longlat +a=6378137 +b=6356752.314245 +no_defs': 'wgs84',\n '+proj=longlat +a=6378137 +b=6356752.314245 +no_defs +towgs84=0,0,0': 'wgs84',\n\n // common CGCS2000 / GRS80 spellings\n '+proj=longlat +ellps=grs80': 'cgcs2000',\n '+proj=longlat +ellps=grs80 +no_defs': 'cgcs2000',\n '+proj=longlat +ellps=grs80 +towgs84=0,0,0,0,0,0,0 +no_defs': 'cgcs2000',\n '+proj=longlat +a=6378137 +b=6356752.314140 +no_defs': 'cgcs2000',\n\n // GCJ-02 / BD-09 are not standard EPSG datum codes, but these appear in configs\n '+proj=longlat +ellps=wgs84 +nadgrids=@china': 'gcj02'\n};\n\nconst ERR_COORD = 'Invalid coordinate: longitude and latitude must be finite numbers.';\n\n/** ProjectionTransform scratch buffer, kept module-level to avoid per-point allocation. */\nconst _result = [0, 0];\n\n/**\n * Explicit `precise` mapping, keyed by `<from>_<to>`.\n *\n * Only pairs whose datum shift has to be *inverted* appear here; everything\n * else is a forward formula that has no precision mode. Keeping this as a\n * table (rather than scattered `if`s) is what stops a new CRS pair from\n * silently inheriting the approximate inverse.\n */\nconst PRECISE_CORES = {\n gcj02_wgs84: GPS._into.gcj02_wgs84_precise,\n bd09ll_wgs84: GPS._into.bd09ll_wgs84_precise,\n bd09ll_gcj02: GPS._into.bd09ll_gcj02_precise\n};\n\n/** Fast counterparts used when `precise: false`. */\nconst FAST_CORES = {\n gcj02_epsg3857: (lon, lat, out) => GPS._into.gcj02_epsg3857(lon, lat, out, false),\n bd09ll_epsg3857: (lon, lat, out) => GPS._into.bd09ll_epsg3857(lon, lat, out, false)\n};\n\nfunction resolveInto(from, to, isPrecise) {\n const key = `${from}_${to}`;\n if (isPrecise) return PRECISE_CORES[key] || GPS._into[key];\n return FAST_CORES[key] || GPS._into[key];\n}\n\nconst ProjectionTransform = {\n crs,\n\n transform(source, fromCRS, toCRS, options = {}) {\n if (source == null) return null;\n\n const from = this._normalizeCRS(fromCRS);\n const to = this._normalizeCRS(toCRS);\n const transformCoord = this._getCoordTransformer(from, to, options);\n\n if (this._isCoord(source)) {\n return transformCoord(source);\n }\n\n if (Array.isArray(source)) {\n return this._transformCoordinateTree(source, transformCoord, options);\n }\n\n return this._transformGeoJSON(source, transformCoord, options);\n },\n\n _getCoordTransformer(from, to, options = {}) {\n const isMutate = Boolean(options.mutate);\n const isPrecise = options.precise !== false;\n\n if (from === to) {\n return isMutate\n ? coord => coord\n : coord => (coord.length > 2\n ? [Number(coord[0]), Number(coord[1]), ...coord.slice(2)]\n : [Number(coord[0]), Number(coord[1])]);\n }\n\n const into = resolveInto(from, to, isPrecise);\n if (typeof into !== 'function') {\n throw new Error(`Unsupported CRS transform: ${from} -> ${to}.`);\n }\n\n if (isMutate) {\n return coord => {\n const x = Number(coord[0]);\n const y = Number(coord[1]);\n if (!Number.isFinite(x) || !Number.isFinite(y)) throw new Error(ERR_COORD);\n into(x, y, _result);\n coord[0] = _result[0];\n coord[1] = _result[1];\n return coord;\n };\n }\n\n return coord => {\n const x = Number(coord[0]);\n const y = Number(coord[1]);\n if (!Number.isFinite(x) || !Number.isFinite(y)) throw new Error(ERR_COORD);\n into(x, y, _result);\n return coord.length > 2\n ? [_result[0], _result[1], ...coord.slice(2)]\n : [_result[0], _result[1]];\n };\n },\n\n _transformGeoJSON(geoJSON, transformCoord, options = {}) {\n if (!geoJSON || typeof geoJSON !== 'object') {\n throw new Error('Invalid GeoJSON object.');\n }\n\n const result = options.mutate ? geoJSON : { ...geoJSON };\n\n if (Array.isArray(geoJSON.bbox)) {\n result.bbox = this._transformBbox(geoJSON.bbox, transformCoord);\n }\n\n if (geoJSON.type === 'Feature') {\n result.geometry = geoJSON.geometry\n ? this._transformGeoJSON(geoJSON.geometry, transformCoord, options)\n : null;\n return result;\n }\n\n if (geoJSON.type === 'FeatureCollection') {\n if (!Array.isArray(geoJSON.features)) {\n throw new Error('Invalid FeatureCollection: features must be an array.');\n }\n if (options.mutate) {\n for (let i = 0; i < geoJSON.features.length; i++) {\n geoJSON.features[i] = this._transformGeoJSON(geoJSON.features[i], transformCoord, options);\n }\n result.features = geoJSON.features;\n } else {\n result.features = geoJSON.features.map(f => this._transformGeoJSON(f, transformCoord, options));\n }\n return result;\n }\n\n if (geoJSON.type === 'GeometryCollection') {\n if (!Array.isArray(geoJSON.geometries)) {\n throw new Error('Invalid GeometryCollection: geometries must be an array.');\n }\n if (options.mutate) {\n for (let i = 0; i < geoJSON.geometries.length; i++) {\n geoJSON.geometries[i] = geoJSON.geometries[i]\n ? this._transformGeoJSON(geoJSON.geometries[i], transformCoord, options)\n : null;\n }\n result.geometries = geoJSON.geometries;\n } else {\n result.geometries = geoJSON.geometries.map(g => (g ? this._transformGeoJSON(g, transformCoord, options) : null));\n }\n return result;\n }\n\n if ('coordinates' in geoJSON) {\n result.coordinates = this._transformCoordinateTree(geoJSON.coordinates, transformCoord, options);\n return result;\n }\n\n throw new Error(`Unsupported GeoJSON type: ${geoJSON.type || 'unknown'}.`);\n },\n\n _transformCoordinateTree(coordinates, transformCoord, options = {}) {\n if (coordinates == null) return coordinates;\n if (this._isCoord(coordinates)) return transformCoord(coordinates);\n if (!Array.isArray(coordinates)) throw new Error('Invalid coordinates: expected coordinate array.');\n\n if (options.mutate) {\n for (let i = 0; i < coordinates.length; i++) {\n coordinates[i] = this._transformCoordinateTree(coordinates[i], transformCoord, options);\n }\n return coordinates;\n }\n\n return coordinates.map(item => this._transformCoordinateTree(item, transformCoord, options));\n },\n\n _transformBbox(bbox, transformCoord) {\n if (!Array.isArray(bbox) || (bbox.length !== 4 && bbox.length !== 6)) {\n return bbox;\n }\n\n if (bbox.length === 4) {\n const [minX, minY, maxX, maxY] = bbox;\n const p1 = transformCoord([minX, minY]);\n const p2 = transformCoord([maxX, maxY]);\n return [\n Math.min(p1[0], p2[0]),\n Math.min(p1[1], p2[1]),\n Math.max(p1[0], p2[0]),\n Math.max(p1[1], p2[1])\n ];\n }\n\n const [minX, minY, minZ, maxX, maxY, maxZ] = bbox;\n const p1 = transformCoord([minX, minY, minZ]);\n const p2 = transformCoord([maxX, maxY, maxZ]);\n return [\n Math.min(p1[0], p2[0]),\n Math.min(p1[1], p2[1]),\n minZ,\n Math.max(p1[0], p2[0]),\n Math.max(p1[1], p2[1]),\n maxZ\n ];\n },\n\n _normalizeCRS(value) {\n if (!value) throw new Error('must provide a valid fromCRS and toCRS.');\n\n if (typeof value === 'object') {\n if (value.type === 'proj4' && value.properties && value.properties.proj) {\n const crsName = this._toCRS(value.properties.proj);\n if (crsName) return crsName;\n }\n throw new Error('Unsupported CRS object.');\n }\n\n const key = String(value).trim().toLowerCase();\n const normalized = CRS_ALIASES[key];\n if (!normalized) throw new Error(`Unsupported CRS: ${value}.`);\n return normalized;\n },\n\n /**\n * Resolves a proj4 definition to an internal CRS id, or `null`.\n * Always returns an id already folded through `CRS_ALIASES`.\n */\n _toCRS(proj) {\n if (typeof proj !== 'string') return null;\n\n const key = proj.trim().replace(/\\s+/g, ' ').toLowerCase();\n let crsName = PROJ4_TO_CRS[key];\n\n if (!crsName) {\n // honour caller-extended `crs` entries\n for (const name in this.crs) {\n if (key === String(this.crs[name]).trim().replace(/\\s+/g, ' ').toLowerCase()) {\n crsName = name;\n break;\n }\n }\n }\n\n return crsName ? (CRS_ALIASES[crsName] || crsName) : null;\n },\n\n /**\n * Structural position test only.\n *\n * Deliberately does *not* coerce with `Number()`: the coordinate\n * transformer validates and coerces once, so validating here too would\n * double the conversion cost on every point of a batch.\n */\n _isCoord(coordinate) {\n return Array.isArray(coordinate) &&\n coordinate.length >= 2 &&\n !Array.isArray(coordinate[0]) &&\n !Array.isArray(coordinate[1]);\n }\n};\n\nexport default ProjectionTransform;","const TYPE_MAP = {\n POINT: 'Point',\n LINESTRING: 'LineString',\n POLYGON: 'Polygon',\n MULTIPOINT: 'MultiPoint',\n MULTILINESTRING: 'MultiLineString',\n MULTIPOLYGON: 'MultiPolygon',\n GEOMETRYCOLLECTION: 'GeometryCollection'\n};\n\nconst REVERSE_TYPE_MAP = Object.fromEntries(\n Object.entries(TYPE_MAP).map(([wktType, geoJSONType]) => [geoJSONType, wktType])\n);\n\nconst WKT = {\n parse(wkt) {\n if (typeof wkt !== 'string' || !wkt.trim()) {\n throw new Error('Invalid WKT string.');\n }\n\n const source = wkt.trim();\n const header = source.match(/^([A-Za-z]+)(?:\\s+(ZM|Z|M))?\\s*/i);\n if (!header) throw new Error('Invalid WKT string.');\n\n const wktType = header[1].toUpperCase();\n const geoJSONType = TYPE_MAP[wktType];\n if (!geoJSONType) throw new Error(`Unsupported WKT type: ${wktType}.`);\n\n const body = source.slice(header[0].length).trim();\n if (/^EMPTY$/i.test(body)) {\n if (geoJSONType === 'GeometryCollection') {\n return { type: geoJSONType, geometries: [] };\n }\n return { type: geoJSONType, coordinates: this._emptyCoordinates(geoJSONType) };\n }\n\n if (!body.startsWith('(') || !body.endsWith(')')) {\n throw new Error('Invalid WKT string: missing coordinate parentheses.');\n }\n\n const content = this._stripOuterParens(body);\n\n if (geoJSONType === 'GeometryCollection') {\n return {\n type: 'GeometryCollection',\n geometries: this._splitTopLevel(content).map(item => this.parse(item))\n };\n }\n\n return {\n type: geoJSONType,\n coordinates: this._parseCoordinates(content, geoJSONType)\n };\n },\n\n stringify(geoJSON, options = {}) {\n if (!geoJSON || typeof geoJSON !== 'object' || !geoJSON.type) {\n throw new Error('Invalid GeoJSON.');\n }\n\n const wktType = REVERSE_TYPE_MAP[geoJSON.type];\n if (!wktType) throw new Error(`Unsupported geometry type: ${geoJSON.type}.`);\n\n const precision = typeof options === 'number' ? options : options?.precision;\n\n if (geoJSON.type === 'GeometryCollection') {\n if (!Array.isArray(geoJSON.geometries) || geoJSON.geometries.length === 0) {\n return 'GEOMETRYCOLLECTION EMPTY';\n }\n return `GEOMETRYCOLLECTION(${geoJSON.geometries.map(geom => this.stringify(geom, options)).join(', ')})`;\n }\n\n const coords = geoJSON.coordinates;\n if (this._isEmpty(coords)) return `${wktType} EMPTY`;\n\n return `${wktType}(${this._stringifyCoordinates(coords, geoJSON.type, precision)})`;\n },\n\n _parseCoordinates(content, type) {\n switch (type) {\n case 'Point':\n return this._parsePoint(content);\n case 'LineString':\n return this._parsePointList(content);\n case 'Polygon':\n return this._parsePolygon(content);\n case 'MultiPoint':\n return this._parseMultiPoint(content);\n case 'MultiLineString':\n return this._splitTopLevel(content).map(line => this._parsePointList(this._stripOptionalOuterParens(line)));\n case 'MultiPolygon':\n return this._splitTopLevel(content).map(poly => this._parsePolygon(this._stripOptionalOuterParens(poly)));\n default:\n throw new Error(`Unsupported geometry type: ${type}.`);\n }\n },\n\n _parsePoint(value) {\n const numbers = value.trim().split(/\\s+/).filter(Boolean).map(Number);\n if (numbers.length < 2 || numbers.some(n => !Number.isFinite(n))) {\n throw new Error(`Invalid WKT coordinate: ${value}.`);\n }\n return numbers;\n },\n\n _parsePointList(value) {\n const points = this._splitTopLevel(value).map(part => this._parsePoint(this._stripOptionalOuterParens(part)));\n if (!points.length) throw new Error('Invalid WKT coordinate list.');\n return points;\n },\n\n _parsePolygon(value) {\n const rings = this._splitTopLevel(value).map(ring => this._parsePointList(this._stripOptionalOuterParens(ring)));\n if (!rings.length) throw new Error('Invalid WKT polygon.');\n return rings;\n },\n\n _parseMultiPoint(value) {\n return this._splitTopLevel(value).map(point => this._parsePoint(this._stripOptionalOuterParens(point)));\n },\n\n _splitTopLevel(value) {\n const parts = [];\n let depth = 0;\n let start = 0;\n\n for (let i = 0; i < value.length; i++) {\n const char = value[i];\n if (char === '(') depth++;\n else if (char === ')') depth--;\n\n if (depth < 0) throw new Error('Invalid WKT string: unbalanced parentheses.');\n\n if (char === ',' && depth === 0) {\n parts.push(value.slice(start, i).trim());\n start = i + 1;\n }\n }\n\n if (depth !== 0) throw new Error('Invalid WKT string: unbalanced parentheses.');\n const last = value.slice(start).trim();\n if (last) parts.push(last);\n return parts;\n },\n\n _stripOuterParens(value) {\n const trimmed = value.trim();\n if (!trimmed.startsWith('(') || !trimmed.endsWith(')')) {\n throw new Error('Invalid WKT string: missing coordinate parentheses.');\n }\n return trimmed.slice(1, -1).trim();\n },\n\n _stripOptionalOuterParens(value) {\n const trimmed = value.trim();\n if (!trimmed.startsWith('(')) return trimmed;\n return this._stripOuterParens(trimmed);\n },\n\n _stringifyCoordinates(coords, type, precision) {\n switch (type) {\n case 'Point':\n return this._stringifyPoint(coords, precision);\n case 'LineString':\n return this._stringifyPointList(coords, precision);\n case 'Polygon':\n return this._stringifyPolygon(coords, precision);\n case 'MultiPoint':\n return coords.map(point => `(${this._stringifyPoint(point, precision)})`).join(', ');\n case 'MultiLineString':\n return coords.map(line => `(${this._stringifyPointList(line, precision)})`).join(', ');\n case 'MultiPolygon':\n return coords.map(poly => `(${this._stringifyPolygon(poly, precision)})`).join(', ');\n default:\n throw new Error(`Unsupported geometry type: ${type}.`);\n }\n },\n\n _stringifyPoint(point, precision) {\n if (!Array.isArray(point) || point.length < 2) throw new Error('Invalid coordinate.');\n return point.map(value => {\n const number = Number(value);\n if (!Number.isFinite(number)) throw new Error('Invalid coordinate value.');\n if (typeof precision === 'number' && precision >= 0) {\n return Number(number.toFixed(precision)).toString();\n }\n return String(number);\n }).join(' ');\n },\n\n _stringifyPointList(points, precision) {\n if (!Array.isArray(points)) throw new Error('Invalid coordinate list.');\n return points.map(point => this._stringifyPoint(point, precision)).join(', ');\n },\n\n _stringifyPolygon(rings, precision) {\n if (!Array.isArray(rings)) throw new Error('Invalid polygon coordinates.');\n return rings.map(ring => `(${this._stringifyPointList(ring, precision)})`).join(', ');\n },\n\n _emptyCoordinates(type) {\n return [];\n },\n\n _isEmpty(coords) {\n return Array.isArray(coords) && coords.length === 0;\n }\n};\n\nexport default WKT;\n","import GPS from './gps.js';\nimport ProjectionTransform from './projection.js';\nimport WKT from './wkt.js';\n\nconst giserConvertCrs = {\n GPS,\n ProjectionTransform,\n WKT,\n\n transform(input, fromCRS, toCRS, options) {\n if (input == null) return null;\n\n if (typeof input === 'string') {\n // blank / whitespace-only WKT is treated as \"no geometry\", not an error\n if (!input.trim()) return null;\n const geoJSON = WKT.parse(input);\n const transformed = ProjectionTransform.transform(geoJSON, fromCRS, toCRS, options);\n return WKT.stringify(transformed, options);\n }\n\n return ProjectionTransform.transform(input, fromCRS, toCRS, options);\n },\n\n transformPoint(coord, fromCRS, toCRS, options) {\n return this.transform(coord, fromCRS, toCRS, options);\n },\n\n transformPoints(points, fromCRS, toCRS, options) {\n return this.transform(points, fromCRS, toCRS, options);\n },\n\n transformGeoJSON(geoJSON, fromCRS, toCRS, options) {\n return this.transform(geoJSON, fromCRS, toCRS, options);\n },\n\n transformWKT(wkt, fromCRS, toCRS, options) {\n return this.transform(wkt, fromCRS, toCRS, options);\n }\n};\n\nexport { GPS, ProjectionTransform, WKT };\nexport default giserConvertCrs;\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
!function(t,r){"object"==typeof exports&&"undefined"!=typeof module?module.exports=r():"function"==typeof define&&define.amd?define(r):(t="undefined"!=typeof globalThis?globalThis:t||self).giserConvertCrs=r()}(this,function(){"use strict";const t=Math.PI,r=3e3*t/180,e=6378245,n=.006693421622965943,s=6378137,i=85.0511287798066,o=[0,0],a=[0,0],l=[0,0];function g(t,r){if(!Number.isFinite(t)||!Number.isFinite(r))throw new Error("Invalid coordinate: longitude and latitude must be finite numbers.")}function u(t,r){if(!Number.isFinite(t)||!Number.isFinite(r))throw new Error("Invalid coordinate: x and y must be finite numbers.")}function p(t,r){return Array.isArray(t)?p(t[1],t[0]):r<72.004||r>137.8347||t<.8293||t>55.8271}function c(r,e){let n=2*r-100+3*e+.2*e*e+.1*r*e+.2*Math.sqrt(Math.abs(r));return n+=2*(20*Math.sin(6*r*t)+20*Math.sin(2*r*t))/3,n+=2*(20*Math.sin(e*t)+40*Math.sin(e/3*t))/3,n+=2*(160*Math.sin(e/12*t)+320*Math.sin(e*t/30))/3,n}function f(r,e){let n=300+r+2*e+.1*r*r+.1*r*e+.1*Math.sqrt(Math.abs(r));return n+=2*(20*Math.sin(6*r*t)+20*Math.sin(2*r*t))/3,n+=2*(20*Math.sin(r*t)+40*Math.sin(r/3*t))/3,n+=2*(150*Math.sin(r/12*t)+300*Math.sin(r/30*t))/3,n}function h(r,s,i){const o=s-105,a=r-35;let l=c(o,a),g=f(o,a);const u=r/180*t,p=Math.sin(u),h=1-n*p*p,m=Math.sqrt(h);i[0]=180*l/(6335552.717000426/(h*m)*t),i[1]=180*g/(e/m*Math.cos(u)*t)}function m(t,r,e){return p(r,t)?(e[0]=t,e[1]=r,e):(h(r,t,o),e[0]=t+o[1],e[1]=r+o[0],e)}function _(t,r,e){return p(r,t)?(e[0]=t,e[1]=r,e):(h(r,t,o),e[0]=t-o[1],e[1]=r-o[0],e)}function d(t,r,e){if(p(r,t))return e[0]=t,e[1]=r,e;let n=t,s=r;for(let e=0;e<5;e++){m(n,s,a);const e=a[0]-t,i=a[1]-r;if(n-=e,s-=i,Math.abs(e)<1e-11&&Math.abs(i)<1e-11)break}return e[0]=n,e[1]=s,e}function w(t,e,n){const s=Math.sqrt(t*t+e*e)+2e-5*Math.sin(e*r),i=Math.atan2(e,t)+3e-6*Math.cos(t*r);return n[0]=s*Math.cos(i)+.0065,n[1]=s*Math.sin(i)+.006,n}function y(t,e,n){const s=t-.0065,i=e-.006,o=Math.sqrt(s*s+i*i)-2e-5*Math.sin(i*r),a=Math.atan2(i,s)-3e-6*Math.cos(s*r);return n[0]=o*Math.cos(a),n[1]=o*Math.sin(a),n}function b(t,r,e){y(t,r,e);let n=e[0],s=e[1];for(let e=0;e<2;e++)w(n,s,l),n-=l[0]-t,s-=l[1]-r;return e[0]=n,e[1]=s,e}function M(r,e,n){const o=Math.max(-85.0511287798066,Math.min(i,e)),a=r*s*t/180,l=o*t/180;return n[0]=a,n[1]=s*Math.log(Math.tan(t/4+l/2)),n}function j(r,e,n){return n[0]=r/(s*t)*180,n[1]=180*(2*Math.atan(Math.exp(e/s))-t/2)/t,n}function P(t,r,e,n=!0){return(n?d:_)(t,r,l),M(l[0],l[1],e)}function C(t,r,e,n=!0){return n?(b(t,r,a),d(a[0],a[1],l),M(l[0],l[1],e)):(y(t,r,a),_(a[0],a[1],l),M(l[0],l[1],e))}function E(t,r,e){return m(t,r,a),w(a[0],a[1],e)}function T(t,r,e){return y(t,r,a),_(a[0],a[1],e)}function O(t,r,e){return b(t,r,a),d(a[0],a[1],e)}function N(t,r,e){return j(t,r,a),m(a[0],a[1],e)}function L(t,r,e){return j(t,r,a),E(a[0],a[1],e)}const S=(t,r=g)=>(e,n)=>(r(e,n),t(e,n,[0,0])),I=S(m),A=S(_),v=S(d),G=S(w),$=S(y),x=S(b),R=S(E),W=S(T),F=S(O),U=S(M),J=S(j,u),K=S(N,u),Y=S(L,u);const k={PI:t,x_pi:r,EARTH_RADIUS:s,delta:function(t,r){return h(t,r,o),{lat:o[0],lon:o[1]}},transformLat:c,transformLon:f,outOfChina:p,wgs84_gcj02:I,gcj02_wgs84:A,gcj02_wgs84_precise:v,gcj02_bd09ll:G,bd09ll_gcj02:$,bd09ll_gcj02_precise:x,wgs84_bd09ll:R,bd09ll_wgs84:W,bd09ll_wgs84_precise:F,wgs84_epsg3857:U,epsg3857_wgs84:J,gcj02_epsg3857:(t,r,e=!0)=>(g(t,r),P(t,r,[0,0],e)),epsg3857_gcj02:K,bd09ll_epsg3857:(t,r,e=!0)=>(g(t,r),C(t,r,[0,0],e)),epsg3857_bd09ll:Y,gcj_encrypt:function(t,r){return I(t,r)},_assertLonLat:g};k._into={wgs84_gcj02:m,gcj02_wgs84:_,gcj02_wgs84_precise:d,gcj02_bd09ll:w,bd09ll_gcj02:y,bd09ll_gcj02_precise:b,wgs84_bd09ll:E,bd09ll_wgs84:T,bd09ll_wgs84_precise:O,wgs84_epsg3857:M,epsg3857_wgs84:j,gcj02_epsg3857:P,epsg3857_gcj02:N,bd09ll_epsg3857:C,epsg3857_bd09ll:L};const q={bd09ll:"+proj=longlat +datum=BD09",gcj02:"+proj=longlat +datum=GCJ02",wgs84:"+proj=longlat +datum=WGS84 +no_defs",cgcs2000:"+proj=longlat +ellps=GRS80 +no_defs",epsg3857:"+proj=merc +a=6378137 +b=6378137 +lat_ts=0 +lon_0=0 +x_0=0 +y_0=0 +k=1 +units=m +nadgrids=@null +wktext +no_defs"},B={"bd-09":"bd09ll",bd09:"bd09ll",bd09ll:"bd09ll","bd-09ll":"bd09ll","epsg:4326":"wgs84",epsg4326:"wgs84",4326:"wgs84",cgcs2000:"wgs84","cgcs-2000":"wgs84","cgcs 2000":"wgs84","epsg:4490":"wgs84",epsg4490:"wgs84",4490:"wgs84","gcj-02":"gcj02",gcj02:"gcj02","wgs-84":"wgs84",wgs84:"wgs84","epsg:3857":"epsg3857",epsg3857:"epsg3857",3857:"epsg3857","epsg:900913":"epsg3857",epsg900913:"epsg3857",900913:"epsg3857",mercator:"epsg3857",webmercator:"epsg3857"},z={[q.wgs84]:"wgs84",[q.cgcs2000]:"cgcs2000",[q.gcj02]:"gcj02",[q.bd09ll]:"bd09ll",[q.epsg3857]:"epsg3857","+proj=longlat +datum=wgs84":"wgs84","+proj=longlat +ellps=wgs84":"wgs84","+proj=longlat +ellps=wgs84 +no_defs":"wgs84","+proj=longlat +a=6378137 +b=6356752.314245 +no_defs":"wgs84","+proj=longlat +a=6378137 +b=6356752.314245 +no_defs +towgs84=0,0,0":"wgs84","+proj=longlat +ellps=grs80":"cgcs2000","+proj=longlat +ellps=grs80 +no_defs":"cgcs2000","+proj=longlat +ellps=grs80 +towgs84=0,0,0,0,0,0,0 +no_defs":"cgcs2000","+proj=longlat +a=6378137 +b=6356752.314140 +no_defs":"cgcs2000","+proj=longlat +ellps=wgs84 +nadgrids=@china":"gcj02"},Z="Invalid coordinate: longitude and latitude must be finite numbers.",D=[0,0],H={gcj02_wgs84:k._into.gcj02_wgs84_precise,bd09ll_wgs84:k._into.bd09ll_wgs84_precise,bd09ll_gcj02:k._into.bd09ll_gcj02_precise},Q={gcj02_epsg3857:(t,r,e)=>k._into.gcj02_epsg3857(t,r,e,!1),bd09ll_epsg3857:(t,r,e)=>k._into.bd09ll_epsg3857(t,r,e,!1)};const V={crs:q,transform(t,r,e,n={}){if(null==t)return null;const s=this._normalizeCRS(r),i=this._normalizeCRS(e),o=this._getCoordTransformer(s,i,n);return this._isCoord(t)?o(t):Array.isArray(t)?this._transformCoordinateTree(t,o,n):this._transformGeoJSON(t,o,n)},_getCoordTransformer(t,r,e={}){const n=Boolean(e.mutate),s=!1!==e.precise;if(t===r)return n?t=>t:t=>t.length>2?[Number(t[0]),Number(t[1]),...t.slice(2)]:[Number(t[0]),Number(t[1])];const i=function(t,r,e){const n=`${t}_${r}`;return e?H[n]||k._into[n]:Q[n]||k._into[n]}(t,r,s);if("function"!=typeof i)throw new Error(`Unsupported CRS transform: ${t} -> ${r}.`);return n?t=>{const r=Number(t[0]),e=Number(t[1]);if(!Number.isFinite(r)||!Number.isFinite(e))throw new Error(Z);return i(r,e,D),t[0]=D[0],t[1]=D[1],t}:t=>{const r=Number(t[0]),e=Number(t[1]);if(!Number.isFinite(r)||!Number.isFinite(e))throw new Error(Z);return i(r,e,D),t.length>2?[D[0],D[1],...t.slice(2)]:[D[0],D[1]]}},_transformGeoJSON(t,r,e={}){if(!t||"object"!=typeof t)throw new Error("Invalid GeoJSON object.");const n=e.mutate?t:{...t};if(Array.isArray(t.bbox)&&(n.bbox=this._transformBbox(t.bbox,r)),"Feature"===t.type)return n.geometry=t.geometry?this._transformGeoJSON(t.geometry,r,e):null,n;if("FeatureCollection"===t.type){if(!Array.isArray(t.features))throw new Error("Invalid FeatureCollection: features must be an array.");if(e.mutate){for(let n=0;n<t.features.length;n++)t.features[n]=this._transformGeoJSON(t.features[n],r,e);n.features=t.features}else n.features=t.features.map(t=>this._transformGeoJSON(t,r,e));return n}if("GeometryCollection"===t.type){if(!Array.isArray(t.geometries))throw new Error("Invalid GeometryCollection: geometries must be an array.");if(e.mutate){for(let n=0;n<t.geometries.length;n++)t.geometries[n]=t.geometries[n]?this._transformGeoJSON(t.geometries[n],r,e):null;n.geometries=t.geometries}else n.geometries=t.geometries.map(t=>t?this._transformGeoJSON(t,r,e):null);return n}if("coordinates"in t)return n.coordinates=this._transformCoordinateTree(t.coordinates,r,e),n;throw new Error(`Unsupported GeoJSON type: ${t.type||"unknown"}.`)},_transformCoordinateTree(t,r,e={}){if(null==t)return t;if(this._isCoord(t))return r(t);if(!Array.isArray(t))throw new Error("Invalid coordinates: expected coordinate array.");if(e.mutate){for(let n=0;n<t.length;n++)t[n]=this._transformCoordinateTree(t[n],r,e);return t}return t.map(t=>this._transformCoordinateTree(t,r,e))},_transformBbox(t,r){if(!Array.isArray(t)||4!==t.length&&6!==t.length)return t;if(4===t.length){const[e,n,s,i]=t,o=r([e,n]),a=r([s,i]);return[Math.min(o[0],a[0]),Math.min(o[1],a[1]),Math.max(o[0],a[0]),Math.max(o[1],a[1])]}const[e,n,s,i,o,a]=t,l=r([e,n,s]),g=r([i,o,a]);return[Math.min(l[0],g[0]),Math.min(l[1],g[1]),s,Math.max(l[0],g[0]),Math.max(l[1],g[1]),a]},_normalizeCRS(t){if(!t)throw new Error("must provide a valid fromCRS and toCRS.");if("object"==typeof t){if("proj4"===t.type&&t.properties&&t.properties.proj){const r=this._toCRS(t.properties.proj);if(r)return r}throw new Error("Unsupported CRS object.")}const r=String(t).trim().toLowerCase(),e=B[r];if(!e)throw new Error(`Unsupported CRS: ${t}.`);return e},_toCRS(t){if("string"!=typeof t)return null;const r=t.trim().replace(/\s+/g," ").toLowerCase();let e=z[r];if(!e)for(const t in this.crs)if(r===String(this.crs[t]).trim().replace(/\s+/g," ").toLowerCase()){e=t;break}return e?B[e]||e:null},_isCoord:t=>Array.isArray(t)&&t.length>=2&&!Array.isArray(t[0])&&!Array.isArray(t[1])},X={POINT:"Point",LINESTRING:"LineString",POLYGON:"Polygon",MULTIPOINT:"MultiPoint",MULTILINESTRING:"MultiLineString",MULTIPOLYGON:"MultiPolygon",GEOMETRYCOLLECTION:"GeometryCollection"},tt=Object.fromEntries(Object.entries(X).map(([t,r])=>[r,t])),rt={parse(t){if("string"!=typeof t||!t.trim())throw new Error("Invalid WKT string.");const r=t.trim(),e=r.match(/^([A-Za-z]+)(?:\s+(ZM|Z|M))?\s*/i);if(!e)throw new Error("Invalid WKT string.");const n=e[1].toUpperCase(),s=X[n];if(!s)throw new Error(`Unsupported WKT type: ${n}.`);const i=r.slice(e[0].length).trim();if(/^EMPTY$/i.test(i))return"GeometryCollection"===s?{type:s,geometries:[]}:{type:s,coordinates:this._emptyCoordinates(s)};if(!i.startsWith("(")||!i.endsWith(")"))throw new Error("Invalid WKT string: missing coordinate parentheses.");const o=this._stripOuterParens(i);return"GeometryCollection"===s?{type:"GeometryCollection",geometries:this._splitTopLevel(o).map(t=>this.parse(t))}:{type:s,coordinates:this._parseCoordinates(o,s)}},stringify(t,r={}){if(!t||"object"!=typeof t||!t.type)throw new Error("Invalid GeoJSON.");const e=tt[t.type];if(!e)throw new Error(`Unsupported geometry type: ${t.type}.`);const n="number"==typeof r?r:r?.precision;if("GeometryCollection"===t.type)return Array.isArray(t.geometries)&&0!==t.geometries.length?`GEOMETRYCOLLECTION(${t.geometries.map(t=>this.stringify(t,r)).join(", ")})`:"GEOMETRYCOLLECTION EMPTY";const s=t.coordinates;return this._isEmpty(s)?`${e} EMPTY`:`${e}(${this._stringifyCoordinates(s,t.type,n)})`},_parseCoordinates(t,r){switch(r){case"Point":return this._parsePoint(t);case"LineString":return this._parsePointList(t);case"Polygon":return this._parsePolygon(t);case"MultiPoint":return this._parseMultiPoint(t);case"MultiLineString":return this._splitTopLevel(t).map(t=>this._parsePointList(this._stripOptionalOuterParens(t)));case"MultiPolygon":return this._splitTopLevel(t).map(t=>this._parsePolygon(this._stripOptionalOuterParens(t)));default:throw new Error(`Unsupported geometry type: ${r}.`)}},_parsePoint(t){const r=t.trim().split(/\s+/).filter(Boolean).map(Number);if(r.length<2||r.some(t=>!Number.isFinite(t)))throw new Error(`Invalid WKT coordinate: ${t}.`);return r},_parsePointList(t){const r=this._splitTopLevel(t).map(t=>this._parsePoint(this._stripOptionalOuterParens(t)));if(!r.length)throw new Error("Invalid WKT coordinate list.");return r},_parsePolygon(t){const r=this._splitTopLevel(t).map(t=>this._parsePointList(this._stripOptionalOuterParens(t)));if(!r.length)throw new Error("Invalid WKT polygon.");return r},_parseMultiPoint(t){return this._splitTopLevel(t).map(t=>this._parsePoint(this._stripOptionalOuterParens(t)))},_splitTopLevel(t){const r=[];let e=0,n=0;for(let s=0;s<t.length;s++){const i=t[s];if("("===i?e++:")"===i&&e--,e<0)throw new Error("Invalid WKT string: unbalanced parentheses.");","===i&&0===e&&(r.push(t.slice(n,s).trim()),n=s+1)}if(0!==e)throw new Error("Invalid WKT string: unbalanced parentheses.");const s=t.slice(n).trim();return s&&r.push(s),r},_stripOuterParens(t){const r=t.trim();if(!r.startsWith("(")||!r.endsWith(")"))throw new Error("Invalid WKT string: missing coordinate parentheses.");return r.slice(1,-1).trim()},_stripOptionalOuterParens(t){const r=t.trim();return r.startsWith("(")?this._stripOuterParens(r):r},_stringifyCoordinates(t,r,e){switch(r){case"Point":return this._stringifyPoint(t,e);case"LineString":return this._stringifyPointList(t,e);case"Polygon":return this._stringifyPolygon(t,e);case"MultiPoint":return t.map(t=>`(${this._stringifyPoint(t,e)})`).join(", ");case"MultiLineString":return t.map(t=>`(${this._stringifyPointList(t,e)})`).join(", ");case"MultiPolygon":return t.map(t=>`(${this._stringifyPolygon(t,e)})`).join(", ");default:throw new Error(`Unsupported geometry type: ${r}.`)}},_stringifyPoint(t,r){if(!Array.isArray(t)||t.length<2)throw new Error("Invalid coordinate.");return t.map(t=>{const e=Number(t);if(!Number.isFinite(e))throw new Error("Invalid coordinate value.");return"number"==typeof r&&r>=0?Number(e.toFixed(r)).toString():String(e)}).join(" ")},_stringifyPointList(t,r){if(!Array.isArray(t))throw new Error("Invalid coordinate list.");return t.map(t=>this._stringifyPoint(t,r)).join(", ")},_stringifyPolygon(t,r){if(!Array.isArray(t))throw new Error("Invalid polygon coordinates.");return t.map(t=>`(${this._stringifyPointList(t,r)})`).join(", ")},_emptyCoordinates:t=>[],_isEmpty:t=>Array.isArray(t)&&0===t.length};return{GPS:k,ProjectionTransform:V,WKT:rt,transform(t,r,e,n){if(null==t)return null;if("string"==typeof t){if(!t.trim())return null;const s=rt.parse(t),i=V.transform(s,r,e,n);return rt.stringify(i,n)}return V.transform(t,r,e,n)},transformPoint(t,r,e,n){return this.transform(t,r,e,n)},transformPoints(t,r,e,n){return this.transform(t,r,e,n)},transformGeoJSON(t,r,e,n){return this.transform(t,r,e,n)},transformWKT(t,r,e,n){return this.transform(t,r,e,n)}}});
|
|
2
|
+
//# sourceMappingURL=giserConvertCrs.min.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"giserConvertCrs.min.js","sources":["../src/gps.js","../src/projection.js","../src/wkt.js","../src/giserConvertCrs.js"],"sourcesContent":["const PI = Math.PI;\nconst X_PI = PI * 3000.0 / 180.0;\nconst SEMI_MAJOR_AXIS = 6378245.0;\nconst ECCENTRICITY_SQUARED = 0.00669342162296594323;\nconst EPSG3857_RADIUS = 6378137.0;\nconst EPSG3857_MAX_LAT = 85.0511287798066;\n\nconst ERR_LONLAT = 'Invalid coordinate: longitude and latitude must be finite numbers.';\nconst ERR_PLANE = 'Invalid coordinate: x and y must be finite numbers.';\n\n/**\n * Hot-path scratch buffers.\n *\n * Every write below is consumed within the same synchronous call frame\n * (never across an await / callback boundary), so sharing these buffers is\n * safe and removes the per-point allocations that dominated batch runs.\n */\nconst _delta = [0, 0];\nconst _forward = [0, 0];\nconst _back = [0, 0];\n\nfunction assertLonLat(lon, lat) {\n if (!Number.isFinite(lon) || !Number.isFinite(lat)) {\n throw new Error(ERR_LONLAT);\n }\n}\n\nfunction assertPlane(x, y) {\n if (!Number.isFinite(x) || !Number.isFinite(y)) {\n throw new Error(ERR_PLANE);\n }\n}\n\nfunction outOfChina(lat, lon) {\n if (Array.isArray(lat)) {\n return outOfChina(lat[1], lat[0]);\n }\n return lon < 72.004 || lon > 137.8347 || lat < 0.8293 || lat > 55.8271;\n}\n\nfunction transformLat(x, y) {\n let ret = -100.0 + 2.0 * x + 3.0 * y + 0.2 * y * y + 0.1 * x * y + 0.2 * Math.sqrt(Math.abs(x));\n ret += (20.0 * Math.sin(6.0 * x * PI) + 20.0 * Math.sin(2.0 * x * PI)) * 2.0 / 3.0;\n ret += (20.0 * Math.sin(y * PI) + 40.0 * Math.sin(y / 3.0 * PI)) * 2.0 / 3.0;\n ret += (160.0 * Math.sin(y / 12.0 * PI) + 320.0 * Math.sin(y * PI / 30.0)) * 2.0 / 3.0;\n return ret;\n}\n\nfunction transformLon(x, y) {\n let ret = 300.0 + x + 2.0 * y + 0.1 * x * x + 0.1 * x * y + 0.1 * Math.sqrt(Math.abs(x));\n ret += (20.0 * Math.sin(6.0 * x * PI) + 20.0 * Math.sin(2.0 * x * PI)) * 2.0 / 3.0;\n ret += (20.0 * Math.sin(x * PI) + 40.0 * Math.sin(x / 3.0 * PI)) * 2.0 / 3.0;\n ret += (150.0 * Math.sin(x / 12.0 * PI) + 300.0 * Math.sin(x / 30.0 * PI)) * 2.0 / 3.0;\n return ret;\n}\n\n/**\n * Writes the GCJ-02 offset for (lat, lon) into `out` as [dLat, dLon].\n * Allocation-free core of the public `delta()`.\n */\nfunction deltaInto(lat, lon, out) {\n const x = lon - 105.0;\n const y = lat - 35.0;\n let dLat = transformLat(x, y);\n let dLon = transformLon(x, y);\n const radLat = lat / 180.0 * PI;\n const sinLat = Math.sin(radLat);\n const magic = 1 - ECCENTRICITY_SQUARED * sinLat * sinLat;\n const sqrtMagic = Math.sqrt(magic);\n\n out[0] = (dLat * 180.0) / ((SEMI_MAJOR_AXIS * (1 - ECCENTRICITY_SQUARED)) / (magic * sqrtMagic) * PI);\n out[1] = (dLon * 180.0) / (SEMI_MAJOR_AXIS / sqrtMagic * Math.cos(radLat) * PI);\n}\n\nfunction delta(lat, lon) {\n deltaInto(lat, lon, _delta);\n return { lat: _delta[0], lon: _delta[1] };\n}\n\n/* ------------------------------------------------------------------ *\n * Allocation-free transform cores: (lon, lat, out) => out\n * ------------------------------------------------------------------ */\n\nfunction wgs84_gcj02Into(wgsLon, wgsLat, out) {\n if (outOfChina(wgsLat, wgsLon)) {\n out[0] = wgsLon;\n out[1] = wgsLat;\n return out;\n }\n deltaInto(wgsLat, wgsLon, _delta);\n out[0] = wgsLon + _delta[1];\n out[1] = wgsLat + _delta[0];\n return out;\n}\n\nfunction gcj02_wgs84Into(gcjLon, gcjLat, out) {\n if (outOfChina(gcjLat, gcjLon)) {\n out[0] = gcjLon;\n out[1] = gcjLat;\n return out;\n }\n deltaInto(gcjLat, gcjLon, _delta);\n out[0] = gcjLon - _delta[1];\n out[1] = gcjLat - _delta[0];\n return out;\n}\n\nfunction gcj02_wgs84_preciseInto(gcjLon, gcjLat, out) {\n if (outOfChina(gcjLat, gcjLon)) {\n out[0] = gcjLon;\n out[1] = gcjLat;\n return out;\n }\n\n let wgsLon = gcjLon;\n let wgsLat = gcjLat;\n\n for (let i = 0; i < 5; i++) {\n wgs84_gcj02Into(wgsLon, wgsLat, _forward);\n const dLon = _forward[0] - gcjLon;\n const dLat = _forward[1] - gcjLat;\n wgsLon -= dLon;\n wgsLat -= dLat;\n if (Math.abs(dLon) < 1e-11 && Math.abs(dLat) < 1e-11) break;\n }\n\n out[0] = wgsLon;\n out[1] = wgsLat;\n return out;\n}\n\nfunction gcj02_bd09llInto(gcjLon, gcjLat, out) {\n const z = Math.sqrt(gcjLon * gcjLon + gcjLat * gcjLat) + 0.00002 * Math.sin(gcjLat * X_PI);\n const theta = Math.atan2(gcjLat, gcjLon) + 0.000003 * Math.cos(gcjLon * X_PI);\n out[0] = z * Math.cos(theta) + 0.0065;\n out[1] = z * Math.sin(theta) + 0.006;\n return out;\n}\n\nfunction bd09ll_gcj02Into(bdLon, bdLat, out) {\n const x = bdLon - 0.0065;\n const y = bdLat - 0.006;\n const z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * X_PI);\n const theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * X_PI);\n out[0] = z * Math.cos(theta);\n out[1] = z * Math.sin(theta);\n return out;\n}\n\nfunction bd09ll_gcj02_preciseInto(bdLon, bdLat, out) {\n bd09ll_gcj02Into(bdLon, bdLat, out);\n let gLon = out[0];\n let gLat = out[1];\n for (let i = 0; i < 2; i++) {\n gcj02_bd09llInto(gLon, gLat, _back);\n gLon -= (_back[0] - bdLon);\n gLat -= (_back[1] - bdLat);\n }\n out[0] = gLon;\n out[1] = gLat;\n return out;\n}\n\nfunction wgs84_epsg3857Into(lon, lat, out) {\n const clampedLat = Math.max(-EPSG3857_MAX_LAT, Math.min(EPSG3857_MAX_LAT, lat));\n const x = lon * EPSG3857_RADIUS * PI / 180.0;\n const radLat = clampedLat * PI / 180.0;\n out[0] = x;\n out[1] = EPSG3857_RADIUS * Math.log(Math.tan(PI / 4.0 + radLat / 2.0));\n return out;\n}\n\nfunction epsg3857_wgs84Into(x, y, out) {\n out[0] = (x / (EPSG3857_RADIUS * PI)) * 180.0;\n out[1] = (2.0 * Math.atan(Math.exp(y / EPSG3857_RADIUS)) - PI / 2.0) * 180.0 / PI;\n return out;\n}\n\n/**\n * GCJ-02 -> EPSG:3857. The datum shift is inverted before projecting, so\n * `precise` selects the fixed-point inverse instead of the fast one-off\n * approximation — mirroring `gcj02_wgs84_precise`. Defaults to `true`.\n */\nfunction gcj02_epsg3857Into(lon, lat, out, precise = true) {\n (precise ? gcj02_wgs84_preciseInto : gcj02_wgs84Into)(lon, lat, _back);\n return wgs84_epsg3857Into(_back[0], _back[1], out);\n}\n\n/** BD-09 -> EPSG:3857. `precise` behaves as in {@link gcj02_epsg3857Into}. */\nfunction bd09ll_epsg3857Into(lon, lat, out, precise = true) {\n if (precise) {\n bd09ll_gcj02_preciseInto(lon, lat, _forward);\n gcj02_wgs84_preciseInto(_forward[0], _forward[1], _back);\n return wgs84_epsg3857Into(_back[0], _back[1], out);\n }\n bd09ll_gcj02Into(lon, lat, _forward);\n gcj02_wgs84Into(_forward[0], _forward[1], _back);\n return wgs84_epsg3857Into(_back[0], _back[1], out);\n}\n\nfunction wgs84_bd09llInto(wgsLon, wgsLat, out) {\n wgs84_gcj02Into(wgsLon, wgsLat, _forward);\n return gcj02_bd09llInto(_forward[0], _forward[1], out);\n}\n\nfunction bd09ll_wgs84Into(bdLon, bdLat, out) {\n bd09ll_gcj02Into(bdLon, bdLat, _forward);\n return gcj02_wgs84Into(_forward[0], _forward[1], out);\n}\n\nfunction bd09ll_wgs84_preciseInto(bdLon, bdLat, out) {\n bd09ll_gcj02_preciseInto(bdLon, bdLat, _forward);\n return gcj02_wgs84_preciseInto(_forward[0], _forward[1], out);\n}\n\nfunction epsg3857_gcj02Into(x, y, out) {\n epsg3857_wgs84Into(x, y, _forward);\n return wgs84_gcj02Into(_forward[0], _forward[1], out);\n}\n\nfunction epsg3857_bd09llInto(x, y, out) {\n epsg3857_wgs84Into(x, y, _forward);\n return wgs84_bd09llInto(_forward[0], _forward[1], out);\n}\n\n/* ------------------------------------------------------------------ *\n * Public array-returning API (validated at the boundary)\n * ------------------------------------------------------------------ */\n\n/** Validates then delegates to an allocation-free core. */\nconst expose = (into, validate = assertLonLat) => (lon, lat) => {\n validate(lon, lat);\n return into(lon, lat, [0, 0]);\n};\n\nconst wgs84_gcj02 = expose(wgs84_gcj02Into);\nconst gcj02_wgs84 = expose(gcj02_wgs84Into);\nconst gcj02_wgs84_precise = expose(gcj02_wgs84_preciseInto);\nconst gcj02_bd09ll = expose(gcj02_bd09llInto);\nconst bd09ll_gcj02 = expose(bd09ll_gcj02Into);\nconst bd09ll_gcj02_precise = expose(bd09ll_gcj02_preciseInto);\nconst wgs84_bd09ll = expose(wgs84_bd09llInto);\nconst bd09ll_wgs84 = expose(bd09ll_wgs84Into);\nconst bd09ll_wgs84_precise = expose(bd09ll_wgs84_preciseInto);\nconst wgs84_epsg3857 = expose(wgs84_epsg3857Into);\nconst epsg3857_wgs84 = expose(epsg3857_wgs84Into, assertPlane);\nconst epsg3857_gcj02 = expose(epsg3857_gcj02Into, assertPlane);\nconst epsg3857_bd09ll = expose(epsg3857_bd09llInto, assertPlane);\n\nconst gcj02_epsg3857 = (lon, lat, precise = true) => {\n assertLonLat(lon, lat);\n return gcj02_epsg3857Into(lon, lat, [0, 0], precise);\n};\n\nconst bd09ll_epsg3857 = (lon, lat, precise = true) => {\n assertLonLat(lon, lat);\n return bd09ll_epsg3857Into(lon, lat, [0, 0], precise);\n};\n\n/**\n * WGS-84 -> GCJ-02 as `[lon, lat]`, matching every other entry point.\n * Previously took `(lat, lon)` and returned a `{ lat, lon }` object.\n */\nfunction gcj_encrypt(wgsLon, wgsLat) {\n return wgs84_gcj02(wgsLon, wgsLat);\n}\n\nconst GPS = {\n PI,\n x_pi: X_PI,\n EARTH_RADIUS: EPSG3857_RADIUS,\n\n delta,\n transformLat,\n transformLon,\n outOfChina,\n\n wgs84_gcj02,\n gcj02_wgs84,\n gcj02_wgs84_precise,\n gcj02_bd09ll,\n bd09ll_gcj02,\n bd09ll_gcj02_precise,\n wgs84_bd09ll,\n bd09ll_wgs84,\n bd09ll_wgs84_precise,\n wgs84_epsg3857,\n epsg3857_wgs84,\n gcj02_epsg3857,\n epsg3857_gcj02,\n bd09ll_epsg3857,\n epsg3857_bd09ll,\n\n gcj_encrypt,\n\n /** @deprecated internal helper, kept so existing callers keep working. */\n _assertLonLat: assertLonLat\n};\n\n/**\n * Allocation-free cores keyed by `<from>_<to>`, consumed by\n * ProjectionTransform so batch runs never allocate a result array.\n */\nGPS._into = {\n wgs84_gcj02: wgs84_gcj02Into,\n gcj02_wgs84: gcj02_wgs84Into,\n gcj02_wgs84_precise: gcj02_wgs84_preciseInto,\n gcj02_bd09ll: gcj02_bd09llInto,\n bd09ll_gcj02: bd09ll_gcj02Into,\n bd09ll_gcj02_precise: bd09ll_gcj02_preciseInto,\n wgs84_bd09ll: wgs84_bd09llInto,\n bd09ll_wgs84: bd09ll_wgs84Into,\n bd09ll_wgs84_precise: bd09ll_wgs84_preciseInto,\n wgs84_epsg3857: wgs84_epsg3857Into,\n epsg3857_wgs84: epsg3857_wgs84Into,\n gcj02_epsg3857: gcj02_epsg3857Into,\n epsg3857_gcj02: epsg3857_gcj02Into,\n bd09ll_epsg3857: bd09ll_epsg3857Into,\n epsg3857_bd09ll: epsg3857_bd09llInto\n};\n\nexport default GPS;","import GPS from './gps.js';\n\nconst crs = {\n bd09ll: '+proj=longlat +datum=BD09',\n gcj02: '+proj=longlat +datum=GCJ02',\n wgs84: '+proj=longlat +datum=WGS84 +no_defs',\n cgcs2000: '+proj=longlat +ellps=GRS80 +no_defs',\n epsg3857: '+proj=merc +a=6378137 +b=6378137 +lat_ts=0 +lon_0=0 +x_0=0 +y_0=0 +k=1 +units=m +nadgrids=@null +wktext +no_defs'\n};\n\nconst CRS_ALIASES = {\n 'bd-09': 'bd09ll',\n 'bd09': 'bd09ll',\n 'bd09ll': 'bd09ll',\n 'bd-09ll': 'bd09ll',\n 'epsg:4326': 'wgs84',\n 'epsg4326': 'wgs84',\n '4326': 'wgs84',\n 'cgcs2000': 'wgs84',\n 'cgcs-2000': 'wgs84',\n 'cgcs 2000': 'wgs84',\n 'epsg:4490': 'wgs84',\n 'epsg4490': 'wgs84',\n '4490': 'wgs84',\n 'gcj-02': 'gcj02',\n 'gcj02': 'gcj02',\n 'wgs-84': 'wgs84',\n 'wgs84': 'wgs84',\n 'epsg:3857': 'epsg3857',\n 'epsg3857': 'epsg3857',\n '3857': 'epsg3857',\n 'epsg:900913': 'epsg3857',\n 'epsg900913': 'epsg3857',\n '900913': 'epsg3857',\n 'mercator': 'epsg3857',\n 'webmercator': 'epsg3857'\n};\n\n/**\n * proj4 strings accepted as input, mapped to a `crs` key.\n *\n * Keys are matched after whitespace collapsing + lowercasing, so the many\n * spellings of the same datum in the wild all resolve. Values are normalised\n * through `CRS_ALIASES` before use (CGCS2000 folds onto WGS-84 at民用精度).\n */\nconst PROJ4_TO_CRS = {\n [crs.wgs84]: 'wgs84',\n [crs.cgcs2000]: 'cgcs2000',\n [crs.gcj02]: 'gcj02',\n [crs.bd09ll]: 'bd09ll',\n [crs.epsg3857]: 'epsg3857',\n\n // common WGS-84 spellings\n '+proj=longlat +datum=wgs84': 'wgs84',\n '+proj=longlat +ellps=wgs84': 'wgs84',\n '+proj=longlat +ellps=wgs84 +no_defs': 'wgs84',\n '+proj=longlat +a=6378137 +b=6356752.314245 +no_defs': 'wgs84',\n '+proj=longlat +a=6378137 +b=6356752.314245 +no_defs +towgs84=0,0,0': 'wgs84',\n\n // common CGCS2000 / GRS80 spellings\n '+proj=longlat +ellps=grs80': 'cgcs2000',\n '+proj=longlat +ellps=grs80 +no_defs': 'cgcs2000',\n '+proj=longlat +ellps=grs80 +towgs84=0,0,0,0,0,0,0 +no_defs': 'cgcs2000',\n '+proj=longlat +a=6378137 +b=6356752.314140 +no_defs': 'cgcs2000',\n\n // GCJ-02 / BD-09 are not standard EPSG datum codes, but these appear in configs\n '+proj=longlat +ellps=wgs84 +nadgrids=@china': 'gcj02'\n};\n\nconst ERR_COORD = 'Invalid coordinate: longitude and latitude must be finite numbers.';\n\n/** ProjectionTransform scratch buffer, kept module-level to avoid per-point allocation. */\nconst _result = [0, 0];\n\n/**\n * Explicit `precise` mapping, keyed by `<from>_<to>`.\n *\n * Only pairs whose datum shift has to be *inverted* appear here; everything\n * else is a forward formula that has no precision mode. Keeping this as a\n * table (rather than scattered `if`s) is what stops a new CRS pair from\n * silently inheriting the approximate inverse.\n */\nconst PRECISE_CORES = {\n gcj02_wgs84: GPS._into.gcj02_wgs84_precise,\n bd09ll_wgs84: GPS._into.bd09ll_wgs84_precise,\n bd09ll_gcj02: GPS._into.bd09ll_gcj02_precise\n};\n\n/** Fast counterparts used when `precise: false`. */\nconst FAST_CORES = {\n gcj02_epsg3857: (lon, lat, out) => GPS._into.gcj02_epsg3857(lon, lat, out, false),\n bd09ll_epsg3857: (lon, lat, out) => GPS._into.bd09ll_epsg3857(lon, lat, out, false)\n};\n\nfunction resolveInto(from, to, isPrecise) {\n const key = `${from}_${to}`;\n if (isPrecise) return PRECISE_CORES[key] || GPS._into[key];\n return FAST_CORES[key] || GPS._into[key];\n}\n\nconst ProjectionTransform = {\n crs,\n\n transform(source, fromCRS, toCRS, options = {}) {\n if (source == null) return null;\n\n const from = this._normalizeCRS(fromCRS);\n const to = this._normalizeCRS(toCRS);\n const transformCoord = this._getCoordTransformer(from, to, options);\n\n if (this._isCoord(source)) {\n return transformCoord(source);\n }\n\n if (Array.isArray(source)) {\n return this._transformCoordinateTree(source, transformCoord, options);\n }\n\n return this._transformGeoJSON(source, transformCoord, options);\n },\n\n _getCoordTransformer(from, to, options = {}) {\n const isMutate = Boolean(options.mutate);\n const isPrecise = options.precise !== false;\n\n if (from === to) {\n return isMutate\n ? coord => coord\n : coord => (coord.length > 2\n ? [Number(coord[0]), Number(coord[1]), ...coord.slice(2)]\n : [Number(coord[0]), Number(coord[1])]);\n }\n\n const into = resolveInto(from, to, isPrecise);\n if (typeof into !== 'function') {\n throw new Error(`Unsupported CRS transform: ${from} -> ${to}.`);\n }\n\n if (isMutate) {\n return coord => {\n const x = Number(coord[0]);\n const y = Number(coord[1]);\n if (!Number.isFinite(x) || !Number.isFinite(y)) throw new Error(ERR_COORD);\n into(x, y, _result);\n coord[0] = _result[0];\n coord[1] = _result[1];\n return coord;\n };\n }\n\n return coord => {\n const x = Number(coord[0]);\n const y = Number(coord[1]);\n if (!Number.isFinite(x) || !Number.isFinite(y)) throw new Error(ERR_COORD);\n into(x, y, _result);\n return coord.length > 2\n ? [_result[0], _result[1], ...coord.slice(2)]\n : [_result[0], _result[1]];\n };\n },\n\n _transformGeoJSON(geoJSON, transformCoord, options = {}) {\n if (!geoJSON || typeof geoJSON !== 'object') {\n throw new Error('Invalid GeoJSON object.');\n }\n\n const result = options.mutate ? geoJSON : { ...geoJSON };\n\n if (Array.isArray(geoJSON.bbox)) {\n result.bbox = this._transformBbox(geoJSON.bbox, transformCoord);\n }\n\n if (geoJSON.type === 'Feature') {\n result.geometry = geoJSON.geometry\n ? this._transformGeoJSON(geoJSON.geometry, transformCoord, options)\n : null;\n return result;\n }\n\n if (geoJSON.type === 'FeatureCollection') {\n if (!Array.isArray(geoJSON.features)) {\n throw new Error('Invalid FeatureCollection: features must be an array.');\n }\n if (options.mutate) {\n for (let i = 0; i < geoJSON.features.length; i++) {\n geoJSON.features[i] = this._transformGeoJSON(geoJSON.features[i], transformCoord, options);\n }\n result.features = geoJSON.features;\n } else {\n result.features = geoJSON.features.map(f => this._transformGeoJSON(f, transformCoord, options));\n }\n return result;\n }\n\n if (geoJSON.type === 'GeometryCollection') {\n if (!Array.isArray(geoJSON.geometries)) {\n throw new Error('Invalid GeometryCollection: geometries must be an array.');\n }\n if (options.mutate) {\n for (let i = 0; i < geoJSON.geometries.length; i++) {\n geoJSON.geometries[i] = geoJSON.geometries[i]\n ? this._transformGeoJSON(geoJSON.geometries[i], transformCoord, options)\n : null;\n }\n result.geometries = geoJSON.geometries;\n } else {\n result.geometries = geoJSON.geometries.map(g => (g ? this._transformGeoJSON(g, transformCoord, options) : null));\n }\n return result;\n }\n\n if ('coordinates' in geoJSON) {\n result.coordinates = this._transformCoordinateTree(geoJSON.coordinates, transformCoord, options);\n return result;\n }\n\n throw new Error(`Unsupported GeoJSON type: ${geoJSON.type || 'unknown'}.`);\n },\n\n _transformCoordinateTree(coordinates, transformCoord, options = {}) {\n if (coordinates == null) return coordinates;\n if (this._isCoord(coordinates)) return transformCoord(coordinates);\n if (!Array.isArray(coordinates)) throw new Error('Invalid coordinates: expected coordinate array.');\n\n if (options.mutate) {\n for (let i = 0; i < coordinates.length; i++) {\n coordinates[i] = this._transformCoordinateTree(coordinates[i], transformCoord, options);\n }\n return coordinates;\n }\n\n return coordinates.map(item => this._transformCoordinateTree(item, transformCoord, options));\n },\n\n _transformBbox(bbox, transformCoord) {\n if (!Array.isArray(bbox) || (bbox.length !== 4 && bbox.length !== 6)) {\n return bbox;\n }\n\n if (bbox.length === 4) {\n const [minX, minY, maxX, maxY] = bbox;\n const p1 = transformCoord([minX, minY]);\n const p2 = transformCoord([maxX, maxY]);\n return [\n Math.min(p1[0], p2[0]),\n Math.min(p1[1], p2[1]),\n Math.max(p1[0], p2[0]),\n Math.max(p1[1], p2[1])\n ];\n }\n\n const [minX, minY, minZ, maxX, maxY, maxZ] = bbox;\n const p1 = transformCoord([minX, minY, minZ]);\n const p2 = transformCoord([maxX, maxY, maxZ]);\n return [\n Math.min(p1[0], p2[0]),\n Math.min(p1[1], p2[1]),\n minZ,\n Math.max(p1[0], p2[0]),\n Math.max(p1[1], p2[1]),\n maxZ\n ];\n },\n\n _normalizeCRS(value) {\n if (!value) throw new Error('must provide a valid fromCRS and toCRS.');\n\n if (typeof value === 'object') {\n if (value.type === 'proj4' && value.properties && value.properties.proj) {\n const crsName = this._toCRS(value.properties.proj);\n if (crsName) return crsName;\n }\n throw new Error('Unsupported CRS object.');\n }\n\n const key = String(value).trim().toLowerCase();\n const normalized = CRS_ALIASES[key];\n if (!normalized) throw new Error(`Unsupported CRS: ${value}.`);\n return normalized;\n },\n\n /**\n * Resolves a proj4 definition to an internal CRS id, or `null`.\n * Always returns an id already folded through `CRS_ALIASES`.\n */\n _toCRS(proj) {\n if (typeof proj !== 'string') return null;\n\n const key = proj.trim().replace(/\\s+/g, ' ').toLowerCase();\n let crsName = PROJ4_TO_CRS[key];\n\n if (!crsName) {\n // honour caller-extended `crs` entries\n for (const name in this.crs) {\n if (key === String(this.crs[name]).trim().replace(/\\s+/g, ' ').toLowerCase()) {\n crsName = name;\n break;\n }\n }\n }\n\n return crsName ? (CRS_ALIASES[crsName] || crsName) : null;\n },\n\n /**\n * Structural position test only.\n *\n * Deliberately does *not* coerce with `Number()`: the coordinate\n * transformer validates and coerces once, so validating here too would\n * double the conversion cost on every point of a batch.\n */\n _isCoord(coordinate) {\n return Array.isArray(coordinate) &&\n coordinate.length >= 2 &&\n !Array.isArray(coordinate[0]) &&\n !Array.isArray(coordinate[1]);\n }\n};\n\nexport default ProjectionTransform;","const TYPE_MAP = {\n POINT: 'Point',\n LINESTRING: 'LineString',\n POLYGON: 'Polygon',\n MULTIPOINT: 'MultiPoint',\n MULTILINESTRING: 'MultiLineString',\n MULTIPOLYGON: 'MultiPolygon',\n GEOMETRYCOLLECTION: 'GeometryCollection'\n};\n\nconst REVERSE_TYPE_MAP = Object.fromEntries(\n Object.entries(TYPE_MAP).map(([wktType, geoJSONType]) => [geoJSONType, wktType])\n);\n\nconst WKT = {\n parse(wkt) {\n if (typeof wkt !== 'string' || !wkt.trim()) {\n throw new Error('Invalid WKT string.');\n }\n\n const source = wkt.trim();\n const header = source.match(/^([A-Za-z]+)(?:\\s+(ZM|Z|M))?\\s*/i);\n if (!header) throw new Error('Invalid WKT string.');\n\n const wktType = header[1].toUpperCase();\n const geoJSONType = TYPE_MAP[wktType];\n if (!geoJSONType) throw new Error(`Unsupported WKT type: ${wktType}.`);\n\n const body = source.slice(header[0].length).trim();\n if (/^EMPTY$/i.test(body)) {\n if (geoJSONType === 'GeometryCollection') {\n return { type: geoJSONType, geometries: [] };\n }\n return { type: geoJSONType, coordinates: this._emptyCoordinates(geoJSONType) };\n }\n\n if (!body.startsWith('(') || !body.endsWith(')')) {\n throw new Error('Invalid WKT string: missing coordinate parentheses.');\n }\n\n const content = this._stripOuterParens(body);\n\n if (geoJSONType === 'GeometryCollection') {\n return {\n type: 'GeometryCollection',\n geometries: this._splitTopLevel(content).map(item => this.parse(item))\n };\n }\n\n return {\n type: geoJSONType,\n coordinates: this._parseCoordinates(content, geoJSONType)\n };\n },\n\n stringify(geoJSON, options = {}) {\n if (!geoJSON || typeof geoJSON !== 'object' || !geoJSON.type) {\n throw new Error('Invalid GeoJSON.');\n }\n\n const wktType = REVERSE_TYPE_MAP[geoJSON.type];\n if (!wktType) throw new Error(`Unsupported geometry type: ${geoJSON.type}.`);\n\n const precision = typeof options === 'number' ? options : options?.precision;\n\n if (geoJSON.type === 'GeometryCollection') {\n if (!Array.isArray(geoJSON.geometries) || geoJSON.geometries.length === 0) {\n return 'GEOMETRYCOLLECTION EMPTY';\n }\n return `GEOMETRYCOLLECTION(${geoJSON.geometries.map(geom => this.stringify(geom, options)).join(', ')})`;\n }\n\n const coords = geoJSON.coordinates;\n if (this._isEmpty(coords)) return `${wktType} EMPTY`;\n\n return `${wktType}(${this._stringifyCoordinates(coords, geoJSON.type, precision)})`;\n },\n\n _parseCoordinates(content, type) {\n switch (type) {\n case 'Point':\n return this._parsePoint(content);\n case 'LineString':\n return this._parsePointList(content);\n case 'Polygon':\n return this._parsePolygon(content);\n case 'MultiPoint':\n return this._parseMultiPoint(content);\n case 'MultiLineString':\n return this._splitTopLevel(content).map(line => this._parsePointList(this._stripOptionalOuterParens(line)));\n case 'MultiPolygon':\n return this._splitTopLevel(content).map(poly => this._parsePolygon(this._stripOptionalOuterParens(poly)));\n default:\n throw new Error(`Unsupported geometry type: ${type}.`);\n }\n },\n\n _parsePoint(value) {\n const numbers = value.trim().split(/\\s+/).filter(Boolean).map(Number);\n if (numbers.length < 2 || numbers.some(n => !Number.isFinite(n))) {\n throw new Error(`Invalid WKT coordinate: ${value}.`);\n }\n return numbers;\n },\n\n _parsePointList(value) {\n const points = this._splitTopLevel(value).map(part => this._parsePoint(this._stripOptionalOuterParens(part)));\n if (!points.length) throw new Error('Invalid WKT coordinate list.');\n return points;\n },\n\n _parsePolygon(value) {\n const rings = this._splitTopLevel(value).map(ring => this._parsePointList(this._stripOptionalOuterParens(ring)));\n if (!rings.length) throw new Error('Invalid WKT polygon.');\n return rings;\n },\n\n _parseMultiPoint(value) {\n return this._splitTopLevel(value).map(point => this._parsePoint(this._stripOptionalOuterParens(point)));\n },\n\n _splitTopLevel(value) {\n const parts = [];\n let depth = 0;\n let start = 0;\n\n for (let i = 0; i < value.length; i++) {\n const char = value[i];\n if (char === '(') depth++;\n else if (char === ')') depth--;\n\n if (depth < 0) throw new Error('Invalid WKT string: unbalanced parentheses.');\n\n if (char === ',' && depth === 0) {\n parts.push(value.slice(start, i).trim());\n start = i + 1;\n }\n }\n\n if (depth !== 0) throw new Error('Invalid WKT string: unbalanced parentheses.');\n const last = value.slice(start).trim();\n if (last) parts.push(last);\n return parts;\n },\n\n _stripOuterParens(value) {\n const trimmed = value.trim();\n if (!trimmed.startsWith('(') || !trimmed.endsWith(')')) {\n throw new Error('Invalid WKT string: missing coordinate parentheses.');\n }\n return trimmed.slice(1, -1).trim();\n },\n\n _stripOptionalOuterParens(value) {\n const trimmed = value.trim();\n if (!trimmed.startsWith('(')) return trimmed;\n return this._stripOuterParens(trimmed);\n },\n\n _stringifyCoordinates(coords, type, precision) {\n switch (type) {\n case 'Point':\n return this._stringifyPoint(coords, precision);\n case 'LineString':\n return this._stringifyPointList(coords, precision);\n case 'Polygon':\n return this._stringifyPolygon(coords, precision);\n case 'MultiPoint':\n return coords.map(point => `(${this._stringifyPoint(point, precision)})`).join(', ');\n case 'MultiLineString':\n return coords.map(line => `(${this._stringifyPointList(line, precision)})`).join(', ');\n case 'MultiPolygon':\n return coords.map(poly => `(${this._stringifyPolygon(poly, precision)})`).join(', ');\n default:\n throw new Error(`Unsupported geometry type: ${type}.`);\n }\n },\n\n _stringifyPoint(point, precision) {\n if (!Array.isArray(point) || point.length < 2) throw new Error('Invalid coordinate.');\n return point.map(value => {\n const number = Number(value);\n if (!Number.isFinite(number)) throw new Error('Invalid coordinate value.');\n if (typeof precision === 'number' && precision >= 0) {\n return Number(number.toFixed(precision)).toString();\n }\n return String(number);\n }).join(' ');\n },\n\n _stringifyPointList(points, precision) {\n if (!Array.isArray(points)) throw new Error('Invalid coordinate list.');\n return points.map(point => this._stringifyPoint(point, precision)).join(', ');\n },\n\n _stringifyPolygon(rings, precision) {\n if (!Array.isArray(rings)) throw new Error('Invalid polygon coordinates.');\n return rings.map(ring => `(${this._stringifyPointList(ring, precision)})`).join(', ');\n },\n\n _emptyCoordinates(type) {\n return [];\n },\n\n _isEmpty(coords) {\n return Array.isArray(coords) && coords.length === 0;\n }\n};\n\nexport default WKT;\n","import GPS from './gps.js';\nimport ProjectionTransform from './projection.js';\nimport WKT from './wkt.js';\n\nconst giserConvertCrs = {\n GPS,\n ProjectionTransform,\n WKT,\n\n transform(input, fromCRS, toCRS, options) {\n if (input == null) return null;\n\n if (typeof input === 'string') {\n // blank / whitespace-only WKT is treated as \"no geometry\", not an error\n if (!input.trim()) return null;\n const geoJSON = WKT.parse(input);\n const transformed = ProjectionTransform.transform(geoJSON, fromCRS, toCRS, options);\n return WKT.stringify(transformed, options);\n }\n\n return ProjectionTransform.transform(input, fromCRS, toCRS, options);\n },\n\n transformPoint(coord, fromCRS, toCRS, options) {\n return this.transform(coord, fromCRS, toCRS, options);\n },\n\n transformPoints(points, fromCRS, toCRS, options) {\n return this.transform(points, fromCRS, toCRS, options);\n },\n\n transformGeoJSON(geoJSON, fromCRS, toCRS, options) {\n return this.transform(geoJSON, fromCRS, toCRS, options);\n },\n\n transformWKT(wkt, fromCRS, toCRS, options) {\n return this.transform(wkt, fromCRS, toCRS, options);\n }\n};\n\nexport { GPS, ProjectionTransform, WKT };\nexport default giserConvertCrs;\n"],"names":["PI","Math","X_PI","SEMI_MAJOR_AXIS","ECCENTRICITY_SQUARED","EPSG3857_RADIUS","EPSG3857_MAX_LAT","_delta","_forward","_back","assertLonLat","lon","lat","Number","isFinite","Error","assertPlane","x","y","outOfChina","Array","isArray","transformLat","ret","sqrt","abs","sin","transformLon","deltaInto","out","dLat","dLon","radLat","sinLat","magic","sqrtMagic","cos","wgs84_gcj02Into","wgsLon","wgsLat","gcj02_wgs84Into","gcjLon","gcjLat","gcj02_wgs84_preciseInto","i","gcj02_bd09llInto","z","theta","atan2","bd09ll_gcj02Into","bdLon","bdLat","bd09ll_gcj02_preciseInto","gLon","gLat","wgs84_epsg3857Into","clampedLat","max","min","log","tan","epsg3857_wgs84Into","atan","exp","gcj02_epsg3857Into","precise","bd09ll_epsg3857Into","wgs84_bd09llInto","bd09ll_wgs84Into","bd09ll_wgs84_preciseInto","epsg3857_gcj02Into","epsg3857_bd09llInto","expose","into","validate","wgs84_gcj02","gcj02_wgs84","gcj02_wgs84_precise","gcj02_bd09ll","bd09ll_gcj02","bd09ll_gcj02_precise","wgs84_bd09ll","bd09ll_wgs84","bd09ll_wgs84_precise","wgs84_epsg3857","epsg3857_wgs84","epsg3857_gcj02","epsg3857_bd09ll","GPS","x_pi","EARTH_RADIUS","delta","gcj02_epsg3857","bd09ll_epsg3857","gcj_encrypt","_assertLonLat","_into","crs","bd09ll","gcj02","wgs84","cgcs2000","epsg3857","CRS_ALIASES","bd09","epsg4326","epsg4490","epsg900913","mercator","webmercator","PROJ4_TO_CRS","ERR_COORD","_result","PRECISE_CORES","FAST_CORES","ProjectionTransform","transform","source","fromCRS","toCRS","options","from","this","_normalizeCRS","to","transformCoord","_getCoordTransformer","_isCoord","_transformCoordinateTree","_transformGeoJSON","isMutate","Boolean","mutate","isPrecise","coord","length","slice","key","resolveInto","geoJSON","result","bbox","_transformBbox","type","geometry","features","map","f","geometries","g","coordinates","item","minX","minY","maxX","maxY","p1","p2","minZ","maxZ","value","properties","proj","crsName","_toCRS","String","trim","toLowerCase","normalized","replace","name","coordinate","TYPE_MAP","POINT","LINESTRING","POLYGON","MULTIPOINT","MULTILINESTRING","MULTIPOLYGON","GEOMETRYCOLLECTION","REVERSE_TYPE_MAP","Object","fromEntries","entries","wktType","geoJSONType","WKT","parse","wkt","header","match","toUpperCase","body","test","_emptyCoordinates","startsWith","endsWith","content","_stripOuterParens","_splitTopLevel","_parseCoordinates","stringify","precision","geom","join","coords","_isEmpty","_stringifyCoordinates","_parsePoint","_parsePointList","_parsePolygon","_parseMultiPoint","line","_stripOptionalOuterParens","poly","numbers","split","filter","some","n","points","part","rings","ring","point","parts","depth","start","char","push","last","trimmed","_stringifyPoint","_stringifyPointList","_stringifyPolygon","number","toFixed","toString","input","transformed","transformPoint","transformPoints","transformGeoJSON","transformWKT"],"mappings":"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"}
|