微信小程序(八):地图

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010635353/article/details/54017680

功能点:地图
本文基于微信小程序公测版,IDE:微信开发者工具 0.11.122100

今天打算继续写一下这个系列的文章,因为17年1月9号微信小程序就要正式上线了,为了赶这波热潮,打算把本系列上篇文章的demo,《附近三公里》当做一个正式版发布。

然而悲催的事情总是这么多,打开工具的时候,发现微信做了几次升级,而我们之前跑的好好的项目,个别功能居然跑不起来了,没办法,继续采坑吧,这里先介绍一下这个版本上地图的变化。

如果看过我这个系列的文章的话,你可能还记着,在写上篇文章的时候,微信提供了一个js的方法,调用一下就直接打开了微信内置的地图,但是这个版本上,这个功能被改了!被改了!被改了!

这个版本(小程序刚出,有些东西难免会有改动,这里所讲的也只能说基于这个版本,至于下一个版本会不会改,谁都说不好)地图被抽出成一个组件map。这里不得不说一句,本版本的map,开放的功能接口还是太少,有很多效果都不能达到。


这里我修正一下,写这篇文章的时候,本文说的内容都没有问题,前文的demo用的是wx.openLoaction方法打开微信的内置地图,但是写本文的时候,这个方法不好用了。当时以为是微信的版本迭代把这个方法干掉了,但是在昨天我发现这个方法又好用了,现在想想可能是当时这个方法存在bug。

那就在这里简单说一下wx.openLoaction。这个方法提供了一系列的参数来打开微信的内置地图。

参数如下:

latitude: e.currentTarget.dataset.lat , // 纬度,范围为-90~90,负数表示南纬
longitude: e.currentTarget.dataset.lng, // 经度,范围为-180~180,负数表示西经
scale: 14, // 缩放比例
name: e.currentTarget.dataset.name, // 位置名
address: e.currentTarget.dataset.address, // 地址的详细说明

如上打开的地图可以显示当前定位位置和你传入的位置,并可以规划路线(这个目前是在ios中提供,android中并没有提供)和在第三方地图中打开。


组件 map

下面来自官方文档

这里写图片描述

我们可以通过设置中心经纬度来设置地图中心点。设置scale 来设置地图的缩放层级。markers,polyline,circles,都接受一个点的集合,来显示不同的样式。controls允许我们以相对布局的方式设定一系列的控件,并通过bindcontroltap属性绑定事件。

官方文档对各个属性都有很详细的介绍,请移步。

下面把我的demo中地图的page,贴出来给大家当一个例子,好好看看可以避免很多我踩过的坑。

<!-- map.wxml -->
<map 
    id="map" 
    longitude="{{lng}}" 
    latitude="{{lat}}" 
    scale="14" 
    show-location="{{true}}"
    markers="{{markers}}" 
    bindmarkertap="markertap" 
    polyline="{{polyline}}" 
    bindregionchange="regionchange" 
    show-location style="width: 100%; position:absolute;top:0;bottom:0;height:auto;">
</map>
// map.js
//获取应用实例
var app = getApp()
Page({
  data: {
    lng: 0,
    lat: 0
  },
  regionchange(e) {
    console.log(e.type)
  },
  markertap(e) {
    console.log(e.markerId)
  },
  onLoad: function (options) {

    this.setData({
      lng: app.globalData.longitude, // 全局属性,用来取定位坐标
      lat: app.globalData.latitude,
      markers: [{
        iconPath: "/image/03.png",
        id: 0,
        latitude: options.lat, // 页面初始化 options为页面跳转所带来的参数 
        longitude: options.lng,
        width: 20,
        height: 20
      }],
      polyline: [{
      points: [{
          longitude: app.globalData.longitude,
          latitude: app.globalData.latitude
        }, {
          longitude: options.lng,
          latitude: options.lat
        }],
        color: "#FF0000DD",
        width: 20,
        dottedLine: true
      }]
    })
  }
})

这个页面本来笔者是打算做一个导航的,前一个页面传进来一个坐标和自己的定位坐标做一个路线的规划,但是map 并没有给我们提供这个接口,唯一搭点边的只有 polyline 属性,但是,这个属性连起来的是直线!是直线!是直线!你不能指望着你的客户,拿着你的小程序,在地图上按直线给过去吧。

后来,我有研究了一下用js版的百度地图嵌套,发现然并卵,可能笔者功力不够,没找到怎么把百度的js引到小程序里面,所以这个功能并不是很好用。

猜你喜欢

转载自blog.csdn.net/u010635353/article/details/54017680