因为自己想在手机端开发一个应用要应用Vue框架,所以就想到了uni-app,其中一个模块就要加载地图并获取位置信息。这个uni官网给了api,调用也还方面,现就开发中的思路和几个关键方法进行说明,由于uni-app最开始就是以微信小程序为主的,所以他和微信开发者工具基本很类似,他们两个可以互相参考着学习。这里我还是以uni-app为主。

这里要特别注意的一点就是:绘制地图和获取位置信息是两件事。先获取位置信息,再将位置信息展现在地图上。


目录

1.绘制地图在手机端

2.获取位置

3.点击地图确定位置

4.效果图展示:

5.源码展示:

6.打包注意


1.绘制地图在手机端

直接将<map></map>标签放上去就可以通过浏览器F12看到一个小地图了,map标签的属性中中心经度longitude,中心纬度latitude,缩放级别scale是要给的,这些数据都放在data中,绑定在标签里,遵守vue以数据为中心驱动的方式。layer-style是腾讯地图中地图样式,可以不设定使用默认的,markers是用来标记你当前位置的。@tap用来获取你点击地图的操作的,后面会说。

详细信息属性看这里:https://uniapp.dcloud.io/component/map

这里有个小坑,就是你通过获取当前手机屏幕高度,宽度设置750rpx的方式想让地图全屏显示,在H5端调试确实没有问题,但是在HbuilderX中运行到真机基座上就会出现宽度不能填充的情况,无论你设置啥,宽度死活留白。后来发现只有在map标签中style设置width:100%,height:100vh。才能让地图在手机端满屏。

2.获取位置

获取位置在API中的位置模块里。注意的是这部分获取位置在H5端可能获取不到,官方说是因为请求的谷歌浏览器,谷歌被墙了。所以在调试这一块的时候一定要在手机上测试,使用HbuilderX上的真机运行调试基座。连接手机测试。

app平台高德SDK仅支持返回gcj02 

下面看一下我都设置了那些参数:

这里说明一下,想获取address必须将geocode设置为true,在上面的data里。否则为空,要设置下timeout超时时间,这样不会无限请求位置。

基本思路就是先获取坐标,之后将坐标给map标签和markers各一份,就可以实现刚进入进行定位绘图功能。这里要注意下vue的生命周期函数执行的顺序时机问题。

3.点击地图确定位置

主要通过uni.chooseLocation接口

uni.chooseLocation({success: function (res) {console.log('位置名称:' + res.name);console.log('详细地址:' + res.address);console.log('纬度:' + res.latitude);console.log('经度:' + res.longitude);}
});

在map标签上注册tap事件,在对应的方法中调用这个接口即可。

4.效果图展示:

5.源码展示:

