日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

经纬度,距离,方位角相关计算(Java实现)

發布時間:2024/3/26 java 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 经纬度,距离,方位角相关计算(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°表示正西方向。

/*** 求坐標2相對于坐標1的方位角度和距離* 單位:度* @param lon1* @param lat1* @param lon2* @param lat2* @return 返回 double數組[方位角,距離],方位角單位: 度 距離單位: 千米*/public static double[] bearingDistOffset(double lon1, double lat1, double lon2, double lat2) {lon1 = Math.toRadians(lon1);lat1 = Math.toRadians(lat1);lon2 = Math.toRadians(lon2);lat2 = Math.toRadians(lat2);// 是坐標1的緯度和經度(以弧度為單位)double bearing = Math.atan2(Math.sin(lon2 - lon1) * Math.cos(lat2),Math.cos(lat1) * Math.sin(lat2) - Math.sin(lat1) * Math.cos(lat2) * Math.cos(lon2 - lon1));bearing = Math.toDegrees(bearing); // log.info("計算后方位角:{}°", bearing);double distance = arc * Math.acos(Math.sin(lat1) * Math.sin(lat2) +Math.cos(lat1) * Math.cos(lat2) *Math.cos(lon2 - lon1)); // log.info("計算后距離:{}km", distance);distance = distance;return new double[]{bearing, distance};}

注: 地球半徑arc取6371.393,單位是千米

總結

以上是生活随笔為你收集整理的经纬度,距离,方位角相关计算(Java实现)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。