123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219 |
- /* 引入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);
- }
|