Vue中集成高德地图API实现定位与自定义样式信息窗体

您所在的位置:网站首页 高德地图车辆位置查询 Vue中集成高德地图API实现定位与自定义样式信息窗体

Vue中集成高德地图API实现定位与自定义样式信息窗体

2024-06-03 15:21:33| 来源: 网络整理| 查看: 265

场景

若依前后端分离版手把手教你本地搭建环境并运行项目:

https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/108465662

在上面将前后端项目搭建起来后,要集成高德地图实现地图显示与定位功能的实现。

 

然后在地图的基础上实现根据坐标进行定位并自定义信息窗体,实现效果如下

 

然后关掉窗体还可以实现定位标记的图片

 

注:

博客:https://blog.csdn.net/badao_liumang_qizhi 关注公众号 霸道的程序猿 获取编程相关电子书、教程推送与免费下载。

实现

登录高德开放平台,然后新建应用

https://developer.amap.com/

 

然后

 

然后为新建的应用新建key,这里的服务平台选择Web端,然后提交

 

然后就可以获取到Key,下面代码中会用到这个Key

然后在Vue项目中安装高德地图Amap相关依赖

npm install vue-amap

 

然后在main.js中引入,将上面的key填入

//引入高德地图 import VueAMap from 'vue-amap' Vue.use(VueAMap) VueAMap.initAMapApiLoader({   key: '你自己的高德地图的key',   plugin: ['AMap.Scale', 'AMap.OverView', 'AMap.ToolBar', 'AMap.MapType', 'AMap.PlaceSearch', 'AMap.Geolocation', 'AMap.Geocoder'],   v: '1.4.4',   uiVersion: '1.0' })

添加位置

 

