gdmap-utils 1.1.2 → 1.1.4

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.
@@ -7,7 +7,10 @@
7
7
  name="viewport"
8
8
  content="initial-scale=1.0, user-scalable=no, width=device-width"
9
9
  />
10
- <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/reset.css@5.0.2/reset.min.css">
10
+ <link
11
+ rel="stylesheet"
12
+ href="https://cdn.jsdelivr.net/npm/reset.css@5.0.2/reset.min.css"
13
+ />
11
14
  <link
12
15
  rel="stylesheet"
13
16
  href="https://a.amap.com/jsapi_demos/static/demo-center/css/demo-center.css"
@@ -29,7 +32,7 @@
29
32
  color: #fff;
30
33
  border: 1px solid rgba(27, 204, 253, 0.6588);
31
34
  }
32
-
35
+
33
36
  .control-panel {
34
37
  position: fixed;
35
38
  top: 10px;
@@ -38,9 +41,9 @@
38
41
  background-color: white;
39
42
  padding: 10px;
40
43
  border-radius: 5px;
41
- box-shadow: 0 2px 10px rgba(0,0,0,0.1);
44
+ box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
42
45
  }
43
-
46
+
44
47
  .control-panel button {
45
48
  margin: 5px;
46
49
  padding: 8px 12px;
@@ -55,25 +58,25 @@
55
58
  <button id="addBtn">添加标记</button>
56
59
  <button id="removeBtn">删除标记</button>
57
60
  <button id="removeByIdBtn">按ID删除</button>
58
- <br><br>
59
- <input type="text" id="markerIdInput" placeholder="输入标记ID">
61
+ <br /><br />
62
+ <input type="text" id="markerIdInput" placeholder="输入标记ID" />
60
63
  <button id="toggleLabelBtn">切换标签显示</button>
61
64
  <button id="refreshIconBtn">刷新图标</button>
62
- <br><br>
65
+ <br /><br />
63
66
  <button id="fitViewBtn">自适应视图</button>
64
67
  <button id="zoomOutBtn">缩小视图</button>
65
- <br><br>
68
+ <br /><br />
66
69
  <button id="showBtn">显示图层</button>
67
70
  <button id="hideBtn">隐藏图层</button>
68
71
  <button id="getAllBtn">获取所有标记</button>
69
- <br><br>
72
+ <br /><br />
70
73
  <button id="clearAllBtn">清空所有标记</button>
71
74
  <button id="reloadBtn">重新加载图层</button>
72
75
  <button id="destroyBtn">销毁图层</button>
73
76
  </div>
74
77
  <!-- 加载地图JSAPI脚本 -->
75
- <script src="../dist/index.js"></script>
76
- <script>
78
+ <!-- <script src="../dist/index.js"></script> -->
79
+ <script defer>
77
80
  const data = [
78
81
  {
79
82
  id: 5194,
@@ -281,273 +284,282 @@
281
284
  },
282
285
  ];
283
286
 
284
- const { createMapUtils } = MapUtils;
287
+ window.onload = () => {
285
288
 
286
- const loaderOpts = {
287
- version: '2.0', // 指定要加载的 JSAPI 的版本,缺省时默认为 1.4.15
288
- plugins: ['AMap.MapType', 'AMap.MoveAnimation'], // 需要使用的的插件列表,如比例尺'AMap.Scale'等
289
- key: '9506c73ed67acb0a09f1aabf88df4819',
290
- };
289
+ const createMapUtils = MapUtils.createMapUtils;
291
290
 
292
- test();
293
-
294
- async function test() {
295
- const mapUtils = await createMapUtils(
296
- {
297
- viewMode: '2D', // 默认使用 2D 模式,如果希望使用带有俯仰角的 3D 模式,请设置 viewMode: '3D'
298
- zoom: 11, // 初始化地图层级
299
- center: [data[0].jd, data[1].wd], // 初始化地图中心点
300
- mountSelector: 'container',
301
- },
302
- loaderOpts
303
- );
304
- /*
305
-
306
- */
307
- window.cleanPointLayer = mapUtils.createLayer({
308
- layerType: 'markerLayer',
309
- layerName: 'cleanPointLayer',
310
- getIconUrl(item) {
311
- if (window.flag) {
312
- return '//a.amap.com/jsapi_demos/static/demo-center/icons/poi-marker-1.png';
313
- }
314
- return '//a.amap.com/jsapi_demos/static/demo-center/icons/poi-marker-default.png';
315
- },
316
- getOverlayOpts(item, index, MapUtils) {
317
- return {
318
- anchor: 'bottom-center',
319
- clickable: true,
320
- zooms: [2, 20],
321
- zIndex: 1000,
322
- /* label: {
291
+ const loaderOpts = {
292
+ version: '2.0', // 指定要加载的 JSAPI 的版本,缺省时默认为 1.4.15
293
+ plugins: ['AMap.MapType', 'AMap.MoveAnimation'], // 需要使用的的插件列表,如比例尺'AMap.Scale'等
294
+ key: '9506c73ed67acb0a09f1aabf88df4819',
295
+ };
296
+ test();
297
+
298
+ async function test() {
299
+ const mapUtils = await createMapUtils(
300
+ {
301
+ viewMode: '2D', // 默认使用 2D 模式,如果希望使用带有俯仰角的 3D 模式,请设置 viewMode: '3D'
302
+ zoom: 11, // 初始化地图层级
303
+ center: [data[0].jd, data[1].wd], // 初始化地图中心点
304
+ mountSelector: 'container',
305
+ },
306
+ loaderOpts
307
+ );
308
+
309
+ window.cleanPointLayer = mapUtils.createBaseMarkerLayer({
310
+ layerType: 'markerLayer',
311
+ layerName: 'cleanPointLayer',
312
+ getIconUrl(item) {
313
+ if (window.flag) {
314
+ return '//a.amap.com/jsapi_demos/static/demo-center/icons/poi-marker-1.png';
315
+ }
316
+ return '//a.amap.com/jsapi_demos/static/demo-center/icons/poi-marker-default.png';
317
+ },
318
+ getOverlayOpts(item, index, MapUtils) {
319
+ return {
320
+ anchor: 'bottom-center',
321
+ clickable: true,
322
+ zooms: [2, 20],
323
+ zIndex: 1000,
324
+ /* label: {
323
325
  content: `<div class="labelTitle">${item.overlayData.title}</div>`,
324
326
  offset: MapUtils.Pixel(0, -5),
325
327
  direction: 'top',
326
328
  }, */
327
- };
328
- },
329
- overlayList: data.slice(0, 10).map(item => {
330
- return {
331
- overlayData: {
332
- lon: item.jd,
333
- lat: item.wd,
334
- title: item.sydmc,
329
+ };
330
+ },
331
+ overlayList: data.slice(0, 10).map(item => {
332
+ return {
333
+ overlayData: {
334
+ lon: item.jd,
335
+ lat: item.wd,
336
+ title: item.sydmc,
337
+ id: item.id,
338
+ extData: item,
339
+ },
335
340
  id: item.id,
336
- extData: item,
341
+ labelShowed: true,
342
+ };
343
+ }),
344
+ });
345
+
346
+ cleanPointLayer.bindEventOverlays('click', () => {
347
+ console.log('哈哈哈哈');
348
+ });
349
+ // 图层适配
350
+ cleanPointLayer.overlayFitMap();
351
+
352
+ // 为add和remove方法添加测试代码
353
+ const addBtn = document.getElementById('addBtn');
354
+ const removeBtn = document.getElementById('removeBtn');
355
+ const removeByIdBtn = document.getElementById('removeByIdBtn');
356
+
357
+ // 添加新标记的计数器
358
+ let newMarkerId = 10000;
359
+
360
+ // 点击添加标记按钮
361
+ addBtn.addEventListener('click', () => {
362
+ // 创建一个新的标记数据
363
+ const newMarker = {
364
+ overlayData: {
365
+ lon: 121.515844 + Math.random() * 0.02 - 0.01, // 在中心点附近随机生成经度
366
+ lat: 31.218427 + Math.random() * 0.02 - 0.01, // 在中心点附近随机生成纬度
367
+ title: `新标记${newMarkerId}`,
368
+ id: newMarkerId,
369
+ extData: { id: newMarkerId, sydmc: `新标记${newMarkerId}` },
337
370
  },
338
- id: item.id,
371
+ id: newMarkerId,
339
372
  labelShowed: true,
340
373
  };
341
- }),
342
- });
343
-
344
- cleanPointLayer.bindEventOverlays('click', () => {
345
- console.log('哈哈哈哈');
346
- });
347
- // 图层适配
348
- cleanPointLayer.overlayFitMap();
349
-
350
- // 为add和remove方法添加测试代码
351
- const addBtn = document.getElementById('addBtn');
352
- const removeBtn = document.getElementById('removeBtn');
353
- const removeByIdBtn = document.getElementById('removeByIdBtn');
354
-
355
- // 添加新标记的计数器
356
- let newMarkerId = 10000;
357
-
358
- // 点击添加标记按钮
359
- addBtn.addEventListener('click', () => {
360
- // 创建一个新的标记数据
361
- const newMarker = {
362
- overlayData: {
363
- lon: 121.515844 + Math.random() * 0.02 - 0.01, // 在中心点附近随机生成经度
364
- lat: 31.218427 + Math.random() * 0.02 - 0.01, // 在中心点附近随机生成纬度
365
- title: `新标记${newMarkerId}`,
366
- id: newMarkerId,
367
- extData: { id: newMarkerId, sydmc: `新标记${newMarkerId}` }
368
- },
369
- id: newMarkerId,
370
- labelShowed: true
371
- };
372
-
373
- // 调用add方法添加标记
374
- cleanPointLayer.add([newMarker]);
375
-
376
- console.log(`添加了新标记: ${newMarkerId}`);
377
- newMarkerId++;
378
- });
379
-
380
- // 点击删除标记按钮
381
- removeBtn.addEventListener('click', () => {
382
- // 获取所有标记的ID
383
- const markerIds = cleanPointLayer.getAllOverlay();
384
-
385
- if (markerIds.length > 0) {
386
- // 随机选择一个标记ID
387
- const randomId = markerIds.pop();
388
-
389
- // 调用remove方法删除标记
390
- cleanPointLayer.remove([randomId]);
391
-
392
- console.log(`删除了标记`,randomId);
393
- } else {
394
- console.log('没有可删除的标记');
395
- }
396
- });
397
-
398
- // 点击按ID删除按钮
399
- removeByIdBtn.addEventListener('click', () => {
400
- // 输入要删除的标记ID
401
- const markerId = prompt('请输入要删除的标记ID:');
402
-
403
- if (markerId) {
404
- try {
405
- const id = parseInt(markerId);
406
-
407
- // 调用remove方法按ID删除标记
408
- cleanPointLayer.remove([id]);
409
-
410
- console.log(`删除了标记: ${id}`);
411
- } catch (error) {
412
- console.error('无效的标记ID');
374
+
375
+ // 调用add方法添加标记
376
+ cleanPointLayer.add([newMarker]);
377
+
378
+ console.log(`添加了新标记: ${newMarkerId}`);
379
+ newMarkerId++;
380
+ });
381
+
382
+ // 点击删除标记按钮
383
+ removeBtn.addEventListener('click', () => {
384
+ // 获取所有标记的ID
385
+ const markerIds = cleanPointLayer.getAllOverlay();
386
+
387
+ if (markerIds.length > 0) {
388
+ // 随机选择一个标记ID
389
+ const randomId = markerIds.pop();
390
+
391
+ // 调用remove方法删除标记
392
+ cleanPointLayer.remove([randomId]);
393
+
394
+ console.log(`删除了标记`, randomId);
395
+ } else {
396
+ console.log('没有可删除的标记');
397
+ }
398
+ });
399
+
400
+ // 点击按ID删除按钮
401
+ removeByIdBtn.addEventListener('click', () => {
402
+ // 输入要删除的标记ID
403
+ const markerId = prompt('请输入要删除的标记ID:');
404
+
405
+ if (markerId) {
406
+ try {
407
+ const id = parseInt(markerId);
408
+
409
+ // 调用remove方法按ID删除标记
410
+ cleanPointLayer.remove([id]);
411
+
412
+ console.log(`删除了标记: ${id}`);
413
+ } catch (error) {
414
+ console.error('无效的标记ID');
415
+ }
413
416
  }
414
- }
415
- });
416
-
417
- // 点击切换标签显示按钮
418
- const toggleLabelBtn = document.getElementById('toggleLabelBtn');
419
- const markerIdInput = document.getElementById('markerIdInput');
420
- const refreshIconBtn = document.getElementById('refreshIconBtn');
421
-
422
- toggleLabelBtn.addEventListener('click', () => {
423
- const markerId = markerIdInput.value;
424
-
425
- if (markerId) {
426
- try {
427
- const id = parseInt(markerId);
428
-
429
- // 查找该标记当前的标签显示状态
430
- const overlayIndex = cleanPointLayer.overlayList.findIndex(item => item.id === id);
431
-
432
- if (overlayIndex !== -1) {
433
- // 获取当前标签显示状态并取反
434
- const currentLabelShow = cleanPointLayer.overlayList[overlayIndex].labelShowed;
435
- const newLabelShow = !currentLabelShow;
436
-
437
- // 调用refreshOverlayLabel方法切换标签显示状态
438
- cleanPointLayer.refreshOverlayLabel(id, newLabelShow);
439
-
440
- console.log(`标记 ${id} 的标签显示状态已切换为: ${newLabelShow ? '显示' : '隐藏'}`);
441
- } else {
442
- console.error('未找到指定ID的标记');
417
+ });
418
+
419
+ // 点击切换标签显示按钮
420
+ const toggleLabelBtn = document.getElementById('toggleLabelBtn');
421
+ const markerIdInput = document.getElementById('markerIdInput');
422
+ const refreshIconBtn = document.getElementById('refreshIconBtn');
423
+
424
+ toggleLabelBtn.addEventListener('click', () => {
425
+ const markerId = markerIdInput.value;
426
+
427
+ if (markerId) {
428
+ try {
429
+ const id = parseInt(markerId);
430
+
431
+ // 查找该标记当前的标签显示状态
432
+ const overlayIndex = cleanPointLayer.overlayList.findIndex(
433
+ item => item.id === id
434
+ );
435
+
436
+ if (overlayIndex !== -1) {
437
+ // 获取当前标签显示状态并取反
438
+ const currentLabelShow =
439
+ cleanPointLayer.overlayList[overlayIndex].labelShowed;
440
+ cleanPointLayer.overlayList[overlayIndex].labelShowed = !currentLabelShow;
441
+
442
+ // 调用refreshOverlayLabel方法切换标签显示状态
443
+ cleanPointLayer.refreshOverlayLabel(id);
444
+
445
+ console.log(
446
+ `标记 ${id} 的标签显示状态已切换为: ${cleanPointLayer.overlayList[overlayIndex].labelShowed ? '显示' : '隐藏'}`
447
+ );
448
+ } else {
449
+ console.error('未找到指定ID的标记');
450
+ }
451
+ } catch (error) {
452
+ console.error('无效的标记ID',error);
443
453
  }
444
- } catch (error) {
445
- console.error('无效的标记ID');
454
+ } else {
455
+ console.error('请输入标记ID');
446
456
  }
447
- } else {
448
- console.error('请输入标记ID');
449
- }
450
- });
451
-
452
- // 点击刷新图标按钮
453
- refreshIconBtn.addEventListener('click', () => {
454
- const markerId = markerIdInput.value;
455
-
456
- if (markerId) {
457
- try {
458
- const id = parseInt(markerId);
459
-
460
- // 查找该标记
461
- const overlayIndex = cleanPointLayer.overlayList.findIndex(item => item.id === id);
462
-
463
- if (overlayIndex !== -1) {
464
- // 切换窗口标记,用于改变图标
465
- window.flag = !window.flag;
466
-
467
- // 调用refreshOverlayIcon方法刷新图标
468
- cleanPointLayer.refreshOverlayIcon(id);
469
-
470
- console.log(`标记 ${id} 的图标已刷新`);
471
- } else {
472
- console.error('未找到指定ID的标记');
457
+ });
458
+
459
+ // 点击刷新图标按钮
460
+ refreshIconBtn.addEventListener('click', () => {
461
+ const markerId = markerIdInput.value;
462
+
463
+ if (markerId) {
464
+ try {
465
+ const id = parseInt(markerId);
466
+
467
+ // 查找该标记
468
+ const overlayIndex = cleanPointLayer.overlayList.findIndex(
469
+ item => item.id === id
470
+ );
471
+
472
+ if (overlayIndex !== -1) {
473
+ // 切换窗口标记,用于改变图标
474
+ window.flag = !window.flag;
475
+
476
+ // 调用refreshOverlayIcon方法刷新图标
477
+ cleanPointLayer.refreshOverlayIcon(id);
478
+
479
+ console.log(`标记 ${id} 的图标已刷新`);
480
+ } else {
481
+ console.error('未找到指定ID的标记');
482
+ }
483
+ } catch (error) {
484
+ console.error('无效的标记ID');
473
485
  }
474
- } catch (error) {
475
- console.error('无效的标记ID');
486
+ } else {
487
+ console.error('请输入标记ID');
476
488
  }
477
- } else {
478
- console.error('请输入标记ID');
479
- }
480
- });
481
-
482
- // 点击自适应视图按钮
483
- const fitViewBtn = document.getElementById('fitViewBtn');
484
- const zoomOutBtn = document.getElementById('zoomOutBtn');
485
-
486
- fitViewBtn.addEventListener('click', () => {
487
- // 调用overlayFitMap方法,使地图自适应显示所有标记
488
- cleanPointLayer.overlayFitMap();
489
- console.log('已调用overlayFitMap方法,地图已自适应显示所有标记');
490
- });
491
-
492
- // 点击缩小视图按钮
493
- zoomOutBtn.addEventListener('click', () => {
494
- // 先缩小地图视图
495
- const currentZoom = mapUtils.map.getZoom();
496
- mapUtils.map.setZoom(currentZoom - 2);
497
- console.log('地图已缩小,当前缩放级别:', mapUtils.map.getZoom());
498
-
499
- // 提示用户可以点击"自适应视图"按钮来测试效果
500
- console.log('现在可以点击"自适应视图"按钮,测试overlayFitMap方法的效果');
501
- });
502
-
503
- // 点击显示图层按钮
504
- const showBtn = document.getElementById('showBtn');
505
- showBtn.addEventListener('click', () => {
506
- cleanPointLayer.show();
507
- console.log('已调用show方法,图层已显示');
508
- });
509
-
510
- // 点击隐藏图层按钮
511
- const hideBtn = document.getElementById('hideBtn');
512
- hideBtn.addEventListener('click', () => {
513
- cleanPointLayer.hide();
514
- console.log('已调用hide方法,图层已隐藏');
515
- });
516
-
517
- // 点击获取所有标记按钮
518
- const getAllBtn = document.getElementById('getAllBtn');
519
- getAllBtn.addEventListener('click', () => {
520
- const allOverlays = cleanPointLayer.getAllOverlay();
521
- console.log('已调用getAllOverlay方法,所有标记:', allOverlays);
522
- alert(`当前共有 ${allOverlays.length} 个标记`);
523
- });
524
-
525
- // 点击清空所有标记按钮
526
- const clearAllBtn = document.getElementById('clearAllBtn');
527
- clearAllBtn.addEventListener('click', () => {
528
- if (confirm('确定要清空所有标记吗?')) {
529
- cleanPointLayer.clearAllOverlay();
530
- console.log('已调用clearAllOverlay方法,所有标记已清空');
531
- }
532
- });
533
-
534
- // 点击重新加载图层按钮
535
- const reloadBtn = document.getElementById('reloadBtn');
536
- reloadBtn.addEventListener('click', () => {
537
- window.flag = !window.flag
538
- cleanPointLayer.reload();
539
- console.log('已调用reload方法,图层已重新加载');
540
- });
541
-
542
- // 点击销毁图层按钮
543
- const destroyBtn = document.getElementById('destroyBtn');
544
- destroyBtn.addEventListener('click', () => {
545
- if (confirm('确定要销毁图层吗?销毁后将无法恢复')) {
546
- cleanPointLayer.destroy();
547
- console.log('已调用destroy方法,图层已销毁');
548
- }
549
- });
550
- }
489
+ });
490
+
491
+ // 点击自适应视图按钮
492
+ const fitViewBtn = document.getElementById('fitViewBtn');
493
+ const zoomOutBtn = document.getElementById('zoomOutBtn');
494
+
495
+ fitViewBtn.addEventListener('click', () => {
496
+ // 调用overlayFitMap方法,使地图自适应显示所有标记
497
+ cleanPointLayer.overlayFitMap();
498
+ console.log('已调用overlayFitMap方法,地图已自适应显示所有标记');
499
+ });
500
+
501
+ // 点击缩小视图按钮
502
+ zoomOutBtn.addEventListener('click', () => {
503
+ // 先缩小地图视图
504
+ const currentZoom = mapUtils.map.getZoom();
505
+ mapUtils.map.setZoom(currentZoom - 2);
506
+ console.log('地图已缩小,当前缩放级别:', mapUtils.map.getZoom());
507
+
508
+ // 提示用户可以点击"自适应视图"按钮来测试效果
509
+ console.log(
510
+ '现在可以点击"自适应视图"按钮,测试overlayFitMap方法的效果'
511
+ );
512
+ });
513
+
514
+ // 点击显示图层按钮
515
+ const showBtn = document.getElementById('showBtn');
516
+ showBtn.addEventListener('click', () => {
517
+ cleanPointLayer.show();
518
+ console.log('已调用show方法,图层已显示');
519
+ });
520
+
521
+ // 点击隐藏图层按钮
522
+ const hideBtn = document.getElementById('hideBtn');
523
+ hideBtn.addEventListener('click', () => {
524
+ cleanPointLayer.hide();
525
+ console.log('已调用hide方法,图层已隐藏');
526
+ });
527
+
528
+ // 点击获取所有标记按钮
529
+ const getAllBtn = document.getElementById('getAllBtn');
530
+ getAllBtn.addEventListener('click', () => {
531
+ const allOverlays = cleanPointLayer.getAllOverlay();
532
+ console.log('已调用getAllOverlay方法,所有标记:', allOverlays);
533
+ alert(`当前共有 ${allOverlays.length} 个标记`);
534
+ });
535
+
536
+ // 点击清空所有标记按钮
537
+ const clearAllBtn = document.getElementById('clearAllBtn');
538
+ clearAllBtn.addEventListener('click', () => {
539
+ if (confirm('确定要清空所有标记吗?')) {
540
+ cleanPointLayer.clearAllOverlay();
541
+ console.log('已调用clearAllOverlay方法,所有标记已清空');
542
+ }
543
+ });
544
+
545
+ // 点击重新加载图层按钮
546
+ const reloadBtn = document.getElementById('reloadBtn');
547
+ reloadBtn.addEventListener('click', () => {
548
+ window.flag = !window.flag;
549
+ cleanPointLayer.reload();
550
+ console.log('已调用reload方法,图层已重新加载');
551
+ });
552
+
553
+ // 点击销毁图层按钮
554
+ const destroyBtn = document.getElementById('destroyBtn');
555
+ destroyBtn.addEventListener('click', () => {
556
+ if (confirm('确定要销毁图层吗?销毁后将无法恢复')) {
557
+ cleanPointLayer.destroy();
558
+ console.log('已调用destroy方法,图层已销毁');
559
+ }
560
+ });
561
+ }
562
+ };
551
563
  </script>
552
564
  </body>
553
565
  </html>