{"version":3,"file":"GPS.mjs","sources":["../../../../../packages/sdk/utils/GPS.ts"],"sourcesContent":["import L from 'leaflet'\nimport type { LatLngLiteral, LatLngTuple } from 'leaflet'\n\ninterface LatLng {\n  lat: number\n  lng?: number\n  lon: number\n}\n\nexport class GPS {\n  // eslint-disable-next-line @typescript-eslint/no-loss-of-precision\n  static readonly PI: number = 3.14159265358979324\n  static readonly x_pi: number = (GPS.PI * 3000.0) / 180.0\n\n  static delta(lat: number, lon: number): LatLng {\n    const a = 6378245.0\n    // eslint-disable-next-line @typescript-eslint/no-loss-of-precision\n    const ee = 0.00669342162296594323\n    let dLat = this.transformLat(lon - 105.0, lat - 35.0)\n    let dLon = this.transformLon(lon - 105.0, lat - 35.0)\n    const radLat = (lat / 180.0) * GPS.PI\n    let magic = Math.sin(radLat)\n    magic = 1 - ee * magic * magic\n    const sqrtMagic = Math.sqrt(magic)\n    dLat = (dLat * 180.0) / (((a * (1 - ee)) / (magic * sqrtMagic)) * GPS.PI)\n    dLon = (dLon * 180.0) / ((a / sqrtMagic) * Math.cos(radLat) * GPS.PI)\n    return { lat: dLat, lon: dLon, lng: dLon }\n  }\n\n  // WGS-84 to GCJ-02\n  static gcj_encrypt(wgsLat: number, wgsLon: number, type?: boolean): LatLng {\n    let delta: LatLng\n    if (type) {\n      return { lat: wgsLat, lon: wgsLon }\n    } else if (!type || this.outOfChina(wgsLat, wgsLon)) {\n      delta = this.delta(wgsLat, wgsLon)\n      return { lat: wgsLat + delta.lat, lon: wgsLon + delta.lon }\n    } else {\n      delta = this.delta(wgsLat, wgsLon)\n      return { lat: wgsLat + delta.lat, lon: wgsLon + delta.lon }\n    }\n  }\n\n  static gcj_decrypt(gcjLat: number, gcjLon: number, type?: boolean): LatLng {\n    let delta: LatLng\n    if (type) {\n      return { lat: gcjLat, lon: gcjLon }\n    } else if (!type || this.outOfChina(gcjLat, gcjLon)) {\n      delta = this.delta(gcjLat, gcjLon)\n      return { lat: gcjLat - delta.lat, lon: gcjLon - delta.lon }\n    } else {\n      delta = this.delta(gcjLat, gcjLon)\n      return { lat: gcjLat - delta.lat, lon: gcjLon - delta.lon }\n    }\n  }\n\n  static gcj_decrypt_exact(gcjLat: number, gcjLon: number): LatLng {\n    const initDelta = 0.01\n    const threshold = 0.000000001\n    let dLat = initDelta,\n      dLon = initDelta\n    let mLat = gcjLat - dLat,\n      mLon = gcjLon - dLon\n    let pLat = gcjLat + dLat,\n      pLon = gcjLon + dLon\n    let wgsLat,\n      wgsLon,\n      i = 0\n\n    // eslint-disable-next-line no-constant-condition\n    while (true) {\n      wgsLat = (mLat + pLat) / 2\n      wgsLon = (mLon + pLon) / 2\n      const tmp = this.gcj_encrypt(wgsLat, wgsLon)\n      dLat = tmp.lat - gcjLat\n      dLon = tmp.lon - gcjLon\n      if (Math.abs(dLat) < threshold && Math.abs(dLon) < threshold) break\n\n      if (dLat > 0) pLat = wgsLat\n      else mLat = wgsLat\n      if (dLon > 0) pLon = wgsLon\n      else mLon = wgsLon\n\n      if (++i > 10000) break\n    }\n\n    return { lat: wgsLat, lon: wgsLon }\n  }\n\n  static bd_encrypt(gcjLat: any, gcjLon: any): LatLng {\n    const x = gcjLon,\n      y = gcjLat\n    const z = Math.sqrt(x * x + y * y) + 0.00002 * Math.sin(y * GPS.x_pi)\n    const theta = Math.atan2(y, x) + 0.000003 * Math.cos(x * GPS.x_pi)\n    const bdLon = z * Math.cos(theta) + 0.0065\n    const bdLat = z * Math.sin(theta) + 0.006\n    return { lat: bdLat, lon: bdLon }\n  }\n\n  static bd_decrypt(bdLat: number, bdLon: number): LatLng {\n    const x = bdLon - 0.0065,\n      y = bdLat - 0.006\n    const z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * GPS.x_pi)\n    const theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * GPS.x_pi)\n    const gcjLon = z * Math.cos(theta)\n    const gcjLat = z * Math.sin(theta)\n    return { lat: gcjLat, lon: gcjLon }\n  }\n\n  static mercator_encrypt(wgsLat: number, wgsLon: number): LatLng {\n    const x = (wgsLon * 20037508.34) / 180.0\n    let y =\n      Math.log(Math.tan(((90.0 + wgsLat) * GPS.PI) / 360.0)) / (GPS.PI / 180.0)\n    y = (y * 20037508.34) / 180.0\n    return { lat: y, lon: x }\n  }\n\n  static mercator_decrypt(mercatorLat: number, mercatorLon: number): LatLng {\n    const x = (mercatorLon / 20037508.34) * 180.0\n    let y = (mercatorLat / 20037508.34) * 180.0\n    y =\n      (180 / GPS.PI) *\n      (2 * Math.atan(Math.exp((y * GPS.PI) / 180.0)) - GPS.PI / 2)\n    return { lat: y, lon: x }\n  }\n\n  static distance(\n    latA: number,\n    lonA: number,\n    latB: number,\n    lonB: number\n  ): number {\n    const earthR = 6371\n    const x =\n      Math.cos((latA * GPS.PI) / 180.0) *\n      Math.cos((latB * GPS.PI) / 180.0) *\n      Math.cos(((lonA - lonB) * GPS.PI) / 180)\n    const y =\n      Math.sin((latA * GPS.PI) / 180.0) * Math.sin((latB * GPS.PI) / 180.0)\n    let s = x + y\n    if (s > 1) s = 1\n    if (s < -1) s = -1\n    const alpha = Math.acos(s)\n    const distance = alpha * earthR\n    return distance\n  }\n\n  static outOfChina(lat: number, lon: number): boolean {\n    if (lon < 72.004 || lon > 137.8347) return true\n    if (lat < 0.8293 || lat > 55.8271) return true\n    return false\n  }\n\n  static transformLat(x: number, y: number): number {\n    let ret =\n      -100.0 +\n      2.0 * x +\n      3.0 * y +\n      0.2 * y * y +\n      0.1 * x * y +\n      0.2 * Math.sqrt(Math.abs(x))\n    ret +=\n      ((20.0 * Math.sin(6.0 * x * GPS.PI) + 20.0 * Math.sin(2.0 * x * GPS.PI)) *\n        2.0) /\n      3.0\n    ret +=\n      ((20.0 * Math.sin(y * GPS.PI) + 40.0 * Math.sin((y / 3.0) * GPS.PI)) *\n        2.0) /\n      3.0\n    ret +=\n      (160.0 * Math.sin((y / 12.0) * GPS.PI) +\n        320.0 * Math.sin((y * GPS.PI) / 30.0) * 2.0) /\n      3.0\n\n    return ret\n  }\n\n  static transformLon(x: number, y: number): number {\n    let ret =\n      300.0 +\n      x +\n      2.0 * y +\n      0.1 * x * x +\n      0.1 * x * y +\n      0.1 * Math.sqrt(Math.abs(x))\n\n    ret +=\n      ((20.0 * Math.sin(6.0 * x * GPS.PI) + 20.0 * Math.sin(2.0 * x * GPS.PI)) *\n        2.0) /\n      3.0\n\n    ret +=\n      ((20.0 * Math.sin(x * GPS.PI) + 40.0 * Math.sin((x / 3.0) * GPS.PI)) *\n        2.0) /\n      3.0\n\n    ret +=\n      ((150.0 * Math.sin((x / 12.0) * GPS.PI) +\n        300.0 * Math.sin((x / 30.0) * GPS.PI)) *\n        2.0) /\n      3.0\n\n    return ret\n  }\n\n  // 将XYZ坐标转换为经纬度坐标\n  static xyz2Latlng(x: number, y: number, z: number): L.LatLng {\n    const EARTH_RADIUS = 6371000 // 使用实际地球半径或其他相关常数值替换\n    const lng = (x / 2 ** z) * 360 - 180\n    const lat =\n      (180 * Math.atan(Math.sinh(Math.PI * (0.5 - (2 * y) / EARTH_RADIUS)))) /\n      Math.PI\n\n    return L.latLng(lat, lng)\n  }\n\n  // 根据地图参数将经纬度坐标转换为GPS坐标\n  static latLngToGPSBymap(\n    latLng:\n      | LatLngLiteral\n      | LatLngTuple\n      | [number, number, number]\n      | { lat: number; lng: number; alt?: number | undefined },\n    map: { offsetC: boolean; mapType: string }\n  ): L.LatLng {\n    let latlng = L.latLng(latLng as any)\n\n    if (map.offsetC || map.mapType === 'MT_ESRI') {\n      const gcjLatlng = GPS.gcj_decrypt(latlng.lat, latlng.lng)\n      latlng = L.latLng(gcjLatlng.lat, gcjLatlng.lon)\n    }\n\n    return latlng\n  }\n\n  // 根据地图参数将GPS坐标转换为经纬度坐标\n  static gpsToLatLngBymap(\n    latLng:\n      | LatLngLiteral\n      | LatLngTuple\n      | [number, number, number]\n      | { lat: number; lng: number; alt?: number | undefined },\n    map: { offsetC: boolean; mapType: string }\n  ): L.LatLng {\n    let originalLatLng = L.latLng(latLng as any)\n\n    if (map.offsetC || map.mapType === 'MT_ESRI') {\n      // 如果需要将GPS坐标转换为带有偏移的坐标（即GCJ-02坐标），调用gcj_encrypt方法\n      const encryptedLatLng = GPS.gcj_encrypt(\n        originalLatLng.lat,\n        originalLatLng.lng\n      )\n      originalLatLng = L.latLng(encryptedLatLng.lat, encryptedLatLng.lon)\n    }\n\n    return originalLatLng\n  }\n}\n"],"names":["r","delta","t","n","e","l","this","transformLat","s","transformLon","o","PI","i","Math","sin","u","sqrt","cos","lat","lon","lng","gcj_encrypt","a","outOfChina","gcj_decrypt","gcj_decrypt_exact","h","c","b","M","L","abs","bd_encrypt","x_pi","atan2","bd_decrypt","mercator_encrypt","log","tan","mercator_decrypt","atan","exp","distance","acos","xyz2Latlng","sinh","m","latLng","latLngToGPSBymap","offsetC","mapType","gpsToLatLngBymap","GPS"],"mappings":"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"}