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

时间:2017-05-18 00:46:47

标签: java double geospatial geofencing anylogic

我尝试按地理区域对AnyLogic GISRegions的集合进行排序。所述区域使用GISRegion.area(units)计算,这足够简单。但是,我使用的区域是城市规模,方法返回double。这似乎会导致溢出问题:

enter image description here

我不认为我的代码出错了,所以这可能是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用户,我在每个地理位置都有所有的lat-long点。我如何使用这些点来计算面积?

1 个答案:

答案 0 :(得分:1)

[不是一个完整的答案,但这些想法对于评论来说太长了。]

我假设您已经提出了AnyLogic支持请求,因为它似乎100%是一个错误。由于这只是一个基本的“计算区域”函数,除了你所建议的,从你所拥有的顶点纬度/长度以另一种方式计算它,我无法看到它的任何方式,并且可以通过{{ 1 {} getPoints()

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

glennon对this GIS StackOverflow question声称执行计算的答案有代码(或者你可以像在fmark的答案中那样挂钩到PostGIS)。