casc-cesium
Version:
Vue 3.x components for CesiumJS.
1 lines • 22.7 kB
Source Map (JSON)
{"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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"}