AI 助理
备案 控制台
开发者社区 IoT 文章 正文

微信小程序 地图定位、选址,解决regionchange重复调用

简介: 微信小程序 地图定位、选址,解决regionchange重复调用

效果:

image.png


需求

定位到当前位置,并查询周边的地址显示到列表中,且地图可以拖动选取位置


实现

1,在wxml中添加视图view

<map id="map" 
longitude="{{myLongitude}}" 
latitude="{{myLatitude}}" 
scale="18" 
bindcontroltap="controltap" 
markers="{{markers}}" 
controls="{{controls}}"
bindmarkertap="markertap" 
bindregionchange="regionchange" 
show-location 
style="width: 100%; height: 300px;"></map>

id是这个map组件标识

longitude、latitude是经纬度,确定一个位置

scale 缩放比例

markers地图上的标记

bindmarkertap 点击标记触发,返回marker的id

controls控件,可以加两个图标控制地图缩放

bindcontroltap 点击控件触发,会返回控件的id

bindregionchange 视野发生变化时触发

show-location 是否显示位置


2,js中处理逻辑

1.data中初始化数据

 

data: {
          myLatitude: 0.0,
          myLongitude: 0.0,
     },

2.onLoad中初始化腾讯地图(官方文档)和获取当前位置并更新

 

onLoad: function(options) {
          var that = this
          // 实例化API核心类
          qqmapsdk = new QQMapWX({
               key: 'your key'
          });
          wx.getLocation({
               type: 'gcj02',
               success: function(res) {
                    console.log(res);
                    that.setData({
                         myLatitude: res.latitude,
                         myLongitude: res.longitude,
                    });
               }
          })
     },

3.在onReady中初始化操作,获取中间点的经纬度,并标记出来

 

onReady: function() {
          this.getLngLat()
     },
     //获取中间点的经纬度,并mark出来
     getLngLat: function() {
          var that = this;
          this.mapCtx = wx.createMapContext("map");
          this.mapCtx.getCenterLocation({
               success: function(res) {
                    that.setData({
                         markers: [{
                              id: 0,
                              iconPath: "../../images/location1.png",
                              longitude: res.longitude,
                              latitude: res.latitude,
                              width: 40,
                              height: 40
                         }]
                    })
                    that.getPoiList(res.longitude, res.latitude)
               }
          })
     },

【注意】getLngLat()这个方法做了抽取,因为不光初始化要调用,且在视野发生变化的时候也要调用


//视野发生变化时触发
     regionchange(e) {
          if (e.type == 'end') {
               this.getLngLat()
          } else { //begin
          }
     },

【重点来了】在regionchange方法中操作经纬度会出现bug,会频繁调用,标记也会一直闪,目前官方还没有修复,网上给的解决方案是临时定义变量接收,这里是直接拿着参数去用了,即that.getPoiList(res.longitude, res.latitude) 中的两个参数


4.获取周边的地址列表

wxml


<block wx:for="{{addressList}}" wx:for-item="item" wx:for-index="index" wx:key="item.orderId">
     <view class="weui-media-box weui-media-box_text" bindtap='clickItem' data-title='{{item.title}}' data-address='{{item.address}}' style='background-color:#fff;'>
          <view class="weui-media-box__title weui-media-box__title_in-text">{{item.title}}</view>
          <view class="weui-media-box__desc">{{item.address}}</view>
     </view>
</block>

js


 

getPoiList: function(longitude, latitude) {
          var that = this
          // 调用接口
          qqmapsdk.reverseGeocoder({
               location: {
                    latitude: latitude,
                    longitude: longitude,
               },
               get_poi: 1,
               poi_options: 'policy=2;radius=3000;page_size=20;page_index=1',
               success: function(res) {
                    that.setData({
                         addressList: res.result.pois
                    })
               },
               fail: function(res) {
                    console.log(res);
               },
               complete: function(res) {
                    console.log(res);
               }
          });
     },
     clickItem: function(e) {
          let pages = getCurrentPages();
          let prevPage = pages[pages.length - 2];
          prevPage.setData({
               address: e.currentTarget.dataset.address,
          })
          wx.navigateBack({
               delta: 1,
          })
     },

