gpt4 book ai didi

exception - Geotools 距离计算失败,几个经纬度点没有收敛异常

转载 作者:行者123 更新时间:2023-12-02 22:57:19 27 4
gpt4 key购买 nike

我有很多点导致 getOrthodromicDistance 方法在 geotools lib 中失败并出现异常,而这些点是有效的经纬度点:

抛出异常的点(纬度,经度):

val p1= (5.318765,-75.786109)
val p2= (-6.32907,106.09254)

例如异常: 75°47,2'W 06°19,7'S 和 106°05,6'E 05°19,1'N 点没有收敛。java.lang.ArithmeticException:点 75°47,2'W 06°19,7'S 和 106°05,6'E 05°19,1'N 没有收敛。 在 org.geotools.referencing.GeodeticCalculator.computeDirection(GeodeticCalculator.java:1073)

Scala 中使用的代码:

  def latlonDistance(p1:(Double,Double), p2:(Double,Double)):Double={
val world= new GeodeticCalculator()
world.setStartingGeographicPoint(p1._2, p2._1)
world.setDestinationGeographicPoint(p2._2, p1._1)
world.getOrthodromicDistance
}

注意:我在 latlonDistance 中传递的点格式是 (lat,lon) 如上所述,而 setStartingGeographicPoint、setDestinationGeographicPoint 需要 (lon,lat)订单。

使用的版本:

        <dependency>
<groupId>org.geotools</groupId>
<artifactId>gt-referencing</artifactId>
<version>13.2</version>
</dependency>

在 python 中按预期工作:

>>> from geopy.distance import vincenty
>>> pt1= [5.318765,-75.786109]
>>> pt2= [-6.32907,106.09254]
>>> vincenty(pt1 , pt2)
Distance(19791.6883647)

这是 org.geotools.referencing.datum.DefaultEllipsoid 中的 orthodromicDistance 方法不收敛。有什么解决方法吗?

最佳答案

问题是,这不是一个简单的计算,因为 Vincenty 算法是一个迭代过程,并且一些 sets of points不一定收敛(在限制范围内)。

有两种可能的解决方案 1 - 编辑 GeodeticCalculator 将可能的迭代次数从 12 增加到 15,这在这种情况下有效,但我不能保证在其他情况下也有效。或者 2 使用另一种算法,遵循来自 this question's answers 的链接我找到了GeographicLib library在 Sourceforge 并用它来代替你的观点。它是由 paper 的作者 (@cffk) 编写的。链接到另一个答案。

就您的观点而言,它给出的 20004 公里看起来非常合理。

关于exception - Geotools 距离计算失败,几个经纬度点没有收敛异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31964589/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com