首先引入AMap:
1、在index.html引入AMap
<script type="text/javascript" src="http://webapi.amap.com/maps?v=1.4.6&key=你申请的key&plugin=AMap.Geocoder"></script>
<script src="http://webapi.amap.com/ui/1.0/main.js"></script>

2、在build/webpack.base.conf.js中找到module.exports,在末尾添加以下代码:

externals: {
'AMap': 'AMap'
}

3、在需要调用地图的文件中导入AMap,就可以直接调用AMap的API

import AMap from 'AMap'

注意:

本例中只用到了AMap.Geocoder插件,如果要调用其他的plugin,如AMap.Driving,需要在index.html相应加载(多个plugin用逗号隔开):

<script type="text/javascript" src="http://webapi.amap.com/maps?v=1.4.6&key=你申请的key&plugin=AMap.Driving,AMap.Geocoder"></script>

下面介绍高德地图模糊搜索地址的使用:

<template>
<el-form class="wrapper" ref="orderForm" :model="orderForm" :rules="addRules" label-width="100px">
<el-form-item label="上车地点:" prop="sname">
<el-input id="sname" v-model="orderForm.sname" type="text"
@focus="initAuto('sname')"
@input="snameSearch"
@keyup.delete.native="deletePlace('sname')"
placeholder="请输入上车地点">
<i
class="el-icon-location-outline el-input__icon"
slot="suffix" title="上车地点">
</i>
</el-input>
</el-form-item>
<el-form-item label="下车地点:" prop="dname">
<el-input id="dname" v-model="orderForm.dname" type="text"
@focus="initAuto('dname')"
@input="dnameSearch"
@keyup.delete.native="deletePlace('dname')"
placeholder="请输入下车地点">
<i
class="el-icon-location-outline el-input__icon"
slot="suffix" title="下车地点">
</i>
</el-input>
</el-form-item>
<el-form-item>
<el-button type="primary" size="small" @click="toSubmit">提交</el-button>
</el-form-item>
<el-form-item v-if="infoVisible">
<div>上车地点:{{orderForm.sname}},经度:{{orderForm.slon}},纬度:{{orderForm.slat}}</div>
<div>下车地点:{{orderForm.dname}},经度:{{orderForm.dlon}},纬度:{{orderForm.dlat}}</div>
</el-form-item>
</el-form>
</template>
<script>
import AMap from 'AMap' export default {
data() {
let validatePlace = (rules, value, callback) => {
if(rules.field==='sname'){
if (value === '') {
callback(new Error('请输入上车地点'));
} else {
if(!this.orderForm.slat || this.orderForm.slat===0) {
callback(new Error('请搜索并选择详细上车地点'));
} else {
callback();
}
}
} else if(rules.field==='dname'){
if (value === '') {
callback(new Error('请输入下车地点'));
} else {
if(!this.orderForm.dlat || this.orderForm.dlat===0) {
callback(new Error('请搜索并选择详细下车地点'));
} else {
callback();
}
}
}
};
return {
orderForm: {
sname: '', // 上车地点
slat: 0, // 上车地点纬度
slon: 0, // 上车地点经度
dname: '', // 下车地点
dlat: 0, // 下车地点纬度
dlon: 0 // 下车地点经度
},
addRules: {
sname: [{required: true, validator: validatePlace, trigger: 'change'}],
dname: [{required: true, validator: validatePlace, trigger: 'change'}]
},
snameAuto: null, // 上车地点Autocomplete
dnameAuto: null, // 下车地点Autocomplete
snameAutoListener: null,// 上车地点Autocomplete监听器
dnameAutoListener: null,// 下车地点Autocomplete监听器
infoVisible: false // 选中地址信息显示
}
},
methods: {
// 实例化Autocomplete
toInitAuto(inputId) {
var auto = null;
AMap.plugin('AMap.Autocomplete',function(){//回调函数
//实例化Autocomplete
let autoOptions = {
city: "", //城市,默认全国
input:inputId //使用联想输入的input的id
};
auto= new AMap.Autocomplete(autoOptions);
//TODO: 使用autocomplete对象调用相关功能
});
return auto;
},
// 初始化搜索地址弹层
initAuto(inputId) {
if(inputId==="sname" && this.snameAuto==null) {
this.snameAuto = this.toInitAuto(inputId);
} else if(inputId==="dname" && this.dnameAuto==null){
this.dnameAuto = this.toInitAuto(inputId);
}
},
// 上车地点搜索
snameSearch() {
if(AMap.event && this.snameAuto){
this.snameAutoListener = AMap.event.addListener(this.snameAuto, "select", (e) => { //注册监听,当选中某条记录时会触发
if(e.poi.location && e.poi.location.getLat()){
this.orderForm.slat = e.poi.location.lat;
this.orderForm.slon = e.poi.location.lng;
this.orderForm.sname = e.poi.name;
this.$refs.orderForm.validateField("sname"); // 触发选择时验证字段
} else {
this.geocoder(e.poi.name, "sname");
}
});
}
},
// 下车地点搜索
dnameSearch() {
if(AMap.event && this.dnameAuto){
this.dnameAutoListener = AMap.event.addListener(this.dnameAuto, "select", (e) => { //注册监听,当选中某条记录时会触发
if(e.poi.location && e.poi.location.getLat()) {
this.orderForm.dlat = e.poi.location.lat;
this.orderForm.dlon = e.poi.location.lng;
this.orderForm.dname = e.poi.name;
this.$refs.orderForm.validateField("dname");// 触发选择时验证字段
} else {
this.geocoder(e.poi.name, "dname");
}
});
}
},
geocoder(keyword, inputValue) {
let geocoder = new AMap.Geocoder({
//city: "010", //城市,默认:“全国”
radius: 1000 //范围,默认:500
});
//地理编码,返回地理编码结果
geocoder.getLocation(keyword, (status, result) => {
if (status === 'complete' && result.info === 'OK') {
let geocode = result.geocodes;
if(geocode.length > 0){
if(inputValue === "sname") {
this.orderForm.slat = geocode[0].location.getLat();
this.orderForm.slon = geocode[0].location.getLng();
this.orderForm.sname = keyword;
this.$refs.orderForm.validateField("sname");
} else if(inputValue === "dname") {
this.orderForm.dlat = geocode[0].location.getLat();
this.orderForm.dlon = geocode[0].location.getLng();
this.orderForm.dname = keyword;
this.$refs.orderForm.validateField("dname");
}
}
}
});
},
// 做删除操作时还原经纬度并验证字段
deletePlace(inputId){
if(inputId === "sname"){
this.orderForm.slat = 0;
this.orderForm.slon = 0;
this.$refs.orderForm.validateField("sname");
} else if(inputId === "dname"){
this.orderForm.dlat = 0;
this.orderForm.dlon = 0;
this.$refs.orderForm.validateField("dname");
}
},
toSubmit(){
this.$refs.orderForm.validate((valid) => {
if(valid){
// submit code...
console.info(this.orderForm);
this.infoVisible = true;
}
});
},
},
beforeDestroy: function () {
// 释放内存
if(this.snameAutoListener){
AMap.event.removeListener(this.snameAutoListener);
}
if(this.dnameAutoListener){
AMap.event.removeListener(this.dnameAutoListener);
}
}
}
</script>
<style>
.wrapper {
margin: 50px;
width: 450px;
}
</style>
 效果图如下:
 
 

