超图WebGL三维接口中有一个绘制的接口(new Cesium.DrawHandler(viewer, mode, clampMode),它封装了绘制完以后的式样,画完以后捕捉绘制完成的实体有必定的难度,并且样子也改不了,因此我对其Drawhandler的方法作了变形,只使用其绘制中的预览效果,最终画完的东西按咱们本身的来,咱们只抓取绘制的点。html
原理是使用Drawhandler的 drawEvt,绘制完成事件的回调post
handler.drawEvt.addEventListener(function(result){ console.log(result); });
下面是改装:spa
let draw = new Cesium.DrawHandler(_view.view, mode, _clampMode||Cesium.ClampMode.Space); draw.activate(); let style; if(!_style){ style={}; }else{ style=_style; } draw.drawEvt.addEventListener(function(result){ let DRAWENTITY; switch (mode) { case Cesium.DrawMode.Polygon:case 'Cesium.DrawMode.Polygon':case '2':case 2: style.polygon.hierarchy=result.object.polygon.hierarchy; _view.view.entities.remove(result.object); draw.clear(); DRAWENTITY= _view.view.entities.add({ id:entityProperty.id||null, description:entityProperty.description||null, name:entityProperty.name||'', show:entityProperty.show||true, polygon:style.polygon }); break; case Cesium.DrawMode.Point:case 'Cesium.DrawMode.Point':case '0':case 0: let pointPosition = result.object.position; _view.view.entities.remove(result.object); draw.clear(); DRAWENTITY=_view.view.entities.add({ id:entityProperty.id||null, description:entityProperty.description||null, name:entityProperty.name||'', show:entityProperty.show||true, position:pointPosition, point:style.point }); break; case Cesium.DrawMode.Line:case 'Cesium.DrawMode.Line':case '1':case 1: let lineStyle = style; lineStyle.polyline.positions= result.object.positions; _view.view.entities.remove(result.object); draw.clear(); DRAWENTITY=_view.view.entities.add({ id:entityProperty.id||null, description:entityProperty.description||null, name:entityProperty.name||'', show:entityProperty.show||true, polyline:lineStyle.polyline }); break; case Cesium.DrawMode.Marker:case 'Cesium.DrawMode.Marker':case '3':case 3: if(style.billboard) { let markerPosition = result.object.position; _view.view.entities.remove(result.object); draw.clear(); DRAWENTITY=_view.view.entities.add({ id:entityProperty.id||null, description:entityProperty.description||null, name:entityProperty.name||'', show:entityProperty.show||true, position:markerPosition, billboard:style.billboard }); }else{ DRAWENTITY=result.object } break; } if(_drawEndcallback){ _drawEndcallback(DRAWENTITY) } draw.deactivate(); });
这样就能够在回调中抓取到绘制的实体,固然,若是不想依赖于超图的接口,由于在绘制过程当中预览效果用的是绿色的线,很差看。也能够基于纯Cesium本身写一个,我写的基于原始Cesium的绘制方法在下面这个连接里:code