高德地图获取坐标距离_高德地图计算两坐标之间距离

这篇博客介绍了如何在无法直接使用高德地图官方API的情况下,自定义实现Java和JavaScript计算两个经纬度坐标之间的距离。通过创建LngLat类存储坐标,并在AMapUtils工具类中提供计算方法,实现了基于Haversine公式的手动计算,测试结果显示与官方API结果相近。
摘要由CSDN通过智能技术生成

最近在做与地图相关的应用,使用了高德地图,研究了下高德地图计算两坐标距离的方法,官网上提供的开发包中有相关的方法,但是我的产品中比较特殊,无法直接使用提供的方法,所以就自己封装了相关计算方法,供大家参考。

Java实现

首先定义一个用于存储经纬度的类,这里起个名字叫:LngLat

package amap;

import java.text.DecimalFormat;

import java.text.DecimalFormatSymbols;

import java.util.Locale;

/**

* 存储经纬度坐标值的类,单位角度

*

*@author jianggujin

*

*/

public final class LngLat implements Cloneable

{

/**

* 纬度 (垂直方向)

*/

public final double latitude;

/**

* 经度 (水平方向)

*/

public final double longitude;

/**

* 格式化

*/

private static DecimalFormat format = new DecimalFormat("0.000000", new DecimalFormatSymbols(Locale.US));

/**

* 使用传入的经纬度构造LatLng 对象,一对经纬度值代表地球上一个地点。

*

*@param longitude

* 地点的经度,在-180 与180 之间的double 型数值。

*@param latitude

* 地点的纬度,在-90 与90 之间的double 型数值。

*/

public LngLat(double longitude, double latitude)

{

this(longitude, latitude, true);

}

/**

* 使用传入的经纬度构造LatLng 对象,一对经纬度值代表地球上一个地点

*

*@param longitude

* 地点的经度,在-180 与180 之间的double 型数值。

*

*@param latitude

* 地点的纬度,在-90 与90 之间的double 型数值。

*@param isCheck

* 是否需要检查经纬度的合理性,建议填写true

*/

public LngLat(double longitude, double latitude, boolean isCheck)

{

if (isCheck)

{

if ((-180.0D <= longitude) && (longitude < 180.0D))

this.longitude = parse(longitude);

else

{

throw new IllegalArgumentException("the longitude range [-180, 180].");

// this.longitude = parse(((longitude - 180.0D) % 360.0D + 360.0D) %

// 360.0D - 180.0D);

}

if ((latitude <

高德地图 API 中,获取之间的直线距离可以通过 `AMap.Geolocation` 和 `AMap.Polyline` 组件结合来实现。以下是一个简单的步骤: 1. **引入依赖库**:首先确保已导入高德地图相关的 JavaScript 库和模块。 ```javascript import AMap from 'amap-js-sdk'; ``` 2. **初始化地图实例**:在需要的地方创建地图实例。 ```javascript const map = new AMap.Map('container', { zoom: 10, // 地图初始缩放级别 center: [116.39, 39.9], // 北京的中心坐标 }); ``` 3. **获取地理编码服务**:用于将地址转换为经纬度。 ```javascript const geocoder = new AMap.Geocoder(); ``` 4. **查询起点和终点的经纬度**:根据实际需求,用户输入或从数据库获取地址,调用 `geocode()` 方法。 ```javascript function getDistance(startAddress, endAddress) { return new Promise((resolve, reject) => { geocoder.getAddress(startAddress, (status, result) => { if (status === 'complete' && result.info === 'OK') { const startPoint = result.formatted_addresses; geocoder.getAddress(endAddress, (status, result) => { if (status === 'complete' && result.info === 'OK') { const endPoint = result.formatted_addresses; // 获取经纬度数组 const startCoord = result.poi ? result.poi.location : result.addressComponent.lnglat; const endCoord = result.poi ? result.poi.location : result.addressComponent.lnglat; // 计算距离 calculateLineDistance(startCoord, endCoord).then(distance => { resolve(distance); }); } else { reject(result.message); } }); } else { reject(result.message); } }); }); } // 自定义方法计算点间的直线距离 function calculateLineDistance(startCoord, endCoord) { const startLat = startCoord.lat, startLng = startCoord.lng, endLat = endCoord.lat, endLng = endCoord.lng; const distanceService = new AMap.DistanceMatrix(); distanceService.calculate([ { location: startLat + ',' + startLng }, { location: endLat + ',' + endLng } ]).then(response => { const result = response.result; return result.distance.toFixed(2); // 返回千米为单位的距离 }).catch(err => console.error(err)); } ``` 5. **调用距离计算**:当你需要知道之间距离时,传入地址并处理返回结果。 ```javascript getDistance('起点地址', '终点地址') .then(distance => { console.log(`之间的直线距离是 ${distance} 千米`); }) .catch(error => { console.error('获取距离失败:', error); }); ``` 注意:此代码示例假设你已经在 HTML 文件中添加了名为 "container" 的 div 元素供地图渲染,并且已经设置了 API 密钥。此外,实际项目中可能还需要考虑网络请求的错误处理和性能优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值