2经度和纬度之间的中点

我想在这个http://www.movable-type.co.uk/scripts/latlong.html给到Java的代码片段转换。 但我没有得到相同的结果网站。 这是我的代码,以找到两个点之间的中点,其中他们的纬度和经度给出

midPoint(12.870672,77.658964,12.974831,77.60935); public static void midPoint(double lat1,double lon1,double lat2,double lon2) { double dLon = Math.toRadians(lon2-lon1); double Bx = Math.cos(lat2) * Math.cos(dLon); double By = Math.cos(lat2) * Math.sin(dLon); double lat3 = Math.atan2(Math.sin(lat1)+Math.sin(lat2),Math.sqrt( (Math.cos(lat1)+Bx)*(Math.cos(lat1)+Bx) + By*By) ); double lon3 = lon1 + Math.atan2(By, Math.cos(lat1) + Bx); System.out.print(lat3 +" " + lon3 ); }

我不知道whethe dLon正确与否。 所以,请帮我家伙看着办吧。 PSI需要找到中间点的纬度和经度

--------------解决方案-------------

你需要转换为弧度。 将其更改为以下几点:

public static void midPoint(double lat1,double lon1,double lat2,double lon2){

double dLon = Math.toRadians(lon2 - lon1);

//convert to radians
lat1 = Math.toRadians(lat1);
lat2 = Math.toRadians(lat2);
lon1 = Math.toRadians(lon1);

double Bx = Math.cos(lat2) * Math.cos(dLon);
double By = Math.cos(lat2) * Math.sin(dLon);
double lat3 = Math.atan2(Math.sin(lat1) + Math.sin(lat2), Math.sqrt((Math.cos(lat1) + Bx) * (Math.cos(lat1) + Bx) + By * By));
double lon3 = lon1 + Math.atan2(By, Math.cos(lat1) + Bx);

//print out in degrees
System.out.println(Math.toDegrees(lat3) + " " + Math.toDegrees(lon3));
}

您需要您将在其他公式为弧度也用纬度和经度值。 您可以在一路下跌的页面代码〜3 / 5ths看到这一点。 线索在余弦距离公式的球面法律的最后给定:

(注意,这里和所有后续的代码片段,为简单起见我没有表现从角度到弧度的转换;请参阅下面的完整版本)。

我最后的工作,我做了一个跟踪模块,我就是用这个公式来计算2坐标之间的距离。

//Location lat and lon
double locLat = -23.548333;
double locLon = -46.636111;

//Destination lat and lon
double dstLat = -22.902778;
double dstLon = -43.206667;

double arcoAB = 90 - (dstLat);
double arcoAC = 90 - (locLat);

double difLon = locLon - (dstLon);

double cosA = Math.cos(Math.toRadians(arcoAC)) * Math.cos(Math.toRadians(arcoAB)) + Math.sin(Math.toRadians(arcoAC)) * Math.sin(Math.toRadians(arcoAB)) * Math.cos(Math.toRadians(difLon));
double acosCosA = Math.toDegrees(Math.acos(cosA));

double raio = 2 * Math.PI * 6371;
double distance = (raio * acosCosA) / 360;

return distance; //Distance in KM, convert to anything else (miles, meters..) if you need..

你可以得到中间点除以2的距离。

啊,这是其他公式也工作:

double dLat = Math.toRadians(dstLat - locLat);
double dLon = Math.toRadians(dstLon - locLon);

double a = Math.sin(dLat / 2) * Math.sin(dLat / 2)
+ Math.cos(Math.toRadians(locLat)) * Math.cos(Math.toRadians(dstLat))
* Math.sin(dLon / 2) * Math.sin(dLon / 2);
double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
double d = 6371 * c;

return d; //Distance in KM

分类:java的 时间:2015-03-15 人气:0
本文关键词: 的java,地图,数学
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.417 (s). 10 q(s)