㈠ 已知两点的经度和纬度数值,怎么计算两点间的距离
甲位置(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天,即太阳直射点在南纬。