1 文档
2 准备工作
2.1 注册开发者
1)进入腾讯位置服务官网
2)注册
注册号之后,这个key是需要用到的

2.2 开通地图服务
1)进入微信公众平台-账号设置-第三方设置-插件管理

2)添加需要的插件

2.3 服务器域名配置
1)微信公众平台-开发管理-开发设置

2)配置域名
往下拉找到服务器域名,点击修改

加入以下地址
https://apis.map.qq.com

2.4 官方开源示例小程序

进入小程序,下面有源码链接,可以拷下来,放到开发者工具去看看

3 小程序配置
1)添加配置文件

INDOOR_KEY :2.1中注册的那个key
export const CDN_PATH = 'https://3gimg.qq.com/lightmap/xcx/demoCenter/images';
export const COS_PATH = 'https://mapapi.qq.com/web/miniprogram/demoCenter/images';
export const PLUGIN_KEY = '';
export const MOYUAN_KEY = '';
export const BAIQIAN_KEY = '';
export const YULU_KEY = '';
export const DIFUNI_KEY = '';
export const INDOOR_KEY = '这里填写2.1中注册的那个key';
export const REFERER = '腾讯位置服务示例中心小程序';
export const WEBSERVICE_APPID = '';
export const CUSTOM_KEY = ''; // 个性化地图key
export const WS_HOST = 'https://apis.map.qq.com'
export const SMART_SOLUTION_KEY = ''; //出行解决方案key
export const NEARBY_CAR_KEY = '';
export const NEARBY_CAR_SK = ''; //出行解决方案sk
2)app.json添加配置
以下配置和pages同级
"permission": {
"scope.userLocation": {
"desc": "你的位置信息将用于小程序定位"
}
},
"requiredPrivateInfos": [
"getLocation",
"onLocationChange",
"startLocationUpdateBackground",
"chooseAddress"
],
"plugins": {
"routePlan": {
"version": "1.0.19",
"provider": "wx50b5593e81dd937a"
},
"chooseLocation": {
"version": "1.0.10",
"provider": "wx76a9a06e5b4e693e"
},
"subway": {
"version": "1.0.13",
"provider": "wx6aaf93c4435fa1c1"
},
"citySelector": {
"version": "1.0.2",
"provider": "wx63ffb7b7894e99ae"
}
},
4 小程序开发
4.1 json
{
"usingComponents": {
},
"navigationBarTitleText": "地图显示"
}
4.2 wxss
/* pages/show-map/show-map.wxss */
.show-map-container {
display: flex;
flex-direction: column;
box-sizing: border-box;
width: 100%;
background: #F8F8F7;
}
.map-container {
padding:20px 0 0;
margin-top: 10px;
background: #FFF;
width: 100%;
position: relative;
}
.map-content {
background: #FFF;
position: absolute;
z-index: 1;
width: 100%;
opacity: 0;
box-sizing: border-box;
}
.map-content-show {
height: auto;
z-index: 2;
opacity: 1;
transition: 0.3s;
}
.map-padding {
padding-bottom: 20px;
}
.map {
width:100%;
height:400px;
}
.indoor-map {
width: 100%;
height: 400px;
}
.feature-content {
height: 56px;
display: flex;
justify-content: space-between;
line-height: 56px;
}
.feature-content-border {
border-bottom: 0.5px solid rgba(0,0,0,0.1);
}
4.3 wxml
4.3.1 代码
<map class="map" enable-overlooking="{{true}}"
latitude="{{location.latitude}}" longitude="{{location.longitude}}" show-location="{{true}}"
markers="{{markers}}"
polyline="{{polyline}}"
scale="16" enable-poi="true" enable-rotate>
</map>
4.3.2 属性说明
1)enable-overlooking
开启俯视
2)show-location,latitude,longitude
show-location:显示当前定位点
latitude:中心经度
longitude:中心纬度
效果如下

3)markers
标注点的数据数组,数据格式如下
[
{
callout: {
content: '腾讯总部大楼',
padding: 10,
borderRadius: 2,
display: 'ALWAYS'
},
latitude: 40.040415,
longitude: 116.273511,
iconPath: './imgs/Marker1_Activated@3x.png',
width: '34px',
height: '34px',
rotate: 0,
alpha: 1
}
]
效果如下

