当前位置:首页 > JavaScript

js实现路线导航

2026-02-02 15:12:54JavaScript

使用 Geolocation API 获取当前位置

通过 navigator.geolocation.getCurrentPosition 获取用户当前位置的经纬度坐标。需要用户授权地理位置权限。

navigator.geolocation.getCurrentPosition(
  (position) => {
    const { latitude, longitude } = position.coords;
    console.log(`当前位置: ${latitude}, ${longitude}`);
  },
  (error) => {
    console.error("获取位置失败:", error.message);
  }
);

集成地图服务(如 Google Maps API)

使用第三方地图服务(如 Google Maps、Mapbox 或高德地图)显示地图并绘制路线。以 Google Maps 为例:

function initMap() {
  const map = new google.maps.Map(document.getElementById("map"), {
    zoom: 14,
    center: { lat: 39.9042, lng: 116.4074 }, // 默认中心点(北京)
  });

  const directionsService = new google.maps.DirectionsService();
  const directionsRenderer = new google.maps.DirectionsRenderer();
  directionsRenderer.setMap(map);

  // 计算路线
  calculateAndDisplayRoute(directionsService, directionsRenderer);
}

function calculateAndDisplayRoute(directionsService, directionsRenderer) {
  directionsService.route(
    {
      origin: "北京市海淀区", // 起点
      destination: "北京市朝阳区", // 终点
      travelMode: google.maps.TravelMode.DRIVING, // 出行方式(驾车)
    },
    (response, status) => {
      if (status === "OK") {
        directionsRenderer.setDirections(response);
      } else {
        alert("路线规划失败: " + status);
      }
    }
  );
}

使用 Leaflet.js 实现轻量级导航

Leaflet 是一个开源库,适合轻量级地图需求:

const map = L.map("map").setView([39.9042, 116.4074], 13);
L.tileLayer("https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png").addTo(map);

// 添加路线
const routingControl = L.Routing.control({
  waypoints: [
    L.latLng(39.9042, 116.4074), // 起点
    L.latLng(39.9493, 116.3975), // 终点
  ],
  routeWhileDragging: true,
}).addTo(map);

实现实时导航更新

通过 watchPosition 监听位置变化,动态更新路线:

js实现路线导航

const watchId = navigator.geolocation.watchPosition(
  (position) => {
    const { latitude, longitude } = position.coords;
    updateRoute(latitude, longitude); // 调用地图API更新路线
  },
  (error) => {
    console.error("位置监听失败:", error.message);
  },
  { enableHighAccuracy: true }
);

// 清除监听
// navigator.geolocation.clearWatch(watchId);

注意事项

  • 所有地图服务需申请API密钥(如Google Maps需key参数)。
  • 部分浏览器(如Chrome)要求地理位置请求必须通过HTTPS协议。
  • 移动端需处理权限拒绝情况,提供手动输入地址的备选方案。

标签: 路线js
分享给朋友:

相关文章

js实现换肤

js实现换肤

使用CSS变量实现换肤 通过CSS变量可以轻松实现主题切换功能。CSS变量在根元素中定义,通过JavaScript动态修改这些变量值。 :root { --primary-color: #349…

js树实现

js树实现

树的基本概念 树是一种非线性的数据结构,由节点和边组成。每个节点包含一个值和指向子节点的引用。树的顶部节点称为根节点,没有子节点的节点称为叶节点。 树的实现方式 在JavaScript中,树可以通过…

js钟表实现

js钟表实现

实现JavaScript钟表的基本方法 创建一个简单的JavaScript钟表可以通过以下步骤完成,涵盖数字和模拟两种形式。 数字钟表实现 HTML结构只需一个显示时间的容器: <div i…

节流js实现

节流js实现

节流(Throttle)的实现原理 节流是一种限制函数执行频率的技术,确保函数在一定时间间隔内最多执行一次。适用于高频触发事件(如滚动、输入、窗口调整等)的场景。 基础实现方式 使用时间戳判断是否执…

js实现文字滚动

js实现文字滚动

实现文字滚动的几种方法 使用CSS动画实现滚动 通过CSS的@keyframes和transform属性可以实现平滑的文字滚动效果。 <style> .scroll-text { w…

js实现刷新页面

js实现刷新页面

刷新页面的方法 在JavaScript中,可以通过多种方式实现页面刷新。以下是几种常见的方法: 使用 location.reload() 调用 location.reload() 方法可以重新加载当…