map

地图。

属性 类型 默认值 必填 说明 最低版本
type String tmap 地图类型  
subkey String 地图使用的key,可前往各地图厂商开发者网站申请  
view-mode String 3D 地图模式 3D/2D  
longitude Number 中心经度  
latitude Number 中心纬度  
scale Number 16 缩放级别,取值范围为3-20  
min-scale Number 3 最小缩放级别  
max-scale Number 20 最大缩放级别  
markers Array 标记点  
polyline Array 路线  
circles Array  
polygons Array 多边形  
include-points Array 缩放视野以包含所有给定的坐标点  
show-location Boolean false 显示带有方向的当前定位点  
layer-style String 个性化地图配置的 style
rotate Number 0 旋转角度,范围 0 ~ 360, 地图正北和设备 y 轴角度的夹角  
skew Number 0 倾斜角度,范围 0 ~ 40 , 关于 z 轴的倾角  
enable-3D Boolean false 展示3D楼块(工具暂不支持)  
show-compass Boolean false 显示指南针  
show-scale Boolean false 显示比例尺,工具暂不支持  
enable-overlooking Boolean false 开启俯视  
enable-zoom Boolean true 是否支持缩放  
enable-scroll Boolean true 是否支持拖动  
enable-rotate Boolean false 是否支持旋转  
enable-satellite Boolean false 是否开启卫星图  
enable-traffic Boolean false 是否开启实时路况  
enable-poi Boolean true 是否展示 POI 点  
enable-building Boolean 是否展示建筑物  
setting Object 配置项  
subSetting Object 扩展配置项,具体设置查看各类型地图 JS API 文档  
bindtap EventHandle 点击地图时触发, 起返回经纬度信息  
bindmarkertap EventHandle 点击标记点时触发,e.detail = {markerId}  
bindlabeltap EventHandle 点击label时触发,e.detail = {markerId}  
bindcontroltap EventHandle 点击控件时触发,e.detail = {controlId}  
bindcallouttap EventHandle 点击标记点对应的气泡时触发e.detail = {markerId}  
bindupdated EventHandle 在地图渲染更新完成时触发  
bindregionchange EventHandle 视野发生变化时触发,  
bindpoitap EventHandle 点击地图poi点时触发,e.detail = {name, longitude, latitude}  
bindanchorpointtap EventHandle 点击定位标时触发,e.detail = {longitude, latitude}  
marker

支持的地图类型

坐标系 说明 最低版本
tmap GCJ-02 腾讯地图 如何申请key Javascript API GL 1.0  
bmap BD09 百度地图 如何申请key JavaScript API GL v1.0  
amap GCJ-02 高德地图 如何申请key JS API v2.0  
marker

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

属性 类型 默认值 必填 说明 最低版本
id 标记点 id Number marker 点击事件回调会返回此 id。建议为每个 marker 设置上 number 类型 id,保证更新 marker 时有更好的性能。
clusterId 聚合簇的 id Number 自定义点聚合簇效果时使用
joinCluster 是否参与点聚合 Boolean 默认不参与点聚合
latitude 纬度 Number 浮点数,范围 -90 ~ 90
longitude 经度 Number 浮点数,范围 -180 ~ 180
title 标注点名 String 点击时显示,callout存在时将被忽略
zIndex 显示层级 Number  
iconPath 显示的图标 String 项目目录下的图片路径,支持网络路径、本地路径、代码包路径( )
rotate 旋转角度 Number 顺时针旋转的角度,范围 0 ~ 360,默认为 0
alpha 标注的透明度 Number 默认 1,无透明,范围 0 ~ 1
width 标注图标宽度 Number/String 默认为图片实际宽度
height 标注图标高度 Number/String 默认为图片实际高度
anchor 经纬度在标注图标的锚点,默认底边中点 Object {x, y},x 表示横向(0-1),y 表示竖向(0-1)。{x: .5, y: 1} 表示底边中点  
callout 标记点上方的气泡窗口 Object 支持的属性见下表,可识别换行符。  
customCallout 自定义气泡窗口 Object 支持的属性见下表
label 为标记点旁边增加标签 Object 支持的属性见下表,可识别换行符。  

marker 上的气泡 callout

属性 类型 说明 最低版本
content String 文本  
Color String 文本颜色  
fontSize Number 文字大小  
borderRadius Number 边框圆角  
borderWidth Number 边框宽度  
borderColor String 边框颜色  
bgColor String 背景色  
padding Number 文本边缘留白  
display String 'BYCLICK':点击显示; 'ALWAYS':常显  
textAlign String 文本对齐方式。有效值: left, right, center  
anchorX Number 横向偏移量,向右为正数  
anchorY Number 纵向偏移量,向下为正数  

