DrawPoint.js 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. //一、点
  2. // DrawPoint
  3. /*
  4. 绘制点
  5. */
  6. class DrawPoint {
  7. constructor(arg) {
  8. this.viewer = arg.viewer;
  9. this.Cesium = arg.Cesium;
  10. // this.callback=arg.callback;
  11. this._point = null; //最后一个点
  12. this._pointData = null;//点数据用于构造点
  13. this._entities = []; //脏数据
  14. this.DrawStartEvent = new Cesium.Event(); //开始绘制事件
  15. this.DrawEndEvent = new Cesium.Event(); //结束绘制事件
  16. /* 通用参数集合 */
  17. this._param = {
  18. id: "DrawStraightArrow",
  19. polygonColor: 'rgba(0,255,0,0.5)', //面填充颜色
  20. outlineColor: 'rgba(255, 255, 255, 1)', //边框颜色
  21. outlineWidth: 1, //边框宽度
  22. }
  23. /* 创建面材质 */
  24. this.polygonMaterial = Cesium.Color.fromCssColorString(this._param.polygonColor);
  25. /* 创建线材质 */
  26. // this.outlineMaterial = new Cesium.PolylineDashMaterialProperty({//曲线
  27. // dashLength: 16,
  28. // color: Cesium.Color.fromCssColorString(this._param.outlineColor)
  29. // });
  30. this.outlineMaterial = Cesium.Color.fromCssColorString(this._param.outlineColor);
  31. }
  32. //返回最后活动点
  33. get point() {
  34. return this._point;
  35. }
  36. //加载点
  37. addload(data) {
  38. return this.createPoint(data);
  39. }
  40. //返回点数据用于加载点
  41. getData() {
  42. return this._pointData;
  43. }
  44. // 修改编辑调用计算
  45. computePosition(data) {
  46. let $this = this
  47. var lnglatArr = [];
  48. for (var i = 0; i < data.length; i++) {
  49. var lnglat = $this.cartesianToLatlng(data[i]);
  50. lnglatArr.push(lnglat)
  51. }
  52. $this._pointData = lnglatArr;
  53. let point = lnglatArr[0]
  54. return $this.Cesium.Cartesian3.fromDegrees(point[0],point[1])
  55. }
  56. //开始绘制
  57. startCreate(drawType) {
  58. this.drawType = drawType;
  59. var $this = this;
  60. this.handler = new this.Cesium.ScreenSpaceEventHandler(this.viewer.scene.canvas);
  61. this.handler.setInputAction(function (evt) { //单机开始绘制
  62. var cartesian = $this.getCatesian3FromPX(evt.position);
  63. if (!cartesian) return;
  64. let latlon = $this.cartesianToLatlng(cartesian)
  65. var point = $this.createPoint(latlon);
  66. $this._pointData = cartesian;
  67. $this._point = point;
  68. // if(typeof $this.callback=="function"){
  69. // $this.callback(point);
  70. // }
  71. $this.DrawEndEvent.raiseEvent($this._point, latlon, $this.drawType);
  72. $this.destroy()
  73. }, $this.Cesium.ScreenSpaceEventType.LEFT_CLICK);
  74. }
  75. //创建点
  76. createPoint(cartesian) {
  77. var $this = this;
  78. var point = this.viewer.entities.add({
  79. Type:'DrawPoint',
  80. Position:[cartesian],
  81. position: $this.Cesium.Cartesian3.fromDegrees(cartesian[0],cartesian[1]),
  82. id:cartesian.id || $this.objId,
  83. billboard: {
  84. image: "./static/poi2.png",
  85. // scaleByDistance: new Cesium.NearFarScalar(300, 1, 1200, 0.4), //设置随图缩放距离和比例
  86. // distanceDisplayCondition: new Cesium.DistanceDisplayCondition(0, 10000), //设置可见距离 10000米可见
  87. verticalOrigin: Cesium.VerticalOrigin.BOTTOM,
  88. // clampToGround: true
  89. },
  90. });
  91. $this._entities.push(point); //加载脏数据
  92. return point;
  93. }
  94. cartesianToLatlng(cartesian) {
  95. let ellipsoid = this.viewer.scene.globe.ellipsoid
  96. let cartographic = ellipsoid.cartesianToCartographic(cartesian);
  97. let lat = Cesium.Math.toDegrees(cartographic.latitude);
  98. let lng = Cesium.Math.toDegrees(cartographic.longitude);
  99. return [lng, lat];
  100. }
  101. //销毁鼠标事件
  102. destroy() {
  103. if (this.handler) {
  104. this.handler.destroy();
  105. this.handler = null;
  106. }
  107. }
  108. //清空实体对象
  109. clear() {
  110. for (var i = 0; i < this._entities.length; i++) {
  111. this.viewer.entities.remove(this._entities[i]);
  112. }
  113. this._entities = [];
  114. this._point = null;
  115. }
  116. getCatesian3FromPX(px) {
  117. var cartesian;
  118. var ray = this.viewer.camera.getPickRay(px);
  119. if (!ray) return null;
  120. cartesian = this.viewer.scene.globe.pick(ray, this.viewer.scene);
  121. return cartesian;
  122. }
  123. }
  124. export default DrawPoint;