Skip to content

文本标记

文本标记组件,表示地图上的多个文本标注,可以自定义每个文本标注的样式。

基础示例

vue
<template>
  <tlbs-map
    ref="mapRef"
    api-key="OB4BZ-D4W3U-B7VVO-4PJWW-6TKDJ-WPB77"
    :center="center"
    :zoom="zoom"
    :control="control"
    @click="onClick"
    @map_inited="onMapInited"
  >
    <tlbs-multi-label
      ref="labelRef"
      :geometries="geometries"
      :styles="styles"
      :options="options"
    />
    <div class="control-container">
      <button @click.stop="getLayerInstance">
        打印文本标记实例
      </button>
    </div>
  </tlbs-map>
</template>

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

export default defineComponent({
  name: 'LabelDemo',
  setup() {
    const mapRef = ref(null);
    const labelRef = ref(null);
    const center = ref({ lat: 39.91799, lng: 116.397027 });
    const zoom = ref(15);
    const onClick = (e: Event) => {
      console.log(e);
    };
    const onMapInited = () => {
      // 地图加载完成后,可以获取地图实例、文本标记实例,调用地图实例、文本标记实例方法
      console.log(mapRef.value.map);
      console.log(labelRef.value.label);
    };

    const getLayerInstance = () => {
      // 可以获取文本标记实例,调用文本标记实例方法
      console.log(labelRef.value.label);
    };
    return {
      center,
      zoom,
      onClick,
      control: {
        scale: {},
        zoom: {
          position: 'topRight',
        },
      },
      mapRef,
      labelRef,
      geometries: [
        { id: 'label_1', styleId: 'label', content: '1',  position: { lat: 39.91199, lng: 116.397027 } },
        { id: 'label_2', styleId: 'label', content: '2',  position: { lat: 39.91319, lng: 116.397027 } },
        { id: 'label_3', styleId: 'label', content: '3',  position: { lat: 39.91749, lng: 116.397027 } },
      ],
      styles: {
        label: {
          color: '#ff', // 颜色属性
          size: 14, // 文字大小属性
          offset: { x: 0, y: 0 }, // 文字偏移属性单位为像素
          angle: 0, // 文字旋转属性
          width: 20, // width 和 height 如果不填的话,背景是看不到的
          height: 20,
          backgroundColor: 'rgb(255, 99, 71)',
          borderWidth: 2,
          borderColor: 'rgb(255, 99, 71)',
          borderRadius: 12,
          alignment: 'center', // 文字水平对齐属性
          verticalAlignment: 'middle', // 文字垂直对齐属性
        },
      },
      options: {
        collisionOptions: {
          sameSource: true, // 是否开启图层内碰撞,优先级按rank进行碰撞
        },
      },
      onMapInited,
      getLayerInstance,
    };
  },
});
</script>

props

名称类型说明
idString图层 id,参考官网文档
styles{ [key: string]: TMap.MultiLabelStyleHash }文本标记的相关样式,参考官网文档
geometriesTMap.LabelGeometry[]文本标记数据数组,参考官网文档
optionsTMap.MultiLabelOptions除了上述属性的其他配置参数,参考TMap.MultiLabelOptions

TMap.MultiLabelOptions

属性名称类型说明
collisionOptionsCollisionOptions图层碰撞配置参数
disableInteractiveBoolean图层是否禁止参与交互事件,默认为false
isStopPropagationBoolean是否阻止鼠标、触摸事件冒泡,默认为false

CollisionOptions

图层碰撞配置参数。

属性名称类型说明
sameSourceBoolean是否开启同图层内碰撞,如开启,碰撞优先级按rank值进行碰撞,rank值越大,碰撞权重越高,默认为false
crossSourceBoolean是否开启跨图层间碰撞,所有开启跨图层间进行碰撞,优先级按zIndex值进行碰撞,zIndex值越大,碰撞权重越高,默认为false
vectorBaseMapSourceBoolean是否允许碰撞地图元素,开启后图层优先级高于地图元素优先级,默认为false

事件

名称参数说明
clickGeometryOverlayEvent点击事件
dblclickGeometryOverlayEvent双击事件
mousedownGeometryOverlayEvent鼠标在地图区域中左键按下时触发,只在桌面浏览器中触发
mouseupGeometryOverlayEvent鼠标在地图区域中左键按下又弹起时触发,只在桌面浏览器中触发
mousemoveGeometryOverlayEvent鼠标在地图上移动时触发,只在桌面浏览器中触发
hoverGeometryOverlayEvent鼠标在图层上悬停对象改变时触发,事件对象中的geometry属性会指向交互位置所在图形的LabelGeometry,无图形时事件对象为null,只在桌面浏览器中触发
touchstartGeometryOverlayEvent在地图区域触摸开始时触发,只在移动浏览器中触发
touchmoveGeometryOverlayEvent在地图区域触摸移动时触发,只在移动浏览器中触发
touchendGeometryOverlayEvent在地图区域触摸结束时触发,只在移动浏览器中触发
labelBox_changed-在数据变化时触发

组件实例属性

名称类型说明
labelTMap.MultiLabel文本标记实例。实例方法参考TMap.MultiLabel方法

TMap.MultiLabel方法

方法返回值说明
setMap(map:Map)this设置地图对象,如果map为null意味着将多个文本标注同时从地图中移除。
setGeometries(geometries: LabelGeometry[])this更新多文本标注数据,如果参数为null或undefined不会做任何处理。
setStyles(styles:MultiLabelStyleHash)this设置MultiLabel图层相关样式信息,如果参数为null或undefined不会做任何处理。
getMap()Map获取地图对象,若为空返回null。
getGeometries()LabelGeometry[]获取多文本标注数据。
getStyles()MultiLabelStyleHash获取图层相关样式信息。
setVisible(visible: Boolean)this设置图层是否可见。
getVisible()visible获取可见状态。
getGeometryById(id:String)LabelGeometry根据多文本数据id来获取点数据。
updateGeometries(geometry:LabelGeometry[])this更新多文本数据,如果geometry的id存在于集合中,会更新对id的数据,如果之前不存在于集合中,会作为新的文本标注添加到集合中;如果参数为null或undefined不会做任何处理。
add(geometries: LabelGeometry[])this向图层中添加文本,如果geometry的id已经存在集合中,则该geometry不会被重复添加,如果geometry没有id或者id不存在于集合中会被添加到集合,没有id的geometry会被赋予一个唯一id;如果要添加到集合中的文本存在重复id,这些文本会被重新分配id;如果参数为null或undefined不会做任何处理。
remove(ids: String[])this移除指定id的文本,如果参数为null或undefined不会做任何处理。
on(eventName:String, listener:Function)this添加listener到eventName事件的监听器数组中。
off(eventName:String, listener:Function)this从eventName事件的监听器数组中移除指定的listener。
destroy()销毁图层对象
getLabelBoxes(id:String)LabelBoxHash获取文本整体像素宽高值,以一个key-value对象的形式返回,key为文本id,value为数组,第一个数据为文本整体的宽,第二个数据为文本整体的高。当未传入id时默认获得所有文本的宽高。注意该方法需要监听MultiLabel的'labelBox_changed'事件。