AnyLogic:补偿 GISRegion.area() 中的双重溢出

AnyLogic: compensating for double overflow in GISRegion.area()

我正在尝试按地理区域对 AnyLogic GISRegions 的集合进行排序。所说的面积是用GISRegion.area(units)计算出来的,很简单。然而,我使用的区域是城市规模的,方法 returns a double。这似乎会导致溢出问题:

我认为我的代码没有做错任何事情,所以大概这是一个 AnyLogic 问题。为简洁起见,我包含了一行打印每个区域的面积而不是排序步骤:

// For each region of the Australian Capital Territory, print its area in km^2:
areas.forEach(next -> traceln(""+next.name+": " + next.gisRegion.area(SQ_KILOMETER)));

有人遇到过这个问题吗?你是怎么解决的?

对于非 AnyLogic 用户,我在每个 geoshape 中都有所有经纬度点。我如何使用这些点计算面积?

[不是一个完整的答案,但是想法太长了无法发表评论。]

我假设您提出了 AnyLogic 支持请求,因为它似乎 100% 是一个错误。由于这只是一个基本的 'calculate area' 函数,除了如您所建议的那样,从您拥有的顶点 lat/longs 以另一种方式计算它,我看不到任何其他方法,并且可以得到通过 GISRegion 上的 getPoints()

因为这只是一个 N 边形多边形,当然必须有标准的 Java 库可以计算它,尽管这不允许 GIS 投影(不确定可能引入什么级别的错误) ;您会期望开放式 GIS 库能够应对后者。由于 GISRegion 有一个 createOMGraphicObject() 方法来创建 OpenMap 标准(?)格式图形,如果这是其他图书馆可以使用的标准格式,这可能很有用。

glennon 对 this GIS Whosebug question 的回答中有代码声称可以执行计算(或者您可以像 fmark 的回答那样连接到 PostGIS)。