common.js 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219
  1. /* 引入Cesium */
  2. // import * as Cesium from 'Cesium';
  3. /**
  4. * 创建随机数
  5. * @return {String} 唯一标识符
  6. */
  7. export function setSessionid(num) {
  8. let len = num || 32;
  9. let chars = "ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678";
  10. let maxPos = chars.length;
  11. let pwd = "";
  12. for (let i = 0; i < len; i++) {
  13. pwd += chars.charAt(Math.floor(Math.random() * maxPos));
  14. }
  15. return pwd;
  16. }
  17. /**
  18. * 创建GUID
  19. * @return {String} 唯一标识符
  20. */
  21. export function guid() {
  22. function S4() {
  23. return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1);
  24. }
  25. return (S4() + S4() + "-" + S4() + "-" + S4() + "-" + S4() + "-" + S4() + S4() + S4());
  26. }
  27. /**
  28. * 创建GUID
  29. * @return {String} 唯一标识符
  30. */
  31. export function getGuid(removeMinus) {
  32. let d = new Date().getTime();
  33. let uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
  34. const r = (d + Math.random() * 16) % 16 | 0;
  35. d = Math.floor(d / 16);
  36. return (c === 'x' ? r : (r & 0x3 | 0x8)).toString(16);
  37. });
  38. if (removeMinus) {
  39. uuid = uuid.replace(/-/g, "");
  40. }
  41. return uuid;
  42. }
  43. /**
  44. * 获取非精确的地形的高度(一个点)
  45. * sampleTerrain : 获取非精确的地形的高度
  46. * @param {Object} viewer 三维场景
  47. * @param {Object} options
  48. * @param {Number} options.longitude 经度,以度为单位
  49. * @param {Number} options.latitude 纬度,以度为单位
  50. * @param {Number} options.level 指定地形级别
  51. */
  52. export function getHeigthByLngLat(viewer, options) {
  53. if (!viewer) throw new Cesium.DeveloperError('no viewer object!');
  54. if (!Cesium.defined(options.longitude) && !Cesium.defined(options.latitude)) {
  55. throw new Cesium.DeveloperError("longitude and latitude are required.");
  56. }
  57. options.level = Cesium.defaultValue(options.level, 11);
  58. let positions = Cesium.Cartographic.fromDegrees(options.longitude, options.latitude); //经纬度转为世界坐标
  59. let terrainProvider = viewer.terrainProvider;
  60. //异步函数
  61. return new Promise((resolve, reject) => {
  62. //获取指定地形级别的高程
  63. new Cesium.sampleTerrain(terrainProvider, options.level, [positions]).then(function(updatedPositions) {
  64. if (updatedPositions) {
  65. resolve(updatedPositions[0].height)
  66. }
  67. })
  68. })
  69. }
  70. /**
  71. * 获取非精确的地形的高度(多点)
  72. * sampleTerrain : 获取非精确的地形的高度
  73. * @param {Object} viewer 三维场景
  74. * @param {Object} options
  75. * @param {Number} options.points [[lng,lat],[lng,lat],......]
  76. * @param {Number} options.level 指定地形级别
  77. */
  78. export function getHeigthByPoints(viewer, options) {
  79. if (!viewer) throw new Cesium.DeveloperError('no viewer object!');
  80. if (!Cesium.defined(options)) {
  81. throw new Cesium.DeveloperError("options is required.");
  82. }
  83. options.level = Cesium.defaultValue(options.level, 11);
  84. let positions = [];
  85. let points = options.points;
  86. for (let i = 0; i < points.length; i++) {
  87. let pointX = points[i][0];
  88. let pointY = points[i][1];
  89. positions.push(
  90. Cesium.Cartographic.fromDegrees(pointX, pointY) //经纬度转为世界坐标
  91. );
  92. }
  93. let terrainProvider = viewer.terrainProvider;
  94. //异步函数
  95. return new Promise((resolve, reject) => {
  96. //获取指定地形级别的高程
  97. new Cesium.sampleTerrain(terrainProvider, options.level, positions).then(function(updatedPositions) {
  98. if (updatedPositions) {
  99. resolve(updatedPositions);
  100. }
  101. });
  102. });
  103. }
  104. /**
  105. * 获取尽量精确的地形的高度(多点)
  106. * sampleTerrainMostDetailed: 获取尽量精确的地形的高度
  107. * @param {Object} viewer 三维场景
  108. * @param {Number} points [[lng,lat],[lng,lat],......]
  109. */
  110. export function getHeigthByPointsMostDetailed(viewer, points) {
  111. if (!viewer) throw new Cesium.DeveloperError('no viewer object!');
  112. if (!Cesium.defined(points)) {
  113. throw new Cesium.DeveloperError("points is required.");
  114. }
  115. let positions = [];
  116. for (let i = 0; i < points.length; i++) {
  117. let pointX = points[i][0];
  118. let pointY = points[i][1];
  119. positions.push(Cesium.Cartographic.fromDegrees(pointX, pointY)); //经纬度转为世界坐标;
  120. }
  121. let terrainProvider = viewer.terrainProvider;
  122. //异步函数
  123. return new Promise((resolve, reject) => {
  124. let promise = new Cesium.sampleTerrainMostDetailed(terrainProvider, positions);
  125. promise.then(function(updatedPositions) {
  126. // positions[0].height and positions[1].height have been updated.
  127. // updatedPositions is just a reference to positions.
  128. resolve(updatedPositions);
  129. });
  130. })
  131. }
  132. /**
  133. * 获取尽量精确的地形的高度(单点)
  134. * sampleTerrainMostDetailed: 获取尽量精确的地形的高度
  135. * @param {Object} viewer 三维场景
  136. * @param {Number} points [lng,lat]
  137. */
  138. export function getHeigthByPointMostDetailed(viewer, points) {
  139. if (!viewer) throw new Cesium.DeveloperError('no viewer object!');
  140. if (!Cesium.defined(points)) {
  141. throw new Cesium.DeveloperError("points is required.");
  142. }
  143. let positions = Cesium.Cartographic.fromDegrees(points[0], points[1]); //经纬度转为世界坐标;
  144. let terrainProvider = viewer.terrainProvider;
  145. //异步函数
  146. return new Promise((resolve, reject) => {
  147. let promise = new Cesium.sampleTerrainMostDetailed(terrainProvider, positions);
  148. promise.then(function(updatedPositions) {
  149. resolve(updatedPositions);
  150. });
  151. })
  152. }
  153. import '../../Assets/styles/tooltip.css';
  154. export function createTooltip(frameDiv) {
  155. var tooltip = function(frameDiv) {
  156. var div = document.createElement('DIV');
  157. div.className = "twipsy right";
  158. var arrow = document.createElement('DIV');
  159. arrow.className = "twipsy-arrow";
  160. div.appendChild(arrow);
  161. var title = document.createElement('DIV');
  162. title.className = "twipsy-inner";
  163. div.appendChild(title);
  164. this._div = div;
  165. this._title = title;
  166. // add to frame div and display coordinates
  167. frameDiv.appendChild(div);
  168. }
  169. tooltip.prototype.setVisible = function(visible) {
  170. this._div.style.display = visible ? 'block' : 'none';
  171. }
  172. tooltip.prototype.showAt = function(position, message) {
  173. if (position && message) {
  174. this.setVisible(true);
  175. this._title.innerHTML = message;
  176. this._div.style.left = position.x + 10 + "px";
  177. this._div.style.top = (position.y - this._div.clientHeight / 2) + "px";
  178. }
  179. }
  180. return new tooltip(frameDiv);
  181. }