java經緯度計算距離
1. 如何根據經緯度計算距離的java代碼
思路是:通過傳入地址作為參數拼接url調用網路地圖,然後解析返回的頁面,提取經緯度坐標。以下為具體步驟1、修改excel表中的屬性名(方便後面用查詢讀取)然後倒入到資料庫。2、代碼實現
2. JAVA,已知當前經緯度和距離,計算符合距離條件的經度最大值、最小值和緯度的最大值、最小值。
//拿走不謝
private final static double R = 6370996.81;
private final static double PI = 3.14159265;
private final static double RAD = Math.PI / 180.0;
/// <summary>
/// 根據提供的經度和緯度、以及半徑,取得此半徑內的最大最小經緯度
/// </summary>
/// <param name="lat">緯度</param>
/// <param name="lon">經度</param>
/// <param name="rais">半徑(米)</param>
/// <returns></returns>
public static double[] GetAround(double lat, double lon, int rais)
{
Double latitude = lat;
Double longitude = lon;
Double degree = (24901 * 1609) / 360.0;
double raisMile = rais;
Double dpmLat = 1 / degree;
Double radiusLat = dpmLat * raisMile;
Double minLat = latitude - radiusLat;
Double maxLat = latitude + radiusLat;
Double mpdLng = degree * Math.cos(latitude * (PI / 180));
Double dpmLng = 1 / mpdLng;
Double radiusLng = dpmLng * raisMile;
Double minLng = longitude - radiusLng;
Double maxLng = longitude + radiusLng;
return new double[] { minLat, minLng, maxLat, maxLng };
}
/// <summary>
/// 根據提供的兩個經緯度計算距離(米)
/// </summary>
/// <param name="lng1">經度1</param>
/// <param name="lat1">緯度1</param>
/// <param name="lng2">經度2</param>
/// <param name="lat2">緯度2</param>
/// <returns></returns>
public static double GetDistance(double lng1, double lat1, double lng2, double lat2)
{
double radLat1 = lat1 * RAD;
double radLat2 = lat2 * RAD;
double a = radLat1 - radLat2;
double b = (lng1 - lng2) * RAD;
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 * R;
s = Math.round(s * 10000) / 10000;
return s;
}
3. 經緯度與距離的換算
經緯度與距離的換算有以下兩種方法:
1、二維轉換
二維轉換方法是將平面坐標(東坐標和北坐標)從一個坐標系統轉換到另一個坐標系統。在轉換時不計算高程參數。該轉換方法需要確定4個參數(2個向東和向北的平移參數,1個旋轉參數和1個比例因子)。如果要保持GPS測量結果獨立並且有地方地圖投影的信息,那麼採用三維轉換方法最合適。
2、三維轉換
該方法基本操作步驟是利用公共點,也就是同時具有WGS84直角坐標和地方坐標的直角坐標的點位,一般需要3個以上重合點,通過布爾莎模型(或其他模型)進行計算,得到從一個系統轉換到另一個系統中的平移參數、旋轉參數和比例因子。
坐標轉換分類
1、大地坐標(BLH)對平面直角坐標(XYZ)
常規的轉換應先確定轉換參數,即橢球參數、分帶標准(3度,6度)和中央子午線的經度。橢球參數就是指平面直角坐標系採用什麼樣的橢球基準,對應有不同的長短軸及扁率。畫到直角坐標系可以寫為(x+z*acosθ,y+z*asinθ)a,θ為參數。
2、北京54全國80及WGS84坐標系的相互轉換
一種國際上採用的地心坐標系。坐標原點為地球質心,其地心空間直角坐標系的Z軸指向BIH (國際時間)1984.O定義的協議地球極(CTP)方向,X軸指向BIH 1984.0的零子午面和CTP赤道的交點,Y軸與Z軸、X軸垂直構成右手坐標系,稱為1984年世界大地坐標系統。
3、任意兩空間坐標系的轉換
由於測量坐標系和施工坐標系採用不同的標准,要進行精確轉換,必須知道至少3個重合點(即為在兩坐標系中坐標均為已知的點。採用布爾莎模型進行求解。
4. java經度緯度計算
一般假設小塊區域是平面。
先通過
緯度計算當地兩個經度之間的距離(不同緯度上,不同經度距離是不一樣的)
再計算兩個經度間的距離。然後反切就可以算出角度。
5. java如何用經緯度計算兩點水平和垂直距離
/**
*計算地球上任意兩點(經緯度)距離
*
*@paramlong1
*第一點經度
*@paramlat1
*第一點緯度
*@paramlong2
*第二點經度
*@paramlat2
*第二點緯度
*@return返回距離單位:米
*/
publicstaticdoubleDistance(doublelong1,doublelat1,doublelong2,
doublelat2){
doublea,b,R;
R=6378137;//地球半徑
lat1=lat1*Math.PI/180.0;
lat2=lat2*Math.PI/180.0;
a=lat1-lat2;
b=(long1-long2)*Math.PI/180.0;
doubled;
doublesa2,sb2;
sa2=Math.sin(a/2.0);
sb2=Math.sin(b/2.0);
d=2
*R
*Math.asin(Math.sqrt(sa2*sa2+Math.cos(lat1)
*Math.cos(lat2)*sb2*sb2));
returnd;
}
6. 如何計算經緯度之間的距離
計算經緯度之間的距離方法如下:
計算地球上經緯度之間的距離d,已知地球上兩點的經度、緯度:(X1,Y1), (X2,Y2),其中X1,X2為經度,Y1,Y2為緯度;
視計算程序需要轉化為弧度(*3.1415926/180)地球半徑為R=6371.0 km,則兩點距離d=R*arcos[cos(Y1)*cos(Y2)*cos(X1-X2)+sin(Y1)*sin(Y2)]。
假設在中國某地,桿影最短時是中午13點20分,且桿長與影長之比為1,則可知該地是北緯45°(tgα=1),東經100°(從120°里1小時減15°,4分鍾減1°)桿長與影長之比需查表求α。再算兩至日經度的演算法不變 緯度在北半球冬至α+23.5°,夏至α-23.5°在任意一天加減修正值即可。
(6)java經緯度計算距離擴展閱讀
經緯分度:
經度分為360度,每15度1個時區,其中0度的叫本初子午線,是第一個進入新一天的地方,然後向西每過1個時區就相差1小時。例如是早上5點,那麼向西一個時區就是早上4點,再過1個時區就是早上3點,依此類推,向東則相反,一直到本初子午線。
緯度赤道的緯度為0°,將行星平分為南半球和北半球。緯度是指某點與地球球心的連線和地球赤道面所成的線面角,其數值在0至90度之間。位於赤道以北的點的緯度叫北緯,記為N,位於赤道以南的點的緯度稱南緯,記為S。
緯度數值在0至30度之間的地區稱為低緯地區,緯度數值在30至60度之間的地區稱為中緯地區,緯度數值在60至90度之間的地區稱為高緯地區。
7. 怎樣計算兩個經緯度之間的距離 百度百科
地球赤道上環繞地球一周走一圈共 40075.04公里,而一圈分成360°,每1°(度)有60'。每一度一秒在赤道上的長度計算如下:
40075.04km/360°=111.31955km
111.31955km/60'=1.8553258km=1855.3m
每一分又有60秒,每一秒就代表 1855.3m/60=30.92m,任意兩點距離計算公式為:
d=111.12cos{1/[sinΦAsinΦB十 cosΦAcosΦBcos(λB-λA)]}(A點經度,緯度分別為λA和ΦA,B點的經度、緯度分別為λB和ΦB,d為距離)。
地球上所有地方的緯度一分的距離都是約等於1.86公里,也就是一度等於1.86*60=111公里。不同緯度處的經度線上的一分的實際長度是不同的,219國道基本在東經29-38度之間,29度處的一分經線長約1.63公里,38度處的一分經線長約1.47公里。
(7)java經緯度計算距離擴展閱讀:
在地球儀上,由經線和緯線就組成了經緯網;如果把經緯網地球儀展開,就形成了一幅平面的地圖。確定位置,在航空、航天、航海以及氣象等方面都有作用。「船在海上遇到危險時,如何去營救」等等,都要用到經緯網地圖。
經度 :為了區分地球上的每一條經線,人們給經線標注了度數,這就是經度。經度每15度1個時區。 實際上經度是兩條經線所在平面之間的夾角。國際上規定,把通過英國首都倫敦格林威治天文台原址的那一條經線定為0°經線,也叫本初子午線。
從0°經線算起,向東、向西各分作180°,以東的180°屬於東經,習慣上用「E」作代號,以西的180°屬於西經,習慣上用「W」作代號。東經180°和西經的180°重合在一條經線上,那就是東西180°經線。緯度:從赤道向北量度為「北緯」(N);向南量度為「南緯」(S)。
在地圖上判讀經度時應注意:從西向東,經度的度數由小到大為東經度;從西向東,經度的度數由大到小,為西經度;除0°和180°經線外,其餘經線都能准確區分是東經度還是西經度
8. java 經緯度轉換米
在經線上,相差一緯度約為111km ,因此100m(0.1KM)在經線上對應約為0.1/111=0.0009度,這個度數和緯度沒有關系
在緯線上,相差一經度約為111cosα(α為該緯線的緯度)因此100m(0.1KM)在該緯線上對應約為0.1/(111*cos23.14)=0.0009797度,這個度數和緯度有關,
如果要知道經緯度差和距離差的換算規律,請查閱連接中的回答。
http://..com/question/711399588905395965.html?oldq=1
9. 有沒有java大神使用過高德地圖通過經緯度計算距離的
/**
* 計算地球上任意兩點(經緯度)距離
*
* @param long1
* 第一點經度
* @param lat1
* 第一點緯度
* @param long2
* 第二點經度
* @param lat2
* 第二點緯度
* @return 返回距離 單位:米
*/
public static double Distance(double long1, double lat1, double long2,
double lat2) {
double a, b, R;
R = ; // 地球半徑
lat1 = lat1 * Math.PI / 180.0;
lat2 = lat2 * Math.PI / 180.0;
a = lat1 - lat2;
b = (long1 - long2) * Math.PI / 180.0;
double d;
double sa2, sb2;
sa2 = Math.sin(a / 2.0);
sb2 = Math.sin(b / 2.0);
d = 2
* R
* Math.asin(Math.sqrt(sa2 * sa2 + Math.cos(lat1)
* Math.cos(lat2) * sb2 * sb2));
return d;
}
10. 用java寫:求地球上任意兩個點之間的距離,知道這兩個點的經緯度
距離可以用r*arccos[cos(y1)*cos(y2)*cos(x1x2)+sin(y1)*sin(y2)]來算
r是地球半徑6370km,x是經度,y是緯度
注意角度單位的轉換。Math類里的sin和cos函數的參數是以弧度為單位的角度,所以x1、x2、y1、y2要用弧度表示,但一般經緯度都是用角度表示(如X1=120 東經120度)就要化成弧度(x1*Pi/180)
而acos函數返回值正好是以弧度為單位的,剛好符合要求
如果你的代碼里的lat1、lat2、lon1、lon2單位是角度,可以這么改
double radius=6371000;
double distance=radius*Math.acos((Math.cos(lat2*Math.PI/180)*Math.cos(lat2*Math.PI/180)*Math.cos(lon1*Math.PI/180-lon2*Math.PI/180)+Math.sin(lat1*Math.PI/180)*Math.sin(lat2*Math.PI/180)));
我算出來是903.9千米