根据当前中心点的经纬度及其他参数去获取位置列表,然后显示到页面中

点击某一条位置的时候带参数返回上一页


yechaoa
目录
相关文章
&amp;ACE&amp;
|
5月前
|
JavaScript 定位技术 API
uniapp腾讯地图路线规划
uniapp腾讯地图路线规划
&amp;ACE&amp;
520 0
开发V|TG_ch3nguang
|
3月前
|
API PHP
如何开发陪玩系统源码的列表页面,相关实现代码
接下来我们一起来看看具体的实现代码吧。route.php<?phpusethink\Route;Route::get('test','api/test/index');Route::put('test/:id','api/test/update');Route::delete('test/:id','api/test/delete');Route::resource('test','api/test');Route::get('api/:ver/cat','api/:ver.cat/read');Route::get('api/:ver/index','api/:ver.index/index
开发V|TG_ch3nguang
23 0
wishCoding
|
5月前
|
JavaScript Java 测试技术
基于小程序的基于微信小程序的外卖点餐系统
基于小程序的基于微信小程序的外卖点餐系统
wishCoding
54 1
编程千纸鹤
|
4月前
|
小程序 前端开发 JavaScript
微信小程序|智慧物流小程序的设计与实现
微信小程序|智慧物流小程序的设计与实现
编程千纸鹤
31 0
开发V_I357O98O7I8
|
5月前
|
安全 BI 定位技术
同城校园外卖跑腿系统开发规则详细/需求步骤/案例设计/功能逻辑/源码版
同城校园外卖跑腿系统是为满足校园内用户对食品和商品的快速配送需求而设计的一种服务平台。
开发V_I357O98O7I8
64 0
落798.
|
12月前
|
存储 小程序 API
【 uniapp - 黑马优购 | 购物车页面(2)】如何实现收货地址区域功能、常见问题解决方案
【 uniapp - 黑马优购 | 购物车页面(2)】如何实现收货地址区域功能、常见问题解决方案
落798.
290 0
HelloDam
|
存储 小程序 前端开发
【易售小程序项目】小程序私聊页面完善(带尾巴聊天气泡组件封装、滑至顶端获取历史聊天数据逻辑优化)【后端基于若依管理系统开发】
【易售小程序项目】小程序私聊页面完善(带尾巴聊天气泡组件封装、滑至顶端获取历史聊天数据逻辑优化)【后端基于若依管理系统开发】
HelloDam
55 0
Designer小郑
|
小程序 JavaScript 前端开发
微信小程序 地图选点 获取用户选择的定位信息 wx.chooseLocation
微信小程序 地图选点 获取用户选择的定位信息 wx.chooseLocation
Designer小郑
558 0
下一站丶
|
小程序 JavaScript 定位技术
uniapp 配置chooseLocation微信小程序腾讯地图选点
uniapp 配置chooseLocation微信小程序腾讯地图选点
下一站丶
566 0
greework
|
小程序 搜索推荐 定位技术
微信小程序插入个性化地图
微信小程序插入个性化地图
greework
123 0

热门文章

最新文章

  • 1
    SpringBoot前后端分离项目,打包、部署到服务器详细图文流程
  • 2
    表格存储新手指南:如何实现分页查询
  • 3
    Kubernetes全方位日志采集与管理的最佳实践 资料下载
  • 4
    高效运维之Docker持续部署图文详解
  • 5
    麒麟开源堡垒机安装部署测试及优缺点总结
  • 6
    5分钟构建API接口服务 | python小知识
  • 7
    阿里建“猫茂”线下购物中心,将实现新零售技术的真正落地
  • 8
    [20180202]脏块写盘问题.txt
  • 9
    通过扩展改善ASP.NET MVC的验证机制[实现篇]
  • 10
    下载后自动打开(更改IE下载文件后的默认处理方法)
  • 1
    14 款超赞的代码片段生成工具😍(程序员必备)
    26
  • 2
    Go语言项目高效对接SQL数据库:实践技巧与方法
    18
  • 3
    用来用去还是用回了ueditor-Vue富文本编辑器二次扩展
    21
  • 4
    uniapp uview扩展u-picker支持日历期间 年期间 月期间 时分期间组件
    20
  • 5
    electron-updater实现electron全量版本更新
    29
  • 6
    electron多标签页模式更像客户端
    21
  • 7
    UniApp低代码-颜色选择器diy-color-picker-代码生成器
    13
  • 8
    低代码开发工具-学生管理系统-老师管理增删改查实现
    13
  • 9
    Vue3商品SKU多规格编辑组件
    14
  • 10
    JavaScript中的面向对象编程(OOP) - 终极指南
    13
  • 相关电子书

    更多
  • 如何做微信小程序性能优化
  • 前端代码是怎样智能生成的
  • 《前端代码是怎样智能生成的》
  • 相关实验场景

    更多
  • 配置流程编排实现根据天气情况播放歌曲
  • 收银台的场景化界面实践
  • 小试牛刀,一键部署电商商城
  • 下一篇
    阿里云无影AI云电脑亮相 体验大幅升级

    深圳坪山网站建设公司河北卫浴行业网站优化推广方案清远市seo网站优化价格体育行业网站优化比较好芝罘网站优化哪家好朝阳网站优化关键词安康网站优化哪家公司好seo网站优化推广教程福山区上市公司网站优化商丘百度网站优化费用多少商丘外贸网站优化怎样收费网站优化企业哪家好淘宝网站优化总结新乡官网网站优化公司网站一直优化不动是不是被惩罚绵阳网站建设和优化周口网站推广优化优化网站排行榜前十名深圳免费的网站优化的有效方式宁波鄞州区热销百度网站优化上海百度网站优化虎丘企业网站优化方法太原瓷砖行业网站优化推广有哪些贵阳seo如何优化网站山西乐乐优化网站重庆优化企业网站排名方案河南绵阳网站优化优化网站套餐从化企业网站推广优化报价绥芬河百度网站优化网站排名优化悄云速捷好香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声卫健委通报少年有偿捐血浆16次猝死汪小菲曝离婚始末何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言男子被猫抓伤后确诊“猫抓病”周杰伦一审败诉网易中国拥有亿元资产的家庭达13.3万户315晚会后胖东来又人满为患了高校汽车撞人致3死16伤 司机系学生张家界的山上“长”满了韩国人?张立群任西安交通大学校长手机成瘾是影响睡眠质量重要因素网友洛杉矶偶遇贾玲“重生之我在北大当嫡校长”单亲妈妈陷入热恋 14岁儿子报警倪萍分享减重40斤方法杨倩无缘巴黎奥运考生莫言也上北大硕士复试名单了许家印被限制高消费奥巴马现身唐宁街 黑色着装引猜测专访95后高颜值猪保姆男孩8年未见母亲被告知被遗忘七年后宇文玥被薅头发捞上岸郑州一火锅店爆改成麻辣烫店西双版纳热带植物园回应蜉蝣大爆发沉迷短剧的人就像掉进了杀猪盘当地回应沈阳致3死车祸车主疑毒驾开除党籍5年后 原水城县长再被查凯特王妃现身!外出购物视频曝光初中生遭15人围殴自卫刺伤3人判无罪事业单位女子向同事水杯投不明物质男子被流浪猫绊倒 投喂者赔24万外国人感慨凌晨的中国很安全路边卖淀粉肠阿姨主动出示声明书胖东来员工每周单休无小长假王树国卸任西安交大校长 师生送别小米汽车超级工厂正式揭幕黑马情侣提车了妈妈回应孩子在校撞护栏坠楼校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变老人退休金被冒领16年 金额超20万西藏招商引资投资者子女可当地高考特朗普无法缴纳4.54亿美元罚金浙江一高校内汽车冲撞行人 多人受伤

    深圳坪山网站建设公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化