uni-app 内置了 高德地图 的API调用。
获取当前位置
uni.getLocation({
type: 'gcj02',
success: res => {
console.log(JSON.stringify(res));
this.text = JSON.stringify(res)
}
})
可选参数有:
- altitude:true|false,默认false,是否获取高度信息, App和头条小程序不支持
- type:默认为 wgs84 返回 gps 坐标,gcj02 返回国测局坐标,可用于 uni.openLocation 的坐标
success的回调参数:
- latitude 纬度,浮点数,范围为-90~90,负数表示南纬
- longitude 经度,浮点数,范围为-180~180,负数表示西经
- speed 速度,浮点数,单位m/s
- altitude 高度,单位 m
- accuracy 位置的精确度
- verticalAccuracy 垂直精度,单位 m(Android 无法获取,返回 0)
- horizontalAccuracy 水平精度,单位 m
选择地理位置
uni.chooseLocation({
success: res => {
console.log(JSON.stringify(res));
this.text = JSON.stringify(res)
}
})
选择之后执行成功回调,可获取如下参数:
- name 位置名称
- address 详细地址
- latitude 纬度,浮点数,范围为-90~90,负数表示南纬
- longitude 经度,浮点数,范围为-180~180,负数表示西经
获取并查看当前位置
使用 uni.openLocation
可根据传入的经纬度进行定位,如果使用 uni.getLocation
获取的位置,需要指定类型为 gcj02
uni.getLocation({
type: 'gcj02', //返回可以用于uni.openLocation的经纬度
success: res => {
uni.openLocation({
latitude: res.latitude,
longitude: res.longitude,
success: () => {
console.log('success');
}
});
}
});
uni.openLocation(OBJECT)
的参数可通过 uni.getLocation
获取到, 包括:
参数名 | 类型 | 必填 | 说明 | 平台差异说明 |
---|---|---|---|---|
name | String | 否 | 位置名 | |
address | String | 否 | 地址的详细说明 | |
latitude | Float | 是 | 纬度,范围为-90~90,负数表示南纬,使用 gcj02 国测局坐标系 | |
longitude | Float | 是 | 经度,范围为-180~180,负数表示西经,使用 gcj02 国测局坐标系 | |
scale | Int | 否 | 缩放比例,范围5~18,默认为18 | 微信小程序 |
map 组件
以下示例, 通过获取当前位置, 在地图上标记当前位置
<template>
<view>
<button type="primary" @click="open">获取地理位置</button>
<view>
<map style="width: 100%; height: 300px;" :latitude="latitude" :longitude="longitude" :markers="covers"></map>
</view>
</view>
</template>
<script>
export default {
data() {
return {
latitude: 0,
longitude: 0,
covers: []
}
},
methods: {
open () {
uni.getLocation({
type: 'gcj02', //返回可以用于uni.openLocation的经纬度
success: res => {
this.latitude = res.latitude
this.longitude = res.longitude
this.covers = [{
id: 0,
latitude: res.latitude,
longitude: res.longitude,
iconPath: '../../../static/logo.png',
callout: {
content: '测试标记'
}
}]
}
});
}
}
}
</script>
map 组件的属性
属性名 | 类型 | 默认值 | 说明 | 平台差异说明 |
---|---|---|---|---|
longitude | Number | 中心经度 | ||
latitude | Number | 中心纬度 | ||
scale | Number | 16 | 缩放级别,取值范围为5-18 | |
markers | Array | 标记点 | ||
polyline | Array | 路线 | ||
circles | Array | 圆 | ||
controls | Array | 控件 | ||
include-points | Array | 缩放视野以包含所有给定的坐标点 | 微信小程序、H5、百度小程序、支付宝小程序 | |
show-location | Boolean | 显示带有方向的当前定位点 | 微信小程序、H5、百度小程序、支付宝小程序 |
map 组件的事件
属性名 | 类型 | 说明 | 平台差异说明 |
---|---|---|---|
@markertap | EventHandle | 点击标记点时触发 | |
@callouttap | EventHandle | 点击标记点对应的气泡时触发 | |
@controltap | EventHandle | 点击控件时触发 | |
@regionchange | EventHandle | 视野发生变化时触发 | 微信小程序、H5、百度小程序、支付宝小程序 |
@tap | EventHandle | 点击地图时触发 | |
@updated | EventHandle | 在地图渲染更新完成时触发 | 微信小程序、H5、百度小程序 |
:::warning uni-app 只支持 gcj02 坐标 :::
标记点 markers
标记点用于在地图上显示标记的位置
属性 | 说明 | 类型 | 必填 | 备注 | 平台差异说明 |
---|---|---|---|---|---|
id | 标记点id | Number | 是 | marker点击事件回调会返回此id。建议为每个marker设置上Number类型id,保证更新marker时有更好的性能。 | |
latitude | 纬度 | Number | 是 | 浮点数,范围 -90 ~ 90 | |
longitude | 经度 | Number | 是 | 浮点数,范围 -180 ~ 180 | |
iconPath | 显示的图标 | String | 是 | 项目目录下的图片路径,支持相对路径写法,以’/‘开头则表示相对小程序根目录;也支持临时路径 | |
title | 标注点名 | String | 否 | 微信小程序、H5、支付宝小程序、百度小程序 | |
rotate | 旋转角度 | Number | 否 | 顺时针旋转的角度,范围 0 ~ 360,默认为 0 | 微信小程序、支付宝小程序、百度小程序 |
alpha | 标注的透明度 | Number | 否 | 默认1,无透明,范围 0 ~ 1 | 微信小程序、支付宝小程序、百度小程序 |
width | 标注图标宽度 | Number | 否 | 默认为图片实际宽度 | 微信小程序、H5、支付宝小程序、百度小程序 |
height | 标注图标高度 | Number | 否 | 默认为图片实际高度 | 微信小程序、H5、支付宝小程序、百度小程序 |
callout | 自定义标记点上方的气泡窗口 | Object | 否 | 支持的属性见下表,可识别换行符。 | |
label | 为标记点旁边增加标签 | Object | 否 | 支持的属性见下表,可识别换行符。 | 微信小程序、H5、5+APP、百度小程序 |
anchor | 经纬度在标注图标的锚点,默认底边中点 | Object | 否 | {x, y},x表示横向(0-1),y表示竖向(0-1)。默认 {x: .5, y: 1} 表示底边中点 | 微信小程序、H5、百度小程序 |
marker 上的气泡 callout
点击标记点时, 会显示 callout, 可将 display 设为 ‘ALWAYS’ 一直显示
属性 | 说明 | 类型 | 平台差异说明 |
---|---|---|---|
content | 文本 | String | |
color | 文本颜色 | String | 微信小程序、H5、百度小程序 |
fontSize | 文字大小 | Number | 微信小程序、H5、百度小程序 |
borderRadius | callout边框圆角 | Number | 微信小程序、H5、百度小程序 |
bgColor | 背景色 | String | 微信小程序、H5、百度小程序 |
padding | 文本边缘留白 | Number | 微信小程序、H5、百度小程序 |
display | ‘BYCLICK’:点击显示; ‘ALWAYS’:常显 | String | 微信小程序、H5、百度小程序 |
textAlign | 文本对齐方式。有效值: left, right, center | String | 微信小程序、百度小程序 |
marker 上的气泡 label
显示在标记点下方的说明文本
属性 | 说明 | 类型 | 平台差异说明 |
---|---|---|---|
content | 文本 | String | |
color | 文本颜色 | String | 微信小程序、H5、百度小程序 |
fontSize | 文字大小 | Number | 微信小程序、H5、百度小程序 |
x | label的坐标,原点是 marker 对应的经纬度 | Number | 微信小程序、H5、百度小程序 |
y | label的坐标,原点是 marker 对应的经纬度 | Number | 微信小程序、H5、百度小程序 |
borderWidth | 边框宽度 | Number | 微信小程序、百度小程序 |
borderColor | 边框颜色 | String | 微信小程序、百度小程序 |
borderRadius | 边框圆角 | Number | 微信小程序、百度小程序 |
bgColor | 背景色 | String | 微信小程序、百度小程序 |
padding | 文本边缘留白 | Number | 微信小程序、百度小程序 |
textAlign | 文本对齐方式。有效值: left, right, center | String | 微信小程序、百度小程序 |
折线标记 polyline
指定一系列坐标点,从数组第一项连线至最后一项
属性 | 说明 | 类型 | 必填 | 备注 | 平台差异说明 |
---|---|---|---|---|---|
points | 经纬度数组 | Array | 是 | [{latitude: 0, longitude: 0}] | |
color | 线的颜色 | String | 否 | 8位十六进制表示,后两位表示alpha值,如:#0000AA | |
width | 线的宽度 | Number | 否 | ||
dottedLine | 是否虚线 | Boolean | 否 | 默认false | 微信小程序、H5、百度小程序、支付宝小程序 |
arrowLine | 带箭头的线 | Boolean | 否 | 默认false,微信小程序开发者工具暂不支持该属性 | 微信小程序、百度小程序 |
arrowIconPath | 更换箭头图标 | String | 否 | 在arrowLine为true时生效 | 微信小程序、百度小程序 |
borderColor | 线的边框颜色 | String | 否 | 微信小程序、H5、百度小程序 | |
borderWidth | 线的厚度 | Number | 否 | 微信小程序、H5、百度小程序 |
圆标记 circles
在地图上显示圆
属性 | 说明 | 类型 | 必填 | 备注 |
---|---|---|---|---|
latitude | 纬度 | Number | 是 | 浮点数,范围 -90 ~ 90 |
longitude | 经度 | Number | 是 | 浮点数,范围 -180 ~ 180 |
color | 描边的颜色 | String | 否 | 8位十六进制表示,后两位表示alpha值,如:#0000AA |
fillColor | 填充颜色 | String | 否 | 8位十六进制表示,后两位表示alpha值,如:#0000AA |
radius | 半径 | Number | 是 | |
strokeWidth | 描边的宽度 | Number | 否 |
地图控件 controls
在地图上显示控件,控件不随着地图移动
属性 | 说明 | 类型 | 必填 | 备注 |
---|---|---|---|---|
id | 控件id | Number | 否 | 在控件点击事件回调会返回此id |
position | 控件在地图的位置 | Object | 是 | 控件相对地图位置 |
iconPath | 显示的图标 | String | 是 | 项目目录下的图片路径,支持相对路径写法,以’/‘开头则表示相对项目根目录;也支持临时路径 |
clickable | 是否可点击 | Boolean | 否 | 默认不可点击 |
position
属性 | 说明 | 类型 | 必填 | 备注 |
---|---|---|---|---|
left | 距离地图的左边界多远 | Number | 否 | 默认为0 |
top | 距离地图的上边界多远 | Number | 否 | 默认为0 |
width | 控件宽度 | Number | 否 | 默认为图片宽度 |
height | 控件高度 | Number | 否 | 默认为图片高度 |
地图组件的经纬度必填,如果不填经纬度则默认值是北京的经纬度。
地图事件
点击事件 tap
当点击地图时触发, tap 事件返回类似如下形似的事件对象:
{
"mp": {
"type": "tap",
"target": {
"dataset": {
"eventid": "72e81d87-2"
},
"id": "",
"offsetTop": 92,
"offsetLeft": 0
},
"currentTarget": {
"dataset": {
"eventid": "72e81d87-2"
},
"id": "",
"offsetTop": 92,
"offsetLeft": 0
},
"timeStamp": 1557387301964,
"detail": {}
},
"type": "tap",
"timeStamp": 1557387301964,
"target": {
"dataset": {
"eventid": "72e81d87-2"
},
"id": "",
"offsetTop": 92,
"offsetLeft": 0
},
"detail": {},
"currentTarget": {
"dataset": {
"eventid": "72e81d87-2"
},
"id": "",
"offsetTop": 92,
"offsetLeft": 0
}
}
地图上下文
uni.createMapContext(mapId,this)
创建并返回 map 上下文 mapContext 对象。在自定义组件下,第二个参数传入组件实例this,以操作组件内 <map>
组件。
mapContext 对象的方法列表
方法 | 参数 | 说明 | 平台差异说明 | 最低版本 |
---|---|---|---|---|
getCenterLocation | OBJECT | 获取当前地图中心的经纬度,返回的是 gcj02 坐标系,可以用于 uni.openLocation | ||
moveToLocation | 将地图中心移动到当前定位点,需要配合map组件的show-location使用 | |||
translateMarker | OBJECT | 平移marker,带动画 | ||
includePoints | OBJECT | 缩放视野展示所有经纬度 | ||
getRegion | OBJECT | 获取当前地图的视野范围 | ||
getScale | OBJECT | 获取当前地图的缩放级别 | ||
$getAppMap | 获取原生地图对象 plus.maps.Map | 5+App自定义组件模式 | 1.9.3 |
getCenterLocation
获取当前地图中心的经纬度, 使用方式如下:
<template>
<view>
<button @click="getCenterLocation">getCenterLocation</button>
<view>
<map style="width: 100%; height: 300px;"
id="map"
:latitude="25"
:longitude="102"
:markers="covers"
></map>
</view>
</view>
</template>
<script>
export default {
data() {
return {
map: null
}
},
mounted () {
this.map = uni.createMapContext('map',this)
},
methods: {
getCenterLocation () {
this.map.getCenterLocation({
success: (res) => {
console.log(JSON.stringify(res));
}
})
}
}
}
</script>
返回格式如下:
{"latitude":25.041660769305633,"longitude":102.70562234652215,"errMsg":"getMapCenterLocation:ok"}
getRegion
this.map.getRegion({
success: (res) => {
console.log(JSON.stringify(res));
}
})
返回格式如下:
{"northeast":{"latitude":25.045561,"longitude":102.711284},"southwest":{"latitude":25.037752,"longitude":102.69997},"errMsg":"getMapRegion:ok"}
getScale
getScale () {
this.map.getScale({
success: (res) => {
console.log(JSON.stringify(res));
}
})
}
返回格式如下:
{"scale":16,"errMsg":"getMapScale:ok"}
:::info 如果想在App端实现更多地图功能,可通过$getAppMap()获取原生地图对象plus.maps.Map :::