微信小程序开发之map地图组件定位并手动修改位置偏差


Posted in Javascript onAugust 17, 2019

环境搭建

注册,获取APPID(没有这个不能真鸡调试)

下载微信web开发者工具(挺多bug,将就用)

打开微信web开发者工具,扫码登录,新建小程序,输入APPID,勾选创建quick start项目。

工程结构

可以看到工程根目录中有个app.js,这里可以定义全局变量,通过getApp()获取。

项目中有了一些示例,已经有了获取用户信息的方法等。

开发地图定位,选择位置功能

我们直接修改index页面来做这个功能。

准备

新建imgs目录,加入2个图标(ic_location和ic_position),用于标记当前位置,和地图中央位置。

微信小程序开发之map地图组件定位并手动修改位置偏差微信小程序开发之map地图组件定位并手动修改位置偏差

添加定位功能

修改app.js,加入定位功能,获取当前位置。

//app.js
App({
 onLaunch: function () {
  //调用API从本地缓存中获取数据
  var logs = wx.getStorageSync('logs') || []
  logs.unshift(Date.now())
  wx.setStorageSync('logs', logs)
 }
 ,getUserInfo:function(cb){
  var that = this
  if(this.globalData.userInfo){
   typeof cb == "function" && cb(this.globalData.userInfo)
  }else{
   //调用登录接口
   wx.login({
    success: function () {
     wx.getUserInfo({
      success: function (res) {
       that.globalData.userInfo = res.userInfo
       typeof cb == "function" && cb(that.globalData.userInfo)
      }
     })
    }
   })
  }
 }
 //get locationInfo
 ,getLocationInfo: function(cb){
  var that = this;
  if(this.globalData.locationInfo){
    cb(this.globalData.locationInfo)
  }else{
    wx.getLocation({
     type: 'gcj02', // 默认为 wgs84 返回 gps 坐标,gcj02 返回可用于 wx.openLocation 的坐标
     success: function(res){
      that.globalData.locationInfo = res;
      cb(that.globalData.locationInfo)
     },
     fail: function() {
      // fail
     },
     complete: function() {
      // complete
     }
    })
  }
 }

 ,globalData:{
  userInfo:null
  ,locationInfo: null
 }
})

地图控件布局

修改pages/index/index.wxml文件,添加map标签,如下

<map id="map4select"
 longitude="{{longitude}}" latitude="{{latitude}}" 
 markers="{{markers}}"
 scale="20" 
 style="width:{{map_width}}px;height:{{map_height}}px"
 bindregionchange="regionchange"
 controls="{{controls}}">
</map>

需要给地图指定一个id,后面可以通过id获取地图的上下文。

监听bindregionchange事件,地图变化的时候可以监听到。

地图的大小不要写死,动态设置,我这里打算设置为宽高都是屏幕宽度。

controls是固定在map组件上面的。一开始我想用image替代,但是设置z-index也不能在地图上面,毕竟不是H5开发。

逻辑代码编写

编辑index.js

var app = getApp()

Page({
  data:{
   map_width: 380
   ,map_height: 380
  }
  //show current position
  ,onLoad: function(){
  var that = this;
  // 获取定位,并把位置标示出来
  app.getLocationInfo(function(locationInfo){
    console.log('map',locationInfo);
    that.setData({
     longitude: locationInfo.longitude
     ,latitude: locationInfo.latitude
     ,markers:[
      {
      id: 0
      ,iconPath: "../../imgs/ic_position.png"
      ,longitude: locationInfo.longitude
      ,latitude: locationInfo.latitude
      ,width: 30
      ,height: 30
      }
     ]
    })
  })

  //set the width and height
  // 动态设置map的宽和高
  wx.getSystemInfo({
   success: function(res) {
    console.log('getSystemInfo');
    console.log(res.windowWidth);
    that.setData({
      map_width: res.windowWidth
     ,map_height: res.windowWidth
     ,controls: [{
      id: 1,
      iconPath: '../../imgs/ic_location.png',
      position: {
       left: res.windowWidth/2 - 8,
       top: res.windowWidth/2 - 16,
       width: 30,
       height: 30
      },
      clickable: true
     }]
    })
   }
  })

 }
 //获取中间点的经纬度,并mark出来
 ,getLngLat: function(){
   var that = this;
   this.mapCtx = wx.createMapContext("map4select");
   this.mapCtx.getCenterLocation({
    success: function(res){

      that.setData({
      longitude: res.longitude
      ,latitude: res.latitude
      ,markers:[
       {
       id: 0
       ,iconPath: "../../imgs/ic_position.png"
       ,longitude: res.longitude
       ,latitude: res.latitude
       ,width: 30
       ,height: 30
       }
      ]
     })

    }
   })
 }
 ,regionchange(e) {
  // 地图发生变化的时候,获取中间点,也就是用户选择的位置
   if(e.type == 'end'){
     this.getLngLat()
   }
 }
 ,markertap(e) {
  console.log(e)
 }
})