然后编写地图组件AMap.vue

                            搜索                定位                                                               import { AMapManager, lazyAMapApiLoaderInstance } from 'vue-amap' let amapManager = new AMapManager() export default {   name:'AMap',   data() {     let self = this     return {       carmarkers :[],       currentWindow: {         position: [116.396624,39.908167],         content: '111',         events: {},         visible: false       },       address: null,       searchKey: '',       amapManager,       markers: [],       searchOption: {         city: '全国',         citylimit: true       },       center: [116.396624,39.908167],       zoom: 17,       lng: 0,       lat: 0,       loaded: false,       events: {         init() {           lazyAMapApiLoaderInstance.load().then(() => {             self.initSearch()           })         },         // 点击获取地址的数据         click(e) {           self.markers = []           let { lng, lat } = e.lnglat           self.lng = lng           self.lat = lat           self.center = [lng, lat]           self.markers.push([lng, lat])           // 这里通过高德 SDK 完成。           let geocoder = new AMap.Geocoder({             radius: 1000,             extensions: 'all'           })           console.log(lng+","+lat) //控制台打印坐标                     geocoder.getAddress([lng, lat], function(status, result) {             if (status === 'complete' && result.info === 'OK') {               if (result && result.regeocode) {                 console.log(result.regeocode.formattedAddress) //控制台打印地址                 self.address = result.regeocode.formattedAddress                 self.searchKey = result.regeocode.formattedAddress                 self.$nextTick()               }             }           })         }       },       // 一些工具插件       plugin: [         {           pName: 'Geocoder',           events: {             init (o) {               //console.log("一些工具插件--地址"+o.getAddress())             }           }         },         {           // 定位           pName: 'Geolocation',           events: {             init(o) {               // o是高德地图定位插件实例               o.getCurrentPosition((status, result) => {                 if (result && result.position) {                   // 设置经度                   self.lng = result.position.lng                   // 设置维度                   self.lat = result.position.lat                   // 设置坐标                   self.center = [self.lng, self.lat]                   self.markers.push([self.lng, self.lat])                   // load                   self.loaded = true                   // 页面渲染好后                   self.$nextTick()                 }               })             }           }         },         {           // 工具栏           pName: 'ToolBar',           events: {             init(instance) {                //console.log("工具栏:"+instance);             }           }         },         {           // 鹰眼           pName: 'OverView',           events: {             init(instance) {                //console.log("鹰眼:"+instance);             }           }         },         {           // 地图类型           pName: 'MapType',           defaultType: 0,           events: {             init(instance) {                //console.log("地图类型:"+instance);             }           }         },         {           // 搜索           pName: 'PlaceSearch',           events: {             init(instance) {                //console.log("搜索:"+instance)             }           }         }       ]     }   },   methods: {     initSearch() {       let vm = this       let map = this.amapManager.getMap()       AMapUI.loadUI(['misc/PoiPicker'], function(PoiPicker) {         var poiPicker = new PoiPicker({           input: 'search',           placeSearchOptions: {             map: map,             pageSize: 10           },           suggestContainer: 'searchTip',           searchResultsContainer: 'searchTip'         })         vm.poiPicker = poiPicker         // 监听poi选中信息         poiPicker.on('poiPicked', function(poiResult) {           // console.log(poiResult)            let source = poiResult.source            let poi = poiResult.item            if (source !== 'search') {              poiPicker.searchByKeyword(poi.name)            } else {              poiPicker.clearSearchResults()              vm.markers = []              let lng = poi.location.lng              let lat = poi.location.lat              let address = poi.cityname + poi.adname + poi.name              vm.center = [lng, lat]              vm.markers.push([lng, lat])              vm.lng = lng              vm.lat = lat              vm.address = address              vm.searchKey = address            }         })       })     },     searchByHand() {       if (this.searchKey !== '') {         this.poiPicker.searchByKeyword(this.searchKey)       }     },     positionByHand() {             this.currentWindow = {               position: [121.492439,31.233264],               content: `公众号:霸道的程序猿`,               events: {                 close: (e) => {                   this.currentWindow.visible = false                 }               },               visible: true }             this.carmarkers = [               {                 position:[121.492439,31.233264],                 content: ``,                 events: {                   click: (e) => {                     this.currentWindow = {                       position: this.center,                       content: `公众号:霸道的程序猿 `,                       events: {                         close: (e) => {                           this.currentWindow.visible = false                         }                       },                       visible: true }                   }                 }               }             ]     }   } } .container {   width: 100%;   height: 100%;   position: relative;   left: 50%;   top: 50%;   transform: translate3d(-50%, -50%, 0);   border: 1px solid #999; } .search-box {   position: absolute;   z-index: 5;   width: 30%;   left: 13%;   top: 10px;   height: 30px; } .search-box input {   float: left;   width: 80%;   height: 100%;   border: 1px solid #30ccc1;   padding: 0 8px;   outline: none; } .search-box button {   float: left;   width: 20%;   height: 100%;   background: #30ccc1;   border: 1px solid #30ccc1;   color: #fff;   outline: none; } .tip-box {   width: 100%;   max-height: 260px;   position: absolute;   top: 30px;   overflow-y: auto;   background-color: #fff; }

组件的位置

 

然后找到需要显示地图组件的页面,这里是首页,将没有用的内容删掉,然后

import AMap from '@/components/Amap/AMap' export default {   name: "index",    components: {       AMap   },

引入组件,然后在需要显示地图的地方

                     

这样就能看实现上面需求的功能了

注意其他功能的开发可以参考官方开发文档

在地图上点自定义标记,通过

标签来实现

然后自定义窗体通过

               

然后在定位按钮的点击事件中

    positionByHand() {             this.currentWindow = {               position: [121.492439,31.233264],               content: `公众号:霸道的程序猿`,               events: {                 close: (e) => {                   this.currentWindow.visible = false                 }               },               visible: true }             this.carmarkers = [               {                 position:[121.492439,31.233264],                 content: ``,                 events: {                   click: (e) => {                     this.currentWindow = {                       position: this.center,                       content: `公众号:霸道的程序猿 `,                       events: {                         close: (e) => {                           this.currentWindow.visible = false                         }                       },                       visible: true }                   }                 }               }             ]     }

首先设置自定义窗体的坐标和位置以及要显示的窗体的内容,然后再设置点标记的图片覆盖,并且设置这个点标记图片的点击事件也是显示上面的自定义信息窗体。

 



【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