高德地图SDK嵌入微信小程序之获取当前位置

引言

该文章用于记录微信小程序的学习历程
该文章学习视频为B站博主 [无敌风火轮12] 发布的《微信小程序引入高德地图SDK进行导航》系列视频

一、高德开放平台SDK

1、获取key

进入 高德开放平台 ,注册并登录账号,进入我的应用并创建新应用。
在这里插入图片描述
创建应用成功后,添加key
在这里插入图片描述
key添加成功后,即可查看当前key值(key值在开发过程中使用)
提示:公司用的话是需要公司注册一个企业权限的,个人使用的话就比较简单,但是访问会有些限制
在这里插入图片描述

2、引入SDK

进入 高德地图微信小程序SDK 并下载高德的SDK
在这里插入图片描述
将下载后的压缩包中的js文件放入创建项目的utils文件夹中,并在地图的js页面引入该js文件
在这里插入图片描述

二、配置合法域名

1、原因

需要再微信开放平台中配置合法访问的域名,否则会出现如下报错:
在这里插入图片描述

2、如何配置

登录进入微信开放平台,点击 开发管理 - 开发设置,下拉找到,服务器域名进行修改
在这里插入图片描述

3、配置内容

最开始我参考告警信息

https://restapi.amap.com 不在以下 request 合法域名列表中

只配置了①,没有效果,于是我把告警信息下方数组的三个链接也加了进去

① https://restapi.amap.com;
② https://apis.map.qq.com;
③ https://7374-study-7gcud6aqea752316-1329072595.tcb.qcloud.la;
④ https://tcb-api.tencentcloudapi.com;
在这里插入图片描述

4、刷新配置信息

此时重新编译代码还是无效,看到调试器信息如下

如若已在管理后台更新域名配置,请刷新项目配置后重新编译项目,操作路径:“详情-域名信息”

刷新一下,重新编译
在这里插入图片描述
此时显示没有问题,预估第三步可只配置[https://restapi.amap.com],具体情况开发者自行判断
在这里插入图片描述

三、获取当前位置并展示于地图

1、地图页面 map.wxml

<view class="map_container">
  <map class="map" id="map" longitude="{{longitude}}" latitude="{{latitude}}" scale="14" 
  show-location="true" markers="{{markers}}" bindmarkertap="makertap" polyline="{{polyline}}" 
  include-points="{{includePoints}}"></map>
</view>
<!--地图描述-->
<view class="map_text">
  <text class="h1">{{textData.name}}</text>
  <text>{{textData.desc}}</text>
  <view class="text_box" wx:if="{{daohang}}">
  <!--开始导航展示的内容 距离 打车费用 text_box用z-index覆盖在地点描述上面-->
    <view class="text">{{distance}}</view>
    <view class="text">{{cost}}</view>
  </view>
</view>

2、地图样式 map.wxss

/* pages/map/map.wxss */
.section{
  height: 80px;
  width: 100%;
}
.section input{
  width: 90%;
  margin: 5px auto;
  border: 1px solid #c3c3c3;
  height: 30px;
  border-radius: 3px;
  padding: 0 5px;
}

.map_container{
  position: absolute;
  top: 115px;
  bottom: 80px;
  left: 0;
  right: 0;
}
.map{
  width: 100%;
  height: 100%;
}
.map_text{
  position: absolute;
  left: 0;
  right: 0;
  bottom: 0px;
  height: 80px;
  background: #fff;
  padding: 0 15px;
}

text{
  margin: 5px 0;
  display: block;
  font-size: 12px;
}
.h1{
  margin: 15px 0;
  font-size: 15px;
}

/* 公交样式 */
.text_box{
  margin: 0 15px;
  padding: 15px 0;
  border-bottom: 1px solid #c3c3c3;
  font-size: 13px;
}

.text_box .text_item{
  display: inline-block;
  line-height: 8px;
}

3、地图格式 map.js

var amapFile = require('../../utils/amap-wx.130')
var markersData = []
Page({
  data:{
    markers: [],  //全部的地点标记
    latitude: '',  //当前位置的纬度
    longitude: '',  //当前位置的经度
    city: '',  //当前位置的名称
    latitude_e: '',  //目的地的纬度
    longitude_e: '',  //目的地的经度
    city_e: '',  //目的地的名称
    textData: {},  //地点描述信息;就是点击当前标记点的话会展示地点的描述信息
    gaode_type: 'car',  //导航类型;这里写的car就默认是驾车导航
    polyline: [],  //导航线;从起点到终点的一条线,可以配置颜色、宽度等
    includePoints: [],  //包含的点位(后期开发再探索)
    transits: [],  //公交车信息
    mapEndObj: {},  //目的地的信息
    cost: '',  //打车费用
    distance: '',  //导航总距离
    daohang: false,  //是否开始导航
    mapState: true  //目的地搜索状态
  },

  onLoad: function(){
    var that = this;
    that.getPoiData()  //获取当前位置或指定周边位置
  },
  getPoiData:function (keywords){
    var that = this;
    let params = {
      iconPathSelected:'../../imgs/map1.png',
      iconPath:'../../imgs/map0.png',
      success: function(data){
        console.log('当前位置', data)
        markersData = data.markers;  //热门点位
        //搜索当前位置 附近poi
        that.setData({
          markers: markersData,  //标记
          latitude: markersData[0].latitude,
          longitude: markersData[0].longitude,
          city: markersData[0].name,
        });
        that.showMarkerInfo(markersData,0);
      },
      fail: function(info){
        wx.showModal({
          title: info.errMsg
        })
      }
    }

    if(keywords){  //如果要做搜索目标附近地点
      params.querykeywords = keywords;
    }

    var myAmapFun = new amapFile.AMapWX({  //new一个高德地图的对象,调用AMapWX方法,将之前在高德地图开放平台创建的key传进去
      key: '你的高德地图的key'
    });
    myAmapFun.getPoiAround(params)
  },

  //点击标记切换描述
  makertap: function(e){
    var id = e.markerId;
    var that = this;
    that.showMarkerInfo(markersData,id);
    that.changeMarkerColor(markersData,id);
  },
  showMarkerInfo: function(data, id){
    var that = this;
    that.setData({
      textData:{
        name: data[id].name,
        desc: data[id].address
      }
    })
  },
  changeMarkerColor: function(data, id){
    var markers = [];
    for(var i=0; i<this.data.length; i++){  //遍历到当前id时,替换图标
      if(i == id){
        data[i].iconPath = "";  //选中点位
      }else{
        data[i].iconPath = "";  //未选中点位
      }
      markers.push(data[i]);
    }
    this.setData({  //再重新赋值一遍
      markers: markers
    })
  }

})

4、全局配置 app.json

  "permission":{
    "scope.userLocation": {"desc":"您的位置信息将用于小程序效果展示"}
  },
  "requiredPrivateInfos": ["getLocation"],
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值