展示

这样,就OK啦,用户可以看到自己的定位,如果觉得有偏差,可以移动地图,把中央点放到自己认为的准确位置上。

微信小程序开发之map地图组件定位并手动修改位置偏差
微信小程序开发之map地图组件定位并手动修改位置偏差
微信小程序开发之map地图组件定位并手动修改位置偏差

Javascript 相关文章推荐
js jquery做的图片连续滚动代码
Jan 06 Javascript
js 点击页面其他地方关闭弹出层(示例代码)
Dec 24 Javascript
Jquery响应回车键直接提交表单操作代码
Jul 25 Javascript
jQuery实现伸展与合拢panel的方法
Apr 30 Javascript
jQuery实现动态表单验证时文本框抖动效果完整实例
Aug 21 Javascript
深入解析JavaScript框架Backbone.js中的事件机制
Feb 14 Javascript
JavaScript通过HTML的class来获取HTML元素的方法总结
May 24 Javascript
想学习javascript JS和jQuery哪个重要 先学哪个
Dec 11 Javascript
JS表单验证方法实例小结【电话、身份证号、Email、中文、特殊字符、身份证号等】
Feb 14 Javascript
详解微信小程序Radio选中样式切换
Jul 06 Javascript
vue :src 文件路径错误问题的解决方法
May 15 Javascript
如何在Vue中使localStorage具有响应式(思想实验)
Jul 14 Javascript
微信小程序移动拖拽视图-movable-view实例详解
Aug 17 #Javascript
微信小程序框架的页面布局代码
Aug 17 #Javascript
vue实现滑动到底部加载更多效果
Oct 27 #Javascript
vue实现页面滚动到底部刷新
Aug 16 #Javascript
vue-mugen-scroll组件实现pc端滚动刷新
Aug 16 #Javascript
JavaScript的查询机制LHS和RHS解析
Aug 16 #Javascript
jquery树形插件zTree高级使用详解
Aug 16 #jQuery
You might like
PHP中替换键名的简易方法示例详解
2014/01/07 PHP
PHP精确计算功能示例
2016/11/29 PHP
js兼容标准的表格变色效果
2008/06/28 Javascript
从父页面读取和操作iframe中内容方法
2009/07/25 Javascript
javascript笔记 String类replace函数的一些事
2011/09/22 Javascript
jQuery jcrop插件截图使用方法
2013/11/20 Javascript
Javascript学习笔记之 函数篇(一) : 函数声明和函数表达式
2014/06/24 Javascript
Javascript中的apply()方法浅析
2015/03/15 Javascript
JS实现可展开折叠层的鼠标拖曳效果
2015/10/09 Javascript
干货分享:让你分分钟学会javascript闭包
2015/12/25 Javascript
javascript产生随机数方法汇总
2016/01/25 Javascript
js如何准确获取当前页面url网址信息
2020/09/13 Javascript
关于JS中setTimeout()无法调用带参函数问题的解决方法
2016/06/21 Javascript
JavaScript关于提高网站性能的几点建议(一)
2016/07/24 Javascript
jQuery动态生成不规则表格(前后端)
2017/02/21 Javascript
微信小程序 按钮滑动的实现方法
2017/09/27 Javascript
webpack+vue-cil中proxyTable处理跨域的方法
2018/07/20 Javascript
新手该如何学python怎么学好python?
2008/10/07 Python
Python实现的数据结构与算法之快速排序详解
2015/04/22 Python
Python操作mongodb数据库进行模糊查询操作示例
2018/06/09 Python
Python Learning 列表的更多操作及示例代码
2018/08/22 Python
Python tkinter的grid布局及Text动态显示方法
2018/10/11 Python
修改python plot折线图的坐标轴刻度方法
2018/12/13 Python
使用PyTorch训练一个图像分类器实例
2020/01/08 Python
简单了解python filter、map、reduce的区别
2020/01/14 Python
Python读取二进制文件代码方法解析
2020/06/22 Python
用CSS3写的模仿iPhone中的返回按钮
2015/04/04 HTML / CSS
ShellScript面试题一则-ShellScript编程
2014/06/24 面试题
软件测试题目
2013/02/27 面试题
自荐信格式的六要素
2013/09/21 职场文书
现代化办公人员工作的自我评价
2013/10/16 职场文书
人力资源总监工作说明
2014/03/03 职场文书
廉洁自律演讲稿
2014/05/22 职场文书
计算机科学与技术专业求职信
2014/09/03 职场文书
时尚女魔头观后感
2015/06/04 职场文书
2016年幼儿园教研活动总结
2016/04/05 职场文书