/* 引入Cesium */ // import * as Cesium from 'Cesium'; /** * 创建随机数 * @return {String} 唯一标识符 */ export function setSessionid(num) { let len = num || 32; let chars = "ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678"; let maxPos = chars.length; let pwd = ""; for (let i = 0; i < len; i++) { pwd += chars.charAt(Math.floor(Math.random() * maxPos)); } return pwd; } /** * 创建GUID * @return {String} 唯一标识符 */ export function guid() { function S4() { return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1); } return (S4() + S4() + "-" + S4() + "-" + S4() + "-" + S4() + "-" + S4() + S4() + S4()); } /** * 创建GUID * @return {String} 唯一标识符 */ export function getGuid(removeMinus) { let d = new Date().getTime(); let uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) { const r = (d + Math.random() * 16) % 16 | 0; d = Math.floor(d / 16); return (c === 'x' ? r : (r & 0x3 | 0x8)).toString(16); }); if (removeMinus) { uuid = uuid.replace(/-/g, ""); } return uuid; } /** * 获取非精确的地形的高度(一个点) * sampleTerrain : 获取非精确的地形的高度 * @param {Object} viewer 三维场景 * @param {Object} options * @param {Number} options.longitude 经度,以度为单位 * @param {Number} options.latitude 纬度,以度为单位 * @param {Number} options.level 指定地形级别 */ export function getHeigthByLngLat(viewer, options) { if (!viewer) throw new Cesium.DeveloperError('no viewer object!'); if (!Cesium.defined(options.longitude) && !Cesium.defined(options.latitude)) { throw new Cesium.DeveloperError("longitude and latitude are required."); } options.level = Cesium.defaultValue(options.level, 11); let positions = Cesium.Cartographic.fromDegrees(options.longitude, options.latitude); //经纬度转为世界坐标 let terrainProvider = viewer.terrainProvider; //异步函数 return new Promise((resolve, reject) => { //获取指定地形级别的高程 new Cesium.sampleTerrain(terrainProvider, options.level, [positions]).then(function(updatedPositions) { if (updatedPositions) { resolve(updatedPositions[0].height) } }) }) } /** * 获取非精确的地形的高度(多点) * sampleTerrain : 获取非精确的地形的高度 * @param {Object} viewer 三维场景 * @param {Object} options * @param {Number} options.points [[lng,lat],[lng,lat],......] * @param {Number} options.level 指定地形级别 */ export function getHeigthByPoints(viewer, options) { if (!viewer) throw new Cesium.DeveloperError('no viewer object!'); if (!Cesium.defined(options)) { throw new Cesium.DeveloperError("options is required."); } options.level = Cesium.defaultValue(options.level, 11); let positions = []; let points = options.points; for (let i = 0; i < points.length; i++) { let pointX = points[i][0]; let pointY = points[i][1]; positions.push( Cesium.Cartographic.fromDegrees(pointX, pointY) //经纬度转为世界坐标 ); } let terrainProvider = viewer.terrainProvider; //异步函数 return new Promise((resolve, reject) => { //获取指定地形级别的高程 new Cesium.sampleTerrain(terrainProvider, options.level, positions).then(function(updatedPositions) { if (updatedPositions) { resolve(updatedPositions); } }); }); } /** * 获取尽量精确的地形的高度(多点) * sampleTerrainMostDetailed: 获取尽量精确的地形的高度 * @param {Object} viewer 三维场景 * @param {Number} points [[lng,lat],[lng,lat],......] */ export function getHeigthByPointsMostDetailed(viewer, points) { if (!viewer) throw new Cesium.DeveloperError('no viewer object!'); if (!Cesium.defined(points)) { throw new Cesium.DeveloperError("points is required."); } let positions = []; for (let i = 0; i < points.length; i++) { let pointX = points[i][0]; let pointY = points[i][1]; positions.push(Cesium.Cartographic.fromDegrees(pointX, pointY)); //经纬度转为世界坐标; } let terrainProvider = viewer.terrainProvider; //异步函数 return new Promise((resolve, reject) => { let promise = new Cesium.sampleTerrainMostDetailed(terrainProvider, positions); promise.then(function(updatedPositions) { // positions[0].height and positions[1].height have been updated. // updatedPositions is just a reference to positions. resolve(updatedPositions); }); }) } /** * 获取尽量精确的地形的高度(单点) * sampleTerrainMostDetailed: 获取尽量精确的地形的高度 * @param {Object} viewer 三维场景 * @param {Number} points [lng,lat] */ export function getHeigthByPointMostDetailed(viewer, points) { if (!viewer) throw new Cesium.DeveloperError('no viewer object!'); if (!Cesium.defined(points)) { throw new Cesium.DeveloperError("points is required."); } let positions = Cesium.Cartographic.fromDegrees(points[0], points[1]); //经纬度转为世界坐标; let terrainProvider = viewer.terrainProvider; //异步函数 return new Promise((resolve, reject) => { let promise = new Cesium.sampleTerrainMostDetailed(terrainProvider, positions); promise.then(function(updatedPositions) { resolve(updatedPositions); }); }) } import '../../Assets/styles/tooltip.css'; export function createTooltip(frameDiv) { var tooltip = function(frameDiv) { var div = document.createElement('DIV'); div.className = "twipsy right"; var arrow = document.createElement('DIV'); arrow.className = "twipsy-arrow"; div.appendChild(arrow); var title = document.createElement('DIV'); title.className = "twipsy-inner"; div.appendChild(title); this._div = div; this._title = title; // add to frame div and display coordinates frameDiv.appendChild(div); } tooltip.prototype.setVisible = function(visible) { this._div.style.display = visible ? 'block' : 'none'; } tooltip.prototype.showAt = function(position, message) { if (position && message) { this.setVisible(true); this._title.innerHTML = message; this._div.style.left = position.x + 10 + "px"; this._div.style.top = (position.y - this._div.clientHeight / 2) + "px"; } } return new tooltip(frameDiv); }