第七篇,如何用高德地图持续追踪移动轨迹!

在城市管理、户外骑行、外业巡查等场景中,“实时定位与轨迹追踪”功能非常常见。本文基于高德地图 JavaScript API v2.0,完整实现一个桂林市3D地图与实时轨迹追踪系统,并详细拆解核心开发步骤与代码逻辑。


🗺️ 一、功能概述

  • ✅ 地图显示:展示桂林市3D地图(深色风格)。
  • ✅ 实时定位:实时获取当前位置。
  • ✅ 轨迹绘制:根据移动路径绘制折线轨迹。
  • ✅ 自动跟随:地图实时跟随当前位置。
  • ✅ 支持开始/停止追踪控制。

🛠️ 二、项目搭建与核心代码

1️⃣ 页面结构与地图容器

<div id="AllmapContainer"></div>
<button class="location-btn" id="locateBtn">开始追踪轨迹</button>
  • #AllmapContainer 作为地图的显示区域。
  • 按钮用于启动/停止轨迹追踪。

2️⃣ 地图初始化

map = new AMap.Map('AllmapContainer', {
    viewMode: '2D',
    center: [110.299, 25.274],  // 桂林市中心
    zoom: 15,
    mapStyle: "amap://styles/dark"
});
  • 使用2D模式加载高德地图。
  • 设置地图初始中心与缩放级别。
  • 应用深色主题,提升视觉效果。

3️⃣ 折线轨迹初始化

polyline = new AMap.Polyline({
    path: [],
    isOutline: true,
    outlineColor: '#ffeeff',
    borderWeight: 2,
    strokeColor: "#3366FF",
    strokeWeight: 4,
    lineJoin: 'round'
});
map.add(polyline);
  • 使用 AMap.Polyline 绘制用户的移动轨迹。
  • 动态追加坐标点实时更新轨迹。

4️⃣ 当前定位 Marker 图标

marker = new AMap.Marker({
    map: map,
    position: [110.299, 25.274],
    icon: 'https://webapi.amap.com/theme/v1.3/markers/n/mark_b.png',
    anchor: 'center'
});
  • 使用蓝色图标实时显示当前定位点。

5️⃣ 核心:轨迹追踪逻辑

geoWatch = navigator.geolocation.watchPosition(function (pos) {
    const lnglat = [pos.coords.longitude, pos.coords.latitude];

    path.push(lnglat);             // 记录新位置
    polyline.setPath(path);        // 更新轨迹
    marker.setPosition(lnglat);    // 移动定位图标
    map.setCenter(lnglat);         // 地图跟随
}, function (error) {
    alert('定位失败: ' + error.message);
}, {
    enableHighAccuracy: true,
    timeout: 10000,
    maximumAge: 0
});
  • 浏览器的watchPosition持续监听定位变化。
  • 每获取一个新坐标点,立刻:
    • 将其加入路径数组;
    • 更新折线轨迹;
    • 移动图标;
    • 地图自动平移跟随。

⚠️ 为什么用navigator.geolocation

因为高德地图的Geolocation插件仅适用于单次定位,连续定位与轨迹追踪使用浏览器原生定位 API 更适合。


6️⃣ 开始/停止 追踪控制

// 点击按钮后开始追踪
document.getElementById('locateBtn').onclick = function () {
                if (geoWatch) {
                    navigator.geolocation.clearWatch(geoWatch);
                    geoWatch = null;
                    this.textContent = '开始追踪轨迹';
                    return;
                }

                this.textContent = '停止追踪';

                geoWatch = navigator.geolocation.watchPosition(function (pos) {
                    const lnglat = [pos.coords.longitude, pos.coords.latitude];

                    path.push(lnglat);
                    polyline.setPath(path);
                    marker.setPosition(lnglat);
                    map.setCenter(lnglat);

                }, function (error) {
                    alert('定位失败: ' + error.message);
                }, {
                    enableHighAccuracy: true,
                    timeout: 10000,
                    maximumAge: 0
                });
};
  • 点击按钮启动/停止追踪。
  • 通过clearWatch停止监听,释放资源,避免后台耗电。

⚙️ 三、效果展示

在这里插入图片描述

  • 打开页面后地图自动展示桂林市。
  • 点击“开始追踪轨迹”:
    • 实时显示当前位置。
    • 路径随着移动动态绘制折线。
    • 地图自动跟随当前位置。
  • 再次点击按钮,即可停止追踪。

🛡️ 四、关于定位权限与浏览器限制

⚠️ 注意,使用navigator.geolocation有严格的安全要求:

  • 页面必须运行在:
    • HTTPS环境;
    • 或本地开发的localhost下。
  • 浏览器必须授予“位置”权限。

否则,将会遇到:

origin does not have permission to use Geolocation service

解决方法:

  • 使用 HTTPS 正式部署。
  • 本地用开发服务器(如npx serve)启动调试。

📦 五、完整项目代码

完整项目代码见本文前面,或根据业务需求自由扩展,如:

  • 轨迹回放
  • 坐标上传至服务器
  • 多人轨迹同时展示等

📌 结语

基于高德地图与浏览器定位 API,实现实时定位与轨迹追踪其实并不复杂,但注意细节:

  • PolyLine动态更新轨迹;
  • watchPosition监听位置变化;
  • 记得处理好定位权限与安全策略

希望本文能为你的地图项目开发提供帮助!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值