Map

地图组件相关API:my.createMapContext(mapId)扫码体验:

img.jpg

属性名类型默认值描述最低版本
styleString内联样式
classString样式名
longitudeNumber中心经度
latitudeNumber中心纬度
scaleNumber16缩放级别,范围为5 ~ 18
markersArray标记点
polylineArray路线
circlesArray
controlsArray控件
polygonArray多边形
include-pointsArray缩放视野以包含所有给定的坐标点
show-locationBoolean是否显示带有方向的当前定位点
include-paddingObject视野在地图padding范围内展示, 如{left:0, right:0, top:0, bottom:0}1.11.0
ground-overlaysArray【覆盖物】自定义贴图,如[{ 'include-points':[{ latitude: 39.935029, longitude: 116.384377, },{ latitude: 39.939577, longitude: 116.388331, }], image:'/image/overlay.png', alpha:0.25, zIndex:1 }]1.11.0
tile-overlayObject【覆盖物】网格贴图,如{ url:'http://xxx', type:0, tileWidth:256, tileHeight:256, zIndex:1, }1.11.0
settingObject设置,如{gestureEnable:1,showScale:1,showCompass:1,tiltGesturesEnabled:1,trafficEnabled:0,showMapText:0, logoPosition:{centerX:150, centerY:90}}1.13.0
onMarkerTapEventHandle点击标记点时触发,event = {latitude, longitude, markerId}。返回值latitude, longitude1.10.0开始支持。
onCalloutTapEventHandle点击标记点对应的气泡时触发,event = {latitude,longitude, markerId}。返回值latitude, longitude1.10.0开始支持。
onControlTapEventHandle点击控件时触发
onRegionChangeEventHandle视野发生变化时触发,event = {type: "begin" / "end", latitude,longitude, scale}。
onTapEventHandle点击地图时触发,event = {latitude, longitude}。返回值latitude, longitude1.10.0开始支持。

markers

标记点,用于在地图上显示标记的位置。


属性名

说明

类型

必填

备注



id

标记点id

Number



标记点 id,点击事件回调会返回此 id



latitude

纬度

Float



范围 -90 ~ 90



longitude

经度

Float



范围 -180 ~ 180



title

标注点名

String







iconPath

显示的图标

String



项目目录下的图片路径,可以用相对路径写法,以'/'开头则表示相对小程序根目录, 图片



rotate

旋转角度

Number



顺时针旋转的角度,范围 0 ~ 360,默认为 0



alpha

标注的透明度

Number



是否透明,默认为 1



width

标注图标宽度

Number



默认为图片的实际宽度



height

标注图标高度

Number



默认为图片的实际高度



callout

自定义标记点上方的气泡窗口

Object



{content}



anchorX

经纬度在标注图标的锚点-横向值

Double



这两个值需要成对出现,anchorX表示横向(0-1),y表示竖向(0-1),

anchorX:0.5,

anchorY:1

表示底边中点



anchorY

经纬度在标注图标的锚点-竖向值

Double





customCallout

callout背景自定义

目前只支持高德地图style

Object



{content}



iconAppendStr

marker图片可以来源于View

String



和iconPath一起使用,会将iconPath对应的图片及该字符串共同生成一个图片,当成marker的图标



iconAppendStrColor

marker图片可以来源于View,底部描述文本颜色

String



默认是:#33B276



fixedPoint

基于屏幕位置扎点

Object



基于屏幕位置扎点



markerLevel

覆盖物的 Z 轴坐标

Number



与地图上其他覆盖物统一的Z坐标系

1.13.0

style

自定义marker样式

Object



自定义marker的样式和内容

1.14.0

label

marker上的气泡

Object



marker上的气泡,地图上可同时展示多个,绑定onMarkerTap

1.14.0

polygon

用于构造多边形对象

属性名说明类型必填备注
points经纬度数组Array[{latitude: 0, longitude: 0}]
color线的颜色String用 8 位十六进制表示,后两位表示 alpha 值,如:#eeeeeeAA
fillColor填充色String用 8 位十六进制表示,后两位表示 alpha 值,如:#eeeeeeAA
width线的宽度Number

polyline

用于指定一系列坐标点,从数组第一项连线至最后一项

