Vue.js 加入高德地图的实现方法
一、功能需求
1.根据输入内容进行模糊查询,选择地址后在地图上插上标记,并更新经纬度坐标显示
2.在地图点击后,根据回传的左边更新地址信息和坐标显示
二、准备
1.申请高德地图账号,创建应用
2.在应用管理中 获得key 和安全密钥
三、在webstorm中安装
npm i @amap/amap-jsapi-loader -S
四、防止在使用中AMap无法识别问
在eslintrc.js中加入配置:
-
globals:{
-
"AMap": "true"
-
}
五、正式开发
1.创建页面
-
<template>
-
<div>
-
<label>消息管理</label>
-
<div style="margin-top: 20px">
-
<div style="height:520px;">
-
<div id="all" style="height:100%">
-
<div class="posInput">
-
<el-input style="width:100%"
-
id="tipinput"
-
class="form-control input-style"
-
type="text"
-
placeholder="请输入搜索地址"
-
prefix-icon="el-icon-search"
-
v-model="formatAdress"
-
>
-
</el-input>
-
</div>
-
<div id="allmap"></div>
-
<div class="posSubmit">
-
<el-form ref="form" label-width="85px" >
-
<div class="btn_box" >
-
<el-form-item label="经度:" >
-
<el-input style="width:400px" disabled class="form-control input-style" type="text" v-model="longitude"> </el-input>
-
</el-form-item>
-
<el-form-item label="纬度:" >
-
<el-input style="width:400px" disabled class="form-control input-style" type="text" v-model="latitude"> </el-input>
-
</el-form-item>
-
</div>
-
</el-form>
-
</div>
-
</div>
-
</div>
-
</div>
-
</div>
-
</template>
2.页面样式
-
<style scoped>
-
#all{
-
position: relative;
-
}
-
#allmap{
-
width: 100%; height: calc(100% - 50px);
-
font-family: "微软雅黑";
-
}
-
.posInput{
-
position: absolute;
-
z-index: 1;
-
width: 80%;
-
margin-top: 20px; margin-left: 10%;
-
}
-
.posSubmit{
-
position: absolute; z-index: 1; bottom: 0;
-
margin-left: 5%;
-
width: 90%;
-
display: flex; justify-content: flex-start; align-items: center;
-
}
-
.btn_box{
-
width: 100%;
-
height: 100%;
-
display: flex; ; align-items: center;
-
}
-
::v-deep .el-form-item{
-
margin-bottom: 0 ;
-
}
-
</style>
3.存储的数据项
-
data () {
-
return {
-
map: null,
-
marker: null,
-
startSeacrh: [],
-
stratInfo: {},
-
dprops: {
-
zoom: 15
-
},
-
formatAdress: '',
-
longitude: '', // 经度
-
latitude: '', // 纬度
-
}
-
}
4.创建地图方法
-
mounted () {
-
this.initMap()
-
},
-
methods: {
-
initMap () {
-
const that = this
-
init('allmap', that.dprops).then(AMap => {
-
that.map = AMap
-
that.map.on('click', that.clickHandler) // 地图点击事件 可获取经纬度等信息
-
initScaleTools(that.map, true, false)
-
searchAutocomplete(that.map, 'tipinput', function (event) {
-
that.handleStartSelect(event)
-
})
-
}).catch(err => {
-
this.$message.error(err)
-
})
-
},
-
clickHandler (event) {
-
console.log(event, '起点经纬度 [lng,lat]')
-
if (event.lnglat === '') {
-
this.$message({
-
type: 'warning',
-
message: '该地点无经纬度数据,请输入具体一点的地点!',
-
duration: 5 * 1000
-
})
-
return
-
}
-
if (this.marker) {
-
this.map.remove(this.marker)
-
this.marker = null
-
}
-
this.startSeacrh = []
-
this.startSeacrh = [event.lnglat.lng, event.lnglat.lat]
-
this.marker = new AMap.Marker({
-
position: this.startSeacrh
-
})
-
this.map.add(this.marker)
-
this.map.setCenter(this.startSeacrh)
-
this.longitude = event.lnglat.lng
-
this.latitude = event.lnglat.lat
-
let that = this
-
getAddressByLngLat(this.startSeacrh, function (status, result) {
-
if (status === 'complete') {
-
that.formatAdress = result.regeocode.formattedAddress
-
let adrComponent = result.regeocode.addressComponent
-
that.stratInfo = {
-
district: adrComponent.province,
-
address: adrComponent.district,
-
name: adrComponent.township adrComponent.street adrComponent.streetNumber,
-
fullAdr: result.regeocode.formattedAddress
-
}
-
}
-
})
-
},
-
handleStartSelect (event) {
-
console.log(event, '起点经纬度 [lng,lat]')
-
if (event.poi.location === '') {
-
this.$message({
-
type: 'warning',
-
message: '该地点无经纬度数据,请输入具体一点的地点!',
-
duration: 5 * 1000
-
})
-
return
-
}
-
if (this.marker) {
-
this.map.remove(this.marker)
-
this.marker = null
-
}
-
this.startSeacrh = []
-
this.startSeacrh = [event.poi.location.lng, event.poi.location.lat]
-
this.formatAdress = event.poi.district event.poi.address event.poi.name
-
this.longitude = event.poi.location.lng
-
this.latitude = event.poi.location.lat
-
this.marker = new AMap.Marker({
-
position: this.startSeacrh
-
})
-
this.map.add(this.marker)
-
this.map.setCenter(this.startSeacrh)
-
this.stratInfo = {
-
district: event.poi.district,
-
address: event.poi.address,
-
name: event.poi.name,
-
fullAdr: this.formatAdress
-
}
-
}
-
}
5.封装好的js文件方法
initMap.js
-
import AMapLoader from '@amap/amap-jsapi-loader'
-
window._AMapSecurityConfig = {
-
securityJsCode: '安全密钥'
-
}
-
const initMap = async (config) => {
-
return new Promise((resolve, reject) => {
-
AMapLoader.load({
-
'key': config.key,
-
'version': '1.4.15',
-
'plugins': [
-
'AMap.PolygonEditor' // 插件
-
],
-
'AMapUI': {
-
'version': '1.1',
-
'plugins': []
-
},
-
'Loca': {
-
'version': '1.3.2'
-
}
-
}).then((AMap) => {
-
resolve(AMap)
-
}).catch(err => {
-
reject(err)
-
})
-
})
-
}
-
export default initMap
map.js
-
import initMap from './initMap.js'
-
export const init = (container, props) => {
-
const config = {
-
key: 'key'
-
}
-
return new Promise((resolve, reject) => {
-
initMap(config).then(AMap => {
-
resolve(new AMap.Map(container, { ...props }))
-
}).catch(err => {
-
reject(err)
-
})
-
})
-
}
-
/**
-
* @param {*} map 地图实例
-
* @param {Boolean} noScale 不需要比例尺 true表示不需要
-
* @param {Boolean} noToolBar 不需要工具栏 true表示不需要
-
*/
-
export const initScaleTools = (map, noScale, noToolBar) => {
-
if (!noScale) {
-
map.plugin(['AMap.Scale'], function () {
-
var scale = new AMap.Scale()
-
map.addControl(scale)
-
})
-
}
-
if (!noToolBar) {
-
map.plugin(['AMap.ToolBar'], function () {
-
var tool = new AMap.ToolBar()
-
map.addControl(tool)
-
})
-
}
-
}
-
//模糊查询
-
export const searchAutocomplete = (map, keyword, commpletHandle) => {
-
map.clearMap()
-
AMap.plugin(['AMap.PlaceSearch', 'AMap.Autocomplete'], function () {
-
let autoOptions1 = { input: keyword, city: '全国' }
-
let startAutoComplete = new AMap.Autocomplete(autoOptions1)
-
AMap.PlaceSearch({
-
map: map
-
})
-
AMap.event.addListener(startAutoComplete, 'select', commpletHandle)
-
})
-
}
-
-
/**
-
*
-
* @param {String} LngLat 经纬度
-
* @param {Function} callback 回调函数
-
* @param {Object} otherProps 其他参数
-
*/
-
export const getAddressByLngLat = (LngLat, callback, otherProps) => {
-
AMap.plugin('AMap.Geocoder', function () {
-
let geocoder = new AMap.Geocoder({
-
...otherProps
-
})
-
-
geocoder.getAddress(LngLat, function (status, result) {
-
callback(status, result)
-
})
-
})
-
}
-
-
const mapJS = {
-
init,
-
initScaleTools,
-
searchAutocomplete,
-
getAddressByLngLat
-
}
-
export default mapJS
在文件中导入 map.js方法
-
import {
-
init,
-
initScaleTools,
-
searchAutocomplete,
-
getAddressByLngLat
-
} from '../../utils/map'
六、步骤总结
1.在mounted()中调用 initMap ()初始化地图
2.初始化成功后、添加事件监听:地图点击、模糊查询。添加放大缩小工具栏
-
init('allmap', that.dprops).then(AMap => {
-
that.map = AMap
-
that.map.on('click', that.clickHandler) // 地图点击事件 可获取经纬度等信息
-
initScaleTools(that.map, true, false)
-
searchAutocomplete(that.map, 'tipinput', function (event) {
-
that.handleStartSelect(event)
-
})
-
})
七:效果
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhghafbf
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
怎样阻止微信小程序自动打开
PHP中文网 06-13