㈠ 已知兩點的經度和緯度數值,怎麼計算兩點間的距離
甲位置(A1,B1)
乙位置(A2,B2)
甲乙距離=√(A1-A2)²+(B1-B2)²
總的來說,由於地球不是一個規則的球體,因此距離比較難計算。但是我們可以把他當作一個規則球體進行計算,將地球的平均半徑作為其半徑R。設地球上某點的經度為A,緯度為B, 則這點的空間座標是
x=cos(B)*cos(A)
y=cos(B)*sin(A)
z=sin(B)
設地球上兩點的空間座標分別為(x1,y1,z1),(x2,y2,z2) 則它們的夾角為 C=acos(x1*x2+y1*y2+z1*z2),C是角度,則兩地距離為 C/180*pi*R,其中R為地球平均半徑6371 誤差不超過1%
已知兩點多經緯度,兩點之間的距離等於經緯度之差乘以111(千米)。比如某處甲座標為東經100度,乙處座標為東經110度,則甲乙距離是1110千米。
設地球半徑為R,地心為0,球面上兩點A、B的球面座標為A(α1,β1),B(α2,β2),α1、α2∈[-π,π],β1、β2∈[-π/2,π/2 ],
AB =R•aros[cosβ1cosβ2cos(α1-α2)+sinβ1sinβ2]
利用勾股定理與正弦定理則可求出AB兩點間的直線距離,
用以知兩地經緯度求距離不科學
因為沒有換算公式且地球本身就是一個球體需要球面三角和很多的常數來計算
/**
* 計算地球上任意兩點(經緯度)距離
*
* @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 = 6378137; 地球半徑
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, *** 2;
sa2 = Math.sin(a / 2.0);
*** 2 = Math.sin(b / 2.0);
d = 2
* R
* Math.asin(Math.sqrt(sa2 * sa2 + Math.cos(lat1)
* Math.cos(lat2) * *** 2 * *** 2));
return d;
}
雖然緯度相同,但是同是30度和同是60度求出來的球面距離是不一樣的
具體方法
1、求出同緯度上的AB兩點的直線距離M(需要先求該緯度上小圓的半徑r)
2、求出以大圓半徑R為腰,M為底的等腰三角形頂角度數α(弧度也可以)
3、知道大圓半徑R和圓心角α求弧長L(這個就不用說了吧)
r=R×cosθ(θ為緯度數)
M=r×√2
α=aros[(2R²-M²)/2R²]=aros(1-cos²θ)
曼哈頓距離,(経度差平方+緯度差平方)再開方
假設球半徑為R,設緯度為b(取絕對值,b>0),所在緯度圓面半徑是Rco *** 。
設球心角為c,兩點距離就是cRco *** 。(利用扇形弧長度公式:周長=半徑X弧度)
c是弧度制。
㈡ 用java 根據兩地經緯度,可以精確算出兩地之間的距離嗎。
精確可能不行,比較地球不是完全的圓形。不過粗略的是可以計算出來的
㈢ 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;
}
㈣ 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
㈤ 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 = 6378137; // 地球半徑
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;
}
㈥ 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;
}
㈦ 有沒有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;
}
㈧ 如何根據經緯度計算距離的java代碼
思路是:通過傳入地址作為參數拼接url調用網路地圖,然後解析返回的頁面,提取經緯度坐標。以下為具體步驟1、修改excel表中的屬性名(方便後面用查詢讀取)然後倒入到資料庫。2、代碼實現
㈨ JAVA,已知當前經緯度和距離,計算符合距離條件的經度最大值、最小值和緯度的最大值、最小值。
自己算太麻煩了吧,用已有的工具包不行么?
如果支持GEO的話可以用spatial4j,不需要GEO用jts,畫個圓,取外切框就行吧
6378137這個數,是赤道的6378.137,南北極的是6371.0087714
㈩ 經緯度怎樣計算相距多遠
1、在緯度相等的情況下:
經度每隔0.00001度,距離相差約1米;
每隔0.0001度,距離相差約10米;
每隔0.001度,距離相差約100米;
每隔0.01度,距離相差約1000米;
每隔0.1度,距離相差約10000米。
2、在經度相等的情況下:
緯度每隔0.00001度,距離相差約1.1米;
每隔0.0001度,距離相差約11米;
每隔0.001度,距離相差約111米;
每隔0.01度,距離相差約1113米;
每隔0.1度,距離相差約11132米。
計算方法
1、先算兩分日
比如在中國某地,桿影最短時是中午13點20分,且桿長與影長之比為1,則可知該地是北緯45°(tgα=1),東經100°(從120°里1小時減15°,4分鍾減1°)桿長與影長之比需查表求α,這里用了特殊角。
2、再算兩至日經度的演算法不變 緯度在北半球冬至α+23.5°,夏至α-23.5°在任意一天加減修正值即可。
3、修正值演算法:就是距兩分或兩至日的天數差乘以94/365. 比如2013年2月17日,2013年3月22日春分差33天,即太陽直射點在南緯。