小程序(三十四)路线规划小例子

练手写的,先上图


a1.png
a2.png
a3.png

核心代码如下:

index页面
<!-- map -->
<map id="map" longitude="{{markers[0].longitude}}" latitude="{{markers[0].latitude}}" scale="16" markers="{{markers}}"
    bindmarkertap="markertap" show-location="false" style="width: 100%; height: calc(100% - 460rpx);">
</map>
<view class="bottom1">
    <view class="bottom2" bindtap="choose1">
        <text class="left">我的位置:</text><text >{{addressName}}</text>
        <image src="/img/array.png" class="img_location2"></image>
    </view>
</view>
<view class="bottom1">
    <view class="bottom2" bindtap="choose2">
        <text class="left">目的地:</text><text >{{addressName2}}</text>
        <image src="/img/array.png" class="img_location2"></image>
    </view>
</view>
<button class="mybtn1 mybutton" bindtap="go">我要打车</button>

const app = getApp()
Page({
  data: {
    latitude: "",
    longitude: "",
    addressName: "正在定位中。。。",
    addressName2: "请选择目的地",
    endLatitude:"",
    endLongitude:"",
    markers: [{
      iconPath: "/img/map1.png",
      id: 0,
      latitude: "",
      longitude: "",
      width: 26,
      height: 36,
      callout: {
        content: "    在这里上车    ",
        color: "#333",
        fontSize: 11,
        borderRadius: 34,
        display: "ALWAYS",
        textAlign: "center",
        padding: "5",
        borderWidth: "1",
        borderColor: "#fff"
      }
    }],
  },
  onLoad: function () {
    this.getLocation();
  },
  getLocation: function () {
    var that = this;
    wx.getLocation({
      type: 'gcj02', // 返回可以用于wx.openLocation的经纬度
      success(res) {
        var markers_new = that.data.markers;
        markers_new[0].latitude = res.latitude;
        markers_new[0].longitude = res.longitude;
        that.setData({
          latitude: res.latitude,
          longitude: res.longitude,
          markers: markers_new
        })
        that.getAddressName();
        //将地址保存在全局变量里面
      }, fail(res) {
        wx.getSetting({
          success: function (res) {
            if (res.authSetting['scope.userLocation'] != undefined && res.authSetting['scope.userLocation'] != true) {
              wx.showModal({
                title: '请求授权当前位置',
                content: '需要获取您的地理位置',
                success: function (res) {
                  if (res.confirm) {
                    wx.openSetting({
                      success: function (res) {
                        if (res.authSetting["scope.userLocation"] == true) {
                          wx.getLocation({
                            type: 'gcj02', // 返回可以用于wx.openLocation的经纬度
                            success(res) {
                              var markers_new = that.data.markers;
                              markers_new[0].latitude = res.latitude;
                              markers_new[0].longitude = res.longitude;
                              that.setData({
                                latitude: res.latitude,
                                longitude: res.longitude,
                                markers: markers_new
                              })
                              that.getAddressName();
                            }
                          });
                        }
                      }
                    })
                  }
                }
              })
            }
          },
          fail: function (res) {

          }
        })
      }
    })
  },
  getAddressName() {
    var that = this;
    var locationString = this.data.latitude + "," + this.data.longitude;
    //等同于qqsdk获取
    wx.request({
      url: 'https://apis.map.qq.com/ws/geocoder/v1/?get_poi=1',
      data: {
        "key": "YLFBZ-WHAWI-ZXUGH-53Q65-TOJ7E-ADBNQ",
        "location": locationString,
      },
      method: 'GET',
      success: function (r) {
        //输出一下位置信息
        console.log('用户位置信息', r.data.result.address);
        console.log(r.data)
        that.setData({
          addressName: r.data.result.address
        })
        app.globalData.latitude = that.data.latitude;
        app.globalData.longitude = that.data.longitude;
        app.globalData.addressName = that.data.addressName;
      }
    });
  },
  choose1:function(){
    var that = this;
    wx.chooseLocation({
      success:function(res){
        console.log(res);
        if (res.address){
          var markers_new = that.data.markers;
          markers_new[0].latitude = res.latitude;
          markers_new[0].longitude = res.longitude;
          that.setData({
            latitude: res.latitude,
            longitude: res.longitude,
            addressName: res.address,
            markers: markers_new
          })
          app.globalData.latitude = res.latitude;
          app.globalData.longitude = res.longitude;
          app.globalData.addressName = res.address;
        }
        
      }
    })
  },
  choose2:function(){
    var that = this;
    wx.chooseLocation({
      success: function (res) {
        console.log(res);
        if (res.address) {
          that.setData({
            addressName2: res.address,
            endLatitude: res.latitude,
            endLongitude: res.longitude,
          })
          app.globalData.endLatitude = res.latitude;
          app.globalData.endLongitude = res.longitude;
          app.globalData.endAddressName = res.address;

        }
        
      }
    })
    
  },
  go:function(){
    console.log(this.data);
    if (this.data.latitude > 0 && this.data.endLatitude > 0){
      wx.navigateTo({
        url: "/pages/car/car"
      });
    }else{
      wx.showToast({ title: '失败,请选择目的地',})
    }
  },
  goPerson(e) {
    wx.navigateTo({
      url: "/pages/person/person"
    });
  },
  goCenter(e) {
    let mpCtx = wx.createMapContext("map");
    mpCtx.moveToLocation();
  },
})