高德地图模糊搜索地址(elementUI)的更多相关文章

  1. VUE 高德地图选取地址组件开发

    高德地图文档地址 http://lbs.amap.com/api/lightmap/guide/picker/ 结合步骤: 1.通过iframe内嵌引入高德地图组件 key就选你自己申请的key &l ...

  2. 时时获得高德地图坐标 http://lbs.amap.com/console/show/picker

    1.高德地图标注 在做开发时,或者做高德地图标注的时候,要用到高德地图的坐标,时时获得高德地图坐标 http://lbs.amap.com/console/show/picker 老的高德地图标注地址 ...

  3. Android 打开高德地图、百度地图进行导航;打开第三方App去导航;

    抽成工具类了,复制下来就能直接用了,直接看代码吧: 高德地图Url Api: http://lbs.amap.com/api/amap-mobile/guide/android/navigation ...

  4. 高德地图api实现地址和经纬度的转换(python)

    利用高德地图web服务api实现地理/逆地址编码 api使用具体方法请查看官方文档 文档网址:http://lbs.amap.com/api/webservice/guide/api/georegeo ...

  5. 在H5页面内通过地址调起高德地图实现导航

    项目中用到的一个功能是要通过点击地址来实现打开地图app实现地址导航. 如下图: 实现思路就是在H5页面内通过点击marker图标然后进行当前位置与页面上地址的路程规划与导航. 由于项目中用到的是高德 ...

  6. VUE组件 之 高德地图地址选择

    注:本文基于上一篇文章[ Vue-Cli 3.0 中配置高德地图] ,采用直接引入高德 SDK 的方式来使用高德地图api 一.效果图 二.组件要实现的功能 1. 如果有传入坐标点,则定位到坐标点 2 ...

  7. Java 通过地址获取经纬度 - 高德地图

    一.添加依赖 <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-v ...

  8. vue+Element-ui 的 el-cascader 做高德地图的省市区三级联动并且是异步加载,点击省市区跳转到对应的区(地图可以通过后端返回的点进行标点)

    // 完整版高德地图,可以复制代码直接使用 index.html <script type="text/javascript" src="https://webap ...

  9. Vue异步加载高德地图API

    项目中用到了高德地图的API以及UI组件库,因为是直接把引入script写在index.html中,项目打包后运行在服务器,用浏览器访问加载第一次时会非常慢,主要原因是加载高德地图相关的js(近一分钟 ...

随机推荐

  1. Flutter Offstage、Visibility隐藏/可见

    Offstage是控制组件隐藏/可见的组件,如果感觉有些单调功能不全,我们可以使用Visibility,Visibility也是控制子组件隐藏/可见的组件.不同是的Visibility有隐藏状态是否留 ...

  2. Linux 在 TOP 命令中切换内存的显示单位

    顶部的内存信息可以在top运行时按E切换,每次切换转换率为1000,只是没有单位,切换的单位为 k,m,g,t,p: 1. 2. 3., 4. 底下的进程信息按e切换,每次切换转换率为1000,切换的 ...

  3. ubuntu 防火墙打开关闭

    1.查看防火墙状态 sudo ufw status 2.打开防火墙 sudo ufw enable 3.关闭防火墙 sudo ufw disable

  4. 论H5嵌入APP的联合登录的解决方案

    什么是联合登录 因为公司产品的发展,会与第三方的一些商户进行对接,商户APP提供入口,进入我们的H5页,从而提供服务. 而商户希望用户在其APP进行账户登录后,进入H5页不再进行登录,所以我们的H5需 ...

  5. spring 使用@AspectJ注解开发Spring AOP

    选择切点 Spring是方法级别的AOP框架,而我们主要也是以某个类的某个方法作为切点,用动态代理的理论来说,就是要拦截哪个方法织入对应AOP通知. 代码清单:打印角色接口 package com.s ...

  6. bladex调用网关使用oauth2统一获取授权

    一:启动网关服务(需要启动其它服务,如:AuthApplication .UserApplication.BladeLogApplication,及自己添加的代码服务) 二:http://localh ...

  7. 删除pod后又重新创建pod发现还是访问原先的服务状态---解决

    因为做了数据持久化存储,需要删除数据目录下的数据才可以 参照: https://www.cnblogs.com/effortsing/p/10496391.html

  8. 【JQuery插件】扑克正反面翻牌效果

    里面有两个demo,支持X横向和Y纵向翻转两个效果. 对元素的布局有一定的讲究,需要分析一下demo的css. 默认翻转速度为80,不要大于100ms. <!DOCTYPE> <ht ...

  9. EMQ配置通过nginx反向代理wss和ws

    参考:https://www.cnblogs.com/succour/p/6305574.html EMQ官方文档:https://docs.emqx.io/broker/v3/cn/ 一,系统环境及 ...

  10. vue 服务器Linux部署

    1.打包vue项目 执行命令npm  run  build,然后会生成一个文件夹dist,里面的文件就是打包文件. 2.上传vue的打包文件,放在合适的文件夹下,例如/var/www 3.配置ngin ...