Geotools距离计算失败,几个lat lon点没有收敛异常

我有一些点使getOrthodromicDistance方法失败,在geotools lib中有异常,而这些点是有效的lat lon点:

抛出异常的点(lat,lon):

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的链接之后我在Sourceforge找到了GeographicLib library并用你的点代替了它.它由paper的作者(@cffk)在其他答案中链接.

对于你的观点,它给出了一个非常合理的20004公里.

点赞