赞
踩
在地图上标点之后,直接获得坐标以及具体位置信息:
“https://lbs.amap.com/api/webservice/guide/api/georegeo”,这个网址中给出了地理编码以及逆编码的接口,可以直接调用。
进入高德控制台首页我的应用中添加两个KEY“https://console.amap.com/dev/index”;
如图所示:新建一个web端(JS API)和web服务key;
在项目根目录下使用下载amap插件
npm i @amap/amap-jsapi-loader --save
在main.js中导入AMap插件,这里使用的key为前面申请的两个key中的web端的key;
template定义:
- //template
- <template>
- <div id="MapContainer"></div>
- </template>
data定义:
- var map = {} //地图对象
- var marker = {} //标记对象
- const markers = [] //标记对象数组
-
- export default {
- name: 'Map',
- props:{ //父组件传值 经纬度以及具体信息 需要做双向绑定
- storeroomLocation:{
- type:String
- },
- storeroomLongitude:{
- type:Number
- },
- storeroomLatitude:{
- type:Number
- }
- },
- data() {
- return {
- lng: '',
- lat: '',
- location:'',
- MapMsg:''
- }
- },
- }
具体实现方法:
- createdMap() {
- const that = this
- map = new AMap.Map('MapContainer', {
- zoom: 13, //设置地图的缩放级别
- zooms: [8, 20], //设置地图的缩放级别区间
- mapStyle: 'amap://styles/normal', //设置地图的显示样式
- features: ['road', 'point',], //设置地图的底图元素,缺少则显示全部元素,bg区域面、point兴趣点、road道路及道路标注、building建筑物
- })
- //绑定地图点击事件
- map.on('click', function (e) {
- map.remove(markers)
- const { lng, lat } = e.lnglat
- that.lng = lng
- that.lat = lat
- that.location = lng+','+lat
- // 创建一个 Marker 实例: 标记点信息
- var marker = new AMap.Marker({
- position: [lng, lat], // 经纬度
- anchor: 'center',
- offset: new AMap.Pixel(0, 0),
- //创建一个自定义图标实例
- icon: new AMap.Icon({
- size: new AMap.Size(28, 30), // 图标尺寸
- image: '//a.amap.com/jsapi_demos/static/demo-center/icons/poi-marker-default.png', // 自定义图像的url
- imageSize: new AMap.Size(27, 30) // 根据所设置的大小拉伸或压缩图片
- }),
- })
- //只保留一个标记点
- markers.push(marker)
- map.add(marker)
-
- // 获取详细位置信息 web服务key
- const LocationObj = that.BatchLocationMsg({location:that.location,key:'xxxxxxxxxxxxxxxxxx'}) //此处的xxxx填写前面申请的web服务key
- LocationObj.then((res)=>{
- const {data} = res
- that.MapMsg = data.regeocode.formatted_address
- that.$emit('update:storeroomLocation',that.MapMsg)
- // console.log(typeof that.lng)
- that.$emit('update:storeroomLongitude',that.lng)
- that.$emit('update:storeroomLatitude',that.lat)
- })
- })
- },
- //restapi.amap.com/v3/geocode/
- BatchLocationMsg(params){
- return axios({
- url:'/amap/regeo',
- method:'GET',
- params:params
- })
- // getAction('/amap/regeo',params)
- }
1.这块代码是对标发送请求获取具体信息的接口,因为产生了跨域问题 ,所以需要在vue.config.js中进行代理操作:
- BatchLocationMsg(params){
- return axios({
- url:'/amap/regeo',
- method:'GET',
- params:params
- })
具体代理实现:
- devServer: {
- port: 3000,
- proxy: {
- //添加下面的对象
- '/amap': {
- target: 'https://restapi.amap.com/v3/geocode/',
- changeOrigin: true,
- ws: true,
- pathRewrite: {
- '^/amap': ''
- }
- },
- }
- }
总结:主要注意两个点:
1.功能中包含了使用api的逆编码方法,所以需要使用web服务的key,在导入时使用的key为web端的key,需要使用两个;
2.在调用官方接口时,会产生跨域问题,需要在vue.config.js中进行代理操作。
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。