npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

xt-track-map

v1.0.2

Published

## 1、概述

Downloads

15

Readme

xt-track-map 地图组件库使用手册

1、概述

xt-track-map 是一个基于 Vue 3 + 高德地图开发的地图工具组件库,包含轨迹回放和地图选点(电子围栏)两个核心组件,支持在项目中快速集成车辆轨迹播放、地点搜索选点、围栏绘制等功能。

2、主要功能

| 组件 | 功能 | 说明 | |------|------|------| | XTTrackMap | 轨迹回放 | 支持车辆轨迹动画播放、多倍速、进度拖拽 | | XTTrackMap | 播放控制 | 播放/暂停/重播/重置,进度条点击和拖拽跳转 | | XTTrackMap | 倍速播放 | 支持 1x、8x、16x、32x、64x、128x、256x | | XTTrackMap | 自定义样式 | 车辆图标、轨迹颜色、线宽均可配置 | | XTTrackMap | 信息面板 | 右侧展示车辆信息、轨迹统计 | | XTPointSelectMap | 地图选点 | 点击地图任意位置选取坐标点 | | XTPointSelectMap | 地点搜索 | 输入关键字搜索地点并定位 | | XTPointSelectMap | 电子围栏 | 以选取的点为中心绘制圆形围栏 | | XTPointSelectMap | 多模式 | 支持新增、编辑、查看三种模式 |

3、安装与注册

3.1 安装

npm install xt-track-map

或本地开发使用 npm link:

# 在组件库目录
nvm use v16.20.0
npm run lib
npm link

# 在使用项目目录
npm link xt-track-map

3.2 全局注册

// main.js
import { createApp } from 'vue'
import App from './App.vue'
import XTTrackMap from 'xt-track-map/packages'
import 'xt-track-map/dist/xt-track-map.css'

const app = createApp(App)
app.use(XTTrackMap)
app.mount('#app')

4、XTTrackMap 轨迹回放组件

4.1 Props 属性

| 属性名 | 类型 | 默认值 | 说明 | |--------|------|--------|------| | trackData | Object | null | 轨迹数据(见下方格式) | | carIcon | String | 内置SVG | 车辆图标(支持URL、base64、import图片) | | carIconSize | Number | 32 | 车辆图标尺寸(px),范围 16~100 | | passedTrackColor | String | '#1677ff' | 已行驶轨迹颜色 | | fullTrackColor | String | '#aaaaaa' | 完整轨迹颜色(虚线) | | passedTrackWidth | Number | 5 | 已行驶轨迹线宽,范围 1~20 | | fullTrackWidth | Number | 4 | 完整轨迹线宽,范围 1~20 | | infoTitle | String | '基本信息' | 右侧面板自定义信息区标题 | | infoList | Array | null | 右侧面板自定义信息列表 |

4.2 trackData 数据结构

{
  plateNo: '京A12345',       // 车牌号(必填)
  routeMil: 120.5,           // 行驶里程,单位km
  trackArray: [              // 轨迹点数组(必填)
    {
      lat: '39.90923',       // 纬度(字符串)
      lon: '116.397428',     // 经度(字符串)
      utc: '1700000000',     // UTC时间戳(秒,字符串)
      spd: '60',             // 速度(km/h,字符串)
      drc: '90',             // 方向角(度,字符串)
      mil: '0'               // 累计里程(字符串)
    }
  ]
}

注意:trackData 变化时,组件会自动重置播放状态并重新绑制轨迹。适用于切换车辆或刷新轨迹数据的场景。

4.3 infoList 数据结构

[
  { label: '司机', value: '张三', highlight: false },
  { label: '车辆类型', value: '重型货车', highlight: true }
]

4.4 播放控制说明

