Skip to content

地图

地图组件,能够实现基础地图效果。

基础示例

vue
<template>
  <tlbs-map
    ref="mapRef"
    api-key="OB4BZ-D4W3U-B7VVO-4PJWW-6TKDJ-WPB77"
    :center="center"
    :zoom="17"
    :control="control"
    :options="options"
    @click="onClick"
    @map_inited="onMapInited"
  >
    <div class="control-container">
      <button @click.stop="changeCenter({ lat: 40.040417, lng: 116.273514 })">
        北京腾讯总部
      </button>
      <button @click.stop="changeCenter({ lat: 40.008352, lng: 116.389672 })">
        北京亚洲金融大厦
      </button>
      <button @click.stop="getMapInstance">
        打印地图实例
      </button>
    </div>
  </tlbs-map>
</template>

<script lang="ts">
import { defineComponent, ref } from 'vue-demi';

export default defineComponent({
  name: 'MapDemo',
  setup() {
    const mapRef = ref(null);
    const center = ref({ lat: 39.91799, lng: 116.397027 });
    const changeCenter = (latLng: { lat: number; lng: number }) => {
      center.value = latLng;
    };
    const onClick = (e: Event) => {
      console.log(e);
    };

    const onMapInited = () => {
      // 地图加载完成后,可以获取地图实例,调用地图实例方法
      console.log(mapRef.value.map);
    };

    const getMapInstance = () => {
      // 可以获取地图实例,调用地图实例方法
      console.log(mapRef.value.map);
    };

    return {
      center,
      onClick,
      onMapInited,
      getMapInstance,
      control: {
        scale: {},
        zoom: {
          position: 'topRight',
        },
      },
      changeCenter,
      mapRef,
      options: {
        renderOptions: {
          renderOptions: true,
        },
      },
    };
  },
});
</script>

<style scoped>
.control-container {
  position: absolute;
  top: 0;
  left: 0;
  z-index: 1001;
  display: flex;
  align-items: center;
}
button {
  padding: 4px;
  background-color: #fff;
  margin-right: 5px;
  border: 1px solid #ddd;
}
</style>

props

名称类型说明
apiKeyString腾讯位置服务开发Key。
librariesString附加库,多个附件库用逗号隔开,默认visualization,geometry,vector,tools。
center{ lat:number; lng:number }地图中心点经纬度。
zoomNumber地图缩放级别,支持3~20。
minZoomNumber地图最小缩放级别,默认为3。
maxZoomNumber地图最大缩放级别,默认为20。
controlObject地图控件的配置,TS类型:Control,
optionsTMap.MapOptions除了上述属性的其他配置参数,参考下面TMap.MapOptions类型

Control类型

ts
interface Control {
  scale: { position: string; className: string } | boolean;
  zoom: { position: string; className: string,  numVisible: boolean} | boolean;
  rotation: { position: string; className: string } | boolean;
}

TMap.MapOptions类型

属性名称类型说明
rotationNumber地图在水平面上的旋转角度,顺时针方向为正,默认为0。
pitchNumber地图俯仰角度,取值范围为0~80,默认为0。
scaleNumber地图显示比例,默认为1。
offsetObject地图中心与容器的偏移量,Object的格式为 {x:Number, y:Number}(右方下方为正,单位为像素);中心点偏移功能不支持与MVTLayer共同使用
cursorString地图鼠标样式,需要符合css cursor属性规范,默认为'default'
draggableBoolean是否支持拖拽移动地图,默认为true。
scrollableBoolean是否支持鼠标滚轮缩放地图,默认为true。
touchZoomableBoolean是否允许手势捏合缩放;默认为true。
pitchableBoolean是否允许设置俯仰角度;默认为true。在2D视图下,此属性无效。
rotatableBoolean是否允许设置旋转角度;默认为true。在2D视图下,此属性无效。
doubleClickZoomBoolean是否支持双击缩放地图,默认为true。
mapZoomTypeMAP_ZOOM_TYPE地图缩放焦点控制。
boundaryLatLngBounds地图边界,设置后拖拽、缩放等操作无法将地图移动至边界外,默认为null。
mapStyleIdString地图样式ID,有效值为”style[编号]”,与key绑定,详见 个性化地图配置页面
baseMapBaseMap I BaseMap[]地图底图,BaseMap目前只支持矢量底图 (VectorBaseMap) 、卫星底图 (SatelliteBaseMap) 、路况底图 (TrafficBaseMap) ,可以使用数组形式实现多种底图叠加。默认为 VectorBaseMap ,如果传入null地图不显示任何地物。
viewModeString地图视图模式,支持2D和3D,默认为3D。2D模式下不可对地图进行拖拽旋转,pitch和rotation始终保持为0。
showControlBoolean是否显示地图上的控件,默认true。
renderOptionsMapRenderOptions地图渲染配置参数
clipClipOptionsclip区域掩膜配置参数

