小程序手动定位

举报
黄啊码 发表于 2022/06/28 22:45:33 2022/06/28
【摘要】 视图index.wxml <view class='address' bindtap='onChangeAddress'> {{address}}</view> view组件可用作父容器,也可以用来展示一段文本,text组件也可以用来展示文本,区别在于view中的文本不能选中。{{}}是小程序中数据绑定...

视图index.wxml


  
  1. <view class='address' bindtap='onChangeAddress'>
  2. {{address}}
  3. </view>

view组件可用作父容器,也可以用来展示一段文本,text组件也可以用来展示文本,区别在于view中的文本不能选中。

{{}}是小程序中数据绑定的语法。在小程序中没有dombom,所以不能根据id等属性获取控件,只能通过数据绑定的方式。

index.js中未变量addresss赋值,然后index.wxml中就可以自动更新,这与angular很像,但是,小程序中是单项绑定。

tap是一个触摸事件,小程序中使用bind或者catch方式绑定事件,其属性值是一个函数名称,这个函数在index.js中定义,当用户触摸此view时就会执行对应的函数

逻辑层 index.js


  
  1. //引用腾讯地图API
  2. var QQMapWX = require('../../libs/qqmap-wx-jssdk.js');
  3. var qqmapsdk;
  4. Page({
  5. /**
  6. * 页面的初始数据
  7. */
  8. data: {
  9. address: "",
  10. src:""
  11. },
  12. /**
  13. * 生命周期函数--监听页面加载
  14. */
  15. onLoad: function (options) {
  16. /*判断是第一次加载还是从position页面返回
  17. 如果从position页面返回,会传递用户选择的地点*/
  18. if (options.address != null && options.address != '') {
  19. //设置变量 address 的值
  20. this.setData({
  21. address: options.address
  22. });
  23. } else {
  24. // 实例化API核心类
  25. qqmapsdk = new QQMapWX({
  26. //此key需要用户自己申请
  27. key: 'MNXBZ-G5TWD-GYF42-HHZJL-2W2J3-PVBX4'
  28. });
  29. var that = this;
  30. // 调用接口
  31. qqmapsdk.reverseGeocoder({
  32. success: function (res) {
  33. that.setData({
  34. address: res.result.address
  35. });
  36. },
  37. fail: function (res) {
  38. //console.log(res);
  39. },
  40. complete: function (res) {
  41. //console.log(res);
  42. }
  43. });
  44. }
  45. }

index.js 中的所有代码都应该放在 page 函数中

其中 onLoad 函数是内置函数,大致相当于 js 中的window.onload函数。

如果是其他页面跳转过来,并且通过 问号的方式传递参数过来,可以使用options.参数名称获取对应的值。

qqmapsdk.reverseGeocoder
这里用到了腾讯地图小程序客户端API,上面的函数就是API中的一个,作用是提供由坐标到坐标所在位置的文字描述的转换,输入坐标返回地理位置信息和附近poi列表。具体的使用方法参见官网,这里就不做赘述了,官网地址:点击打开链接

调用成功之后获取地址并赋值给变量address

这里要注意,必须通过setData()函数设置变量的数据,视图中才可以更新

在地图中选择位置
如果用户觉得定位不准,可以点击 位置信息,打开地图页面,代码如下


  
  1. onChangeAddress: function (e) {
  2. wx.navigateTo({
  3. url: "/pages/position/position"
  4. });
  5. }

wx.navigateTo函数用于跳转到其他页面,可以在url值后面以?参数名=参数值的方式传递参数

position.wxml:


  
  1. <view class="page-body">
  2. <view class="page-section page-section-gap">
  3. <map id="qqMap" style="width: 100%; height: 300px;" latitude="{{latitude}}" longitude="{{longitude}}" show-location></map>
  4. </view>
  5. </view>

map是小程序中的组件,用于显示地图信息,属性latitudelongitude用于设置地图的中心点

下面是 position.js 完整代码


  
  1. var QQMapWX = require('../../libs/qqmap-wx-jssdk.js');
  2. var qqmapsdk;
  3. Page({
  4. data: {
  5. latitude: 0,//地图初次加载时的纬度坐标
  6. longitude: 0, //地图初次加载时的经度坐标
  7. name:"" //选择的位置名称
  8. },
  9. onLoad: function () {
  10. // 实例化API核心类
  11. qqmapsdk = new QQMapWX({
  12. key: 'MNXBZ-G5TWD-GYF42-HHZJL-2W2J3-PVBX4'
  13. });
  14. this.moveToLocation();
  15. },
  16. //移动选点
  17. moveToLocation: function () {
  18. var that = this;
  19. wx.chooseLocation({
  20. success: function (res) {
  21. console.log(res.name);
  22. //选择地点之后返回到原来页面
  23. wx.navigateTo({
  24. url: "/pages/index/index?address="+res.name
  25. });
  26. },
  27. fail: function (err) {
  28. console.log(err)
  29. }
  30. });
  31. }
  32. });

wx.chooseLocation方法,会打开地图,并且默认以用户当前位置为中心点。并且会在下面展示周围一些地点列表,供用户选择,用户选择完地点后,点击 完成,会触发 其success参数指定的函数,可以通过参数res获取地点名称、经纬度等相关信息

在这里,获取当相关信息后跳转到主页,同时将用户选择的位置名称传递过去

在 index.wxml 中,有一段代码用来处理:如果用户在点击 完成 前没有选择任何位置,则继续显示当前位置,否则显示用户选择的位置。


  
  1. /*判断是第一次加载还是从position页面返回 如果从position页面返回,会传递用户选择的地点*/
  2. if (options.address != null && options.address != '') {
  3. //设置变量 address 的值
  4. this.setData({
  5. address: options.address
  6. });
  7. } else {....}

 

文章来源: markwcm.blog.csdn.net,作者:黄啊码,版权归原作者所有,如需转载,请联系作者。

原文链接:markwcm.blog.csdn.net/article/details/116299536

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。