当前位置: 首页 > 知识库问答 >
问题:

java中两个地理位置之间的距离:NaN

子车鸿运
2023-03-14

我有http://www.codereye.com/2010/10/how-to-calculate-distance-between-2.html的这段代码,它根据两个IP地址对应的纬度和经度计算它们之间的大致物理距离。

public static double distance(double lat1, double lon1, double lat2, double  lon2) 
{
double theta = lon1 - lon2;
double dist = Math.sin(deg2rad(lat1)) * Math.sin(deg2rad(lat2)) + 
Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2)) * Math.cos(deg2rad(theta));

dist = Math.acos(dist);
dist = rad2deg(dist);
dist = dist * 60 * 1.1515;
return (dist);
}

lat和long是有符号值。但是,此代码有时会将dist返回为NaN。

我错过什么了吗?θ需要是绝对值吗?

更新:返回南的测试值:-

lat1=-23.5477,lon1=-46.6358,lat2=-23.5477,lon2=-46.6358

lat1=53.3331,lon1=-6.2489,lat2=53.3331,lon2=-6.2489

共有1个答案

晏炳
2023-03-14

似乎当两个输入点相同时,以下表达式返回略高于1 (1.0000000000000002)的结果。

double dist = Math.sin(deg2rad(lat1)) * Math.sin(deg2rad(lat2)) + 
              Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2)) * Math.cos(deg2rad(theta));

这必须是浮点运算精度有限(或三角函数精度有限)的结果。

数学。acos(dist)如果dist返回NaN

dist = Math.acos(dist);

dist = Math.acos(Math.min(dist,1));
 类似资料:
  • 问题内容: 我需要测量以字符串形式提供名称的两个地方之间的物理距离。由于有时名称的书写方式略有不同,因此我一直在寻找一个可以帮助我测量差异的库,然后将其与纬度和经度结合起来以选择正确的匹配项。首选语言:Java或PHP。 有什么建议? 问题答案: 看看Levenshtein距离。这是一种测量两个字符串彼此之间有多不同的方法。 希望我能正确理解你的问题;在与“经度”相同的句子中使用“距离”可能会造成

  • 但是这个示例将敲击位置作为源位置和目标位置。但是我需要给出lat/lang值&需要计算这两个位置的距离和时间值。我怎么做呢?谢谢。

  • 本文向大家介绍PHP实现搜索地理位置及计算两点地理位置间距离的实例,包括了PHP实现搜索地理位置及计算两点地理位置间距离的实例的使用技巧和注意事项,需要的朋友参考一下 地理位置搜寻 LBS,存储每个地点的经纬度坐标,搜寻附近的地点,建立地理位置索引可提高查询效率。 mongodb地理位置索引,2d和2dsphere,对应平面和球面。 1.创建lbs集合存放地点坐标 2.创建地理位置索引 3.查询附

  • 问题内容: 我在查询中使用带轮胎的过滤器,效果很好: 我希望结果将以某种方式包括我用于过滤器的地理位置的计算距离。 有没有办法告诉Elasticsearch在响应中包括它,这样我就不必为每个结果都用ruby计算它? ==更新== 我在一个Google网上论坛中找到了答案: 按排序将得出原始结果中的距离。 问题答案: 排序依据将返回结果中的距离:http : //www.elasticsearch.

  • 问题内容: 我从互联网上的某个地方借用了以下方法(不记得在哪里)。但是它做的很简单,找到了两个gps点之间的距离。它工作得很好,除了它可能有点慢之外,因为我正在数百万个点上运行它。我想知道是否有人知道这种方法在计算上会更便宜。 准确度必须在“正确”的一般范围内,但不必是100%准确。 附言:我确实确实发现了许多其他相关问题,但是它们并没有真正关注我的速度问题。 问题答案: 如果您不介意忽略地球的微

  • 问题内容: 我正在使用JMap Viwer在Java中使用OpenStreet Maps http://wiki.openstreetmap.org/wiki/JMapViewer我可以加载地图,一切正常,但是我不知道如何从纬度在两点之间绘制一条线和经度。 任何人都知道画这种线的功能吗? 谢谢。 问题答案: 该方法对于这个作品,但默默拒绝有少于三个顶点的多边形。对于两点之间的直线,只需重复最后一个