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千米