【Vue3 配合高德地图实现精准定位并获取定位信息】

高德密钥创建

进入控制台中
在这里插入图片描述
新建
在这里插入图片描述
可以得到我们的密钥
在这里插入图片描述

高德插件安装

从官方文档中可看到 添加链接描述
在这里插入图片描述

安装高德依赖

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

创建地图容器

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

设置地图容器样式

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

引入 JS API Loade

import AMapLoader from '@amap/amap-jsapi-loader';

完整代码

<script setup>
import { onMounted, onUnmounted } from "vue";
import AMapLoader from "@amap/amap-jsapi-loader";

let map = null;

onMounted(() => {
  window._AMapSecurityConfig = {
    securityJsCode: "「你申请的安全密钥」",
  };
  AMapLoader.load({
    key: "", // 申请好的Web端开发者Key,首次调用 load 时必填
    version: "2.0", // 指定要加载的 JSAPI 的版本,缺省时默认为 1.4.15
    plugins: ["AMap.Scale"], //需要使用的的插件列表,如比例尺'AMap.Scale',支持添加多个如:['...','...']
  })
    .then((AMap) => {
      map = new AMap.Map("container", {
        // 设置地图容器id
        viewMode: "3D", // 是否为3D地图模式
        zoom: 11, // 初始化地图级别
        center: [116.397428, 39.90923], // 初始化地图中心点位置
      });
    })
    .catch((e) => {
      console.log(e);
    });
});

onUnmounted(() => {
  map?.destroy();
});
</script>

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

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

获取详细具体定位信息

上面我们已经可以在软件中获取基本的地图信息了
接下来进行配置具体定位信息包括经纬度等等
查看官方文档可查看到 AMap.Geolocation 插件

在这里插入图片描述
使用插件可进行配置

mapObj = new AMap.Map('iCenter');
mapObj.plugin('AMap.Geolocation', function () {
    geolocation = new AMap.Geolocation({
        enableHighAccuracy: true,//是否使用高精度定位,默认:true
        timeout: 10000,          //超过10秒后停止定位,默认:无穷大
        maximumAge: 0,           //定位结果缓存0毫秒,默认:0
        convert: true,           //自动偏移坐标,偏移后的坐标为高德坐标,默认:true
        showButton: true,        //显示定位按钮,默认:true
        buttonPosition: 'LB',    //定位按钮停靠位置,默认:'LB',左下角
        buttonOffset: new AMap.Pixel(10, 20),//定位按钮与设置的停靠位置的偏移量,默认:Pixel(10, 20)
        showMarker: true,        //定位成功后在定位到的位置显示点标记,默认:true
        showCircle: true,        //定位成功后用圆圈表示定位精度范围,默认:true
        panToLocation: true,     //定位成功后将定位到的位置作为地图中心点,默认:true
        zoomToAccuracy:true      //定位成功后调整地图视野范围使定位位置及精度范围视野内可见,默认:false
    });
    mapObj.addControl(geolocation);
    geolocation.getCurrentPosition();
    AMap.event.addListener(geolocation, 'complete', onComplete);//返回定位信息
    AMap.event.addListener(geolocation, 'error', onError);      //返回定位出错信息
});

结果如下
在这里插入图片描述
Vue3完整的代码如下

<script setup>
import { onMounted, onUnmounted } from "vue";
import AMapLoader from "@amap/amap-jsapi-loader";
import { ElMessage } from 'element-plus'
let map = null;

onMounted(() => {
  window._AMapSecurityConfig = {
    securityJsCode: "",
  };

  
  AMapLoader.load({
    key: "", // 申请好的Web端开发者Key,首次调用 load 时必填
    version: "2.0", // 指定要加载的 JSAPI 的版本,缺省时默认为 1.4.15
    plugins: ["AMap.Scale"], //需要使用的的插件列表,如比例尺'AMap.Scale',支持添加多个如:['...','...']
  })
    .then((AMap) => {
      map = new AMap.Map("container", {
        // 设置地图容器id
        resizeEnable: true,
        zoom: 15, // 初始化地图级别
      });

      AMap.plugin('AMap.Geolocation', function() {
        var geolocation = new AMap.Geolocation({
        enableHighAccuracy: true, // 是否使用高精度定位,默认:true
        timeout: 10000, // 设置定位超时时间,默认:无穷大
        offset: [10, 20],  // 定位按钮的停靠位置的偏移量
        zoomToAccuracy: true,  //  定位成功后调整地图视野范围使定位位置及精度范围视野内可见,默认:false
        position: 'RB', //  定位按钮的排放位置,  RB表示右下
        zoomToAccuracy:true  ,
      })
      map.addControl(geolocation);
      geolocation.getCurrentPosition(
        function(status,result){
            if(status=='complete'){
              onComplete(result)
            }else{
              onError(result)
            }
      }
    );
    })
    })
});
onUnmounted(() => {
  map?.destroy();
});
function onError(data) {

  ElMessage('定位失败')
  // ElMessage(data.message)

  
    }