属性名说明类型必填备注最低版本
points经纬度数组Array[{latitude: 0, longitude: 0}]
color线的颜色String用 8 位十六进制表示,后两位表示 alpha 值,如:#eeeeeeAA
width线的宽度Number
dottedLine是否虚线Boolean默认 false
iconPath线的纹理地址String项目目录下的图片路径,可以用相对路径写法,以'/'开头则表示相对小程序根目录1.14.0
iconWidth使用纹理时的宽度Number1.14.0
zIndex覆盖物的 Z 轴坐标Number1.14.0
colorList彩虹线,分段依据points。例如points有5个点,那么colorList就应该传4个颜色值,依此类推。如果colorList数量小于4,那么剩下的线路颜色和最后一个颜色一样Array1.14.0

circles

用于在地图上显示圆

属性名说明类型必填备注
latitude纬度Float范围 -90 ~ 90
longitude经度Float范围 -180 ~ 180
color描边的颜色String用 8 位十六进制表示,后两位表示 alpha 值,如:#eeeeeeAA
fillColor填充颜色String用 8 位十六进制表示,后两位表示 alpha 值,如:#eeeeeeAA
radius半径Number
strokeWidth描边的宽度Number

controls

用于在地图上显示控件,控件不随着地图移动

属性名说明类型必填备注
id控件idNumber控件 id,点击事件回调会返回此 id
position控件在地图的位置Object相对地图位置
iconPath显示的图标String项目目录下的图片路径,可以用相对路径写法,以'/'开头则表示相对小程序根目录
clickable是否可点击Boolean默认为false

position

属性名说明类型必填备注
left距离地图的左边界多远Number默认为0
top距离地图的上边界多远Number默认为0
width控件宽度Number默认为图片宽度
height控件高度Number默认为图片高度

callout

属性名说明类型必填备注
content内容String默认为空(null)

customCallout

