1
1
# vue + ArcGIS 地图应用系列三:添加常规的地图组件
2
2
3
- > 为了页面的美观,这里我们使用的UI库为 : Ant Design Vue
3
+ > 为了页面的美观,这里我们使用的 UI 库为 : Ant Design Vue
4
4
>
5
- > 项目源码仓库地址:[ https://github.com/LuckRain7/arcgis-api-for-javascript-vue ] ( https://github.com/LuckRain7/arcgis-api-for-javascript-vue )
5
+ > 项目源码仓库地址:[ https://github.com/LuckRain7/arcgis-api-for-javascript-vue ] ( https://github.com/LuckRain7/arcgis-api-for-javascript-vue )
6
6
7
7
## 1. 首先创建工具菜单组件
8
8
18
18
<!-- 地图切换按钮 -->
19
19
<a-dropdown>
20
20
<a-menu slot="overlay">
21
- <a-menu-item key="1" @click="baseMapChange(1)">
22
- 矢量
23
- </a-menu-item>
24
- <a-menu-item key="2" @click="baseMapChange(2)">
25
- 影像
26
- </a-menu-item>
21
+ <a-menu-item key="1" @click="baseMapChange(1)"> 矢量 </a-menu-item>
22
+ <a-menu-item key="2" @click="baseMapChange(2)"> 影像 </a-menu-item>
27
23
</a-menu>
28
24
<a-button type="primary">
29
25
<a-icon type="global" />底图 <a-icon type="down" />
33
29
34
30
<a-dropdown>
35
31
<a-menu slot="overlay">
36
- <a-menu-item key="1" @click="measurement(1)">
37
- 开始测量
38
- </a-menu-item>
39
- <a-menu-item key="2" @click="measurement(0)">
40
- 取消测量
41
- </a-menu-item>
32
+ <a-menu-item key="1" @click="measurement(1)"> 开始测量 </a-menu-item>
33
+ <a-menu-item key="2" @click="measurement(0)"> 取消测量 </a-menu-item>
42
34
</a-menu>
43
35
<a-button type="primary">
44
36
<a-icon type="tool" />测量 <a-icon type="down" />
48
40
<!-- 标绘 GO-->
49
41
<a-dropdown>
50
42
<a-menu slot="overlay">
51
- <a-menu-item key="1" @click="draw('POINT')">
52
- 点
53
- </a-menu-item>
54
- <a-menu-item key="2" @click="draw('POLYLINE')">
55
- 线
56
- </a-menu-item>
57
- <a-menu-item key="3" @click="draw('POLYGON')">
58
- 面
59
- </a-menu-item>
60
- <a-menu-item key="4" @click="draw('CIRCLE')">
61
- 圆形
62
- </a-menu-item>
63
- <a-menu-item key="5" @click="draw('RECTANGLE')">
64
- 长方形
65
- </a-menu-item>
66
- <a-menu-item key="6" @click="draw('stop')">
67
- 停止标绘
68
- </a-menu-item>
69
- <a-menu-item key="7" @click="draw('delete')">
70
- 清除标绘
71
- </a-menu-item>
43
+ <a-menu-item key="1" @click="draw('POINT')"> 点 </a-menu-item>
44
+ <a-menu-item key="2" @click="draw('POLYLINE')"> 线 </a-menu-item>
45
+ <a-menu-item key="3" @click="draw('POLYGON')"> 面 </a-menu-item>
46
+ <a-menu-item key="4" @click="draw('CIRCLE')"> 圆形 </a-menu-item>
47
+ <a-menu-item key="5" @click="draw('RECTANGLE')"> 长方形 </a-menu-item>
48
+ <a-menu-item key="6" @click="draw('stop')"> 停止标绘 </a-menu-item>
49
+ <a-menu-item key="7" @click="draw('delete')"> 清除标绘 </a-menu-item>
72
50
</a-menu>
73
51
<a-button type="primary">
74
52
<a-icon type="highlight" />标绘 <a-icon type="down" />
@@ -144,20 +122,20 @@ export default {
144
122
import ToolBar from "@/components/ToolBar.vue";
145
123
export default {
146
124
components: {
147
- ToolBar
125
+ ToolBar,
148
126
},
149
127
methods: {
150
128
// 测量
151
129
measurement(type) {
152
- console.log("测量",type);
130
+ console.log("测量", type);
153
131
},
154
132
// 地图切换
155
133
baseMapChange(type) {
156
- console.log("地图切换",type);
134
+ console.log("地图切换", type);
157
135
},
158
136
// 标绘
159
137
draw(type) {
160
- console.log("标绘",type);
138
+ console.log("标绘", type);
161
139
},
162
140
// 显示图例
163
141
showLegend() {
@@ -176,9 +154,7 @@ export default {
176
154
177
155
![ ] ( ./toolbar.png )
178
156
179
-
180
-
181
- ## 1. 底图切换
157
+ ## 1. 底图切换
182
158
183
159
新建文件 src/map/modules/BaseMap.js ,添加底图切换函数
184
160
@@ -230,11 +206,7 @@ baseMapChange(type) {
230
206
231
207
![ ] ( ./basemapchange.gif )
232
208
233
-
234
-
235
-
236
-
237
- ## 2. 测量组件
209
+ ## 2. 测量组件
238
210
239
211
这里需要在 src\map\init.js 中加载 ArcGIS 的测量和单位模块(` "esri/dijit/Measurement" ` 、` "esri/units" ` )
240
212
@@ -331,41 +303,39 @@ export default {
331
303
332
304
``` vue
333
305
<template>
334
- <!-- 测量组件 -->
335
- <measurement
336
- :show="isShowMeasurement"
337
- @closMmeasurement="measurement"
338
- ></measurement>
306
+ <!-- 测量组件 -->
307
+ <measurement
308
+ :show="isShowMeasurement"
309
+ @closMmeasurement="measurement"
310
+ ></measurement>
339
311
</template>
340
312
<script>
341
- data() {
342
- return {
343
- isShowMeasurement: false,
344
- };
313
+ data() {
314
+ return {
315
+ isShowMeasurement: false,
316
+ };
317
+ },
318
+ methods: {
319
+ // 测量
320
+ measurement(type) {
321
+ switch (type) {
322
+ case 0:
323
+ this.isShowMeasurement = false;
324
+ Map.MeasurementClose();
325
+ break;
326
+ case 1:
327
+ this.isShowMeasurement = true;
328
+ }
345
329
},
346
- methods: {
347
- // 测量
348
- measurement(type) {
349
- switch (type) {
350
- case 0:
351
- this.isShowMeasurement = false;
352
- Map.MeasurementClose();
353
- break;
354
- case 1:
355
- this.isShowMeasurement = true;
356
- }
357
- },
358
- }
330
+ }
359
331
</script>
360
332
```
361
333
362
334
效果图:
363
335
364
336
![ ] (./measurement .gif)
365
337
366
-
367
-
368
- ## 3. 比例尺组件
338
+ ## 3. 比例尺组件
369
339
370
340
这里需要在 example/src/map/init.js 中加载 ArcGIS 的比例尺模块(` "esri/dijit/Scalebar" ` )
371
341
@@ -395,8 +365,6 @@ Scalebar({
395
365
});
396
366
```
397
367
398
-
399
-
400
368
## 4. 标绘组件
401
369
402
370
非常抱歉,写到这里时我重构了代码,大家可以去代码仓库进行查看,重构的目的是为了更加的模块化。
@@ -415,23 +383,23 @@ loadModules(
415
383
" esri/layers/GraphicsLayer" , // 图形图层模块
416
384
],
417
385
config .loadConfig
418
- )
419
- . then (
420
- ([
421
- Draw , // 画图
422
- SimpleMarkerSymbol , // 点
423
- SimpleLineSymbol , // 线
424
- SimpleFillSymbol , // 面
425
- Graphic , // 图形模块
426
- GraphicsLayer, // 图形图层模块
427
- ]) => {
428
- this .GraphicsLayer = GraphicsLayer ;
429
- this .Graphic = Graphic ;
430
- this .Draw = Draw ;
431
- this .SimpleMarkerSymbol = SimpleMarkerSymbol ;
432
- this .SimpleLineSymbol = SimpleLineSymbol ;
433
- this . SimpleFillSymbol = SimpleFillSymbol;
434
- })
386
+ ). then (
387
+ ([
388
+ Draw, // 画图
389
+ SimpleMarkerSymbol , // 点
390
+ SimpleLineSymbol , // 线
391
+ SimpleFillSymbol , // 面
392
+ Graphic , // 图形模块
393
+ GraphicsLayer , // 图形图层模块
394
+ ]) => {
395
+ this . GraphicsLayer = GraphicsLayer;
396
+ this .Graphic = Graphic ;
397
+ this .Draw = Draw ;
398
+ this .SimpleMarkerSymbol = SimpleMarkerSymbol ;
399
+ this .SimpleLineSymbol = SimpleLineSymbol ;
400
+ this .SimpleFillSymbol = SimpleFillSymbol ;
401
+ }
402
+ );
435
403
```
436
404
437
405
example/src/map/modules/Draw.js 编写对应代码
@@ -459,7 +427,7 @@ function drawInit() {
459
427
460
428
// 添加画图的监听事件
461
429
this .draw .on (" draw-complete" , drawEndEvent .bind (this ));
462
- };
430
+ }
463
431
464
432
// 内置函数 画完后将图形加载到图形图层
465
433
function drawEndEvent (evt ) {
@@ -511,7 +479,6 @@ function drawActive(type) {
511
479
}
512
480
513
481
export { drawInit , drawActive };
514
-
515
482
```
516
483
517
484
在 导出文件中引入 src\map\index.js
@@ -527,8 +494,8 @@ ArcGIS.prototype.drawActive = drawActive;
527
494
在 src/map/init.js 初始化标绘工具
528
495
529
496
``` javascript
530
- // 初始化标绘工具
531
- this .drawInit ();
497
+ // 初始化标绘工具
498
+ this .drawInit ();
532
499
```
533
500
534
501
在 src/App.vue 中 设置标绘按钮函数
@@ -542,18 +509,20 @@ ArcGIS.prototype.drawActive = drawActive;
542
509
},
543
510
```
544
511
545
-
546
-
547
512
效果图:
548
513
549
514
![ ] ( ./draw.gif )
550
515
551
- ## 推荐阅读
516
+ ## 源码地址
517
+
518
+ [ Demo-3/example] ( https://github.com/LuckRain7/arcgis-api-for-javascript-vue/tree/master/Demo-3/example )
519
+
520
+ ## 推荐阅读
552
521
553
522
- [ vue + ArcGIS 地图应用系列二:加载地图] ( https://mp.weixin.qq.com/s/KkTU1Y1GHLmsslTlwxGeIw )
554
523
555
- - [ vue + ArcGIS 地图应用系列一:arcgis api本地部署 (开发环境)] ( https://mp.weixin.qq.com/s/F2eseCDNGBjoTS52UsY9MA )
524
+ - [ vue + ArcGIS 地图应用系列一:arcgis api 本地部署 (开发环境)] ( https://mp.weixin.qq.com/s/F2eseCDNGBjoTS52UsY9MA )
556
525
557
526
## 关注我! 不迷路
558
527
559
- ![ ] ( ./wx.png )
528
+ ![ ] ( ./wx.png )
0 commit comments