<!-- 获取位置的界面 -->
<template><view class='objView'><u-row class="myInfoRow"><u-col span='12' style="font-size:17px">经度:{{longitude}} &nbsp&nbsp 纬度:{{latitude}}</u-col></u-row><u-row class="myInfoRow"><u-col span='12'><textarea v-show="geocode" disabled=true type="primary" :value='position' placeholder="未加载出位置信息"> </textarea></u-col></u-row><u-row><u-col span='6'><u-button type="success" shape="square" @click="changePosition">刷新当前位置</u-button></u-col><u-col span='6'><u-button type="success" shape="square" @click="returnPosition">返回定位位置</u-button></u-col></u-row><br/><u-row><!-- style内嵌标签的写法才能让app端地图全屏展示 --><u-col span='12'><map id="myMap"ref="myMap":longitude="longitude":latitude="latitude" :scale="scale"@tap='clickmap':markers='covers'style="width: 100%; height: 100vh;"> </map></u-col>     </u-row>     </view>
</template><script>
//这里可以导入其他文件(比如:组件,工具js,第三方插件js,json文件,图片文件等等)
//例如:import 《组件名称》 from '《组件路径》';export default {//import引入的组件需要注入到对象中才能使用components: {},data() {//这里存放数据return {id:0,longitude:0,//记录实时点击位置latitude:0,   originalLongitude:0,//记录用户当前真实位置随时返回originalLatitude:0,scale:'16',//是否解析地址信息geocode:true,// 定位标记covers:[{longitude:this.longitude,latitude:this.latitude,iconPath: '../../static/imgs/nowPosition.png',width:30,height:30,label:{content:'当前位置',textAlign:'center',color:'#FB3109'}}],//获取的地址信息position:'',//记录用户当前真实位置随时返回originalPosition:''};},//监听属性 类似于data概念computed: {},//监控data中的数据变化watch: {},//方法集合methods: {//点击地图时触发clickmap(info){//console.log('点击地图时候触发',info),uni.chooseLocation({success: (res)=>{this.position='位置名称:'+res.name+'  详细地址:'+res.address;this.longitude=res.longitude;this.latitude=res.latitude;//为标记点经纬度重新赋值【在data中赋坐标的方式无效】this.covers[0].longitude=res.longitude;this.covers[0].latitude=res.latitude;// console.log('位置名称:' + res.name);// console.log('详细地址:' + res.address);// console.log('纬度:' + res.latitude);// console.log('经度:' + res.longitude);},fail:(err)=>{uni.showToast({title:'获取位置失败'});}     });},//返回原始定位位置returnPosition(){this.position=this.originalPosition;this.longitude=this.originalLongitude;this.latitude=this.originalLatitude;//为标记点经纬度重新赋值【在data中赋坐标的方式无效】this.covers[0].longitude=this.originalLongitude;this.covers[0].latitude=this.originalLatitude;},//点击更改坐标changePosition(){     this.longitude=this.longitude;this.latitude= this.latitude;console.log('坐标刷新成功');uni.showToast({title:'坐标刷新成功'});    }, //获取定位信息getLocation(){uni.showLoading({title:'正在获取定位'});uni.getLocation({type:"gcj02",timeout:'1000',geocode:this.geocode,success:(res) =>{uni.hideLoading();this.longitude=res.longitude;this.latitude=res.latitude;//把原始定位另存一份,便于返回this.originalLongitude=res.longitude;this.originalLatitude=res.latitude;//为标记点经纬度重新赋值【在data中赋坐标的方式无效】this.covers[0].longitude=res.longitude;this.covers[0].latitude=res.latitude;         //将地址信息进行存储let {address}=reslet {country,province,city,district,street,streetNum,poiName}=address;// console.log('获取定位数据成功',res)//拼接地址let myPosition=country+'-'+province+'-'+city+'-'+district+'-'+street+'-'+streetNum+'-'+poiName;this.position=myPosition;//把原始定位另存一份,便于返回this.originalPosition=myPosition;//console.log(this.country,city)},fail:(err)=>{uni.hideLoading();uni.showModal({title:'提示',content:'位置信息获取失败(请确定定位功能是否打开)',showCancel:false});}},);}
},//生命周期 - 创建完成(可以访问当前this实例)created() {//获取位置信息this.getLocation();},//生命周期 - 挂载完成(可以访问DOM元素)mounted() {//获取当前地图的信息// let myMapInfo=this.$refs.myMap// console.log(myMapInfo)},beforeCreate() {}, //生命周期 - 创建之前beforeMount() {}, //生命周期 - 挂载之前beforeUpdate() {}, //生命周期 - 更新之前updated() {}, //生命周期 - 更新之后beforeDestroy() {}, //生命周期 - 销毁之前destroyed() {}, //生命周期 - 销毁完成activated() {}, //如果页面有keep-alive缓存功能,这个函数会触发}
</script><style lang='css' scoped>
#myMap{width: 750rpx ;
}
/* 信息栏高度 */
.myInfoRow{height: 50px;
}
/* 让地址栏通栏展示 */
textarea{width: 100%;
}
</style>

6.打包注意

最后要注意的是,若打包发布要申请对应地图的key ,要是手机APP要申请高德地图的key,微信要申请腾讯地图的key。

不同端,使用地图选择时基于的底层地图引擎不一样,如微信小程序和H5是腾讯地图,App和阿里小程序是高德地图,百度小程序是百度地图,详见地图map组件的使用注意事项。app中也可以使用百度定位,在manifest中配置,打包后生效。但app-nvue里只能用百度定位,不能用百度地图。另外选择地图、查看地图位置的API也仅支持高德地图。所以App端如无特殊必要,建议使用高德地图。

详细参考在这里:https://uniapp.dcloud.io/component/map

