uni-app 内置了 高德地图 的API调用。

获取当前位置

  1. uni.getLocation({
  2. type: 'gcj02',
  3. success: res => {
  4. console.log(JSON.stringify(res));
  5. this.text = JSON.stringify(res)
  6. }
  7. })

005.png

可选参数有:

  • 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

选择地理位置

  1. uni.chooseLocation({
  2. success: res => {
  3. console.log(JSON.stringify(res));
  4. this.text = JSON.stringify(res)
  5. }
  6. })

007.webp

选择之后执行成功回调,可获取如下参数:

  • name 位置名称
  • address 详细地址
  • latitude 纬度,浮点数,范围为-90~90,负数表示南纬
  • longitude 经度,浮点数,范围为-180~180,负数表示西经

006.png

获取并查看当前位置

使用 uni.openLocation 可根据传入的经纬度进行定位,如果使用 uni.getLocation 获取的位置,需要指定类型为 gcj02

  1. uni.getLocation({
  2. type: 'gcj02', //返回可以用于uni.openLocation的经纬度
  3. success: res => {
  4. uni.openLocation({
  5. latitude: res.latitude,
  6. longitude: res.longitude,
  7. success: () => {
  8. console.log('success');
  9. }
  10. });
  11. }
  12. });

uni.openLocation(OBJECT) 的参数可通过 uni.getLocation 获取到, 包括:

参数名 类型 必填 说明 平台差异说明
name String 位置名
address String 地址的详细说明
latitude Float 纬度,范围为-90~90,负数表示南纬,使用 gcj02 国测局坐标系
longitude Float 经度,范围为-180~180,负数表示西经,使用 gcj02 国测局坐标系
scale Int 缩放比例,范围5~18,默认为18 微信小程序

008.webp

map 组件

以下示例, 通过获取当前位置, 在地图上标记当前位置

  1. <template>
  2. <view>
  3. <button type="primary" @click="open">获取地理位置</button>
  4. <view>
  5. <map style="width: 100%; height: 300px;" :latitude="latitude" :longitude="longitude" :markers="covers"></map>
  6. </view>
  7. </view>
  8. </template>
  9. <script>
  10. export default {
  11. data() {
  12. return {
  13. latitude: 0,
  14. longitude: 0,
  15. covers: []
  16. }
  17. },
  18. methods: {
  19. open () {
  20. uni.getLocation({
  21. type: 'gcj02', //返回可以用于uni.openLocation的经纬度
  22. success: res => {
  23. this.latitude = res.latitude
  24. this.longitude = res.longitude
  25. this.covers = [{
  26. id: 0,
  27. latitude: res.latitude,
  28. longitude: res.longitude,
  29. iconPath: '../../../static/logo.png',
  30. callout: {
  31. content: '测试标记'
  32. }
  33. }]
  34. }
  35. });
  36. }
  37. }
  38. }
  39. </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 事件返回类似如下形似的事件对象:

  1. {
  2. "mp": {
  3. "type": "tap",
  4. "target": {
  5. "dataset": {
  6. "eventid": "72e81d87-2"
  7. },
  8. "id": "",
  9. "offsetTop": 92,
  10. "offsetLeft": 0
  11. },
  12. "currentTarget": {
  13. "dataset": {
  14. "eventid": "72e81d87-2"
  15. },
  16. "id": "",
  17. "offsetTop": 92,
  18. "offsetLeft": 0
  19. },
  20. "timeStamp": 1557387301964,
  21. "detail": {}
  22. },
  23. "type": "tap",
  24. "timeStamp": 1557387301964,
  25. "target": {
  26. "dataset": {
  27. "eventid": "72e81d87-2"
  28. },
  29. "id": "",
  30. "offsetTop": 92,
  31. "offsetLeft": 0
  32. },
  33. "detail": {},
  34. "currentTarget": {
  35. "dataset": {
  36. "eventid": "72e81d87-2"
  37. },
  38. "id": "",
  39. "offsetTop": 92,
  40. "offsetLeft": 0
  41. }
  42. }

地图上下文

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

获取当前地图中心的经纬度, 使用方式如下:

  1. <template>
  2. <view>
  3. <button @click="getCenterLocation">getCenterLocation</button>
  4. <view>
  5. <map style="width: 100%; height: 300px;"
  6. id="map"
  7. :latitude="25"
  8. :longitude="102"
  9. :markers="covers"
  10. ></map>
  11. </view>
  12. </view>
  13. </template>
  14. <script>
  15. export default {
  16. data() {
  17. return {
  18. map: null
  19. }
  20. },
  21. mounted () {
  22. this.map = uni.createMapContext('map',this)
  23. },
  24. methods: {
  25. getCenterLocation () {
  26. this.map.getCenterLocation({
  27. success: (res) => {
  28. console.log(JSON.stringify(res));
  29. }
  30. })
  31. }
  32. }
  33. }
  34. </script>

返回格式如下:

  1. {"latitude":25.041660769305633,"longitude":102.70562234652215,"errMsg":"getMapCenterLocation:ok"}

getRegion

  1. this.map.getRegion({
  2. success: (res) => {
  3. console.log(JSON.stringify(res));
  4. }
  5. })

返回格式如下:

  1. {"northeast":{"latitude":25.045561,"longitude":102.711284},"southwest":{"latitude":25.037752,"longitude":102.69997},"errMsg":"getMapRegion:ok"}

getScale

  1. getScale () {
  2. this.map.getScale({
  3. success: (res) => {
  4. console.log(JSON.stringify(res));
  5. }
  6. })
  7. }

返回格式如下:

  1. {"scale":16,"errMsg":"getMapScale:ok"}

:::info 如果想在App端实现更多地图功能,可通过$getAppMap()获取原生地图对象plus.maps.Map :::

plus.maps.Map

参考资料