| 操作 | 说明 | |------|------| | 播放/暂停 | 点击播放按钮或底部 ▶/⏸ 切换 | | 重播 | 播放完毕后点击重播按钮,从起点开始 | | 重置 | 回到起点,停止播放 | | 倍速切换 | 点击倍速按钮组切换,播放中切换立即生效 | | 进度跳转 | 点击进度条任意位置跳转,支持拖拽 |

4.5 倍速实现原理

采用 跳帧 + 固定帧率 方案:

  • 1x:每帧移动1个点
  • 8x:每帧移动2个点
  • 32x:每帧移动8个点
  • 128x:每帧移动32个点
  • 256x:每帧移动64个点

高倍速时帧间隔同步缩短,确保播放流畅且速度差异明显。

4.6 使用示例

<template>
  <div style="height: 100vh;">
    <XTTrackMap
      :trackData="trackData"
      :carIcon="carIcon"
      :carIconSize="36"
      passedTrackColor="#ff4d4f"
      fullTrackColor="#bfbfbf"
      :passedTrackWidth="6"
      infoTitle="车辆详情"
      :infoList="vehicleInfo"
    />
  </div>
</template>

<script setup>
import { ref, onMounted } from 'vue'
import carIcon from '@/assets/logistics_car.png'

const trackData = ref(null)
const vehicleInfo = ref([
  { label: '司机', value: '张三' },
  { label: '车型', value: '重型货车', highlight: true }
])

onMounted(async () => {
  const res = await fetch('/api/track?vehicleId=123')
  trackData.value = await res.json()
})
</script>

4.7 页面布局说明

┌─────────────────────────────────────────────────────┐
│                                                     │
│                   地图区域                            │ 右侧面板
│                                                     │ ┌────────┐
│              起点●━━━━━━━━━●终点                      │ │ 车辆信息 │
│                     🚛                               │ │ 轨迹统计 │
│                                                     │ │ 当前速度 │
│                                                     │ │ 播放进度 │
├─────────────────────────────────────────────────────┤ └────────┘
│ ⏱时间   ═══════════●═══════════   时间              │
│ ▶  倍速 [1x][8x][16x][32x][64x][128x][256x]  时长 │
└─────────────────────────────────────────────────────┘

5、XTPointSelectMap 地图选点组件

5.1 Props 属性

| 属性名 | 类型 | 默认值 | 说明 | |--------|------|--------|------| | mode | String | 'add' | 模式:'add'(新增)、'edit'(编辑)、'view'(查看) | | initData | Object | null | 初始围栏数据(编辑/查看模式使用) | | minRadius | Number | 50 | 围栏半径最小值(米) | | maxRadius | Number | 50000 | 围栏半径最大值(米) |

5.2 Events 事件

| 事件名 | 参数 | 说明 | |--------|------|------| | point-selected | { lng, lat, name }null | 选点状态变化时触发 | | point-updated | { point: { lng, lat, name }, radius } | 点位或半径更新时触发 | | save | { name, lng, lat, radius } | 保存围栏时触发 | | clear | 无 | 删除围栏时触发 |

5.3 Expose 暴露方法

通过 ref 获取组件实例后可调用:

| 方法/属性 | 类型 | 说明 | |-----------|------|------| | selectedPoint | Ref | 当前选中的点 { lng, lat, name } | | radius | Ref | 当前围栏半径 | | savedFence | Ref | 已保存的围栏数据 | | canSave | Computed | 是否可以保存 | | setPoint(lng, lat, name) | Function | 手动设置点位 | | clearPoint() | Function | 清除选点 | | setRadius(number) | Function | 设置围栏半径 | | updatePointName(name) | Function | 实时更新点位名称 | | saveFence() | Function | 保存围栏 | | editFence(data?) | Function | 进入编辑模式 | | deleteFence() | Function | 删除围栏 | | showSavedFence(lng, lat, name, r) | Function | 显示已保存的围栏 |

5.4 initData 数据结构

{
  lng: 116.397428,    // 经度(必填)
  lat: 39.90923,     // 纬度(必填)
  name: '天安门',     // 名称(可选)
  radius: 1000       // 围栏半径,单位米(可选,默认500)
}

