@go-home-early/go-home-early98 0.3.1 → 0.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. package/README.md +53 -24
  2. package/dist/go-home-early.umd.js +5 -5
  3. package/package.json +4 -18
  4. package/src/packages/Cesium/DrawMap/DrawJs/CesiumEntityEdit.js +427 -0
  5. package/src/packages/Cesium/DrawMap/DrawJs/CreatePolygonOnGround.js +202 -0
  6. package/src/packages/Cesium/DrawMap/DrawJs/DrawAttackArrow.js +477 -0
  7. package/src/packages/Cesium/DrawMap/DrawJs/DrawBillboard.js +114 -0
  8. package/src/packages/Cesium/DrawMap/DrawJs/DrawCircle.js +311 -0
  9. package/src/packages/Cesium/DrawMap/DrawJs/DrawCircleTY.js +237 -0
  10. package/src/packages/Cesium/DrawMap/DrawJs/DrawCurve.js +256 -0
  11. package/src/packages/Cesium/DrawMap/DrawJs/DrawPincerArrow.js +584 -0
  12. package/src/packages/Cesium/DrawMap/DrawJs/DrawPoint.js +158 -0
  13. package/src/packages/Cesium/DrawMap/DrawJs/DrawPolygon.js +215 -0
  14. package/src/packages/Cesium/DrawMap/DrawJs/DrawPolyline.js +213 -0
  15. package/src/packages/Cesium/DrawMap/DrawJs/DrawPolylineJT.js +218 -0
  16. package/src/packages/Cesium/DrawMap/DrawJs/DrawProFile.js +314 -0
  17. package/src/packages/Cesium/DrawMap/DrawJs/DrawRectangle.js +215 -0
  18. package/src/packages/Cesium/DrawMap/DrawJs/DrawstraightArrow.js +364 -0
  19. package/src/packages/Cesium/DrawMap/DrawJs/MeasurePolygon.js +337 -0
  20. package/src/packages/Cesium/DrawMap/DrawJs/MeasurePolyline.js +285 -0
  21. package/src/packages/Cesium/DrawMap/DrawJs/ReminderTip.js +78 -0
  22. package/src/packages/Cesium/DrawMap/DrawJs/SlopeAspect.js +436 -0
  23. package/src/packages/Cesium/DrawMap/DrawJs/measureLength.js +177 -0
  24. package/src/packages/Cesium/DrawMap/index.vue +272 -0
  25. package/src/packages/Cesium/components/LocationDialog.vue +283 -0
  26. package/src/packages/Cesium/components/Popup.vue +591 -0
  27. package/src/packages/Cesium/components/PoumianDialog.vue +200 -0
  28. package/src/packages/Cesium/imgs/add-off.png +0 -0
  29. package/src/packages/Cesium/imgs/add.png +0 -0
  30. package/src/packages/Cesium/imgs/circle.png +0 -0
  31. package/src/packages/Cesium/imgs/icon-position-blue.png +0 -0
  32. package/src/packages/Cesium/imgs/line.png +0 -0
  33. package/src/packages/Cesium/imgs/map-delete.png +0 -0
  34. package/src/packages/Cesium/imgs/map.png +0 -0
  35. package/src/packages/Cesium/imgs/orientation-bg.svg +14 -0
  36. package/src/packages/Cesium/imgs/orientation.svg +21 -0
  37. package/src/packages/Cesium/imgs/poi.png +0 -0
  38. package/src/packages/Cesium/imgs/point.png +0 -0
  39. package/src/packages/Cesium/imgs/polygon.png +0 -0
  40. package/src/packages/Cesium/imgs/popup/back-popup-img.png +0 -0
  41. package/src/packages/Cesium/imgs/popup/backimg-btn.png +0 -0
  42. package/src/packages/Cesium/imgs/popup/dialog-bd.png +0 -0
  43. package/src/packages/Cesium/imgs/popup/dialog-btn.png +0 -0
  44. package/src/packages/Cesium/imgs/popup/dialog-ft.png +0 -0
  45. package/src/packages/Cesium/imgs/popup/dialog-hd.png +0 -0
  46. package/src/packages/Cesium/imgs/reduce-off.png +0 -0
  47. package/src/packages/Cesium/index.md +292 -0
  48. package/src/packages/Cesium/index.vue +3830 -0
  49. package/src/packages/Cesium/materials/CircularDiffusionMaterialProperty.js +98 -0
  50. package/src/packages/Cesium/materials/CircularRippleMaterialProperty.js +126 -0
  51. package/src/packages/Cesium/materials/PolylineArrowMaterialProperty.js +109 -0
  52. package/src/packages/Cesium/utils/MeasureHeight.js +261 -0
  53. package/src/packages/Cesium/utils/MeasureTools.js +1188 -0
  54. package/src/packages/index.js +33 -0
  55. package/src/packages/utils/charts.js +54 -0
  56. package/src/packages/utils/index.js +50 -0
