useMeasure

View source
测距 / 测面工具,自管 geojson 源与展示图层,turf 实时计算读数。

简介

useMeasure 提供测距 / 测面交互:单击加点、移动预览、双击结束当前段、Esc 取消。它自管展示用的 geojson 源与图层,用 turf 实时计算并格式化读数。返回 start / stop / clear 控制方法与 mode / active / result 响应式状态。

<MapboxMap> 子树外使用时经 options.mapId 指定目标地图。读数格式化复用 formatDistance / formatArea

用法

工具栏切换测距 / 测面,result 实时显示当前段读数:

<script setup lang="ts">
const mapId = 'use-measure-demo'

const { start, stop, clear, mode, active, result } = useMeasure({ mapId })
</script>

<template>
  <div class="relative h-115 w-full overflow-hidden rounded-(--ui-radius) border border-default">
    <MapboxMap
      :map-id="mapId"
      :options="{ style: 'mapbox://styles/mapbox/light-v11', center: [116.39, 39.91], zoom: 11 }"
    />
    <div class="absolute left-2 top-2 z-10 flex gap-1">
      <UButton
        size="sm"
        :variant="active && mode === 'distance' ? 'solid' : 'soft'"
        @click="start('distance')"
      >
        测距
      </UButton>
      <UButton
        size="sm"
        :variant="active && mode === 'area' ? 'solid' : 'soft'"
        @click="start('area')"
      >
        测面
      </UButton>
      <UButton size="sm" variant="soft" :disabled="!active" @click="stop"> 结束 </UButton>
      <UButton size="sm" color="error" variant="soft" @click="clear"> 清空 </UButton>
    </div>
    <div
      v-if="result"
      class="absolute bottom-2 left-2 z-10 rounded bg-default/90 px-3 py-1.5 text-sm font-medium text-default ring ring-default"
    >
      {{ result }}
    </div>
  </div>
</template>

API

useMeasure()

创建测量工具。

options.mapId
string
目标地图 id;在 <MapboxMap> 子树外使用时必填。
options.color
string
主色,默认 '#f59e0b'

返回 UseMeasureReturn

start
(mode: MeasureMode) => void
进入测量:click 加点、mousemove 预览、dblclick 结束当前段。
stop
() => void
退出测量交互(保留已绘结果)。
clear
() => void
清空全部测量结果。
mode
Ref<MeasureMode | undefined>
当前测量模式。
active
Ref<boolean>
测量是否激活。
result
Ref<string>
当前段(含光标预览)的格式化读数。

MeasureMode

测量模式:'distance' | 'area'

Changelog

No recent changes
Copyright © 2026 - 2026 YiXuan - MIT License