微信小程序地图(map)组件点击(tap)获取经纬度的方法


Posted in Javascript onJanuary 10, 2019

微信小程序中使用地图(map)组件,通过点击(tap)获取经纬度,按照官方的回应,暂时是没法做到的,从地图组件API多有残缺判断,怀疑是个实习生干的...

做个变通,适用性有限,请大家参考。基本思路就是在地图上铺满一层marker,从而通过点击marker获得经纬度。

<map id="map" longitude="102.324520" latitude="40.099994" scale="4" bindcontroltap="controltap" polygons="{{polygons}}" bindregionchange="regionchange" markers="{{markers}}" bindmarkertap="markertap" show-location style="width: 100%; height: 700px;"></map>
const app = getApp()

const markersize = 30

function range(start, edge, step) {
 for (var ret = [];
  (edge - start) * step > 0; start += step) {
  ret.push(start);
 }
 return ret;
}

function markers(northeast, southwest, scale, width, height) {

 const markerslng = (northeast.longitude - southwest.longitude) * markersize / width
 const markerslat = (northeast.latitude - southwest.latitude) * markersize / height

 const maxlon = northeast.longitude
 const minlon = southwest.longitude
 const maxlat = northeast.latitude
 const minlat = southwest.latitude

 const lons = range(minlon, maxlon, markerslng)
 const lats = range(minlat, maxlat, markerslat)

 let _markers = []
 lons.forEach((lon, i) => {
  lats.forEach((lat, j) => {
   _markers.push({
    id: lon + ',' + lat,
    latitude: lat,
    longitude: lon,
    iconPath: '/marker.png',
    alpha: 0.1, //将图片设置为透明,通过开发者工具看不出效果,但真机是有效果的
    width: markersize,
    height: markersize
   })
  })
 })
 return _markers
}

Page({
 data: {
  polygons: [],
  controls: [{
   id: 1,
   position: {
    left: 0,
    top: 300 - 50,
    width: 50,
    height: 50
   },
   clickable: true
  }],
  markers: []
 },
 createMarkers() {

  this.mapCtx = wx.createMapContext('map')
  const query = wx.createSelectorQuery()
  const map = query.select('#map').boundingClientRect()

  let that = this

  that.mapCtx.getRegion({
   success(res1) {
    that.mapCtx.getScale({
     success(res2) {
      query.exec((res) => {
       let width = res[0].width;
       let height = res[0].height;
       let _markers = markers(res1.northeast, res1.southwest, res2.scale, width, height)
       that.data.markers = _markers
       that.setData(that.data)
      })
     }
    })
   }
  })
 },
 regionchange(e) {
  this.createMarkers()
 },
 markertap(e) {
  console.log(e.markerId)
 },
 controltap(e) {
  console.log(e.controlId)
 },
 onReady(e) {
  this.createMarkers()
 }
})

效果如图

微信小程序地图(map)组件点击(tap)获取经纬度的方法

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript 构建一个xmlhttp对象池合理创建和使用xmlhttp对象
Jan 15 Javascript
cookie的复制与使用记住用户名实现代码
Nov 04 Javascript
动态载入js提高网页打开速度的方法
Jul 04 Javascript
浅析jQuery移动开发中内联按钮和分组按钮的编写
Dec 04 Javascript
AngularJS转换响应内容
Jan 27 Javascript
15位和18位身份证JS校验的简单实例
Jul 18 Javascript
AngularJS解决ng界面长表达式(ui-set)的方法分析
Nov 07 Javascript
vue.js实现请求数据的方法示例
Feb 07 Javascript
AngularJS 验证码60秒倒计时功能的实现
Jun 05 Javascript
jQuery 实时保存页面动态添加的数据的示例
Aug 14 jQuery
Vue vm.$attrs使用场景详解
Mar 08 Javascript
nginx部署多个vue项目的方法示例
Sep 06 Javascript
最简单的JS实现json转csv的方法
Jan 10 #Javascript
puppeteer实现html截图的示例代码
Jan 10 #Javascript
其实你可以少写点if else与switch(推荐)
Jan 10 #Javascript
微信小程序提取公用函数到util.js及使用方法示例
Jan 10 #Javascript
浅谈JavaScript 代码简洁之道
Jan 09 #Javascript
react组件从搭建脚手架到在npm发布的步骤实现
Jan 09 #Javascript
微信小程序公用参数与公用方法用法示例
Jan 09 #Javascript
You might like
php 来访国内外IP判断代码并实现页面跳转
2009/12/18 PHP
php中在PDO中使用事务(Transaction)
2011/05/14 PHP
深入分析php之面向对象
2013/05/15 PHP
Laravel jwt 多表(多用户端)验证隔离的实现
2019/12/18 PHP
JQuery打造PHP的AJAX表单提交实例
2009/11/03 Javascript
js 异步处理进度条
2010/04/01 Javascript
js前台分页显示后端JAVA数据响应
2013/03/18 Javascript
jquery checkbox 勾选的bug问题解决方案与分析
2014/11/13 Javascript
JS实现的左侧竖向滑动菜单效果代码
2015/10/19 Javascript
jQuery处理XML文件的几种方法
2016/06/14 Javascript
Bootstrapvalidator校验、校验清除重置的实现代码(推荐)
2016/09/28 Javascript
AngularJS表单和输入验证实例
2016/11/02 Javascript
深入理解vue Render函数
2017/07/19 Javascript
Vue.js分页组件实现:diVuePagination的使用详解
2018/01/10 Javascript
webpack打包js的方法
2018/03/12 Javascript
在Vue项目中引入腾讯验证码服务的教程
2018/04/03 Javascript
vue-cli2打包前和打包后的css前缀不一致的问题解决
2018/08/24 Javascript
vue.js实现的全选与全不选功能示例【基于elementui】
2018/12/03 Javascript
Angular请求防抖处理第一次请求失效问题
2019/05/17 Javascript
vue项目部署到nginx/tomcat服务器的实现
2019/08/26 Javascript
ES6中Promise的使用方法实例总结
2020/02/18 Javascript
Python 模拟员工信息数据库操作的实例
2017/10/23 Python
Python数据类型中的“冒号“[::]——分片与步长操作示例
2018/01/24 Python
python+numpy按行求一个二维数组的最大值方法
2019/07/09 Python
基于python实现语音录入识别代码实例
2020/01/17 Python
Python3+SQLAlchemy+Sqlite3实现ORM教程
2021/02/16 Python
css3 伪类选择器快速复习小结
2019/09/10 HTML / CSS
追悼会子女答谢词
2014/01/28 职场文书
先进集体获奖感言
2014/02/13 职场文书
政工例会汇报材料
2014/08/26 职场文书
三问三解心得体会
2014/09/05 职场文书
2014年体检中心工作总结
2014/12/23 职场文书
团代会邀请函
2015/02/02 职场文书
幼儿园园务工作总结2015
2015/05/18 职场文书
党组织结对共建协议书
2016/03/23 职场文书
Nginx+Windows搭建域名访问环境的操作方法
2022/03/17 Servers