vue-cesium
Version:
Vue 3.x components for CesiumJS.
1 lines • 22.2 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 } = 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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"}