如何在Node.js中计算谷歌地图两个点位间的驾车行驶距离
Node.js计算谷歌地图两点驾车行驶距离实现方案
首先明确:node-geometry-library 仅支持计算两点的球面直线(大圆)距离,无法得到实际道路行驶的驾车距离,驾车距离必须调用谷歌地图官方API实现。
方案1:使用谷歌官方Node.js SDK调用Distance Matrix API
前置准备
- 开通Google Cloud账号,启用Distance Matrix API,获取接口调用密钥
实现步骤
- 安装官方依赖包
npm install @googlemaps/google-maps-services-js - 代码示例
const { Client } = require('@googlemaps/google-maps-services-js'); const client = new Client({}); // 配置参数 const API_KEY = '你的Google Cloud API密钥'; // 点位格式:"纬度,经度",也可以直接传地址字符串 const origin = '39.9042,116.4074'; // 示例:北京坐标 const destination = '31.2304,121.4737'; // 示例:上海坐标 client.distancematrix({ params: { origins: [origin], destinations: [destination], mode: 'driving', // 行驶模式,可选walking、bicycling、transit key: API_KEY }, timeout: 10000 // 超时时间10秒 }).then((response) => { const result = response.data.rows[0].elements[0]; if (result.status === 'OK') { console.log('驾车距离:', result.distance.text); console.log('预计行驶时间:', result.duration.text); // 距离数值(单位米):result.distance.value // 时间数值(单位秒):result.duration.value } else { console.error('查询失败:', result.status); } }).catch((err) => { console.error('请求出错:', err); });
方案2:直接调用HTTP接口(无需官方SDK)
如果不想引入额外SDK,可直接用HTTP请求库调用接口,以axios为例:
- 安装依赖
npm install axios - 代码示例
const axios = require('axios'); const API_KEY = '你的Google Cloud API密钥'; const origin = '39.9042,116.4074'; const destination = '31.2304,121.4737'; const requestUrl = `https://maps.googleapis.com/maps/api/distancematrix/json?origins=${origin}&destinations=${destination}&mode=driving&key=${API_KEY}`; axios.get(requestUrl).then((response) => { if (response.data.status === 'OK') { const result = response.data.rows[0].elements[0]; console.log('驾车距离:', result.distance.text); console.log('预计行驶时间:', result.duration.text); } else { console.error('查询失败:', response.data.status); } }).catch((err) => { console.error('请求出错:', err); });
附加:node-geometry-library计算直线距离实现(非驾车)
如果你只需要两点的直线距离,可按以下方式使用该库:
- 安装依赖
npm install node-geometry-library - 代码示例
const geometry = require('node-geometry-library'); // 点位1坐标:纬度、经度 const point1 = { lat: 39.9042, lng: 116.4074 }; // 点位2坐标:纬度、经度 const point2 = { lat: 31.2304, lng: 121.4737 }; // 计算距离,单位为米 const distance = geometry.spherical.computeDistanceBetween( new geometry.LatLng(point1.lat, point1.lng), new geometry.LatLng(point2.lat, point2.lng) ); console.log('两点直线距离:', (distance / 1000).toFixed(2) + '公里');
注意事项
- API密钥需妥善保管,避免泄露产生额外费用
- 接口有调用配额限制,可在Google Cloud控制台查看用量和调整配额
- 若需计算多个点位的距离,可在origins、destinations参数中传入多个值,用竖线|分隔
内容的提问来源于stack exchange,提问作者fatma mahmoud
相关产品推荐
相关产品推荐