@@ -0,0 +1,256 @@
1
+ // DrawCurve
2
+ /*
3
+ 绘制曲线
4
+ */
5
+ class DrawCurve {
6
+ constructor(arg) {
7
+ this.viewer = arg.viewer;
8
+ this.Cesium = arg.Cesium;
9
+ this.handler = null;
10
+ this.floatingPoint = null; //标识点
11
+ this._curveline = null; //活动曲线
12
+ this._curvelineLast = null; //最后一条曲线
13
+ this._positions = []; //活动点
14
+ this._entities_point = []; //脏数据
15
+ this._entities_line = []; //脏数据
16
+ this._curvelineData = null; //用于构造曲线数据
17
+ }
18
+
19
+ //返回最后活动曲线
20
+ get curveline() {
21
+ return this._curvelineLast;
22
+ }
23
+
24
+ //返回线数据用于加载线
25
+ getData() {
26
+ return this._curvelineData;
27
+ }
28
+
29
+ //加载曲线
30
+ loadCurveline(data) {
31
+ var $this = this;
32
+ var points = $this.fineBezier(data);
33
+ var polyline = this.viewer.entities.add({
34
+ polyline: {
35
+ positions: points,
36
+ show: true,
37
+ material: $this.Cesium.Color.RED,
38
+ width: 3,
39
+ clampToGround: true,
40
+ },
41
+ });
42
+ return polyline;
43
+ }
44
+
45
+ //开始创建
46
+ startCreate() {
47
+ var $this = this;
48
+ this.handler = new this.Cesium.ScreenSpaceEventHandler(
49
+ this.viewer.scene.canvas
50
+ );
51
+ this.handler.setInputAction(function (evt) {
52
+ //单机开始绘制
53
+ //屏幕坐标转地形上坐标
54
+ var cartesian = $this.getCatesian3FromPX(evt.position);
55
+ if ($this._positions.length == 0) {
56
+ $this._positions.push(cartesian.clone());
57
+ $this.floatingPoint = $this.createPoint(cartesian);
58
+ $this.createPoint(cartesian); // 绘制点
59
+ }
60
+ $this._positions.push(cartesian);
61
+ }, $this.Cesium.ScreenSpaceEventType.LEFT_CLICK);
62
+ this.handler.setInputAction(function (evt) {
63
+ //移动时绘制线
64
+ if ($this._positions.length < 4) return;
65
+ var cartesian = $this.getCatesian3FromPX(evt.endPosition);
66
+ if (!$this.Cesium.defined($this._curveline)) {
67
+ $this._curveline = $this.createCurveline();
68
+ }
69
+ $this.floatingPoint.position.setValue(cartesian);
70
+ if ($this._curveline) {
71
+ $this._positions.pop();
72
+ $this._positions.push(cartesian);
73
+ }
74
+ }, $this.Cesium.ScreenSpaceEventType.MOUSE_MOVE);
75
+ this.handler.setInputAction(function (evt) {
76
+ if (!$this._curveline) return;
77
+ var cartesian = $this.getCatesian3FromPX(evt.position);
78
+ $this._positions.pop();
79
+ $this._positions.push(cartesian);
80
+ $this.createPoint(cartesian); // 绘制点
81
+ $this._curvelineData = $this._positions.concat();
82
+ $this.viewer.entities.remove($this._curveline); //移除
83
+ $this._curveline = null;
84
+ $this._positions = [];
85
+ $this.floatingPoint.position.setValue(cartesian);
86
+ var line = $this.loadCurveline($this._curvelineData); //加载曲线
87
+ $this._entities_line.push(line);
88
+ $this._curvelineLast = line;
89
+ }, $this.Cesium.ScreenSpaceEventType.RIGHT_CLICK);
90
+ }
91
+
92
+ // 创建点击删除事件
93
+ creatDeleteClick(isSelect) {
94
+ const $this = this;
95
+ if (isSelect) {
96
+ this.handler = new this.Cesium.ScreenSpaceEventHandler(
97
+ $this.viewer.scene.canvas
98
+ );
99
+ this.handler.setInputAction(function (movement) {
100
+ var pick = $this.viewer.scene.pick(movement.position, 3, 3);
101
+
102
+ if (!pick) {
103
+ return;
104
+ }
105
+ $this.viewer.entities.removeById(pick.id._id);
106
+ }, $this.Cesium.ScreenSpaceEventType.LEFT_CLICK);
107
+ } else {
108
+ this.handler.destroy();
109
+ this.handler = null;
110
+ }
111
+ }
112
+
113
+ //创建点
114
+ createPoint(cartesian) {
115
+ var $this = this;
116
+ var point = this.viewer.entities.add({
117
+ position: cartesian,
118
+ point: {
119
+ pixelSize: 10,
120
+ color: $this.Cesium.Color.YELLOW,
121
+ },
122
+ });
123
+ $this._entities_point.push(point);
124
+ return point;
125
+ }
126
+
127
+ //创建曲线
128
+ createCurveline() {
129
+ var $this = this;
130
+ var polyline = this.viewer.entities.add({
131
+ polyline: {
132
+ //使用cesium的peoperty
133
+ positions: new $this.Cesium.CallbackProperty(function () {
134
+ return $this.fineBezier($this._positions);
135
+ }, false),
136
+ show: true,
137
+ material: $this.Cesium.Color.RED,
138
+ width: 3,
139
+ clampToGround: true,
140
+ },
141
+ });
142
+ $this._entities_line.push(polyline);
143
+ return polyline;
144
+ }
145
+
146
+ //销毁
147
+ destroy() {
148
+ if (this.handler) {
149
+ this.handler.destroy();
150
+ this.handler = null;
151
+ }
152
+ }
153
+
154
+ //清空实体对象
155
+ clear() {
156
+ for (var i = 0; i < this._entities_point.length; i++) {
157
+ this.viewer.entities.remove(this._entities_point[i]);
158
+ }
159
+ for (var i = 0; i < this._entities_line.length; i++) {
160
+ this.viewer.entities.remove(this._entities_line[i]);
161
+ }
162
+ this.floatingPoint = null; //标识点
163
+ this._curveline = null; //活动曲线
164
+ this._curvelineLast = null; //最后一条曲线
165
+ this._positions = []; //活动点
166
+ this._entities_point = []; //脏数据
167
+ this._entities_line = []; //脏数据
168
+ this._curvelineData = null; //用于构造曲线数据
169
+ }
170
+
171
+ getCatesian3FromPX(px) {
172
+ var cartesian;
173
+ var ray = this.viewer.camera.getPickRay(px);
174
+ if (!ray) return null;
175
+ cartesian = this.viewer.scene.globe.pick(ray, this.viewer.scene);
176
+ return cartesian;
177
+ }
178
+
179
+ cartesianToLatlng(cartesian) {
180
+ var latlng =
181
+ this.viewer.scene.globe.ellipsoid.cartesianToCartographic(cartesian);
182
+ var lat = this.Cesium.Math.toDegrees(latlng.latitude);
183
+ var lng = this.Cesium.Math.toDegrees(latlng.longitude);
184
+ return [lng, lat];
185
+ }
186
+
187
+ /////////////////////////////////////贝塞尔曲线实现//////////////////////////////////////
188
+
189
+ fineBezier(points) {
190
+ var $this = this;
191
+ var pointNUM = 40; //个点
192
+ var poins2D = [];
193
+ var d = [];
194
+ for (var i = 0; i < points.length; i++) {
195
+ var res = $this.cartesianToLatlng(points[i]);
196
+ var point = new Object();
197
+ point.x = res[0];
198
+ point.y = res[1];
199
+ poins2D.push(point);
200
+ }
201
+ var cbs = $this.ComputeBezier(poins2D, pointNUM);
202
+ for (var j = 0; j < cbs.length; j++) {
203
+ d.push(cbs[j].x);
204
+ d.push(cbs[j].y);
205
+ }
206
+ return $this.Cesium.Cartesian3.fromDegreesArray(d);
207
+ }
208
+
209
+ /*
210
+ cp在此是四個元素的陣列:
211
+ cp[0]為起始點,或上圖中的P0
212
+ cp[1]為第一個控制點,或上圖中的P1
213
+ cp[2]為第二個控制點,或上圖中的P2
214
+ cp[3]為結束點,或上圖中的P3
215
+ t為參數值,0 <= t <= 1
216
+ */
217
+ PointOnCubicBezier(cp, t) {
218
+ var ax, bx, cx;
219
+ var ay, by, cy;
220
+ var tSquared, tCubed;
221
+ var result = new Object();
222
+ var length = cp.length;
223
+ var inteval = Math.floor(length / 4); // 向下取整
224
+ /*計算多項式係數*/
225
+ cx = 3.0 * (cp[inteval].x - cp[0].x);
226
+ bx = 3.0 * (cp[2 * inteval].x - cp[inteval].x) - cx;
227
+ ax = cp[length - 1].x - cp[0].x - cx - bx;
228
+ cy = 3.0 * (cp[inteval].y - cp[0].y);
229
+ by = 3.0 * (cp[2 * inteval].y - cp[inteval].y) - cy;
230
+ ay = cp[length - 1].y - cp[0].y - cy - by;
231
+ /*計算位於參數值t的曲線點*/
232
+ tSquared = t * t;
233
+ tCubed = tSquared * t;
234
+ result.x = ax * tCubed + bx * tSquared + cx * t + cp[0].x;
235
+ result.y = ay * tCubed + by * tSquared + cy * t + cp[0].y;
236
+ return result;
237
+ }
238
+
239
+ /*
240
+ ComputeBezier以控制點cp所產生的曲線點,填入Point2D結構的陣列。
241
+ 呼叫者必須分配足夠的記憶體以供輸出結果,其為<sizeof(Point2D) numberOfPoints>
242
+ */
243
+ ComputeBezier(cp, numberOfPoints) {
244
+ var $this = this;
245
+ var dt;
246
+ var i;
247
+ var curve = [];
248
+ dt = 1.0 / (numberOfPoints - 1);
249
+ for (i = 0; i < numberOfPoints; i++) {
250
+ curve[i] = $this.PointOnCubicBezier(cp, i * dt);
251
+ }
252
+ return curve;
253
+ }
254
+ }
255
+
256
+ export default DrawCurve;