经纬度,距离,方位角相关计算(Java实现)
生活随笔
收集整理的這篇文章主要介紹了
经纬度,距离,方位角相关计算(Java实现)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
經緯度,距離,方位角相關計算(Java實現)
- 問題:已知地點1、地點3的經緯度和地點2相對于地點1的方位角和距離,求地點2相對于地點3的方位角和距離。
- 要解決這個問題,可以分為兩步實現:
- 1.根據一點的經緯度, 到另外一點的距離, 方位角, 計算另外一點的經緯度。
- 2.求坐標1相對于坐標2的方位角度和距離
- 解法:
- 根據一點的經緯度, 到另外一點的距離, 方位角, 計算另外一點的經緯度。
- 求坐標1相對于坐標2的方位角度和距離
問題:已知地點1、地點3的經緯度和地點2相對于地點1的方位角和距離,求地點2相對于地點3的方位角和距離。
要解決這個問題,可以分為兩步實現:
1.根據一點的經緯度, 到另外一點的距離, 方位角, 計算另外一點的經緯度。
2.求坐標1相對于坐標2的方位角度和距離
解法:
根據一點的經緯度, 到另外一點的距離, 方位角, 計算另外一點的經緯度。
在這個公式中,lat1和lon1是起始點的緯度和經度(以度為單位),distance是兩點間的距離(以千米為單位),bearing是方位角(以度為單位),lat2和lon2是終點的緯度和經度(以弧度為單位),返回前使用Math.toDegree()函數轉化為以度為單位。
/*** 根據一點的經緯度, 到另外一點的距離, 方位角, 計算另外一點的經緯度* @param lon1 經度 以度為單位* @param lat1 緯度 以度為單位* @param bearing 方位角(以度為單位)* @param distance 移動距離 千米* @return 返回double數組 double[經度, 緯度]*/public static double[] LongLatOffset(double lon1, double lat1, double bearing, double distance) { //// 方位角 角度轉換到弧度lon1 = Math.toRadians(lon1);lat1 = Math.toRadians(lat1);bearing = Math.toRadians(bearing);double lat2 = Math.asin(Math.sin(lat1) * Math.cos(distance / arc) +Math.cos(lat1) * Math.sin(distance / arc) * Math.cos(bearing));double lon2 = lon1 + Math.atan2(Math.sin(bearing) * Math.sin(distance / arc) * Math.cos(lat1),Math.cos(distance / arc) - Math.sin(lat1) * Math.sin(lat2));return new double[]{Math.toDegrees(lon2), Math.toDegrees(lat2)};}求坐標1相對于坐標2的方位角度和距離
在這個公式中,lat1和lon1是坐標1的緯度和經度(以弧度為單位),lat2和lon2是坐標2的緯度和經度(以弧度為單位),bearing是坐標1相對于坐標2的方位角(以弧度為單位)。
方位角的范圍是0°到360°,0°表示正北方向,90°表示正東方向,180°表示正南方向,270°表示正西方向。
注: 地球半徑arc取6371.393,單位是千米
總結
以上是生活随笔為你收集整理的经纬度,距离,方位角相关计算(Java实现)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: RouterOS系统安装和简单配置
- 下一篇: java美元兑换,(Java实现) 美元