marker 上的自定义气泡 customCallout customCallout存在时将忽略callouttitle属性。自定义气泡采用采用cover-view定制,灵活度更高。

属性 类型 说明 最低版本
display String 'BYCLICK':点击显示; 'ALWAYS':常显  
anchorX Number 横向偏移量,向右为正数  
anchorY Number 纵向偏移量,向下为正数  

使用方式如下,map 组件下添加名为 callout 的 slot 节点,其内部的 cover-view 通过 marker-id 属性与 marker 绑定。当 marker 创建时,该 cover-view 显示的内容将作为 callout 显示在标记点上方。

<map>
  <cover-view slot="callout">
    <cover-view marker-id="1"></cover-view>
    <cover-view marker-id="2"></cover-view>
  </cover-view>
</map>

marker 上的气泡 label

属性 类型 说明 最低版本
content String 文本  
Color String 文本颜色  
fontSize Number 文字大小  
x Number label的坐标(废弃)  
y Number label的坐标(废弃)  
anchorX Number label的坐标,原点是 marker 对应的经纬度  
anchorY Number label的坐标,原点是 marker 对应的经纬度  
borderWidth Number 边框宽度  
borderColor String 边框颜色  
borderRadius Number 边框圆角  
bgColor String 背景色  
padding Number 文本边缘留白  
textAlign String 文本对齐方式。有效值: left, right, center  

polyline

指定一系列坐标点,从数组第一项连线至最后一项。绘制彩虹线时,需指定不同分段的颜色,如 points 包含 5 个点,则 colorList 应传入 4 个颜色值;若 colorList 长度小于 points.length - 1,则剩下的分段颜色与最后一项保持一致。

属性 类型 默认值 必填 说明 最低版本
points Array [] 经纬度数组 [{latitude: 0, longitude: 0}]  
color String 线的颜色  
colorList Array 彩虹线 存在时忽略 color 值  
width Number 线的宽度
dottedLine Boolean false 是否虚线
arrowLine Boolean false 带箭头的线  
borderColor String 线的边框颜色  
borderWidth Number 线的厚度  
zIndex Number 设置Z轴数值  
subSetting Object 扩展配置项  

circle

在地图上显示圆

属性 类型 默认值 必填 说明 最低版本
latitude Number 0 纬度,浮点数,范围 -90 ~ 90  
longitude Number 0 经度,浮点数,范围 -180 ~ 180  
radius Number 0 半径  
color String 描边的颜色  
fillColor String 填充颜色  
strokeWidth Number 描边的宽度
zIndex Number 设置Z轴数值  
subSetting Object 扩展配置项  

polygon

指定一系列坐标点,根据 points 坐标数据生成闭合多边形

属性 类型 默认值 必填 说明 最低版本
points Array [] 经纬度数组 [{latitude: 0, longitude: 0}]  
strokeWidth Number 描边的宽度  
strokeColor String 描边的颜色  
fillColor String 填充颜色
zIndex Number 设置Z轴数值  
subSetting Object 扩展配置项  

setting

提供 setting 对象统一设置地图配置。同时对于一些动画属性如rotateskew,通过setData分开设置时无法同时生效,需通过settting统一修改。

const setting = {
  skew: 0,
  rotate: 0,
  showLocation: false,
  showScale: false,
  subKey: '',
  layerStyle: 1,
  enableZoom: true,
  enableScroll: true,
  enableRotate: false,
  showCompass: false,
  enable3D: false,
  enableOverlooking: false,
  enableSatellite: false,
  enableTraffic: false,
}
this.setData({
  // 仅设置的属性会生效,其它的不受影响
  setting: {
    enable3D: true,
    enableTraffic: true
  }
})

regionchange 返回值

视野改变时,regionchange 会触发两次,返回的 type 值分别为 begin 和 end。

e = {causedBy, type, detail: {rotate, skew, scale, centerLocation, region}}

Tips:

  • 地图组件集成了各厂家地图的 JavaScript 版本,需要开发者自行申请对应的key,使用 subKey 设置
  • 根据设置的地图类型,请你使用对应地图的坐标系坐标
  • subSetting 可通过此属性添加未集成的控件属性,属性值参考各地图的 JS API文档

示例代码:

<!--pages/component/pages/map/map.mcml-->
<view style="width:100%;height:100%;overflwo:hidden;">
  <view bindtap="bindtestap" style="width:100%;height:50%;">
    <map 
      type=""
      viewMode=""
      latitude=""
      longitude=""
      scale=""
      min-scale=""
      max-scale=""
      skew=""
      rotate=""
      enable-3D=""
      show-compass=""
      show-scale=""
      enable-zoom=""
      enable-scroll=""
      enable-rotate=""
      enable-satellite=""
      enable-road=""
      enable-traffic=""
      enable-poi=""
      enable-building=""
      show-location=""
      enable-overlooking=""
      include-points=""

      markers=""
      polyline=""
      polygons=""
      circles=""

      bindtap="bindevent"
      bindlabeltap="bindevent"
      bindmarkertap="bindevent"
      bindcontroltap="bindevent"
      bindcallouttap="bindevent"
      bindupdated="bindevent"
      bindregionchange="bindevent"
      bindpoitap="bindevent"
      bindanchorpointtap="bindevent"
    >
      <cover-view slot="callout">
        <cover-view marker-id="1">我是customCallout</cover-view>
      </cover-view>
    </map>
  </view>
  <scroll-view scroll-y>
    <view class="container">
      <view class="statement">地图。</view>
      <view class="cssname">type: 修改后地图会重新初始化</view>
      <view>
        <radio-group bindchange="typeChanged">
          <radio checked value="tmap">腾讯</radio>
          <radio value="bmap">百度</radio>
          <radio value="amap">高德</radio>
        </radio-group>
      </view>
      <view class="cssname">viewMode: 修改后地图会重新初始化</view>
      <view>
        <radio-group bindchange="viewModeChanged">
          <radio checked value="3D">3D</radio>
          <radio value="2D">2D</radio>
        </radio-group>
      </view>

      <view class="cssname">scale</view>
      <slider min="" max="" bindchange="scaleChanged" show-value value="16">缩放级别</slider>

      <view class="cssname">min-scale, max-scale</view>
      <checkbox-group bindchange="limitScale">
        <checkbox name="scale" value="scale">限制缩放级别: 10-15</checkbox>
      </checkbox-group>

      <view class="cssname">rotate</view>
      <slider min="0" max="360" bindchange="rotateChanged" show-value value="0">旋转角度</slider>


      <view class="cssname">skew</view>
      <slider min="0" max="80" bindchange="skewChanged" show-value value="0">倾斜角度</slider>

      <view class="cssname">include-points</view>
      <button bindtap="includeTap">视野包含指定坐标点</button>

      <block mc:for="">
        <view class="cssname"></view>
        <view class="propClass">
          <view></view>
          <switch checked="" bindchange="propChanged" data-prop=""></switch>
        </view>
      </block>

      <block mc:for="">
        <view class="cssname">undefined:undefined, 参数event.detail</view>
        <text space="nbsp" user-select="true" class="scrollDetail">{{item.detail || ''}}</text>
      </block>
    </view>
  </scroll-view>