function onComplete(data) {
  
        ElMessage('定位成功')

    }

</script>
<think>好的,用户想在Vue3项目中集成高德卫星地图实现搜索功能。我需要根据提供的引用内容来解答这个问题。首先,我需要回顾一下引用中的相关信息。 引用[1]提到获取高德地图API的步骤,包括注册、申请密钥,以及可能的初始化步骤。引用[3]详细说明了在Vue中引入高德地图的步骤,包括注册密钥、安装加载器、封装组件,以及实现搜索定位的方法。引用[2]虽然提到百度API,但用户的问题是关于高德地图的,所以可能需要忽略这部分,或者确认是否有混淆。 首先,用户需要在Vue3项目中集成高德卫星地图。根据引用[3],步骤包括注册高德开放平台账号,创建应用获取API密钥。然后安装高德地图的加载器,比如AMapLoader。接下来需要创建一个自定义组件来初始化地图,这里需要注意设置地图类型为卫星图,可能需要设置`mapStyle: &#39;satellite&#39;`或者对应的配置项。 然后是地点搜索功能。引用[3]提到根据关键词搜索定位到位置,这可能需要使用高德的PlaceSearch插件。需要确保在加载地图时正确引入该插件,在搜索后更新地图的中心坐标和添加标记。此外,处理搜索结果的展示,可能需要创建一个输入框和搜索按钮,绑定事件触发搜索。 需要注意Vue3的composition API,比如使用`onMounted`生命周期钩子来初始化地图,以及使用ref来引用DOM元素。同时,要处理异步加载地图的问题,可能需要使用AMapLoader.load()方法,在回调函数中初始化地图和插件。 另外,引用[1]中的步骤四可能涉及配置安全密钥或设置Web服务,需要确保在创建应用时正确配置允许的域名,比如本地开发的localhost和线上域名,避免出现权限问题。 测试过程中,可能需要检查地图是否正确加载为卫星视图,搜索功能是否能够获取结果定位,以及标记是否正确显示。如果有问题,需要检查API密钥是否正确,插件是否加载,以及网络请求是否有错误。 总结步骤应该是:注册高德获取密钥→安装依赖→封装地图组件→初始化卫星地图→添加搜索控件→处理搜索逻辑→展示结果。同时,参考引用[3]中的步骤,特别是第二部分关于搜索定位实现。</think>以下是在Vue3中使用高德卫星地图API实现地点搜索的步骤说明: ### 一、注册高德地图API密钥 1. 访问[高德开放平台](https://lbs.amap.com/),注册开发者账号 2. 进入「应用管理」创建新应用,选择「Web端(JS API)」 3. 在「Key管理」页面获取API密钥(需勾选Web服务选项)[^1][^3] ### 二、安装依赖 ```bash npm install @amap/amap-jsapi-loader --save ``` ### 三、创建地图组件(MapContainer.vue) ```vue <template> <div> <input v-model="searchKeyword" @keyup.enter="handleSearch"/> <div id="mapContainer" ref="mapContainer"></div> </div> </template> <script setup> import { ref, onMounted } from &#39;vue&#39; import AMapLoader from &#39;@amap/amap-jsapi-loader&#39; const mapContainer = ref(null) const searchKeyword = ref(&#39;&#39;) let map = null let placeSearch = null // 初始化卫星地图 const initMap = async () => { try { const AMap = await AMapLoader.load({ key: &#39;YOUR_API_KEY&#39;, version: &#39;2.0&#39;, plugins: [&#39;AMap.PlaceSearch&#39;] }) map = new AMap.Map(mapContainer.value, { viewMode: &#39;3D&#39;, mapStyle: &#39;amap://styles/2a09079c3daac9420056e710ea7e3d67&#39;, // 卫星地图样式 center: [116.397428, 39.90923], zoom: 13 }) // 初始化地点搜索 placeSearch = new AMap.PlaceSearch({ pageSize: 5, pageIndex: 1, citylimit: true }) } catch (error) { console.error(&#39;地图加载失败:&#39;, error) } } // 执行搜索 const handleSearch = () => { placeSearch.search(searchKeyword.value, (status, result) => { if (status === &#39;complete&#39; && result.poiList.pois.length) { const poi = result.poiList.pois[0] map.setCenter([poi.location.lng, poi.location.lat]) new AMap.Marker({ position: [poi.location.lng, poi.location.lat], map: map }) } }) } onMounted(() => { initMap() }) </script> <style scoped> #mapContainer { width: 100%; height: 600px; } </style> ``` ### 四、功能实现要点 1. **卫星地图样式**:通过`mapStyle`参数指定卫星地图样式ID[^3] 2. **搜索定位**:使用`AMap.PlaceSearch`插件实现地点搜索 3. **坐标转换**:高德使用GCJ-02坐标系,如需与其他地图对接需要转换[^2] 4. **安全控制**:在开放平台设置Web端域名白名单[^1]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

想成为全栈工程师的小小白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值