5.5 模式说明

| 模式 | 地图点击 | 搜索框 | 可编辑 | 说明 | |------|----------|--------|--------|------| | add | ✓ | ✓ | ✓ | 新增围栏,点击地图选点 | | edit | ✓ | ✓ | ✓ | 编辑已有围栏,自动加载initData | | view | ✗ | ✗ | ✗ | 仅展示围栏,不可操作 |

5.6 操作说明

| 操作 | 说明 | |------|------| | 点击地图 | 在地图空白位置点击,添加选点 | | 搜索选点 | 输入关键字搜索地点,点击结果定位 | | 修改名称 | 父组件调用 updatePointName() 实时修改 | | 设置半径 | 父组件调用 setRadius() 更新围栏范围 | | 重新选点 | 调用 clearPoint() 清除当前选点 | | 保存围栏 | 调用 saveFence() 保存并触发 save 事件 | | 删除围栏 | 调用 deleteFence() 删除并触发 clear 事件 |

5.7 使用示例

<template>
  <div style="display: flex; height: 600px;">
    <!-- 地图组件 -->
    <XTPointSelectMap
      ref="mapRef"
      mode="add"
      @point-selected="onPointSelected"
      @point-updated="onPointUpdated"
      @save="onSave"
      style="flex: 1;"
    />

    <!-- 自定义右侧面板 -->
    <div class="panel" style="width: 280px; padding: 16px;">
      <div v-if="selectedPoint">
        <input
          :value="selectedPoint.name"
          placeholder="输入位置名称"
          @input="e => mapRef.updatePointName(e.target.value)"
        />
        <p>经度:{{ selectedPoint.lng?.toFixed(6) }}</p>
        <p>纬度:{{ selectedPoint.lat?.toFixed(6) }}</p>
        <input
          type="number"
          :value="currentRadius"
          @input="e => mapRef.setRadius(Number(e.target.value))"
        />
        <button @click="mapRef.saveFence()">保存围栏</button>
        <button @click="mapRef.clearPoint()">重新选点</button>
      </div>
      <div v-else>
        <p>请在地图上点击选点</p>
      </div>
    </div>
  </div>
</template>

<script setup>
import { ref } from 'vue'

const mapRef = ref(null)
const selectedPoint = ref(null)
const currentRadius = ref(500)

function onPointSelected(point) {
  selectedPoint.value = point
}

function onPointUpdated({ point, radius }) {
  selectedPoint.value = point
  currentRadius.value = radius
}

function onSave(fence) {
  console.log('围栏已保存:', fence)
  // fence = { name, lng, lat, radius }
}
</script>

5.8 页面布局说明

┌───────────────────────────────────────┬──────────────┐
│  🔍 搜索框                            │              │
│                                       │   自定义面板  │
│              地图区域                   │              │
│                                       │  名称输入框   │
│          📍 选点标记                    │  经纬度显示   │
│         ╭─────────╮                   │  半径设置     │
│         │  围栏圆  │                   │  保存按钮     │
│         ╰─────────╯                   │              │
│                                       │              │
│     [ 点击地图任意位置选点 ]             │              │
└───────────────────────────────────────┴──────────────┘

6、注意事项

  1. 组件依赖高德地图 JS API 2.0,需要配置安全密钥(已内置)。

  2. 轨迹数据中的经纬度字段:lon 为经度,lat 为纬度,均为字符串格式。

  3. XTTrackMap 的 trackData 变化时会自动重置播放并重新绑定地图,无需手动调用重置方法。

  4. XTPointSelectMap 的右侧面板需要使用方自行实现,组件仅提供地图和选点逻辑。

  5. 在 Vite 项目中使用 npm link 时,需确保 dist/xt-track-map.css 文件存在。

  6. 构建组件库需要使用 Node.js v16.20.0 版本。