Hwf il y a 5 mois
Parent
commit
d7914d2850
2 fichiers modifiés avec 22 ajouts et 5 suppressions
  1. 12 2
      src/hooks/AMap/useAMap.ts
  2. 10 3
      src/views/globalMap/LeftMenu.vue

+ 12 - 2
src/hooks/AMap/useAMap.ts

@@ -115,6 +115,13 @@ export function useAMap(options) {
   const addSearchMarker = (item) => {
     map.setZoom(18);
     map.setCenter(item.lnglat);
+    // 获取到上一次的搜索标记并移除
+    const index = addPoints.findIndex((m) => {
+      return m.dataType === 'search';
+    });
+    if (index > -1) {
+      addPoints.splice(index, 1);
+    }
     addMarker([item], true);
     clickMarker = item;
     options.onMarkerClick(item);
@@ -122,8 +129,11 @@ export function useAMap(options) {
   // 添加多个点
   const addMarker = (points, notClean?: boolean) => {
     if (!notClean) {
-      clearMarker('point');
+      addPoints = points;
+    } else {
+      addPoints.push(...points);
     }
+    clearMarker('point');
     addPoints = points;
     const count = points.length;
     const _renderClusterMarker = function (context) {
@@ -191,7 +201,7 @@ export function useAMap(options) {
     };
     cluster = new AMap.MarkerCluster(
       map, //地图实例
-      points, //海量点数据,数据中需包含经纬度信息字段 lnglat
+      addPoints, //海量点数据,数据中需包含经纬度信息字段 lnglat
       {
         gridSize: 30, //数据聚合计算时网格的像素大小
         renderClusterMarker: _renderClusterMarker, //上述步骤的自定义聚合点样式

+ 10 - 3
src/views/globalMap/LeftMenu.vue

@@ -13,7 +13,7 @@
           </div>
           <div class="search-list">
             <div class="scroll">
-              <div v-for="(item, index) in searchState.resultList" :key="index" class="list-item" @click="selectSearchMarker(item)">
+              <div v-for="(item, index) in searchState.resultList" :key="index" class="list-item" @click="selectSearchMarker(item, 'gd')">
                 <i class="icon1" />
                 <div class="text1" :title="item.name">{{ item.name }}</div>
                 <!--              <div class="text2">{{ item.address }}</div>-->
@@ -134,6 +134,7 @@ import { getPointInfoComprehensiveSearch } from '@/api/globalMap';
 import { listMenu2 } from '@/api/system/menu';
 import { deepClone } from '@/utils';
 import { onClickOutside } from '@vueuse/core';
+import gcoord from 'gcoord';
 
 const emits = defineEmits(['switchMap', 'clickMenu', 'selectSearchMarker']);
 const getPlaceSearch = inject('getPlaceSearch');
@@ -186,9 +187,15 @@ const changeSearchText = () => {
 };
 
 // 点击搜索结果,添加标注
-const selectSearchMarker = (item) => {
+const selectSearchMarker = (item, type) => {
+  const data = deepClone(item);
+  if (type === 'gd') {
+    const lnglat = gcoord.transform([data.longitude, data.latitude], gcoord.GCJ02, gcoord.WGS84);
+    data.longitude = lnglat[0];
+    data.latitude = lnglat[1];
+  }
   searchState.showList = false;
-  emits('selectSearchMarker', item);
+  emits('selectSearchMarker', data);
 };
 
 const menuState = reactive({