{"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, when } = 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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"}