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

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

作者: 不忘初心_d | 来源:发表于2019-05-14 17:54 被阅读0次

分享也是一种美德。欢迎加我技术交流QQ群 :811956471

微信小程序中使用地图(map)组件,通过点击(tap)获取经纬度,按照官方的回应,暂时是没法做到的,做个变通,适用性有限,请大家参考。基本思路就是在地图上铺满一层marker,从而通过点击marker获得经纬度。

html:

<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>

js:

const  markersize = 30

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()

  }

})

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

}

相关文章

网友评论

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

      本文链接:https://www.haomeiwen.com/subject/gkyeaqtx.html