java實(shí)現(xiàn)計(jì)算地理坐標(biāo)之間的距離
更新時(shí)間:2015年03月13日 14:27:21 投稿:hebedich
java實(shí)現(xiàn)計(jì)算地理坐標(biāo)之間的距離,主要是通過計(jì)算兩經(jīng)緯度點(diǎn)之間的距離來實(shí)現(xiàn),有需要的小伙伴參考下吧
java實(shí)現(xiàn)計(jì)算兩經(jīng)緯度點(diǎn)之間的距離,直接上代碼,具體解釋請(qǐng)參考注釋
復(fù)制代碼 代碼如下:
package com.jttx.poi.utils;
import com.jttx.poi.entity.Point;
/**
* Created by louis on 2014/9/2.
*/
public class GeoUtils {
/**
* 計(jì)算兩經(jīng)緯度點(diǎn)之間的距離(單位:米)
* @param lng1 經(jīng)度
* @param lat1 緯度
* @param lng2
* @param lat2
* @return
*/
public static double getDistance(double lng1,double lat1,double lng2,double lat2){
double radLat1 = Math.toRadians(lat1);
double radLat2 = Math.toRadians(lat2);
double a = radLat1 - radLat2;
double b = Math.toRadians(lng1) - Math.toRadians(lng2);
double s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) + Math.cos(radLat1)
* Math.cos(radLat2) * Math.pow(Math.sin(b / 2), 2)));
s = s * 6378137.0;// 取WGS84標(biāo)準(zhǔn)參考橢球中的地球長半徑(單位:m)
s = Math.round(s * 10000) / 10000;
return s;
}
/**
* 計(jì)算TP值
* @param curPoint 當(dāng)前點(diǎn)
* @param relatedPoint 偏移點(diǎn)
* @param isGeography 是否是地理坐標(biāo) false為2d坐標(biāo)
* @return tp值
*/
public static double getDirAngle(Point curPoint,Point relatedPoint,boolean isGeography){
double result = 0;
if(isGeography){
double y2 = Math.toRadians(relatedPoint.getLat());
double y1 = Math.toRadians(curPoint.getLat());
double alpha = Math.atan2(relatedPoint.getLat() - curPoint.getLat(), (relatedPoint.getLng() - curPoint.getLng()) * Math.cos((y2 - y1) / 2));//緯度方向乘以cos(y2-y1/2)
double delta =alpha<0?(2*Math.PI+alpha):alpha;
result = Math.toDegrees(delta);
}else {
double alpha = Math.atan2(relatedPoint.getLat() - curPoint.getLat(), relatedPoint.getLng() - curPoint.getLng());
double delta=alpha<0?(2*Math.PI+alpha):alpha;
result = Math.toDegrees(delta);
}
return result;
}
public static void main(String[] args) {
System.out.println(getDistance(121.446014,31.215937,121.446028464238,31.2158502442799 ));
}
}
以上就是本文的全部內(nèi)容了,希望大家能夠喜歡。
相關(guān)文章
Java設(shè)計(jì)模式——工廠設(shè)計(jì)模式詳解
這篇文章主要介紹了Java設(shè)計(jì)模式——工廠設(shè)計(jì)模式詳解,具有一定參考價(jià)值,需要的朋友可以了解下。2017-11-11使用Java通過OAuth協(xié)議驗(yàn)證發(fā)送微博的教程
這篇文章主要介紹了使用Java通過OAuth協(xié)議驗(yàn)證發(fā)送微博的教程,使用到了新浪微博為Java開放的API weibo4j,需要的朋友可以參考下2016-02-02springcloud如何用Redlock實(shí)現(xiàn)分布式鎖
本文主要介紹了springcloud如何用Redlock實(shí)現(xiàn)分布式鎖,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-11-11MyBatis實(shí)現(xiàn)簡單的數(shù)據(jù)表分月存儲(chǔ)
本文主要介紹了MyBatis實(shí)現(xiàn)簡單的數(shù)據(jù)表分月存儲(chǔ),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03