123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959 |
- /**
- * 创建者:王成
- * 操作系统:MAC
- * 创建日期:2022年11月14日
- * 描述:工具类
- */
- /* 引入Cesium */
- // import * as Cesium from 'Cesium';
- /* 引入草图工具 */
- import {
- SketchViewModel
- } from './SketchViewModel.js'
- /**
- * 测量、图形查询、根据坐标生成图形
- */
- class CommonTools {
- /**
- * 默认初始化
- * @param {Object} viewer 三维场景
- * @param {JSON} [options] 配置项
- * @param {Boolean} [options.isClear] 是否清理前期已绘制内容
- * @param {Boolean} [options.isDrawPoint] 是否绘制参考点
- * @param {Boolean} [options.isRetainDrawPoint] 绘制完成,是否保留绘制参考点
- */
- constructor(viewer, options) {
- this._viewer = viewer;
- options = options || {};
- /* 配置是否绘制参考点 */
- if (options.isDrawPoint) {
- this._isDrawPoint = options.isDrawPoint;
- } else {
- this._isDrawPoint = false;
- }
- /* 配置绘制完成是否保留绘制参考点 */
- if (options.isRetainDrawPoint) {
- this._isRetainDrawPoint = options.isRetainDrawPoint;
- } else {
- this._isRetainDrawPoint = false;
- }
- /* 是否清理前期已绘制内容 */
- if (options.isClear) {
- this._isClear = options.isClear;
- } else {
- this._isClear = false;
- }
- this._sketchViewModel = new SketchViewModel(viewer, {
- iconType: SketchViewModel.SketchIconType.Blue,
- isDrawPoint: this._isDrawPoint,
- isRetainDrawPoint: this._isRetainDrawPoint,
- });
- let buttonDiv = document.getElementById("drawButtonDiv");
- if (buttonDiv) {
- //从页面移除
- document.body.removeChild(buttonDiv);
- }
- /* 初始化 */
- this._init();
- }
- /**
- * 初始化
- * @ignore
- */
- _init() {
- /* 绘制的实体名称 */
- this._measureEntityName = 'MeasureEntity';
- this._entities = this._viewer.entities;
- /* 标绘点图片 */
- this._measurePointImage =
- 'data:image/png;base64,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';
- this._iconBlue =
- 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA3ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQ1IDc5LjE2MzQ5OSwgMjAxOC8wOC8xMy0xNjo0MDoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDozNjZmZDYyMy02NmE4LWYzNDUtODc4MC00YmMwY2IzZWM4OTMiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MkEyMUE1MDg3NTAyMTFFREI0RUY4MjBCRjRGRDc0QUIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MkEyMUE1MDc3NTAyMTFFREI0RUY4MjBCRjRGRDc0QUIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTkgKFdpbmRvd3MpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6OWFmM2ZiODktNzQ4OS1kMDRkLTkyNzUtZDM5MWNhYzYwMGE1IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjM2NmZkNjIzLTY2YTgtZjM0NS04NzgwLTRiYzBjYjNlYzg5MyIv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';
- this._iconGreen =
- 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA3ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQ1IDc5LjE2MzQ5OSwgMjAxOC8wOC8xMy0xNjo0MDoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDozNjZmZDYyMy02NmE4LWYzNDUtODc4MC00YmMwY2IzZWM4OTMiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MjI1NDIwOUU3NTAyMTFFRDk0MTJGQzhGMTFCQkREODIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MjI1NDIwOUQ3NTAyMTFFRDk0MTJGQzhGMTFCQkREODIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTkgKFdpbmRvd3MpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6OWFmM2ZiODktNzQ4OS1kMDRkLTkyNzUtZDM5MWNhYzYwMGE1IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjM2NmZkNjIzLTY2YTgtZjM0NS04NzgwLTRiYzBjYjNlYzg5MyIv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';
- this._iconViolet =
- 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA3ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQ1IDc5LjE2MzQ5OSwgMjAxOC8wOC8xMy0xNjo0MDoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDozNjZmZDYyMy02NmE4LWYzNDUtODc4MC00YmMwY2IzZWM4OTMiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MzFDREU3Mjk3NTAyMTFFREE4MThDODBGNzMxNDBCQzEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MzFDREU3Mjg3NTAyMTFFREE4MThDODBGNzMxNDBCQzEiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTkgKFdpbmRvd3MpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6OWFmM2ZiODktNzQ4OS1kMDRkLTkyNzUtZDM5MWNhYzYwMGE1IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjM2NmZkNjIzLTY2YTgtZjM0NS04NzgwLTRiYzBjYjNlYzg5MyIv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';
- /* 用于面积测量 存储临时位置 经纬度格式 */
- this._measureTempPoints = [];
- }
- /**
- * 刷新场景 刷新一帧
- * @ignore
- */
- _updateScene() {
- this._viewer.scene.requestRender();
- }
- /**
- * 根据Entity的名称批量删除Entity
- * @ignore
- * @param {string} entityName 实体名称
- */
- _removeEntityByName(entityName) {
- /* 获取实体集合 */
- let entities = this._entities;
- /* 如果不存在实体集合或集合中没有数据 则返回 */
- if (!entities || !entities.values) return;
- let delEntitys = [];
- /* 循环获取当前集合中的所有实体 */
- for (let i = 0; i < entities.values.length; i++) {
- if (entities.values[i].name == entityName) {
- delEntitys.push(entities.values[i]);
- }
- }
- /* 删除符合条件的所有实体 */
- for (let i = 0; i < delEntitys.length; i++) {
- entities.remove(delEntitys[i]);
- }
- /* 更新场景 */
- this._updateScene();
- }
- /**
- * 资源清理
- * @ignore
- * @param {Boolean} isAll 是否清除已绘制内容
- */
- _clear(isAll) {
- if (isAll != undefined && isAll === true) {
- /* 删除所有绘制的实体 */
- this._removeEntityByName(this._measureEntityName);
- if (this._sketchViewModel != undefined) {
- this._sketchViewModel.sketchClear();
- }
- }
- /* 清理数组 */
- this._measureTempPoints = [];
- /* 清理变量 */
- this._altitudeDynamicLabel = undefined;
- /* 清理提示标签 */
- this._tooltipRemove();
- //app移除按钮
- let buttonDiv = document.getElementById("drawButtonDiv");
- if (buttonDiv) {
- //从页面移除
- document.body.removeChild(buttonDiv);
- }
- }
- /**
- * 普通颜色值转换为Cesium颜色
- * @ignore
- * @param {int} red 红色[0~255]
- * @param {int} green 绿色[0~255]
- * @param {int} blue 蓝色[0~255]
- * @param {int} alpha 透明度[0~1]
- * @return {Cesium.Color} Cesium格式的颜色
- */
- _toColor(red, green, blue, alpha) {
- return new Cesium.Color(red / 255.0, green / 255.0, blue / 255.0, alpha);
- }
- /**
- * 世界坐标系坐标转为经纬度坐标
- * @ignore
- * @param {JSON} cartesian 世界坐标
- * @param {Number} cartesian.x x坐标
- * @param {Number} cartesian.y y坐标
- * @param {Number} cartesian.z z坐标
- * @return {JSON} 经纬度格式坐标{long:lat:hei}
- */
- _cartesianToGeography(cartesian) {
- let ellipsoid = Cesium.Ellipsoid.WGS84;
- let cartographic = ellipsoid.cartesianToCartographic(cartesian);
- let latitude = Cesium.Math.toDegrees(cartographic.latitude);
- let longitude = Cesium.Math.toDegrees(cartographic.longitude);
- let altitude = cartographic.height;
- return {
- lon: longitude,
- lat: latitude,
- hei: altitude,
- }
- }
- /**
- * 绘制点
- * @ignore
- * @param {Object} coord 坐标
- * @param {Number} coord.x 空间坐标x
- * @param {Number} coord.y 空间坐标y
- * @param {Number} coord.z 空间坐标z
- * @param {String} label [点上面显示的文字标注]
- */
- _createPoint(coord, label) {
- let _self = this;
- let entity = new Cesium.Entity({
- name: _self._measureEntityName,
- position: coord,
- billboard: {
- image: _self._iconBlue,
- horizontalOrigin: Cesium.HorizontalOrigin.center,
- verticalOrigin: Cesium.VerticalOrigin.bottom,
- scale: 0.5,
- pixelOffset: new Cesium.Cartesian2(0, -11),
- disableDepthTestDistance: Number.POSITIVE_INFINITY,
- }
- });
- if (label) {
- entity.label = {
- text: label,
- font: '30px SimHei',
- scale: 0.5,
- fillColor: this._toColor(255, 255, 255, 1.0),
- outlineColor: this._toColor(14, 30, 79, 1.0),
- style: Cesium.LabelStyle.FILL_AND_OUTLINE,
- outlineWidth: 2.0,
- verticalOrigin: Cesium.VerticalOrigin.BOTTOM,
- showBackground: true,
- backgroundColor: _self._toColor(0, 0, 0, 0.6),
- disableDepthTestDistance: Number.POSITIVE_INFINITY,
- pixelOffset: new Cesium.Cartesian2(0, -28),
- }
- }
- this._entities.add(entity);
- this._updateScene();
- return entity;
- }
- /**
- * 绘制标签
- * @ignore
- * @param {Object} coord 坐标
- * @param {Number} coord.x 标签空间坐标x
- * @param {Number} coord.y 标签空间坐标y
- * @param {Number} coord.z 标签空间坐标z
- * @param {String} label 标签文字内容
- */
- _createLabel(coord, label) {
- let _self = this;
- let entity = new Cesium.Entity({
- name: _self._measureEntityName,
- position: coord,
- label: {
- text: label,
- font: '30px SimHei',
- scale: 0.5,
- fillColor: this._toColor(255, 255, 255, 1.0),
- outlineColor: this._toColor(14, 30, 79, 1.0),
- style: Cesium.LabelStyle.FILL_AND_OUTLINE,
- outlineWidth: 2.0,
- verticalOrigin: Cesium.VerticalOrigin.BOTTOM,
- showBackground: true,
- backgroundColor: _self._toColor(0, 0, 0, 0.6),
- disableDepthTestDistance: Number.POSITIVE_INFINITY,
- pixelOffset: new Cesium.Cartesian2(0, -14),
- }
- });
- this._entities.add(entity);
- this._updateScene();
- }
- /**
- * 创建高度测量的动态Label
- * @ignore
- */
- _createAltitudeDynamicLabel() {
- let _self = this;
- this._altitudeDynamicLabel = new Cesium.Entity({
- name: _self._measureEntityName,
- position: new Cesium.CallbackProperty(function() {
- return _self._altitudeLabelPosition;
- }, false),
- label: {
- text: new Cesium.CallbackProperty(function() {
- return _self._altitudeLabelText;
- }, false),
- font: '12px sans-serif',
- fillColor: this._toColor(255, 255, 255, 1.0),
- outlineColor: this._toColor(0, 154, 94, 1.0),
- style: Cesium.LabelStyle.FILL_AND_OUTLINE,
- outlineWidth: 1.0,
- verticalOrigin: Cesium.VerticalOrigin.BOTTOM,
- pixelOffset: new Cesium.Cartesian2(0, -28),
- showBackground: true,
- backgroundColor: this._toColor(0, 0, 0, 0.6),
- disableDepthTestDistance: Number.POSITIVE_INFINITY,
- }
- });
- this._entities.add(this._altitudeDynamicLabel);
- this._updateScene();
- }
- /**
- * 计算距离
- * @ignore
- * @param {Array<JSON>} positions 点集合
- * @return {string}:距离字符串(含单位)
- */
- _measureDistance(positions) {
- let distance = 0;
- for (let i = 0; i < positions.length - 1; i++) {
- let point1cartographic = Cesium.Cartographic.fromCartesian(positions[i]);
- let point2cartographic = Cesium.Cartographic.fromCartesian(positions[i + 1]);
- /**根据经纬度计算出距**/
- let geodesic = new Cesium.EllipsoidGeodesic();
- geodesic.setEndPoints(point1cartographic, point2cartographic);
- let s = geodesic.surfaceDistance;
- /* 返回两点之间的距离 */
- s = Math.sqrt(Math.pow(s, 2) + Math.pow(point2cartographic.height - point1cartographic.height,
- 2));
- distance = distance + s;
- }
- if (distance < 1000) return distance.toFixed(2) + "米";
- else return (distance / 1000).toFixed(2) + "公里";
- }
- /**
- * 计算空间距离
- * @ignore
- * @param {Array<JSON>} positions 点集合
- * @return {string}:距离字符串(含单位)
- */
- _measureSpaceDistance(positions) {
- let distance = 0;
- for (let i = 0; i < positions.length - 1; i++) {
- let point1 = positions[i];
- let point2 = positions[i + 1];
- /* 计算分量差 */
- let sx = Math.abs(point1.x - point2.x);
- let sy = Math.abs(point1.y - point2.y);
- let sz = Math.abs(point1.z - point2.z);
- /* 返回两点之间的空间距离 */
- let s = Math.sqrt(Math.pow(sx, 2) + Math.pow(sy, 2) + Math.pow(sz, 2));
- distance = distance + s;
- }
- if (distance < 1000) return distance.toFixed(2) + "米";
- else return (distance / 1000).toFixed(2) + "公里";
- }
- /**
- * 计算方向
- * @ignore
- * @param {Cartesian3} from 起始
- * @param {Cartesian3} to 终止
- * @return {float} 方向度数
- */
- _measureAreaBearing(from, to) {
- let radiansPerDegree = Math.PI / 180.0; //角度转化为弧度(rad)
- let degreesPerRadian = 180.0 / Math.PI; //弧度转化为角度
- let lat1 = from.lat * radiansPerDegree;
- let lon1 = from.lon * radiansPerDegree;
- let lat2 = to.lat * radiansPerDegree;
- let lon2 = to.lon * radiansPerDegree;
- let angle = -Math.atan2(Math.sin(lon1 - lon2) * Math.cos(lat2), Math.cos(lat1) * Math.sin(
- lat2) -
- Math.sin(lat1) * Math.cos(lat2) * Math.cos(lon1 - lon2));
- if (angle < 0) {
- angle += Math.PI * 2.0;
- }
- angle = angle * degreesPerRadian; //角度
- return angle;
- }
- /**
- * 计算角度
- * @ignore
- * @param {Cartesian3} p1 点1
- * @param {Cartesian3} p2 点2
- * @param {Cartesian3} p3 点3
- * @return {float} 返回角度
- */
- _calculateAreaAngle(p1, p2, p3) {
- let bearing21 = this._measureAreaBearing(p2, p1);
- let bearing23 = this._measureAreaBearing(p2, p3);
- let angle = bearing21 - bearing23;
- if (angle < 0) {
- angle += 360;
- }
- return angle;
- }
- /**
- * 计算两点之间的距离
- * @ignore
- * @param {Cartesian3} point1 点1
- * @param {Cartesian3} point2 点2
- */
- _calculateDistance(point1, point2) {
- let point1cartographic = Cesium.Cartographic.fromCartesian(point1);
- let point2cartographic = Cesium.Cartographic.fromCartesian(point2);
- /**根据经纬度计算出距离**/
- let geodesic = new Cesium.EllipsoidGeodesic();
- geodesic.setEndPoints(point1cartographic, point2cartographic);
- let s = geodesic.surfaceDistance;
- //返回两点之间的距离
- s = Math.sqrt(Math.pow(s, 2) + Math.pow(point2cartographic.height - point1cartographic
- .height, 2));
- return s;
- }
- /**
- * 计算面积
- * @ignore
- * @param {Array<JSON} points 经纬度格式点集合
- * @param {Array<JSON>} cartesianPoints 空间坐标系点集合
- * @return {float} 返回面积
- */
- _measureArea(points, cartesianPoints) {
- let self = this;
- let res = 0;
- /* 拆分三角面 */
- for (let i = 0; i < points.length - 2; i++) {
- let j = (i + 1) % points.length;
- let k = (i + 2) % points.length;
- let totalAngle = self._calculateAreaAngle(points[i], points[j], points[k]);
- let dis_temp1 = self._calculateDistance(cartesianPoints[i], cartesianPoints[j]);
- let dis_temp2 = self._calculateDistance(cartesianPoints[j], cartesianPoints[k]);
- res += dis_temp1 * dis_temp2 * Math.abs(Math.sin(totalAngle));
- }
- return res;
- }
- /**
- * 计算两个点的高度
- * @ignore
- * @param {Array<JSON>} points 点集合(集合长度必须大于等于2)
- */
- _calculatePolylineAltitudeHeight(points) {
- if (points === undefined || points.length < 2) return -1;
- let cartographic = Cesium.Cartographic.fromCartesian(points[0]);
- let cartographic1 = Cesium.Cartographic.fromCartesian(points[1]);
- let height_temp = cartographic1.height - cartographic.height;
- return Math.abs(height_temp).toFixed(2) + '米';
- }
- /**
- * 设置鼠标为柿子样式
- * @ignore
- */
- _setMousePointerStyle() {
- document.querySelector('body').style.cursor = 'crosshair';
- }
- /**
- * 恢复鼠标指针为默认样式
- * @ignore
- */
- _initMousePointerStyle() {
- document.querySelector('body').style.cursor = 'default';
- }
- /**
- * 检测程序运行环境
- * @return {CommonTools.RuntimeEnvironment}
- */
- _checkAppOrWeb() {
- if (window.navigator.userAgent.match(
- /(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i
- )) {
- return CommonTools.RuntimeEnvironment.App;
- } else {
- return CommonTools.RuntimeEnvironment.Web;
- }
- }
- /**
- * 是否是运行于App
- * @ignore
- */
- _isRuntimeApp() {
- if (this._checkAppOrWeb() === CommonTools.RuntimeEnvironment.App) {
- return true;
- }
- return false;
- }
- /**
- * 是否是运行于App
- * @ignore
- */
- _isRuntimeWeb() {
- if (this._checkAppOrWeb() === CommonTools.RuntimeEnvironment.Web) {
- return true;
- }
- return false;
- }
- /**
- * @ignore
- * 创建操作的主容器
- */
- _createOperationMainDom() {
- //创建画布
- let buttonDiv = document.createElement('div');
- buttonDiv.id = "drawButtonDiv";
- buttonDiv.style.width = '80px';
- buttonDiv.style.backgroundColor = 'rgba(5, 45, 155, 0.7)';
- buttonDiv.style.borderRadius = '5px';
- buttonDiv.style.display = 'flex';
- buttonDiv.style.flexDirection = 'column';
- buttonDiv.style.padding = '8px';
- buttonDiv.style.justifyContent = 'center';
- buttonDiv.style.position = 'absolute';
- buttonDiv.style.bottom = '150px';
- buttonDiv.style.right = '10px';
- let btnUndo = document.createElement('button');
- btnUndo.id = "btnDrawBackout";
- btnUndo.style.height = '30px';
- btnUndo.style.marginBottom = '8px';
- btnUndo.style.backgroundColor = 'rgba(52, 137, 255, 1.0)';
- btnUndo.style.color = 'rgb(255, 255, 255)';
- btnUndo.style.border = '0px solid red';
- btnUndo.style.borderRadius = '5px';
- btnUndo.innerHTML = '回退';
- btnUndo.style.fontSize = '13px';
- btnUndo.style.cursor = 'pointer';
- buttonDiv.appendChild(btnUndo);
- let btnCompletion = document.createElement('button');
- btnCompletion.id = "btnDrawComplete";
- btnCompletion.style.height = '30px';
- btnCompletion.style.backgroundColor = 'rgba(88, 185, 45, 1.0)';
- btnCompletion.style.color = 'rgb(255, 255, 255)';
- btnCompletion.style.border = '0px solid red';
- btnCompletion.style.borderRadius = '5px';
- btnCompletion.innerHTML = '完成';
- btnCompletion.style.fontSize = '13px';
- btnCompletion.style.cursor = 'pointer';
- buttonDiv.appendChild(btnCompletion);
- /* 加入到页面 */
- document.body.appendChild(buttonDiv);
- }
- /**
- * 创建顶部弹出提示消息 1秒后自动消失
- * @ignore
- * @param {String} message 消息内容
- */
- _showTooltipMessage(message) {
- let msgMainDom = document.getElementById('messageMainDom');
- if (msgMainDom !== null && msgMainDom !== undefined) {
- document.body.removeChild(msgMainDom);
- }
- msgMainDom = document.createElement('div');
- msgMainDom.style.width = '30%';
- msgMainDom.style.backgroundColor = 'rgba(237, 248, 230, 1.0)';
- msgMainDom.style.height = '45px';
- msgMainDom.style.border = 'solid 2px rgb(219, 241, 208)';
- msgMainDom.style.borderRadius = '8px';
- msgMainDom.style.display = 'flex';
- msgMainDom.style.alignItems = 'center';
- msgMainDom.style.paddingLeft = '10px';
- msgMainDom.style.color = 'rgb(91, 188, 48)';
- msgMainDom.style.fontSize = '14px';
- msgMainDom.style.fontWeight = '600';
- msgMainDom.style.position = 'absolute';
- msgMainDom.style.left = '35%';
- msgMainDom.style.transition = 'transform 1s';
- msgMainDom.style.transform = 'translateY(-90px)';
- msgMainDom.style.top = '0px';
- msgMainDom.style.zIndex = 1000;
- document.body.appendChild(msgMainDom);
- let strHtml = '';
- strHtml += "<div style='"
- strHtml += "background-color: rgb(88, 185, 45);";
- strHtml += "color: rgb(255, 255, 255);";
- strHtml += "height: 24px;";
- strHtml += "width: 24px;";
- strHtml += "border-radius: 20px;";
- strHtml += "display: flex;";
- strHtml += "justify-content: center;";
- strHtml += "align-items: center;";
- strHtml += "font-size: 14px;";
- strHtml += "margin-right: 18px;";
- strHtml += "'>✓</div>";
- strHtml += "<div>" + message + "</div>";
- msgMainDom.innerHTML = strHtml;
- msgMainDom.addEventListener('transitionend', function() {
- setTimeout(function() {
- document.body.removeChild(msgMainDom);
- }, 1000);
- }, false);
- setTimeout(function() {
- msgMainDom.style.transform = 'translateY(50px)';
- }, 100)
- }
- }
- /**
- * 鼠标跟随标签
- */
- Object.assign(CommonTools.prototype, {
- /**
- * 提示标签初始化
- * @ignore
- * @param {String} text 显示的文本内容
- */
- _tooltipInit: function(text) {
- let _self = this;
- this._tooltipId = 'tooltipJt';
- let tooltipObj = document.getElementById(this._tooltipId);
- if (tooltipObj === null) {
- tooltipObj = document.createElement('div');
- tooltipObj.id = this._tooltipId;
- document.body.appendChild(tooltipObj);
- let divStyle = '';
- divStyle += "top: 30px;";
- divStyle += "left: 30px;";
- divStyle += "position: absolute;";
- divStyle += "display: flex;";
- divStyle += "align-items: center;";
- divStyle += "width: 12x0px;";
- divStyle += "height: auto;";
- divStyle += "background-color: rgba(0, 0, 0, 0.65);";
- divStyle += "border-radius: 5px;";
- divStyle += "color: rgb(255, 255, 255);";
- divStyle += "font-size: 12px;";
- divStyle += "font-family: 'Alimama_ShuHeiTi_Bold';";
- divStyle += "padding: 8px;";
- divStyle += "border:solid 1px rgb(255,0,0);";
- tooltipObj.setAttribute('style', divStyle);
- }
- if (text != undefined) tooltipObj.innerHTML = text;
- /* 挂接鼠标移动事件 */
- document.onmousemove = function(event) {
- tooltipObj.style.left = (event.clientX + 10) + 'px';
- tooltipObj.style.top = (event.clientY - tooltipObj.offsetHeight / 2) + 'px';
- }
- },
- /**
- * 移除提示标签
- * @ignore
- */
- _tooltipRemove: function() {
- let tooltipObj = document.getElementById(this._tooltipId);
- if (tooltipObj != null) {
- document.body.removeChild(tooltipObj);
- }
- },
- /**
- * 设置提示标签文本
- * @ignore
- * @param {String} text 文本
- */
- _tooltipSetText: function(text) {
- let tooltipObj = document.getElementById(this._tooltipId);
- if (tooltipObj != null) {
- tooltipObj.innerHTML = text;
- }
- }
- })
- /**
- * 通用对外公开函数
- */
- Object.assign(CommonTools.prototype, /** @lends CommonTools.prototype */ {
- /**
- * 清理资源
- */
- clear: function() {
- /* 清理资源 */
- this._clear(true);
- /* 初始化鼠标样式 */
- this._initMousePointerStyle();
- }
- })
- /**
- * 测量类对外公开函数
- */
- Object.assign(CommonTools.prototype, /** @lends CommonTools.prototype */ {
- /**
- * 测量长度
- */
- measureLength: function(callError) {
- let _self = this;
- /* 临时创建的实体 */
- this._tempEntitys = [];
- /* 清理资源 */
- this._clear(this._isClear);
- /* 设置鼠标样式 */
- this._setMousePointerStyle();
- /* 设置鼠标跟随 */
- if (this._isRuntimeApp()) {
- this._showTooltipMessage("点击开始测量");
- } else {
- this._tooltipInit('点击开始测量');
- }
- /* 调用草图开始绘制 */
- if (this._isRuntimeWeb()) {
- this._sketchViewModel.sketchTools(SketchViewModel.SketchType.Line, {
- /**
- * 添加点回调
- * @ignore
- * @param {Array<JSON>} cPoints 世界坐标系点集合
- * @param {Array<JSON>} gPoints 球面坐标系点集合
- */
- onAdded: function(cPoints, gPoints) {
- if (cPoints.length === 1) {
- _self._createPoint(cPoints[0], '起点');
- } else {
- let distince = _self._measureDistance(cPoints);
- /* 追加中间距离 */
- let tempPoints = [cPoints[cPoints.length - 2], cPoints[cPoints.length - 1]];
- distince += ' +' + _self._measureDistance(tempPoints);
- _self._tempEntitys.push(_self._createPoint(cPoints[cPoints.length - 1],
- distince));
- }
- },
- /**
- * 撤销回调
- * @ignore
- */
- onUndo: function() {
- _self._viewer.entities.remove(_self._tempEntitys[_self._tempEntitys.length - 1]);
- _self._tempEntitys.pop();
- },
- /**
- * 移动回调
- * @ignore
- * @param {Cesium.Cartesian3} cPoint
- * @param {JSON} scPoint 屏幕点
- */
- onMoving: function(cPoint, scPoint) {
- _self._tooltipSetText('右键单击回退<br>左键双击结束绘制');
- },
- /**
- * 错误回调
- * @ignore
- * @param {String} error 错误信息
- */
- onError: function(error) {
- if (callError) callError(error);
- },
- /**
- * 完成回调
- * @ignore
- * @param {Array<JSON>} cPoints 世界坐标系点集合
- * @param {Array<JSON>} gPoints 球面坐标系点集合
- */
- onComplete: function(cPoints, gPoints) {
- _self._initMousePointerStyle();
- _self._tooltipRemove();
- }
- });
- } else {
- this._sketchViewModel.sketchTools(SketchViewModel.SketchType.Line, {
- /**
- * 添加点回调
- * @ignore
- * @param {Array<JSON>} cPoints 世界坐标系点集合
- * @param {Array<JSON>} gPoints 球面坐标系点集合
- */
- onAdded: function(cPoints, gPoints) {
- if (cPoints.length === 1) {
- // 移除提示标签
- _self._tooltipRemove();
- _self._createPoint(cPoints[0], '起点');
- let buttonDiv = document.getElementById("drawButtonDiv");
- if (buttonDiv == null) {
- //创建按钮
- _self._createOperationMainDom();
- //撤销
- document.getElementById("btnDrawBackout").onclick = () => {
- if (_self._sketchViewModel._sketchTempPoints.length > 2) {
- /* 移除正式点最有一个元素 */
- _self._sketchViewModel._sketchPoints.pop();
- /* 移除临时点倒数第二个元素 */
- _self._sketchViewModel._sketchTempPoints.splice(_self._sketchViewModel._sketchTempPoints.length - 1, 1);
- /* 如果绘制了点 则删除最后一个 */
- if (_self._sketchViewModel._isDrawPoint) {
- let lastPointEntity = _self._sketchViewModel._pointEntitys[_self._sketchViewModel._pointEntitys.length - 1];
- _self._sketchViewModel._entities.remove(lastPointEntity);
- /* 移除点实体数据中的最后一条数据 */
- _self._sketchViewModel._pointEntitys.pop();
- }
- _self._viewer.entities.remove(_self._tempEntitys[_self._tempEntitys.length - 1]);
- _self._tempEntitys.pop();
- }
- }
- //完成绘制
- document.getElementById("btnDrawComplete").onclick = () => {
- if (_self._sketchViewModel._sketchPoints.length < 2) {
- if (callError) callError("点数少于两个,禁止结束绘制!");
- return;
- }
- /* 删除临时线 */
- _self._sketchViewModel._removeEntityByObject(_self._sketchViewModel._sketchTempPolyline);
- /* 绘制正式线 */
- _self._sketchViewModel._createPolyline();
- /* 删除标记点 */
- if (!_self._sketchViewModel._isRetainDrawPoint) _self._sketchViewModel._removePointEntitys();
- /* 干掉事件句柄 释放资源*/
- _self._sketchViewModel._clearEvent(_self._sketchViewModel._sketchEventHandler);
- _self._initMousePointerStyle();
- _self._tooltipRemove();
- let buttonDiv = document.getElementById("drawButtonDiv");
- if (buttonDiv) {
- //从页面移除
- document.body.removeChild(buttonDiv);
- }
- }
- }
- } else {
- let distince = _self._measureDistance(cPoints);
- /* 追加中间距离 */
- let tempPoints = [cPoints[cPoints.length - 2], cPoints[cPoints.length - 1]];
- distince += ' +' + _self._measureDistance(tempPoints);
- _self._tempEntitys.push(_self._createPoint(cPoints[cPoints.length - 1], distince));
- }
- },
- });
- }
- },
- /**
- * 空间距离测量
- */
- measureSpatialLength: function(callError) {
- let _self = this;
- /* 清理资源 */
- this._clear(this._isClear);
- /* 设置鼠标样式 */
- this._setMousePointerStyle();
- /* 设置提示标签 */
- if (this._isRuntimeApp()) {
- this._showTooltipMessage("点击开始测量");
- } else {
- this._tooltipInit('点击开始测量');
- }
- /* 临时创建的实体 */
- this._tempEntitys = [];
- /* 调用草图开始绘制 */
- if (this._isRuntimeWeb()) {
- this._sketchViewModel.sketchTools(SketchViewModel.SketchType.Spatial, {
- /**
- * 添加点回调
- * @ignore
- * @param {Array<JSON>} cPoints 世界坐标系点集合
- * @param {Array<JSON>} gPoints 球面坐标系点集合
- */
- onAdded: function(cPoints, gPoints) {
- if (cPoints.length === 1) {
- _self._createPoint(cPoints[0], '起点');
- } else {
- let distince = _self._measureSpaceDistance(cPoints);
- _self._tempEntitys.push(_self._createPoint(cPoints[cPoints.length - 1],
- distince));
- }
- },
- /**
- * 撤销回调
- * @ignore
- */
- onUndo: function() {
- _self._viewer.entities.remove(_self._tempEntitys[_self._tempEntitys.length - 1]);
- _self._tempEntitys.pop();
- },
- /**
- * 移动回调
- * @ignore
- * @param {Cesium.Cartesian3} cPoint
- * @param {JSON} scPoint 屏幕点
- */
- onMoving: function(cPoint, scPoint) {
- _self._tooltipSetText('右键单击回退<br>左键双击结束绘制');
- },
- /**
- * 错误回调
- * @ignore
- * @param {String} error 错误信息
- */
- onError: function(error) {
- if (callError) callError(error);
- },
- /**
- * 完成回调
- * @ignore
- * @param {Array<JSON>} cPoints 世界坐标系点集合
- * @param {Array<JSON>} gPoints 球面坐标系点集合
- */
- onComplete: function(cPoints, gPoints) {
- _self._initMousePointerStyle();
- _self._tooltipRemove();
- }
- });
- } else {
- this._sketchViewModel.sketchTools(SketchViewModel.SketchType.Spatial, {
- /**
- * 添加点回调
- * @ignore
- * @param {Array<JSON>} cPoints 世界坐标系点集合
- * @param {Array<JSON>} gPoints 球面坐标系点集合
- */
- onAdded: function(cPoints, gPoints) {
- if (cPoints.length === 1) {
- // 移除提示标签
- _self._tooltipRemove();
- _self._createPoint(cPoints[0], '起点');
- let buttonDiv = document.getElementById("drawButtonDiv");
- if (buttonDiv == null) {
- //创建按钮
- _self._createOperationMainDom();
- //撤销
- document.getElementById("btnDrawBackout").onclick = () => {
- if (_self._sketchViewModel._sketchTempPoints.length > 2) {
- /* 移除正式点最有一个元素 */
- _self._sketchViewModel._sketchPoints.pop();
- /* 移除临时点倒数第二个元素 */
- _self._sketchViewModel._sketchTempPoints.splice(_self._sketchViewModel._sketchTempPoints.length - 1, 1);
- _self._viewer.entities.remove(_self._tempEntitys[_self._tempEntitys.length - 1]);
- _self._tempEntitys.pop();
- }
- }
- //完成绘制
- document.getElementById("btnDrawComplete").onclick = () => {
- if (_self._sketchViewModel._sketchPoints.length < 2) {
- if (callError) callError("点数少于两个,禁止结束绘制!");
- return;
- }
- /* 删除临时空间线 */
- _self._sketchViewModel._removeEntityByObject(_self._sketchViewModel._sketchTempSpatialPolyline);
- /* 绘制正式空间线 */
- _self._sketchViewModel._createSpatialPolyline();
- /* 删除标记点 */
- _self._sketchViewModel._removePointEntitys();
- /* 干掉事件句柄 释放资源*/
- _self._sketchViewModel._clearEvent(_self._sketchViewModel._sketchEventHandler);
- _self._initMousePointerStyle();
- _self._tooltipRemove();
- let buttonDiv = document.getElementById("drawButtonDiv");
- if (buttonDiv) {
- //从页面移除
- document.body.removeChild(buttonDiv);
- }
- }
- }
- } else {
- let distince = _self._measureSpaceDistance(cPoints);
- _self._tempEntitys.push(_self._createPoint(cPoints[cPoints.length - 1], distince));
- }
- },
- });
- }
- },
- /**
- * 测量面积
- */
- measureArea: function(callError) {
- let _self = this;
- /* 清理资源 */
- this._clear(this._isClear);
- /* 设置鼠标样式 */
- this._setMousePointerStyle();
- /* 设置提示工具 */
- if (this._isRuntimeApp()) {
- this._showTooltipMessage("点击开始测量");
- } else {
- this._tooltipInit('点击开始测量');
- }
- var _areaLabel = ""; //面积提示
- /* 调用草图开始绘制 */
- if (this._isRuntimeWeb()) {
- this._sketchViewModel.sketchTools(SketchViewModel.SketchType.Polygon, {
- /**
- * 添加点回调
- * @ignore
- * @param {Array<JSON>} cPoints 世界坐标系点集合
- * @param {Array<JSON>} gPoints 球面坐标系点集合
- */
- onAdded: function(cPoints, gPoints) {
- _self._measureTempPoints.push(_self._cartesianToGeography(cPoints[cPoints.length - 1]));
- if (cPoints.length === 1) {
- _areaLabel = '起点';
- var areaLabel = _self._createPoint(cPoints[0], new Cesium.CallbackProperty(function() {
- var lable = _areaLabel
- return lable;
- }, false));
- } else if (cPoints.length >= 3) {
- let area = _self._measureArea(_self._measureTempPoints, cPoints);
- if (area > 100000) {
- _areaLabel = (area / 100000).toFixed(2) + "km²";
- } else {
- _areaLabel = area.toFixed(2) + "m²";
- }
- }
- },
- /**
- * 撤销回调
- * @ignore
- */
- onUndo: function() {
- _self._measureTempPoints.pop();
- if (_self._measureTempPoints.length === 1) _self._areaLabel = "起点";
- },
- /**
- * 移动回调
- * @ignore
- * @param {Cesium.Cartesian3} cPoint
- * @param {JSON} scPoint 屏幕点
- */
- onMoving: function(cPoint, scPoint) {
- _self._tooltipSetText('右键单击回退<br>左键双击结束绘制');
- },
- /**
- * 错误回调
- * @ignore
- * @param {String} error 错误信息
- */
- onError: function(error) {
- if (callError) callError(error);
- },
- /**
- * 完成回调
- * @ignore
- * @param {Array<JSON>} cPoints 世界坐标系点集合
- * @param {Array<JSON>} gPoints 球面坐标系点集合
- */
- onComplete: function(cPoints, gPoints) {
- _self._initMousePointerStyle();
- _self._tooltipRemove();
- }
- });
- } else {
- this._sketchViewModel.sketchTools(SketchViewModel.SketchType.Polygon, {
- /**
- * 添加点回调
- * @ignore
- * @param {Array<JSON>} cPoints 世界坐标系点集合
- * @param {Array<JSON>} gPoints 球面坐标系点集合
- */
- onAdded: function(cPoints, gPoints) {
- _self._measureTempPoints.push(_self._cartesianToGeography(cPoints[cPoints.length - 1]));
- if (cPoints.length === 1) {
- // 移除提示标签
- _self._tooltipRemove();
- _areaLabel = '起点';
- var areaLabel = _self._createPoint(cPoints[0], new Cesium.CallbackProperty(function() {
- var lable = _areaLabel
- return lable;
- }, false));
- let buttonDiv = document.getElementById("drawButtonDiv");
- if (buttonDiv == null) {
- //创建按钮
- _self._createOperationMainDom();
- //撤销
- document.getElementById("btnDrawBackout").onclick = () => {
- if (_self._sketchViewModel._sketchTempPoints.length > 2) {
- /* 移除正式点最有一个元素 */
- _self._sketchViewModel._sketchPoints.pop();
- /* 移除临时点倒数第二个元素 */
- _self._sketchViewModel._sketchTempPoints.splice(_self._sketchViewModel._sketchTempPoints.length - 1, 1);
- /* 如果绘制了点 则删除最后一个 */
- if (_self._sketchViewModel._isDrawPoint) {
- let lastPointEntity = _self._sketchViewModel._pointEntitys[_self._sketchViewModel._pointEntitys.length - 1];
- _self._entities.remove(lastPointEntity);
- /* 移除点实体数据中的最后一条数据 */
- _self._sketchViewModel._pointEntitys.pop();
- }
- _self._measureTempPoints.pop();
- if (_self._measureTempPoints.length === 1) _self._areaLabel = "起点";
- }
- }
- //完成绘制
- document.getElementById("btnDrawComplete").onclick = () => {
- if (_self._sketchViewModel._sketchPoints.length < 3) {
- if (callError) callError("点数少于3个,禁止结束绘制!");
- return;
- }
- /* 删除临时线和面 */
- _self._sketchViewModel._removeEntityByObject(_self._sketchViewModel._sketchTempPolygon);
- _self._sketchViewModel._removeEntityByObject(_self._sketchViewModel._sketchTempPolyline);
- /* 绘制正式面 */
- _self._sketchViewModel._createPolygon();
- /* 删除标记点 */
- if (!_self._sketchViewModel._isRetainDrawPoint) _self._sketchViewModel._removePointEntitys();
- /* 干掉事件句柄 释放资源*/
- _self._sketchViewModel._clearEvent(_self._sketchViewModel._sketchEventHandler);
- _self._initMousePointerStyle();
- _self._tooltipRemove();
- let buttonDiv = document.getElementById("drawButtonDiv");
- if (buttonDiv) {
- //从页面移除
- document.body.removeChild(buttonDiv);
- }
- }
- }
- } else if (cPoints.length >= 3) {
- let area = _self._measureArea(_self._measureTempPoints, cPoints);
- if (area > 100000) {
- _areaLabel = (area / 100000).toFixed(2) + "km²";
- } else {
- _areaLabel = area.toFixed(2) + "m²";
- }
- }
- },
- });
- }
- },
- /**
- * 高度测量
- */
- measureHeight: function(callError) {
- let _self = this;
- /* 清理资源 */
- this._clear(this._isClear);
- /* 设置鼠标样式 */
- this._setMousePointerStyle();
- /* 设置提示标签 */
- if (this._isRuntimeApp()) {
- this._showTooltipMessage("点击开始绘制线");
- } else {
- this._tooltipInit('单击开始绘制线');
- }
- /* 调用草图开始绘制 */
- this._sketchViewModel.sketchTools(SketchViewModel.SketchType.Height, {
- /**
- * 添加回调
- * @ignore
- * @param {Cesium.Cartesian3} cPoint 点
- */
- onAdded: function(cPoint) {
- if (_self._isRuntimeApp()) {
- _self._showTooltipMessage("再次点击结束测量");
- } else {
- _self._tooltipSetText('再次单击结束测量');
- }
- },
- /**
- * 移动回调
- * @ignore
- * @param {Array<JSON>} cPoints 高度线集合
- * @param {Cesium.Cartesian3} centerPoint 顶端中心点
- */
- onMoving: function(cPoints, centerPoint) {
- let height = _self._calculatePolylineAltitudeHeight(cPoints);
- _self._altitudeLabelPosition = centerPoint;
- _self._altitudeLabelText = height;
- if (_self._altitudeDynamicLabel === undefined) {
- _self._createAltitudeDynamicLabel();
- }
- },
- /**
- * 错误回调
- * @ignore
- * @param {String} error 错误信息
- */
- onError: function(error) {
- if (callError) callError(error);
- },
- /**
- * 完成回调
- * @ignore
- * @param {Array<JSON>} Points 高度线集合
- * @param {Cesium.Cartesian3} centerPoint 顶端中心点
- */
- onComplete: function(cPoints, centerPoint) {
- let height = _self._calculatePolylineAltitudeHeight(cPoints);
- /* 干掉临时创建的 */
- _self._entities.remove(_self._altitudeDynamicLabel);
- /* 创建正式的 */
- _self._createLabel(centerPoint, height);
- /* 恢复鼠标样式 */
- _self._initMousePointerStyle();
- /* 移除提示标签 */
- _self._tooltipRemove();
- }
- });
- },
- /**
- * 三角测量
- */
- measureTriangle: function(callError) {
- let _self = this;
- /* 清理资源 */
- this._clear(this._isClear);
- /* 设置鼠标样式 */
- this._setMousePointerStyle();
- /* 设置提示标签 */
- if (this._isRuntimeApp()) {
- this._showTooltipMessage("点击开始绘制线");
- } else {
- this._tooltipInit('单击开始绘制线');
- }
- /* 调用草图开始绘制 */
- this._sketchViewModel.sketchTools(SketchViewModel.SketchType.Triangle, {
- /**
- * 添加回调
- * @ignore
- * @param {Cesium.Cartesian3} cPoint 点
- */
- onAdded: function(cPoint) {
- if (_self._isRuntimeApp()) {
- _self._showTooltipMessage("再次点击结束测量");
- } else {
- _self._tooltipSetText('再次单击结束测量');
- }
- },
- /**
- * 移动回调
- * @ignore
- * @param {Cesium.Cartesian3} cPoint 当前点
- */
- onMoving: function(cPoint) {
- _self._tooltipSetText('再次单击结束测量');
- },
- /**
- * 错误回调
- * @ignore
- * @param {String} error 错误信息
- */
- onError: function(error) {
- if (callError) callError(error);
- },
- /**
- * @ignore
- * @param {Cesium.Cartesian3} positions 高度顶端中心点坐标
- */
- onComplete: function(positions) {
- /* 恢复鼠标初始样式 */
- _self._initMousePointerStyle();
- /* 移除提示标签 */
- _self._tooltipRemove();
- /* 倾斜距离点集合 */
- let sPoints = [positions[0], positions[1]];
- let sDistince = _self._measureSpaceDistance(sPoints);
- /* 平面距离点集合 */
- let hPoints = [positions[1], positions[2]];
- let hDistince = _self._measureSpaceDistance(hPoints);
- /* 高度点*/
- let hePoints = [positions[2], positions[0]];
- let height = _self._calculatePolylineAltitudeHeight(hePoints);
- /* 创建正式的 */
- _self._createLabel(positions[0], '斜距:' + sDistince);
- _self._createLabel(positions[1], '平距:' + hDistince);
- _self._createLabel(positions[2], '高度:' + height);
- }
- });
- }
- })
- /**
- * 查询工具类对外公开函数
- */
- Object.assign(CommonTools.prototype, /** @lends CommonTools.prototype */ {
- /**
- * 点查询
- * @param {String} callComplete 成功回调callComplete(coordinates)
- */
- queryByPoint: function(callComplete) {
- let _self = this;
- /* 设置鼠标样式 */
- this._setMousePointerStyle();
- /* 清理资源 */
- this._clear(this._isClear);
- /* 设置鼠标跟随 */
- if (this._isRuntimeApp()) {
- this._showTooltipMessage("点击位置进行查询");
- } else {
- this._tooltipInit('单击位置进行查询');
- }
- /* 调用草图开始绘制 */
- this._sketchViewModel.sketchTools(SketchViewModel.SketchType.Point, {
- /**
- * 完成回调
- * @ignore
- * @param {Cesium.Cartesian3} cPoint 世界坐标系点
- * @param {JSON} gPoint 经纬度坐标系点
- */
- onComplete: function(cPoint, gPoint) {
- /* 重置鼠标样式 */
- _self._initMousePointerStyle();
- /* 移除提示标签 */
- _self._tooltipRemove();
- _self._createPoint(cPoint);
- let coordinates = gPoint.lng + ',' + gPoint.lat;
- if (callComplete) callComplete(coordinates);
- },
- });
- },
- /**
- * 多点查询
- * @param {String} callComplete 成功回调callComplete(Array<Number>)
- */
- queryByMultiplePoint: function(callComplete) {
- let _self = this;
- /* 设置鼠标样式 */
- this._setMousePointerStyle();
- /* 清理资源 */
- this._clear(this._isClear);
- /* 设置鼠标跟随 */
- this._tooltipInit("点击位置绘制<br>左键双击结束绘制");
- /* 临时创建的实体 */
- this._tempEntitys = [];
- /* 调用草图开始绘制 */
- this._sketchViewModel.sketchTools(SketchViewModel.SketchType.MultiplePoint, {
- /**
- * 添加回调
- * @ignore
- * @param {Cesium.Cartesian3} cPoint 世界坐标系点
- * @param {JSON} gPoint 经纬度坐标系点
- */
- onAdded: function(cPoint, gPoint) {
- let res = gPoint.lng.toFixed(6) + "," + gPoint.lat.toFixed(6);
- _self._tempEntitys.push(_self._createPoint(cPoint, res));
- },
- /**
- * 撤销回调
- * @ignore
- */
- onUndo: function() {
- _self._viewer.entities.remove(_self._tempEntitys[_self._tempEntitys.length -
- 1]);
- _self._tempEntitys.pop();
- },
- /**
- * 完成回调
- * @ignore
- * @param {Array<JSON>} cPoints 世界坐标系点集合
- * @param {Array<JSON>} gPoints 球面坐标系点集合
- */
- onComplete: function(cPoints, gPoints) {
- /* 重置鼠标样式 */
- _self._initMousePointerStyle();
- /* 移除提示标签 */
- _self._tooltipRemove();
- /* 返回字符串数组 */
- let res = [];
- for (let i = 0; i < gPoints.length; i++) {
- res.push(gPoints[i].lng);
- res.push(gPoints[i].lat);
- }
- if (callComplete) callComplete(res);
- },
- });
- },
- /**
- * 线查询
- * @param {String} callComplete 成功回调callComplete(coordinates)
- * @param {String} callError 失败回调callError(error)
- */
- queryByLine: function(callComplete, callError) {
- let _self = this;
- /* 清理资源 */
- this._clear(this._isClear);
- /* 设置鼠标样式 */
- this._setMousePointerStyle();
- /* 设置提示标签 */
- if (this._isRuntimeApp()) {
- this._showTooltipMessage("点击开始绘制线");
- } else {
- this._tooltipInit('单击开始绘制线');
- }
- /* 调用草图开始绘制 */
- if (this._isRuntimeWeb()) {
- this._sketchViewModel.sketchTools(SketchViewModel.SketchType.Line, {
- /**
- * 添加点回调
- * @ignore
- * @param {Array<JSON>} cPoints 世界坐标系点集合
- * @param {Array<JSON>} gPoints 球面坐标系点集合
- */
- onAdded: function(cPoints, gPoints) {
- },
- /**
- * 移动回调
- * @ignore
- * @param {Cesium.Cartesian3} cPoint
- * @param {JSON} scPoint 屏幕点
- */
- onMoving: function(cPoint, scPoint) {
- _self._tooltipSetText('右键单击回退<br>左键双击结束绘制开始查询');
- },
- /**
- * 错误回调
- * @ignore
- * @param {String} error 错误信息
- */
- onError: function(error) {
- if (callError) callError(error);
- },
- /**
- * 完成回调
- * @ignore
- * @param {Array<JSON>} cPoints 世界坐标系点集合
- * @param {Array<JSON>} gPoints 球面坐标系点集合
- */
- onComplete: function(cPoints, gPoints) {
- /* 恢复鼠标样式 */
- _self._initMousePointerStyle();
- /* 移除提示标签 */
- _self._tooltipRemove();
- /* 返回坐标串 */
- let coordinates = undefined;
- for (let i = 0; i < gPoints.length; i++) {
- let point = gPoints[i];
- if (coordinates === undefined) coordinates = point.lng + ',' + point.lat;
- else coordinates += ',' + point.lng + ',' + point.lat;
- }
- if (callComplete) callComplete(coordinates);
- },
- });
- } else {
- this._sketchViewModel.sketchTools(SketchViewModel.SketchType.Line, {
- /**
- * 添加点回调
- * @ignore
- * @param {Array<JSON>} cPoints 世界坐标系点集合
- * @param {Array<JSON>} gPoints 球面坐标系点集合
- */
- onAdded: function(cPoints, gPoints) {
- if (cPoints.length === 1) {
- /* 移除提示标签 */
- _self._tooltipRemove();
- let buttonDiv = document.getElementById("drawButtonDiv");
- if (buttonDiv == null) {
- //创建按钮
- _self._createOperationMainDom();
- //撤销
- document.getElementById("btnDrawBackout").onclick = () => {
- if (_self._sketchViewModel._sketchTempPoints.length > 2) {
- /* 移除正式点最有一个元素 */
- _self._sketchViewModel._sketchPoints.pop();
- /* 移除临时点倒数第二个元素 */
- _self._sketchViewModel._sketchTempPoints.splice(_self._sketchViewModel._sketchTempPoints.length - 1, 1);
- /* 如果绘制了点 则删除最后一个 */
- if (_self._sketchViewModel._isDrawPoint) {
- let lastPointEntity = _self._sketchViewModel._pointEntitys[_self._sketchViewModel._pointEntitys.length - 1];
- _self._sketchViewModel._entities.remove(lastPointEntity);
- /* 移除点实体数据中的最后一条数据 */
- _self._sketchViewModel._pointEntitys.pop();
- }
- }
- }
- //完成绘制
- document.getElementById("btnDrawComplete").onclick = () => {
- if (_self._sketchViewModel._sketchPoints.length < 2) {
- if (callError) callError("点数少于两个,禁止结束绘制!");
- return;
- }
- /* 删除临时线 */
- _self._sketchViewModel._removeEntityByObject(_self._sketchViewModel._sketchTempPolyline);
- /* 绘制正式线 */
- _self._sketchViewModel._createPolyline();
- /* 删除标记点 */
- if (!_self._sketchViewModel._isRetainDrawPoint) _self._sketchViewModel._removePointEntitys();
- /* 干掉事件句柄 释放资源*/
- _self._sketchViewModel._clearEvent(_self._sketchViewModel._sketchEventHandler);
- /* 恢复鼠标样式 */
- _self._initMousePointerStyle();
- /* 移除提示标签 */
- _self._tooltipRemove();
- /* 返回坐标串 */
- let coordinates = undefined;
- for (let i = 0; i < gPoints.length; i++) {
- let point = gPoints[i];
- if (coordinates === undefined) coordinates = point.lng + ',' + point.lat;
- else coordinates += ',' + point.lng + ',' + point.lat;
- }
- let buttonDiv = document.getElementById("drawButtonDiv");
- if (buttonDiv) {
- //从页面移除
- document.body.removeChild(buttonDiv);
- }
- if (callComplete) callComplete(coordinates);
- }
- }
- }
- },
- });
- }
- },
- /**
- * 区域查询
- * @param {String} callComplete 成功回调callComplete(coordinates)
- * @param {String} callError 失败回调callError(error)
- */
- queryByPolygon: function(callComplete, callError) {
- let _self = this;
- /* 清理资源 */
- this._clear(this._isClear);
- /* 设置鼠标样式 */
- this._setMousePointerStyle();
- /* 设置提示标签 */
- if (this._isRuntimeApp()) {
- this._showTooltipMessage("点击开始绘制区域");
- } else {
- this._tooltipInit('单击开始绘制区域');
- }
- /* 调用草图开始绘制 */
- if (this._isRuntimeWeb()) {
- this._sketchViewModel.sketchTools(SketchViewModel.SketchType.Polygon, {
- /**
- * 移动回调
- * @ignore
- * @param {Cesium.Cartesian3} cPoint
- * @param {JSON} scPoint 屏幕点
- */
- onMoving: function(cPoint, scPoint) {
- _self._tooltipSetText('右键单击回退<br>左键双击结束绘制开始查询');
- },
- /**
- * 错误回调
- * @ignore
- * @param {String} error 错误信息
- */
- onError: function(error) {
- if (callError) callError(error);
- },
- /**
- * 完成回调
- * @ignore
- * @param {Array<JSON>} cPoints 世界坐标系点集合
- * @param {Array<JSON>} gPoints 球面坐标系点集合
- */
- onComplete: function(cPoints, gPoints) {
- /* 重置鼠标样式 */
- _self._initMousePointerStyle();
- /* 移除提示标签 */
- _self._tooltipRemove();
- /* 返回坐标串 */
- let coordinates = undefined;
- for (let i = 0; i < gPoints.length; i++) {
- let point = gPoints[i];
- if (coordinates === undefined) coordinates = point.lng + ',' + point.lat;
- else coordinates += ',' + point.lng + ',' + point.lat;
- }
- coordinates += ',' + gPoints[0].lng + ',' + gPoints[0].lat;
- if (callComplete) callComplete(coordinates);
- },
- });
- } else {
- this._sketchViewModel.sketchTools(SketchViewModel.SketchType.Polygon, {
- /**
- * 添加点回调
- * @ignore
- * @param {Array<JSON>} cPoints 世界坐标系点集合
- * @param {Array<JSON>} gPoints 球面坐标系点集合
- */
- onAdded: function(cPoints, gPoints) {
- if (cPoints.length === 1) {
- // 移除提示标签
- _self._tooltipRemove();
- let buttonDiv = document.getElementById("drawButtonDiv");
- if (buttonDiv == null) {
- //创建按钮
- _self._createOperationMainDom();
- //撤销
- document.getElementById("btnDrawBackout").onclick = () => {
- if (_self._sketchViewModel._sketchTempPoints.length > 2) {
- /* 移除正式点最有一个元素 */
- _self._sketchViewModel._sketchPoints.pop();
- /* 移除临时点倒数第二个元素 */
- _self._sketchViewModel._sketchTempPoints.splice(_self._sketchViewModel._sketchTempPoints.length - 1, 1);
- /* 如果绘制了点 则删除最后一个 */
- if (_self._sketchViewModel._isDrawPoint) {
- let lastPointEntity = _self._sketchViewModel._pointEntitys[_self._sketchViewModel._pointEntitys.length - 1];
- _self._entities.remove(lastPointEntity);
- /* 移除点实体数据中的最后一条数据 */
- _self._sketchViewModel._pointEntitys.pop();
- }
- }
- }
- //完成绘制
- document.getElementById("btnDrawComplete").onclick = () => {
- if (_self._sketchViewModel._sketchPoints.length < 3) {
- if (callError) callError("点数少于3个,禁止结束绘制!");
- return;
- }
- /* 删除临时线和面 */
- _self._sketchViewModel._removeEntityByObject(_self._sketchViewModel._sketchTempPolygon);
- _self._sketchViewModel._removeEntityByObject(_self._sketchViewModel._sketchTempPolyline);
- /* 绘制正式面 */
- _self._sketchViewModel._createPolygon();
- /* 删除标记点 */
- if (!_self._sketchViewModel._isRetainDrawPoint) _self._sketchViewModel._removePointEntitys();
- /* 干掉事件句柄 释放资源*/
- _self._sketchViewModel._clearEvent(_self._sketchViewModel._sketchEventHandler);
- /* 重置鼠标样式 */
- _self._initMousePointerStyle();
- /* 移除提示标签 */
- _self._tooltipRemove();
- /* 返回坐标串 */
- let coordinates = undefined;
- for (let i = 0; i < gPoints.length; i++) {
- let point = gPoints[i];
- if (coordinates === undefined) coordinates = point.lng + ',' + point.lat;
- else coordinates += ',' + point.lng + ',' + point.lat;
- }
- coordinates += ',' + gPoints[0].lng + ',' + gPoints[0].lat;
- let buttonDiv = document.getElementById("drawButtonDiv");
- if (buttonDiv) {
- //从页面移除
- document.body.removeChild(buttonDiv);
- }
- if (callComplete) callComplete(coordinates);
- }
- }
- }
- },
- });
- }
- },
- /**
- * 圆查询
- * @param {String} callComplete 成功回调callComplete(center,radius)
- */
- queryByCircle: function(callComplete) {
- let _self = this;
- /* 清理资源 */
- this._clear(this._isClear);
- /* 设置鼠标样式 */
- this._setMousePointerStyle();
- /* 设置提示标签 */
- if (this._isRuntimeApp()) {
- this._showTooltipMessage("点击开始绘制圆");
- } else {
- this._tooltipInit('单击开始绘制圆');
- }
- /* 调用草图开始绘制 */
- this._sketchViewModel.sketchTools(SketchViewModel.SketchType.Circle, {
- /**
- * 添加回调
- * @ignore
- * @param {JSON} center 中心点
- */
- onAdded: function(center) {
- if (_self._isRuntimeApp()) {
- _self._showTooltipMessage("再次点击结束绘制");
- } else {
- _self._tooltipInit('再次单击结束绘制');
- }
- },
- /**
- * 完成回调
- * @ignore
- * @param {JSON} center 中心点
- * @param {Number} radius 半径
- */
- onComplete: function(center, radius) {
- /* 恢复鼠标样式 */
- _self._initMousePointerStyle();
- /* 移除提示标签 */
- _self._tooltipRemove();
- /* 返回圆心坐标及半径 */
- if (callComplete) callComplete(center.lng + "," + center.lat, radius);
- },
- });
- },
- /**
- * 矩形查询
- * @param {String} callComplete 成功回调callComplete(coordinates)
- */
- queryByRectangle: function(callComplete) {
- let _self = this;
- /* 清理资源 */
- this._clear(this._isClear);
- /* 设置鼠标样式 */
- this._setMousePointerStyle();
- /* 设置提示标签 */
- if (this._isRuntimeApp()) {
- this._showTooltipMessage("点击开始绘制矩形");
- } else {
- this._tooltipInit('单击开始绘制矩形');
- }
- /* 调用草图开始绘制 */
- this._sketchViewModel.sketchTools(SketchViewModel.SketchType.Rectangle, {
- /**
- * 添加回调
- * @ignore
- * @param {JSON} center 中心点
- */
- onAdded: function(center) {
- if (_self._isRuntimeApp()) {
- _self._showTooltipMessage("再次点击结束绘制");
- } else {
- _self._tooltipInit('再次单击结束绘制');
- }
- },
- /**
- * 完成回调
- * @ignore
- * @param {Array<JSON>} gPoints 球面坐标系点集合
- */
- onComplete: function(gPoints) {
- /* 恢复鼠标样式 */
- _self._initMousePointerStyle();
- /* 移除提示标签 */
- _self._tooltipRemove();
- /* 返回坐标串 */
- let coordinates = undefined;
- for (let i = 0; i < gPoints.length; i++) {
- let point = gPoints[i];
- if (coordinates === undefined) coordinates = point.lng + ',' + point.lat;
- else coordinates += ',' + point.lng + ',' + point.lat;
- }
- if (callComplete) callComplete(coordinates);
- },
- });
- },
- })
- /**
- * 根据坐标绘制相关图形对外公开函数
- */
- Object.assign(CommonTools.prototype, /** @lends CommonTools.prototype */ {
- /**
- * 绘制面拉伸体
- * @param {String} callComplete 成功回调callComplete()
- */
- drawPolygonBody: function(callComplete) {
- let _self = this;
- /* 清理资源 */
- this._clear(this._isClear);
- /* 设置鼠标样式 */
- this._setMousePointerStyle();
- /* 设置提示标签 */
- this._tooltipInit('点击开始绘制');
- /* 调用草图开始绘制 */
- this._sketchViewModel.sketchTools(SketchViewModel.SketchType.PolygonBody, {
- /**
- * 添加点回调
- * @ignore
- * @param {Array<JSON>} cPoints 世界坐标系点集合
- * @param {Array<JSON>} gPoints 球面坐标系点集合
- */
- onAdded: function(cPoints, gPoints) {
- if (cPoints.length === 0) {
- _self._tooltipInit('点击开始绘制');
- } else if (cPoints.length < 3) {
- _self._tooltipInit('右键单击回退');
- } else {
- _self._tooltipInit('右键单击回退<br>左键双击结束绘制');
- }
- },
- /**
- * 撤销回调
- * @ignore
- * @param {Array<JSON>} cPoints 世界坐标系点集合
- */
- onUndo: function(cPoints) {
- if (cPoints.length === 0) {
- _self._tooltipInit('点击开始绘制');
- } else if (cPoints.length < 3) {
- _self._tooltipInit('右键单击回退');
- } else {
- _self._tooltipInit('右键单击回退<br>左键双击结束绘制');
- }
- },
- /**
- * 完成回调
- * @ignore
- * @param {Array<JSON>} cPoints 世界坐标系点集合
- * @param {Array<JSON>} gPoints 球面坐标系点集合
- */
- onComplete: function(cPoints, gPoints) {
- /* 恢复鼠标样式 */
- _self._initMousePointerStyle();
- /* 移除提示标签 */
- _self._tooltipRemove();
- /* 回调 */
- if (callComplete) callComplete();
- },
- });
- },
- /**
- * @param {Array<Number>} points 经纬度点集合
- * @param {JSON} options 回调配置
- * @param {Function} options.onComplete() 完成回调,可选
- * @param {Function} options.onError(message) 错误回调
- */
- drawPointFeacture: function(points, options) {
- this._sketchViewModel.sketchDrawFeacture(points, SketchViewModel.SketchType.DrawPoint, options);
- },
- /**
- * @param {Array<Number>} points 经纬度点集合
- * @param {JSON} options 回调配置
- * @param {Function} options.onComplete() 完成回调,可选
- * @param {Function} options.onError(message) 错误回调
- */
- drawMultiplePointFeacture: function(points, options) {
- this._sketchViewModel.sketchDrawFeacture(points, SketchViewModel.SketchType.DrawMultiplePoint, options);
- },
- /**
- * @param {Array<Number>} points 经纬度点集合
- * @param {JSON} options 回调配置
- * @param {Function} options.onComplete() 完成回调,可选
- * @param {Function} options.onError(message) 错误回调
- */
- drawPolylineFeacture: function(points, options) {
- this._sketchViewModel.sketchDrawFeacture(points, SketchViewModel.SketchType.DrawPolyline, options);
- },
- /**
- * @param {Array<Number>} points 经纬度点集合
- * @param {JSON} options 回调配置
- * @param {Function} options.onComplete() 完成回调,可选
- * @param {Function} options.onError(message) 错误回调
- */
- drawPolygonFeacture: function(points, options) {
- this._sketchViewModel.sketchDrawFeacture(points, SketchViewModel.SketchType.DrawPolygon, options);
- }
- })
- /* 鼠标移动标签工具 */
- Object.assign(CommonTools.prototype, {
- /**
- * 提示标签初始化
- * @ignore
- * @param {String} text 显示的文本内容
- */
- tooltipInit: function(text) {
- this._tooltipInit(text);
- },
- /**
- * 移除提示标签
- * @ignore
- */
- tooltipRemove: function() {
- this._tooltipRemove();
- },
- /**
- * 设置提示标签文本
- * @ignore
- * @param {String} text 文本
- */
- tooltipSetText: function(text) {
- this._tooltipSetText(text);
- }
- });
- /* 其他工具 */
- Object.assign(CommonTools.prototype, {
- /**
- * 拾取通过面对象拉伸绘制的体
- * @ignore
- * @param {Function} callComplete 完成回调callComplete({color:height})拾取失败或者未拾取则返回undefined
- */
- pickPolygonBody: function(callComplete) {
- let _self = this;
- this._sketchViewModel.sketchPick(function(options) {
- if (options === undefined) {
- if (callComplete) callComplete(undefined);
- } else {
- if (callComplete) callComplete({
- color: options.color,
- height: options.height,
- });
- }
- })
- },
- /**
- * 设置拾取的体对象样式及高度
- * @ignore
- * @param {JSON} options 配置项
- * @param {Array<Number>} options.color 颜色[0~~255,0~255,0~255,0~1]
- * @param {Number} options.height 高度
- * @param {Function} options.onComplete(message) 完成回调,如果message为undefined则代表成功,否则为失败消息
- */
- setPolygonBody: function(options) {
- this._sketchViewModel.sketchEditPickPolygonBody({
- color: options.color,
- height: options.height,
- onComplete: options.onComplete
- })
- },
- /**
- * 移除拾取的体对象
- * @ignore
- * @param {Function} onComplete(message) 完成回调,message为undifined为成功,否则为失败消息
- */
- removePolygonBody: function(onComplete) {
- this._sketchViewModel.sketchRemovePickPolygonBody(onComplete);
- }
- })
- /**
- * 运行环境类型
- */
- CommonTools.RuntimeEnvironment = Object.freeze(({
- App: 'app',
- Web: 'web'
- }))
- /* 输出 */
- export default CommonTools
|