打车页面

<view class="flex-style">
  <view class="flex-item active" bindtouchstart="goToCar">驾车</view>
  <view class="flex-item" bindtouchstart="goToWalk">步行</view>
  <view class="flex-item" bindtouchstart="goToBus">公交</view>
  <view class="flex-item" bindtouchstart="goToRide">骑行</view>
</view>
<view class="map_box">
  <map id="navi_map" longitude="{{longitude}}" latitude="{{latitude}}" scale="12" markers="{{markers}}" polyline="{{polyline}}"></map>
</view>

<view class="text_box">
  <view class="text">{{distance}}</view>
  <view class="text">{{cost}}</view>
  <view class="detail_button" bindtouchstart="goDetail">详情</view>
</view>

var amapFile = require('../../libs/amap-wx.js');
var config = require('../../libs/config.js');
const app = getApp()
Page({
  data: {
    latitude: 0,
    longitude:0,
    markers: [{
      iconPath: "../../img/map1.png",
      id: 0,
      latitude: 0,
      longitude: 0,
      width: 23,
      height: 33
    }, {
      iconPath: "../../img/map2.png",
      id: 0,
      latitude: 0,
      longitude: 0,
      width: 24,
      height: 34
    }],
    distance: '',
    cost: '',
    polyline: []
  },
  onLoad: function () {
    var start1 = app.globalData.longitude;
    var start2 = app.globalData.latitude;
    var end1 = app.globalData.endLongitude;
    var end2 = app.globalData.endLatitude;
    var start = start1 + "," + start2;
    var end = end1 + "," + end2;
    // var d = "116.434446,39.90816";
    // var s = "116.481028,39.989643"
    // var d = "114.5143,38.04276";
    // var s = "114.46022, 38.04982";
    // console.log(s);
    // console.log(d);
    var that = this;
    var key = config.Config.key;
    var myAmapFun = new amapFile.AMapWX({ key: key });
    myAmapFun.getDrivingRoute({
      origin: start,
      destination:end,
      success: function (data) {
        var points = [];
        if (data.paths && data.paths[0] && data.paths[0].steps) {
          var steps = data.paths[0].steps;
          for (var i = 0; i < steps.length; i++) {
            var poLen = steps[i].polyline.split(';');
            for (var j = 0; j < poLen.length; j++) {
              points.push({
                longitude: parseFloat(poLen[j].split(',')[0]),
                latitude: parseFloat(poLen[j].split(',')[1])
              })
            }
          }
        }
        console.log(points);
        var markers_new = that.data.markers;
        markers_new[0].latitude = start2
        markers_new[0].longitude = start1
        markers_new[1].latitude = end2
        markers_new[1].longitude = end1
        console.log(markers_new)
        that.setData({
          latitude: start2,
          longitude: start1,
          markers: markers_new,
          polyline: [{
            points: points,
            color: "#0091ff",
            width: 6
          }]
        })
        that.mapCtx = wx.createMapContext('navi_map'); // map为地图的id
        that.mapCtx.includePoints({
          padding: [10],
          points: [{
            latitude: start2,
            longitude: start1,
          }, {
              latitude: end2,
              longitude: end1,
          }],
          success: function (res) {
            console.log(res)
          }
        })
        if (data.paths[0] && data.paths[0].distance) {
          that.setData({
            distance: data.paths[0].distance + '米'
          });
        }
        if (data.taxi_cost) {
          that.setData({
            cost: '打车约' + parseInt(data.taxi_cost) + '元'
          });
        }

      }
    })
  },
  goDetail: function () {
    wx.navigateTo({
      url: '../navigation_car_detail/navigation'
    })
  },
  goToCar: function (e) {
    wx.redirectTo({
      url: '../navigation_car/navigation'
    })
  },
  goToBus: function (e) {
    wx.redirectTo({
      url: '../navigation_bus/navigation'
    })
  },
  goToRide: function (e) {
    wx.redirectTo({
      url: '../navigation_ride/navigation'
    })
  },
  goToWalk: function (e) {
    wx.redirectTo({
      url: '../navigation_walk/navigation'
    })
  }
})

使用的是高德的小程序地图插件,amap,可以到高德的官网查看api:
https://lbs.amap.com/api/wx/guide/get-data/get-inputtips

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,588评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,456评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,146评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,387评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,481评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,510评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,522评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,296评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,745评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,039评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,202评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,901评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,538评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,165评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,415评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,081评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,085评论 2 352

推荐阅读更多精彩内容