属性名说明类型必填备注
type样式类型Number0为黑色style,1为白色style,2为背景+文本,见下图
time时间Number时间值
descList描述数组Array描述数组,[{desc: '内容', descColor: #33B276}]

地图 - Map - 图2

fixedPoint

属性名说明类型必填备注
originX横向像素点Number距离地图左上角的像素数值,从0开始
originY纵向像素点Number距离地图左上角的像素数值,从0开始

地图组件的经纬度是必填的, 如果不填经纬度默认是北京的经纬度。

Screenshot

image

示例代码

  1. <view>
  2. <map id="map" longitude="120.131441" latitude="30.279383" scale="{{scale}}" controls="{{controls}}"
  3. onControlTap="controltap" markers="{{markers}}"
  4. onMarkerTap="markertap"
  5. polyline="{{polyline}}" circles="{{circles}}"
  6. onRegionChange="regionchange"
  7. onTap="tap"
  8. show-location style="width: 100%; height: 300px;"
  9. include-points="{{includePoints}}"></map>
  10. <button onTap="changeScale">改scale</button>
  11. <button onTap="getCenterLocation">getCenterLocation</button>
  12. <button onTap="moveToLocation">moveToLocation</button>
  13. <button onTap="changeCenter">改center</button>
  14. <button onTap="changeMarkers">改markers</button>
  15. </view>
  1. Page({
  2. data: {
  3. scale: 14,
  4. longitude: 120.131441,
  5. latitude: 30.279383,
  6. markers: [{
  7. iconPath: "/image/green_tri.png",
  8. id: 10,
  9. latitude: 30.279383,
  10. longitude: 120.131441,
  11. width: 50,
  12. height: 50
  13. },{
  14. iconPath: "/image/green_tri.png",
  15. id: 10,
  16. latitude: 30.279383,
  17. longitude: 120.131441,
  18. width: 50,
  19. height: 50,
  20. customCallout: {
  21. type: 1,
  22. time: '1',
  23. },
  24. fixedPoint:{
  25. originX: 400,
  26. originY: 400,
  27. },
  28. iconAppendStr: '黄龙时代广场黄龙时代广场黄龙时代广场黄龙时代广场test'
  29. }],
  30. includePoints: [{
  31. latitude: 30.279383,
  32. longitude: 120.131441,
  33. }],
  34. polyline: [{
  35. points: [{
  36. longitude: 120.131441,
  37. latitude: 30.279383
  38. }, {
  39. longitude: 120.128821,
  40. latitude: 30.278200
  41. }, {
  42. longitude: 120.131618,
  43. latitude: 30.277600
  44. }, {
  45. longitude: 120.132520,
  46. latitude: 30.279393
  47. }, {
  48. longitude: 120.137517,
  49. latitude: 30.279383
  50. }],
  51. color: "#FF0000DD",
  52. width: 5,
  53. dottedLine: false
  54. }],
  55. circles: [{
  56. latitude: 30.279383,
  57. longitude: 120.131441,
  58. color: "#000000AA",
  59. fillColor: "#000000AA",
  60. radius: 80,
  61. strokeWidth: 5,
  62. }],
  63. controls: [{
  64. id: 5,
  65. iconPath: '../../resources/pic/2.jpg',
  66. position: {
  67. left: 0,
  68. top: 300 - 50,
  69. width: 50,
  70. height: 50
  71. },
  72. clickable: true
  73. }]
  74. },
  75. onReady(e) {
  76. // 使用 my.createMapContext 获取 map 上下文
  77. this.mapCtx = my.createMapContext('map')
  78. },
  79. getCenterLocation() {
  80. this.mapCtx.getCenterLocation({
  81. success: res => {
  82. my.alert({
  83. content: 'longitude:' + res.longitude + '\nlatitude:' + res.latitude,
  84. });
  85. console.log(res.longitude);
  86. console.log(res.latitude);
  87. }
  88. });
  89. },
  90. moveToLocation() {
  91. this.mapCtx.moveToLocation()
  92. },
  93. regionchange(e) {
  94. console.log('regionchange', e);
  95. // 注意:如果缩小或者放大了地图比例尺以后,请在 onRegionChange 函数中重新设置 data 的
  96. // scale 值,否则会出现拖动地图区域后,重新加载导致地图比例尺又变回缩放前的大小。
  97. if (e.type === 'end') {
  98. this.setData({
  99. scale: e.scale
  100. });
  101. }
  102. },
  103. markertap(e) {
  104. console.log('marker tap', e);
  105. },
  106. controltap(e) {
  107. console.log('control tap', e);
  108. },
  109. tap() {
  110. console.log('tap:');
  111. },
  112. changeScale() {
  113. this.setData({
  114. scale: 8,
  115. });
  116. },
  117. changeCenter() {
  118. this.setData({
  119. longitude: 113.324520,
  120. latitude: 23.199994,
  121. includePoints: [{
  122. latitude: 23.199994,
  123. longitude: 113.324520,
  124. }],
  125. });
  126. },
  127. //支持地图不接受手势事件, isGestureEnable为1 表示支持,为0表示不支持
  128. gestureEnable() {
  129. this.mapCtx.gestureEnable({isGestureEnable:1});
  130. },
  131. //地图是否显示比例尺, showsScale 为1表示显示,为0表示不显示
  132. showsScale() {
  133. this.mapCtx.showsScale({isShowsScale:1});
  134. },
  135. //地图是否显示指南针, showsCompass 为1表示显示,为0表示不显示
  136. showsCompass() {
  137. this.mapCtx.showsCompass({isShowsCompass:1});
  138. },
  139. changeMarkers() {
  140. this.setData({
  141. markers: [{
  142. iconPath: "/image/green_tri.png",
  143. id: 10,
  144. latitude: 21.21229,
  145. longitude: 113.324520,
  146. width: 50,
  147. height: 50
  148. }],
  149. includePoints: [{
  150. latitude: 21.21229,
  151. longitude: 113.324520,
  152. }],
  153. });
  154. },
  155. })

Tips

  • map 组件是由客户端创建的原生组件,它的层级是最高的。
  • 请勿在 scroll-view 中使用 map 组件。
  • css 动画对 map 组件无效。
  • 如果缩小或者放大了地图比例尺以后,请在 onRegionChange 函数中重新设置 datascale 值,否则会出现拖动地图区域后,重新加载导致地图比例尺又变回缩放前的大小,具体请参照上面的示例代码 regionchange 函数部分。

原文: https://docs.alipay.com/mini/component/map