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.latitudethis.longitude = res.longitudethis.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 :::
