我正在尝试按其地理区域对AnyLogic GISRegions
的集合进行排序。所述面积是使用GISRegion.area(units)
计算的,这很简单。但是,我正在使用的区域是城市规模,并且该方法返回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用户,我在每个几何形状中都有所有经纬度点。如何使用这些点计算面积?
最佳答案
[不是一个完整的答案,但是这些想法太久了,无法发表评论。]
我认为您提出了AnyLogic支持请求,因为它似乎是100%的错误。由于这只是一个基本的“计算区域”函数,因此,除了您建议的那样,除了从您拥有的顶点纬度/经度以另一种方式进行计算(可以通过在getPoints()
上。
由于这只是一个N边的多边形,所以肯定必须有标准的Java库可以计算出该值,尽管这不允许GIS投影(不确定可能会引入何种程度的错误);您希望开放的GIS库能够应对后者。由于GISRegion
具有用于创建OpenMap standard(?)格式图形的GISRegion
方法,如果这是其他库可以使用的标准格式,则可能会很有用。
格伦农对this GIS StackOverflow question的答案中有代码声称可以执行计算(或者您可以像fmark的答案一样挂接到PostGIS)。