{"version":3,"file":"MouseCoords.mjs","sources":["../../../../../../packages/components/controls/status-bar/MouseCoords.ts"],"sourcesContent":["import { debounce } from 'lodash-unified'\nimport prettifyCoordinates from './prettifyCoordinates'\nimport prettifyProjection from './prettifyProjection'\nimport EarthGravityModel1996 from './EarthGravityModel1996'\ninterface MouseCoords {\n  proj4Projection: string\n  projectionUnits: string\n  proj4longlat: string\n  lastHeightSamplePosition: Cesium.Cartographic\n  accurateSamplingDebounceTime: number\n  tileRequestInFlight: any\n  elevation: string\n  utmZone: string\n  latitude: string\n  longitude: string\n  north: string\n  east: string\n  geoidModel: EarthGravityModel1996\n  useProjection: boolean\n  debounceSampleAccurateHeight: any\n  decimal: number\n  rangeType: number\n}\ninterface MouseCoordsOption {\n  gridFileUrl: string\n  proj4Projection: string\n  projectionUnits: string\n  proj4longlat: string\n  decimal: number\n  rangeType: number\n}\nclass MouseCoords {\n  constructor(options: MouseCoordsOption) {\n    const { Cartographic, knockout } = Cesium\n    const gridFileUrl = options.gridFileUrl\n    gridFileUrl && (this.geoidModel = new EarthGravityModel1996(gridFileUrl))\n\n    this.proj4Projection = options.proj4Projection\n    this.projectionUnits = options.projectionUnits\n    this.proj4longlat = options.proj4longlat\n\n    this.lastHeightSamplePosition = new Cartographic()\n    this.accurateSamplingDebounceTime = 250\n    this.tileRequestInFlight = undefined\n\n    this.elevation = ''\n    this.utmZone = ''\n    this.latitude = ''\n    this.longitude = ''\n    this.north = ''\n    this.east = ''\n    this.useProjection = false\n    this.debounceSampleAccurateHeight = debounce(this.sampleAccurateHeight, this.accurateSamplingDebounceTime)\n    this.decimal = options.decimal || 5\n    this.rangeType = options.rangeType || 0\n\n    knockout.track(this, ['elevation', 'utmZone', 'latitude', 'longitude', 'north', 'east', 'useProjection'])\n  }\n\n  toggleUseProjection() {\n    this.useProjection = !this.useProjection\n  }\n\n  updateCoordinatesFromCesium(viewer, position) {\n    const { Cartographic, defined, EllipsoidTerrainProvider, Intersections2D, SceneMode } = Cesium\n    const scene = viewer.scene\n    const camera = scene.camera\n    const pickRay = camera.getPickRay(position)\n    const globe = scene.globe\n    const pickedTriangle = globe.pickTriangle(pickRay, scene)\n    if (defined(pickedTriangle)) {\n      // Get a fast, accurate-ish height every time the mouse moves.\n      const ellipsoid = globe.ellipsoid\n\n      const v0 = ellipsoid.cartesianToCartographic(pickedTriangle.v0)\n      const v1 = ellipsoid.cartesianToCartographic(pickedTriangle.v1)\n      const v2 = ellipsoid.cartesianToCartographic(pickedTriangle.v2)\n      const intersection = ellipsoid.cartesianToCartographic(\n        scene.mode === SceneMode.SCENE3D ? pickedTriangle.intersection : scene.globe.pick(pickRay, scene)\n      )\n      let errorBar\n\n      if (globe.terrainProvider instanceof EllipsoidTerrainProvider) {\n        intersection.height = undefined\n      } else {\n        const barycentric = Intersections2D.computeBarycentricCoordinates(\n          intersection.longitude,\n          intersection.latitude,\n          v0.longitude,\n          v0.latitude,\n          v1.longitude,\n          v1.latitude,\n          v2.longitude,\n          v2.latitude\n        )\n\n        if (barycentric.x >= -1e-15 && barycentric.y >= -1e-15 && barycentric.z >= -1e-15) {\n          const height = barycentric.x * v0.height + barycentric.y * v1.height + barycentric.z * v2.height\n          intersection.height = height\n        }\n        const geometricError = globe.terrainProvider.getLevelMaximumGeometricError(pickedTriangle.tile.level)\n        const approximateHeight = intersection.height\n        const minHeight = Math.max(pickedTriangle.tile.data.tileBoundingRegion.minimumHeight, approximateHeight - geometricError)\n        const maxHeight = Math.min(pickedTriangle.tile.data.tileBoundingRegion.maximumHeight, approximateHeight + geometricError)\n        const minHeightGeoid = minHeight - (this.geoidModel ? this.geoidModel.minimumHeight : 0.0)\n        const maxHeightGeoid = maxHeight + (this.geoidModel ? this.geoidModel.maximumHeight : 0.0)\n        errorBar = Math.max(Math.abs(approximateHeight - minHeightGeoid), Math.abs(maxHeightGeoid - approximateHeight))\n      }\n      Cartographic.clone(intersection, this.lastHeightSamplePosition)\n      const terrainProvider = globe.terrainProvider\n\n      this.cartographicToFields(intersection, errorBar)\n      if (!(terrainProvider instanceof EllipsoidTerrainProvider)) {\n        this.debounceSampleAccurateHeight(terrainProvider, intersection)\n      }\n    } else {\n      this.elevation = ''\n      this.utmZone = ''\n      this.latitude = ''\n      this.longitude = ''\n      this.north = ''\n      this.east = ''\n    }\n  }\n\n  cartographicToFields(coordinates, errorBar?) {\n    const { Math: CesiumMath } = Cesium\n    const latitude = CesiumMath.toDegrees(coordinates.latitude)\n    const longitude = CesiumMath.toDegrees(coordinates.longitude)\n\n    if (this.useProjection) {\n      const prettyProjection = prettifyProjection(longitude, latitude, this.proj4Projection, this.proj4longlat, this.projectionUnits)\n      this.utmZone = prettyProjection.utmZone\n      this.north = prettyProjection.north\n      this.east = prettyProjection.east\n    }\n\n    const prettyCoordinate = prettifyCoordinates(longitude, latitude, {\n      height: coordinates.height,\n      errorBar: errorBar,\n      decimal: this.decimal,\n      rangeType: this.rangeType\n    })\n\n    this.latitude = prettyCoordinate.latitude\n    this.longitude = prettyCoordinate.longitude\n    this.elevation = prettyCoordinate.elevation\n  }\n\n  sampleAccurateHeight(terrainProvider, position) {\n    const { Cartographic, sampleTerrainMostDetailed } = Cesium\n    if (this.tileRequestInFlight) {\n      // A tile request is already in flight, so reschedule for later.\n      this.debounceSampleAccurateHeight.cancel()\n      this.debounceSampleAccurateHeight(terrainProvider, position)\n      return\n    }\n\n    const positionWithHeight = Cartographic.clone(position)\n\n    const geoidHeightPromise = this.geoidModel ? this.geoidModel.getHeight(position.longitude, position.latitude) : undefined\n    const terrainPromise = sampleTerrainMostDetailed(terrainProvider, [positionWithHeight])\n    this.tileRequestInFlight = Promise.all([geoidHeightPromise, terrainPromise])\n      .then(result => {\n        const geoidHeight = result[0] || 0.0\n        this.tileRequestInFlight = undefined\n        if (Cartographic.equals(position, this.lastHeightSamplePosition)) {\n          position.height = positionWithHeight.height - geoidHeight\n          this.cartographicToFields(position)\n        } else {\n          // Mouse moved since we started this request, so the result isn't useful.  Try again next time.\n        }\n      })\n      .catch(() => {\n        this.tileRequestInFlight = undefined\n      })\n  }\n}\n\nconst scratchArray: Array<any> = []\nconst scratchSphereIntersectionResult = {\n  start: 0.0,\n  stop: 0.0\n}\nconst scratchV0 = {}\nconst scratchV1 = {}\nconst scratchV2 = {}\n\nexport function extendForMouseCoords() {\n  const { Globe, GlobeSurfaceTile, BoundingSphere, defaultValue, Cartesian3, defined, DeveloperError, IntersectionTests, SceneMode } = Cesium\n  Globe.prototype.pickTriangle =\n    Globe.prototype.pickTriangle ||\n    function (this, ray, scene, cullBackFaces, result) {\n      // >>includeStart('debug', pragmas.debug);\n      if (!defined(ray)) {\n        throw new DeveloperError('ray is required')\n      }\n      if (!defined(scene)) {\n        throw new DeveloperError('scene is required')\n      }\n      // >>includeEnd('debug');\n\n      cullBackFaces = defaultValue(cullBackFaces, true)\n\n      const mode = scene.mode\n      const projection = scene.mapProjection\n\n      const sphereIntersections = scratchArray\n      sphereIntersections.length = 0\n\n      const tilesToRender = this._surface._tilesToRender\n      let length = tilesToRender.length\n\n      let tile\n      let i\n\n      for (i = 0; i < length; ++i) {\n        tile = tilesToRender[i]\n        const surfaceTile = tile.data\n\n        if (!defined(surfaceTile)) {\n          continue\n        }\n\n        const boundingVolume = surfaceTile.pickBoundingSphere\n        if (mode !== SceneMode.SCENE3D) {\n          BoundingSphere.fromRectangleWithHeights2D(tile.rectangle, projection, surfaceTile.minimumHeight, surfaceTile.maximumHeight, boundingVolume)\n          Cartesian3.fromElements(boundingVolume.center.z, boundingVolume.center.x, boundingVolume.center.y, boundingVolume.center)\n        } else {\n          BoundingSphere.clone(surfaceTile.boundingSphere3D, boundingVolume)\n        }\n\n        const boundingSphereIntersection = IntersectionTests.raySphere(ray, boundingVolume, scratchSphereIntersectionResult)\n        if (defined(boundingSphereIntersection)) {\n          sphereIntersections.push(tile)\n        }\n      }\n\n      sphereIntersections.sort(createComparePickTileFunction(ray.origin))\n\n      let intersection\n      length = sphereIntersections.length\n      for (i = 0; i < length; ++i) {\n        intersection = sphereIntersections[i].data.pickTriangle(ray, scene.mode, scene.mapProjection, cullBackFaces, result)\n        if (defined(intersection)) {\n          intersection.tile = sphereIntersections[i]\n          break\n        }\n      }\n\n      return intersection\n    }\n\n  GlobeSurfaceTile.prototype.pickTriangle =\n    GlobeSurfaceTile.prototype.pickTriangle ||\n    function (this: any, ray, mode, projection, cullBackFaces) {\n      const mesh = this.renderedMesh\n      if (!defined(mesh)) {\n        return undefined\n      }\n\n      const vertices = mesh.vertices\n      const indices = mesh.indices\n      const encoding = mesh.encoding\n\n      const length = indices.length\n      for (let i = 0; i < length; i += 3) {\n        const i0 = indices[i]\n        const i1 = indices[i + 1]\n        const i2 = indices[i + 2]\n\n        const v0 = getPosition(encoding, mode, projection, vertices, i0, scratchV0)\n        const v1 = getPosition(encoding, mode, projection, vertices, i1, scratchV1)\n        const v2 = getPosition(encoding, mode, projection, vertices, i2, scratchV2)\n\n        const intersection = IntersectionTests.rayTriangle(ray, v0, v1, v2, cullBackFaces, new Cartesian3())\n        if (defined(intersection)) {\n          return {\n            intersection: intersection,\n            v0: v0,\n            v1: v1,\n            v2: v2\n          }\n        }\n      }\n\n      return undefined\n    }\n}\n\nfunction createComparePickTileFunction(rayOrigin) {\n  const { BoundingSphere } = Cesium\n  return function (a, b) {\n    const aDist = BoundingSphere.distanceSquaredTo(a.data.pickBoundingSphere, rayOrigin)\n    const bDist = BoundingSphere.distanceSquaredTo(b.data.pickBoundingSphere, rayOrigin)\n\n    return aDist - bDist\n  }\n}\n\nfunction getPosition(encoding, mode, projection, vertices, index, result) {\n  encoding.decodePosition(vertices, index, result)\n  const { Cartesian3, defined, SceneMode } = Cesium\n  if (defined(mode) && mode !== SceneMode.SCENE3D) {\n    const ellipsoid = projection.ellipsoid\n    const positionCart = ellipsoid.cartesianToCartographic(result)\n    projection.project(positionCart, result)\n    Cartesian3.fromElements(result.z, result.x, result.y, result)\n  }\n\n  return result\n}\n\nexport default MouseCoords\n"],"names":[],"mappings":"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"}