4)polyline
覆盖物(也就是路线)的数组数据,格式如下
[
{
points: [
{latitude:40.040129,longitude:116.274968},
{latitude:40.038974,longitude:116.275214},
{latitude:40.038974,longitude:116.275214},
{latitude:40.038565000000006,longitude:116.272683},
{latitude:40.03848200000001,longitude:116.27209500000001},
{latitude:40.03836100000001,longitude:116.27074},
{latitude:40.03832700000001,longitude:116.270515},
{latitude:40.03807400000001,longitude:116.268038},
{latitude:40.03801400000001,longitude:116.26763600000001},
{latitude:40.03801400000001,longitude:116.26763600000001},
{latitude:40.03790800000001,longitude:116.267508},
{latitude:40.03450300000001,longitude:116.270961},
{latitude:40.03419900000001,longitude:116.271221},
{latitude:40.03396500000001,longitude:116.271401},
{latitude:40.03245000000001,longitude:116.272472}
],
color: '#3875FF',
width: 8,
dottedLine: false,
arrowLine: false,
borderWidth: 2,
// colorList: ['#3875FF']
}
]
5)scale
地图的比例尺

4.4 js
4.4.1 代码
// pages/show-map/show-map.js
import {INDOOR_KEY} from '../../../../config/appConfig';
const INIT_POLYLINE = {
points: [
],
color: '#3875FF',
width: 8,
dottedLine: false,
arrowLine: false,
borderWidth: 2,
// colorList: ['#3875FF']
};
const INIT_MARKER = {
callout: {
content: '',
padding: 10,
borderRadius: 2,
display: 'ALWAYS'
},
latitude: 40.040415,
longitude: 116.273511,
iconPath: '../../../../image/Marker1_Activated@3x.png',
width: '34px',
height: '34px',
rotate: 0,
alpha: 1
};
Page({
/**
* 页面的初始数据
*/
data: {
key: INDOOR_KEY,
location:{
latitude:40.040415,
longitude:116.273511
},
polyline: [{
...INIT_POLYLINE
}],
markers: [{
...INIT_MARKER
}],
},
onLoad: function () {
var that = this
if (!INDOOR_KEY) {
console.error('请传入有效的key');
}
that.initLocation ()
setInterval(() => {
that.getLocation ()
}, 5000)
},
// 初始化中心经纬度
initLocation(){
// 获取当前定位信息
wx.getLocation({
type: 'gcj02', // 返回地理位置的偏移坐标系,wgs84 是最常用的地理坐标系
success: (res) => {
this.setData({
'location.latitude': res.latitude , // 设置中心纬度
'location.longitude': res.longitude , // 设置中心经度
});
},
fail: (err) => {
console.log('定位失败', err);
}
})
},
getLocation () {
// 获取当前定位信息
wx.getLocation({
type: 'gcj02', // 返回地理位置的偏移坐标系,wgs84 是最常用的地理坐标系
success: (res) => {
var current = {
latitude:res.latitude + 0.00005 * this.data.polyline[0].points.length,
longitude:res.longitude + 0.00005 * this.data.polyline[0].points.length
}
// 设置路线polyline经纬度集合
var points = this.data.polyline[0].points
points.push(current)
this.setData({
'polyline[0].points':points
})
console.log('获取定位',this.data.polyline)
// 设置marker经度纬度
this.setData({
'markers[0].latitude':current.latitude,
'markers[0].longitude':current.longitude
});
},
fail: (err) => {
console.log('定位失败', err);
}
})
},
});
4.4.2 说明
1)INIT_POLYLINE
用于初始化线路的数组数据polyline
2)INIT_MARKER
用于初始化标记点的数组数据markers
3)initLocation方法
去获取当前位置的经纬度,初始化latitude,longitude的值,用于在地图显示当前位置
4)getLocation方法
去获取当前位置的经纬度
把当前位置的经纬度赋值给标记点的数据数组中markers[0].longitude(这里只有一个标记点)
把当前位置的经纬度赋值添加到路线的数据数组中:polyline[0].points(这里只有一条路线)
ps:一下代码在后面把经纬度都不断的加值是因为我在电脑上测试,每次获取到的经纬度都一样,所以为了展示移动的效果,加上后面的值
var current = {
latitude:res.latitude + 0.00005 * this.data.polyline[0].points.length,
longitude:res.longitude + 0.00005 * this.data.polyline[0].points.length
}
4.5 效果
每5秒获取一次定位,这个线路会从0开始慢慢变长