uni-app(微信小程序)编写小程序加载map地图总结相关推荐

  1. 微信小程序开发动感十足的加载动画--都在这里!

    微信小程序开发动感十足的加载动画--都在这里.jpg 1. 概述 我们在学习微信小程序时,应该会遇到载入图片或者动画需要等待的情况,那么这个等待的画面我们应该怎么编写呢?今天我们就分享这样的小教程. ...

  2. 分享下自己写的一个微信小程序请求远程数据加载到页面的代码

    分享下自己写的一个微信小程序请求远程数据加载到页面的代码 1  思路整理 就是页面加载完毕的时候  请求远程接口,然后把数据赋值给页面的变量 ,然后列表循环 2 js相关代码  我是改的 onload ...

  3. 微信小程序-首屏视频加载

    项目场景: 微信小程序开发: 实现小程序首页视频预加载功能 1.获取设备的宽和高度 2.小程序video的使用 获取设备的宽和高度 // 获取设备的宽和高度getsize() {let that = ...

  4. 【微信技术-微信小程序】------- 骨架屏(加载流)配置(skeleton-config)及属性详解 (第三篇)

    本篇文章是骨架屏(skeleton)配置及属性详解(第三篇) 第一篇文章:[微信技术-微信小程序]-------骨架屏(加载流) 简单入门(第一篇) 第二篇文章:[微信技术-微信小程序]------- ...

  5. 微信小程序加载百度地图

    1:申请百度地图服务的ak,(个人感觉浏览器和小程序类型没区别,甚至浏览器比小程序更好) 2:配置地图服务,微信小程序开发平台,设置开发设置 3:小程序里添加地图服务的js文件bmap-wx.min. ...

  6. 微信小程序image图无法加载出来的解决办法(亲测有效)

    在微信小程序中,第一次加载页面时图片(线上图)加载不出来/图片灰色背景显示,这个时候该如何解决这个问题呢?请带着问题查看这篇博客,希望对您有所帮助(点赞skr) 看官方文档? 自行解决? 写在前面(初 ...

  7. 微信小程序体验版数据加载不了,打开调试模式下才行(在微信开发者工具上也能加载数据)

    记一次微信小程序体验版数据加载不了的解决过程(请求不到数据),供大家参考: 注:域名已经备案.https已经配置.ssl证书在1.2以上版本.小程序后台已经配置服务器域名 注:域名已经备案.https ...

  8. 微信小程序加载 FengMap地图

    实现微信小程序加载FengMap地图,主要通过小程序<web-view>组件的src属性的外链方式加载,如<web-view src="https://fengmap.co ...

  9. 微信小程序scroll-view上拉加载更多

    微信小程序scroll-view上拉加载更多 1.wxml代码 <scroll-view class="scroll-view-container" scroll-ybind ...

最新文章

  1. Java Properties 类
  2. 所有你要知道的 BERT 模型压缩方法,都在这里!
  3. TCP/IP(四) —— TCP可靠传输的实现
  4. python函数体以冒号起始、并且是缩进格式的_Python基础第三课
  5. ios uilabel 根据文字 计算宽度 高度
  6. BigDecimal四舍五入与保留位
  7. 结构设计模式 - 代理设计模式
  8. python读取json数据教程_Python教程之解析json数据
  9. html5新加入的内容,10个html5增加的重要新特性和内容
  10. mysql创建备份表脚本_MySQL 备份脚本(单库/分库分表)
  11. 《数据分析实战 基于EXCEL和SPSS系列工具的实践》一3.2 用“逐步推进法”推测需要的数据...
  12. redis重做从库时报Connection with master lost错误
  13. 反编译获取任何微信小程序源码——看这篇就够了
  14. openwrt编译qca驱动不成功。gcc -isystem问题。
  15. Halcon软件安装教程
  16. Python 获取 Flash SWF 文件宽度和高度(Width, Height)
  17. 无线渗透(下)—企业级WPA破解
  18. matlab三维重建中将灭点坐标反归一化,基于灭点查找的姿态角测量方法在路面三维重建中的应用...
  19. 保弘实业|成功投资理财要做到那几点
  20. 高性能服务器龙头,中国服务器的龙头企业:在全球市场中排第三,超越了华为联想...

热门文章

  1. asp毕业设计——基于asp+sqlserver的住户管理系统设计与实现(毕业论文+程序源码)——住户管理系统
  2. python爬虫-模拟登陆新浪微+博爬取感兴趣人的所有信息
  3. 从头安装Ubuntu记录:安装系统
  4. word中表第一行和最后一行加粗,其余不变
  5. 110款有趣的开源游戏和应用
  6. onenet物联网平台使用
  7. Mac 软件专题:高效率工作和学习工具软件推荐
  8. C语言strcpy函数模拟实现,未优化和已优化
  9. “office 正在更新,请稍候“ 稍候的结果就是 错误:0xc0000142
  10. UML2.51边译边学-组件