当前位置:首页 > 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 实现继承

原型链继承 通过让子类的原型对象指向父类的实例来实现继承。子类实例可以访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Par…

js实现图片放大缩小

js实现图片放大缩小

实现图片放大缩小的基础方法 使用CSS的transform: scale()属性可以快速实现图片的放大缩小效果。通过JavaScript动态修改该属性值: const img = document.…

js jquery

js jquery

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画设计和 Ajax 交互。它兼容多种浏览器,提供易于使用的 API,使开发者能够…

js钟表实现

js钟表实现

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

vue实现路线导航

vue实现路线导航

Vue 实现路由导航的方法 使用 Vue Router 基本配置 安装 Vue Router 依赖: npm install vue-router 在项目中配置路由(以 Vue 3 为例): im…

js怎么实现异步

js怎么实现异步

异步实现方法 JavaScript中实现异步操作主要通过以下几种方式: Promise Promise是ES6引入的异步解决方案,用于处理异步操作的成功或失败状态。 const promise =…