事件

名称参数说明
map_inited-地图实例初始化事件,可以在回调中获取地图实例,参考上面示例代码使用。
idlenone地图进入空闲状态时触发。
tilesloadednone当地图容器中可见的瓦片加载完后会触发此事件。
clickevt:MapEvent鼠标左键单击地图时触发,移动与桌面web都触发。
rightclickevt:MapEvent鼠标右键单击地图时触发,只在桌面浏览器触发。
dblclickevt:MapEvent鼠标左键双击地图时触发,移动与桌面web都触发。
mousedownevt:MapEvent鼠标在地图区域中按下时触发,只在桌面浏览器中触发。
mouseupevt:MapEvent鼠标在地图区域中按下又弹起时触发,只在桌面浏览器中触发。
mousemoveevt:MapEvent鼠标在地图上移动时触发,只在桌面浏览器中触发。
touchstartevt:MapEvent在地图区域触摸开始时触发,只在移动浏览器中触发。
touchmoveevt:MapEvent在地图区域触摸移动时触发,只在移动浏览器中触发。
touchendevt:MapEvent在地图区域触摸结束时触发,只在移动浏览器中触发。
dragstartnone地图开始发生拖拽交互时触发。
dragnone地图发生拖拽交互时触发,拖拽交互可能产生pan,rotate, picth事件。
dragendnone地图拖拽交互结束时触发。
panstartnone地图开始平移时触发。
pannone地图移动时触发。
panendnone地图平移结束时触发。
rotatestartnone地图开始旋转时触发。
rotatenone地图旋转时触发。
rotateendnone地图旋转结束时触发。
pitchstartnone地图开始发生俯仰角变化时触发。
pitchnone地图俯仰角变化时触发。
pitchendnone地图俯仰角变化结束时触发。
zoomnone地图缩放时触发。
resizenone地图容器大小发生变化时触发。
center_changednone当地图中心点变化时会触发此事件。
bounds_changednone当可视区域范围更改时会触发此事件。
scale_changednone地图显示比例变化时触发此事件。
control_addednone给map添加控件的时候触发此事件。
control_removednone从map移出控件的时候触发此事件。
animation_playingAnimationEvent动画进行中
animation_loopedNumber动画进入下一循环,返回循环序号
animation_endednone动画结束
animation_stoppednone动画停止
context_lost地图渲染上下文丢失时触发此事件;地图渲染依赖浏览器硬件加速(GPU),浏览器对硬件加速的使用存在限制,当整个浏览器使用硬件加速的元素过多时,未防止整个GPU崩溃导致设备黑屏,浏览器会自动会将之前元素使用的硬件资源回收,导致该元素无法继续渲染(浏览器丢车保帅的策略);当触发此事件时,需要检查业务代码是否使用了过多的硬件加速资源(如创建太多WebGLRenderingContextWebGL2RenderingContextGPUCanvasContext
destroyed地图被完全销毁时触发此事件

组件实例属性

名称类型说明
mapTMap.Map地图实例。实例方法参考TMap.Map方法

地图实例TMap.Map方法

方法返回值说明
setCenter(center:LatLng)this设置地图中心点。
setZoom(zoom:Number)this设置地图缩放级别。
setRotation(rotation:Number)this设置地图水平面上的旋转角度。
setPitch(pitch:Number)this设置地图俯仰角。
setScale(scale:Number)this设置地图显示比例。
setOffset(offset: Object)this设置地图与容器偏移量,Object的格式为{x:Number, y:Number},x方向向右偏移为正值,y方向向下偏移为正值;中心点偏移功能不支持与MVTLayer共同使用
setCursorStyle(style:String)this设置地图鼠标样式,需要符合css cursor规范
setDraggable(draggable:Boolean)this设置地图是否支持拖拽。
setScrollable(scrollable:Boolean)this设置地图是否支持滚轮缩放。
setMaxZoom(maxZoom:Number)this设置地图最大缩放级别,支持3~20。
setMinZoom(minZoom:Number)this设置地图最小缩放级别,支持3~20。
setPitchable(pitchable:Boolean)this设置地图是否支持改变俯仰角度。在2D视图下,此方法无效。
setRotatable(rotatable:Boolean)this设置地图是否支持改变旋转角度。在2D视图下,此方法无效。
setTouchZoomable(touchZoomable:Boolean)this设置地图是否支持手势缩放。
setDoubleClickZoom(doubleClickZoom: Boolean)this设置地图是否支持双击缩放。
setBoundary(boundary:LatLngBounds)this设置地图限制边界,拖拽、缩放等操作无法将地图移动至边界外。
setSkyOptions(options: SkyOptions )this设置地图天空背景
setViewMode(viewMode: String)this设置地图视图模式。
setBaseMap(baseMap:BaseMap I BaseMap[])this动态设置地图底图,BaseMap目前支持矢量底图(VectorBaseMap)、卫星底图(SatelliteBaseMap)、路况底图(TrafficBaseMap),可以使用数组形式实现多种底图叠加。
setMapStyleId(mapStyleId: String)this动态设置个性化地图样式。
panTo(latLng:LatLng, opts:EaseOptions)this将地图中心平滑移动到指定的经纬度坐标。
zoomTo(zoom:Number, opts:EaseOptions)this平滑缩放到指定级别。
rotateTo(rotation:Number, opts:EaseOptionsthis平滑旋转到指定角度。
pitchTo(pitch:Number, opts:EaseOptions)this平滑变化到指定俯仰角度。
easeTo(mapStatus:Object, opts:EaseOptions)this平滑过渡到指定状态,mapStatus为key-value格式,可以设定center、zoom、rotation、pitch。
fitBounds(bounds:LatLngBounds,options:FitBoundsOptions)this根据指定的地理范围调整地图视野。
getCenter()LatLng获取地图中心。
getZoom()Number获取地图缩放级别。
getRotation()Number获取地图水平面上的旋转角度。
getPitch()Number获取地图俯仰角度。
getBounds()LatLngBounds返回当前地图的视野范围,该视野范围实际会大于等于地图的可视区域范围,尤其是当地图发生旋转和俯仰变化时,得到的是一个当前视野范围的最小外包矩形。
getScale()Number获取地图显示比例。
getOffset()Object获取地图与容器的偏移量Object的格式为 {x:Number, y:Number},x方向向右偏移为正值,y方向向下偏移为正值。
getCursorStyle()String获取地图鼠标样式
getDraggable()Boolean获取地图是否支持拖拽。
getScrollable()Boolean获取地图是否支持滚轮缩放。
getTouchZoomable()Boolean获取地图是否支持手势缩放。
getDoubleClickZoom()Boolean获取地图是否支持双击缩放。
getBoundary()LatLngBounds获取地图限制边界。
addControl(control:Control)this添加控件到地图,传入控件对象。
removeControl(id: String)this从地图容器移出控件,默认控件的id列表参考 DEFAULT_CONTROL_ID
getControl(id: String)Control根据控件id获取对应的控件对象,默认控件的id列表参考 DEFAULT_CONTROL_ID
getViewMode()String获取地图视图模式。
getBaseMap()BaseMap I BaseMap[]获取当前的底图类型。
getIndoorManager()IndoorManager获取室内地图管理器。
destroy()销毁地图。
projectToContainer(latLng: LatLng)Point经纬度坐标转换为容器像素坐标,容器像素坐标系以地图容器左上角点为原点。
unprojectFromContainer(pixel: Point)LatLng容器像素坐标转换为经纬度坐标。
on(eventName:String, listener:Function)this添加listener到eventName事件的监听器数组中。
off(eventName:String, listener:Function)this从eventName事件的监听器数组中移除指定的listener。
once(eventName:String, listener:Function)this添加listener到eventName事件的监听器数组中,一次性监听,listener执行一次后自动移除监听器
moveLayer(layerId: String, level: LAYER_LEVEL)this修改图层层级顺序,根据输入 LAYER_LEVEL 常量调整 layerId 对应图层的渲染层级 ,其中layerId可以通过图层getId方法获取。注: 设置ZIndex 可调整同一大类层级下的不同图层顺序,此方法则是调整目标图层的大类层级。
startAnimation(keyFrames: MapKeyFrame[], opts: AnimationOptions)none开始动画,通过keyFrames定义关键帧 ,查看示例
stopAnimation()none停止动画,停止后无法通过resumeAnimation恢复
pauseAnimation()none暂停动画
resumeAnimation()none恢复动画
enableAreaHighlight(opts: highlightOptions)this启用地图区域高亮功能, 查看示例
disableAreaHighlight()this禁用地图区域高亮功能
enableAreaClip(opts: ClipOptions)this启用地图区域掩膜功能
disableAreaClip()this停用地图区域掩膜功能