我需要在我的java代码中实现harvesine距离。
我在Javascript中找到了这个代码段,我需要将其转换为java。
感谢
dLat = (lat2-lat1).toRad();
dLon = (lng2-lng1).toRad();
a = Math.sin(dLat/2) * Math.sin(dLat/2) +
Math.cos(lat1.toRad()) * Math.cos(lat2.toRad()) *
Math.sin(dLon/2) * Math.sin(dLon/2);
c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
d = R * c;
return d;
答案 0 :(得分:7)
首先,您应该阅读javadoc。 sin(double)在参数中采用double
,这是弧度中的角度,如文档中所述。您还可以在链接页面上找到sqrt也需要加倍。
然后,您应该知道java可以自动执行非破坏性转换。因此,如果一个方法需要一个双倍并且你有一个很长的时间,那就不会有问题,因为转换长期没有损失 - >双。反之亦然,因此Java拒绝编译。
对于弧度转换,您将在Math类中找到toRadians方法。
答案 1 :(得分:5)
degrees * Math.PI / 180
。或者更好地使用评论中 coobird 建议的功能(不知道)。double
参数。检查the docs。答案 2 :(得分:2)