Bootstrap

vue项目中地图选点,搜索选点,获取经纬度,以及详细地址

第一步:安装高德地图

npm i @amap/amap-jsapi-loader --save

第二步:页面创建放置地图的DOM元素

html:

<template>
  <div id="container"></div>
</template>

css:

<style  scoped>
    #container{
        padding:0px;
        margin: 0px;
        width: 100%;
        height: 800px;
    }
</style>

script:

import AMapLoader from '@amap/amap-jsapi-loader';
window._AMapSecurityConfig = {
    // 安全密钥
    securityJsCode: '918****************80d3cb6',//高德地图申请key值的秘钥
  };
const form = reactive({
    lat: '',//纬度
    lng: '',//经度
    address: '',//地址
    adcode: '',
  });
let map = null; //地图
const keywords = ref(''); 
const marker = ref('');
const geoCoder = ref('');
const options = ref([]);
const loadings = ref(false);
// 搜索提示
const AutoComplete = ref(null);
const mapapply = () => {
    AMapLoader.load({
      key: 'b6a466ab*****************eed74', // 申请好的Web端开发者Key,首次调用 load 时必填
      version: '2.0', // 指定要加载的 JSAPI 的版本,缺省时默认为 1.4.15
      plugins: ['AMap.Scale', 'AMap.Geocoder', 'AMap.AutoComplete'], //需要使用的的插件列表,如比例尺'AMap.Scale',支持添加多个如:['...','...']
    })
      .then((AMap) => {
        console.log(AMap);
        map = new AMap.Map('container', {
          // 设置地图容器id
          viewMode: '3D', // 是否为3D地图模式
          zoom: 11, // 初始化地图级别
          center: [116.397428, 39.90923], // 初始化地图中心点位置
        });
        geoCoder.value = new AMap.Geocoder({
          city: '010', //城市设为北京,默认:“全国”
          radius: 1000, //范围,默认:500
        });
        if (form.lng != '' || form.lat != '' || form.address != '') {
          setMapMarker();
        }
        AutoComplete.value = new AMap.AutoComplete({ city: '全国' });
        map.on('click', showInfoClick);
      })
      .catch((e) => {
        console.log(e);
      });
  };
  const showInfoClick = (e) => {
    removeMarker();
    form.lat = e.lnglat.getLat();
    form.lng = e.lnglat.getLng();
    console.log('您在 [ ' + e.lnglat.getLng() + ',' + e.lnglat.getLat() + ' ] 的位置单击了地图!');
    console.log(e);
    setMapMarker();
    toGeoCoder();
    console.log(form);
  };
  // 标记点
  const setMapMarker = () => {
    // 自动适应显示想显示的范围区域
    map.setFitView();
    marker.value = new AMap.Marker({
      map: map,
      position: [form.lng, form.lat],
    });
    map.setFitView();
    map.add(marker.value);
  };
  const removeMarker = () => {
    if (marker.value) {
      map.remove(marker.value);
    }
  };
  const toGeoCoder = () => {
    let lnglat = [form.lng, form.lat];
    console.log(lnglat);
    geoCoder.value.getAddress(lnglat, function (status, result) {
      console.log(status, result);
      if (status === 'complete' && result.regeocode) {
        form.address = result.regeocode.formattedAddress;
        keywords.value = result.regeocode.formattedAddress;
      }
    });
  };
  // 搜索
  const remoteMethod = (query) => {
    console.log(query);
    if (query !== '') {
      loadings.value = true;
      setTimeout(() => {
        loadings.value = false;
        AutoComplete.value.search(query, (status, result) => {
          options.value = result.tips;
        });
      }, 200);
      console.log(options);
    } else {
      options.value = [];
    }
  };
  // 选中提示
  const currentSelect = (val) => {
    // 清空时不执行后面代码
    if (!val) {
      return;
    }
    form.lng = val.location.lng;
    form.lat = val.location.lat;
    form.address = val.district + val.address;
    form.adcode = val.adcode;
    // 清除点
    removeMarker();
    // 标记点
    setMapMarker();
  };

悦读

道可道,非常道;名可名,非常名。 无名,天地之始,有名,万物之母。 故常无欲,以观其妙,常有欲,以观其徼。 此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。

;