Hwf 2 miesięcy temu
rodzic
commit
e5ca48573e
2 zmienionych plików z 23 dodań i 12 usunięć
  1. 12 3
      src/hooks/AMap/useAMap.ts
  2. 11 9
      src/views/globalMap/LeftMenu.vue

+ 12 - 3
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,9 +129,11 @@ export function useAMap(options) {
   // 添加多个点
   const addMarker = (points, notClean?: boolean) => {
     if (!notClean) {
-      clearMarker('point');
+      addPoints = points;
+    } else {
+      addPoints.push(...points);
     }
-    addPoints = points;
+    clearMarker('point');
     const count = points.length;
     const _renderClusterMarker = function (context) {
       // 聚合中点个数
@@ -191,7 +200,7 @@ export function useAMap(options) {
     };
     cluster = new AMap.MarkerCluster(
       map, //地图实例
-      points, //海量点数据,数据中需包含经纬度信息字段 lnglat
+      addPoints, //海量点数据,数据中需包含经纬度信息字段 lnglat
       {
         gridSize: 30, //数据聚合计算时网格的像素大小
         renderClusterMarker: _renderClusterMarker, //上述步骤的自定义聚合点样式

+ 11 - 9
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>-->
@@ -31,12 +31,7 @@
           </div>
           <div class="search-list">
             <div class="scroll">
-              <div
-                v-for="(item, index) in searchState.layerList"
-                :key="index"
-                class="list-item"
-                @click="selectSearchMarker(item)"
-              >
+              <div v-for="(item, index) in searchState.layerList" :key="index" class="list-item" @click="selectSearchMarker(item)">
                 <div class="tag">{{ item.dict_label }}</div>
                 <div class="text1" :title="item.name">{{ item.name }}</div>
               </div>
@@ -124,6 +119,7 @@ import { getPointInfoComprehensiveSearch } from '@/api/globalMap';
 import { listMenu } from '@/api/system/menu';
 import { deepClone } from '@/utils';
 import VideoDialog from '@/components/HKVideo/video-dialog.vue';
+import gcoord from 'gcoord';
 
 const emits = defineEmits(['switchMap', 'clickMenu', 'selectSearchMarker']);
 const getPlaceSearch = inject('getPlaceSearch');
@@ -176,9 +172,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({