</view>
// pages/component/pages/map/map.js
var _properties = [
  {name: 'enable-3D', prop:'enable3D', desc: '展示3D楼块', checked: false},
  {name: 'show-compass', prop:'showCompass', desc: '显示指南针', checked: false},
  {name: 'show-scale', prop:'showScale', desc: '显示比例尺', checked: false},
  {name: 'show-location', prop:'showLocation', desc: '显示带有方向的当前定位点', checked: false},
  {name: 'enable-overlooking', prop:'enableOverlooking', desc: '开启俯视', checked: false},
  {name: 'enable-zoom', prop:'enableZoom', desc: '是否支持缩放', checked: true},
  {name: 'enable-scroll', prop:'enableScroll', desc: '是否支持拖动', checked: true},
  {name: 'enable-rotate', prop:'enableRotate', desc: '是否支持旋转', checked: false},
  {name: 'enable-satellite', prop:'enableSatellite', desc: '是否开启卫星图', checked: false},
  {name: 'enable-traffic', prop:'enableTraffic', desc: '是否开启实时路况', checked: false},
  {name: 'enable-poi', prop:'enablePoi', desc: '是否展示 POI 点', checked: true},
  {name: 'enable-building', prop:'enableBuilding', desc: '是否展示建筑物', checked: true}
];
var _data = {};
_properties.forEach(function (_prop) {
  _data[_prop.prop] = _prop.checked

})
Page({
  data: Object.assign({
    includePoints: [
    ],
    latitude:39.90923,
    longitude:116.397428,
    type: 'tmap',
    scale: 13,
    minScale: 3,
    maxScale: 20,
    skew: 0,
    markers:[
      {
        clusterId: 'c0',
        latitude:39.910,
        longitude: 116.404,
        zIndex: 10,
        rotate: 0,
        alpha: 0.8,
        title: '我是title',
        label:{
          content: '我是label1',
          borderColor:'#ff0000',
          borderWidth: '1',
          anchorX: 10
        }
      },
      {
        clusterId: 'c1',
        latitude:39.915,
        longitude: 116.395,
        width:30,
        height:30,
        zIndex: 1,
        rotate: 90,
        alpha: 1,
        anchor: {x: 0.5, y: 0.5},
        iconPath: '/assets/images/car.png',
        callout: { content:'我是callout', color: '#00ff00'},
        subsetting: {
          faceTo: 'map'
        }
      },
      {
        id: 1,
        clusterId: 'c1',
        latitude:39.918,
        longitude: 116.394,
        zIndex: 0,
        alpha: 1,
        customCallout: {}
      }
    ],
    polyline:[
      {
        points: [
          { latitude:39.915, longitude: 116.395}, 
          { latitude:39.915, longitude: 116.405}, 
          { latitude:39.900, longitude: 116.425}, 
          { latitude:39.900, longitude: 116.415}
        ],
        colorList: ['#0000ff', '#00ff00', '#ff0000'],
        width: 6,
        color: '#0000ff',
        arrowLine: true,
        arrowIconPath: '/assets/images/car.png',
        dottedLine: false
      },
      {
        points: [
          { latitude:39.920, longitude: 116.387}, 
          { latitude:39.918, longitude: 116.394}
        ],
        width: 3,
        color: '#0000ff',
        dottedLine: true
      }
    ],
    polygons:[
      {
        points: [
          { latitude:39.920, longitude: 116.387}, 
          { latitude:39.923, longitude: 116.385}, 
          { latitude:39.937, longitude: 116.394}, 
          { latitude:39.931, longitude: 116.401}
        ],
        strokeWidth: 2,
        strokeColor: '#0000ff',
        fillColor: '#ff000070'
      }
    ],
    circles: [
      {
        latitude:39.900, longitude: 116.425,
        radius: 1000,
        color: '#0000ff',
        strokeWidth: 2,
        fillColor: '#ff000070'
      }
    ],
    properties:_properties,
    events:[
      {"name" : "bindtap", "desc" : "点击地图时触发"},
      {"name" : "bindmarkertap", "desc" : "点击标记点时触发"},
      {"name" : "bindlabeltap", "desc" : "点击label时触发"},
      {"name" : "bindcallouttap", "desc" : "点击标记点对应的气泡时触发"},
      {"name" : "bindupdated", "desc" : "在地图渲染更新完成时触发"},
      {"name" : "bindregionchange", "desc" : "视野发生变化时触发"},
      {"name" : "bindpoitap", "desc" : "点击地图poi点时触发"},
      {"name" : "bindanchorpointtap", "desc" : "点击定位标时触发"}
    ]
  }, _data),
  includeTap: function () {
    this.setData({
      includePoints: [
        { latitude:39.920, longitude: 116.387}, 
        { latitude:39.923, longitude: 116.385}, 
        { latitude:39.937, longitude: 116.394}, 
        { latitude:39.931, longitude: 116.401},
        { latitude:39.915, longitude: 116.395}, 
        { latitude:39.915, longitude: 116.405}, 
        { latitude:39.900, longitude: 116.425}, 
        { latitude:39.900, longitude: 116.415}
      ]
    })
  },
  viewModeChanged: function (e) {
    this.setData({
      viewMode: e.detail.value
    })
  },
  typeChanged: function (e) {
    this.setData({
      type: e.detail.value
    })
  },
  limitScale: function (e) {
    if(e.detail.value.length > 0){
      this.setData({
        minScale: 10,
        maxScale: 15
      })
    }
    else{
      this.setData({
        minScale: 3,
        maxScale: 20
      })
    }
  },
  scaleChanged: function(e){
    this.setData({
      scale: e.detail.value
    })
  },
  skewChanged: function(e){
    this.setData({
      skew: e.detail.value
    })
  },
  rotateChanged: function (e) {
    this.setData({
      rotate: e.detail.value
    })
  },
  propChanged: function(e){
    var data = {};
    data[e.currentTarget.dataset.prop] = e.detail.value;
    this.setData(data);
  },
  bindevent: function(e){
    var eventName = 'bind' + (['begin', 'end'].indexOf(e.type) > -1 ? 'regionchange' : e.type);
    var index = 0;
    for(var i = 0; i < this.data.events.length; i++){
      if(this.data.events[i].name == eventName){
        index = i;
        break;
      }
    }
    var eventIndex = 'events[' + index + '].detail';
    this.setData({
      [eventIndex] : JSON.stringify(e, null, 2)
    })
    console.log(e);
  }
})

results matching ""

    No results matching ""

    results matching ""

      No results matching ""