在Repast Simphony中读取并显示1个或多个栅格文件

时间:2019-07-14 15:07:20

标签: gis raster shapefile geotools repast-simphony

我是使用Repast的GIS方面的新手。 代理必须从多个shapefile和2个栅格文件(基于经纬度,经度)获得像素值,以决定每个刻度的移动过程。 到目前为止,我首先创建了一个地理区域,然后将栅格覆盖范围添加到了该地理区域。

我的问题如下:

  1. 我的特工将在此地理区域中移动,所以我需要创建可写的网格覆盖范围(用于栅格和shapefile),然后将其添加到该地理区域中吗?

  2. 是否可以向地理区域添加2个栅格文件和3-4个shapefile?

  3. 如何从光栅文件读取数据?例如。来自植被栅格文件的NDVI索引。 (我正在看栅格图层类。)

  4. 所有上述文件都是按年份创建的。因此,我需要根据适当的刻度重新创建这些层。这种方法正确吗?但是,我的主要问题是,如何在重音同步中显示栅格数据?一些资源会很有用。

我已经使用org.geotools包读取geotif格式的栅格文件。

GeoTiffReader geoTiffReader = new GeoTiffReader(new File(filename));
GridCoverage2D coverage = (GridCoverage2D) geoTiffReader.read(null);
geography.addCoverage("coverage1", coverage);

现在,没有错误消息,因此我假设代码正确运行(显示打印stmts)并读取光栅文件。但是,显示栅格数据会很棒。

1 个答案:

答案 0 :(得分:2)

作为参考,我建议凝视Repast Geography演示模型,关于coverage的GIS文档(https://repast.github.io/docs/RepastReference/RepastReference.html#gis-raster)和GeoTools GridCoverage API(http://docs.geotools.org/latest/userguide/library/coverage/grid.html)。 Repast Geography投影和显示与GeoTools GridCoverage2D实现完全兼容。您可以使用GeoTools阅读器来创建示例中所描述的coverage,也可以使用RepastCoverageFactory创建WritableGridCoverage2D,它们只是Repast中GridCoverage2D的自定义实现,允许代理将其写入内存中的coverage。 >

如果您的代理仅需要从coverage中读取,则可以使用GeoTools阅读器加载栅格文件并通过geography.addCoverage(“ MyCoverage”,coverage)分配给地理,并且可以添加多达你喜欢。您还可以根据需要将来自shapefile的任意座席层添加到地理区域。 Repast Geography演示中也对此进行了证明。

一个警告是,coverage的栅格数据和agent的shapefile应该使用相同的CRS和投影。 Repast Geography假定该地理图形中的所有GIS数据都在同一投影中。此外,GIS3D显示要求数据在WGS84中。 GeoTools提供了用于即时转换的实用程序,但如果需要,我建议在外部GIS工具(如ArcGIS或QGIS)中进行重新投影。

要引用已加载的coverage,座席可以调用geography.getCoverage(coverageName),您可以使用geography.removeCoverage(coverageName)删除coverage。代理拥有覆盖实例后,便可以直接通过

从中读取值
double[] value = null;
DirectPosition pos = new DirectPosition2D(loc.x, loc.y);
coverage.evaluate(pos,value);

值的类型取决于栅格文件中的数据,例如浮点数,整数,字节等。值数组将包含对应于该位置的每个波段的所有值,因此您需要知道如何为栅格文件建立索引-通常可以从下载文件的位置获得规格。对于NDVI栅格文件,索引可能是double或float,并且可能是数组中的唯一值。

您当然可以在不同的滴答处添加和删除coverage图层,以模拟随时间的变化。只需确保代理行为的排序考虑到了这一点,例如覆盖范围应在滴答开始时进行更新,以使座席每个滴答都使用新数据。您可以创建负责更新的图层管理器​​代理。尽管我还没有在显示器上进行测试,但是基于刻度线删除和添加图层应该没有任何问题,所以我不确定会在视觉上产生影响。

要显示覆盖层,您需要使用GIS3D显示,然后在Repast运行时中使用显示向导简单地添加覆盖层。您可以在一个显示器中包括多个覆盖层。 Coverage图层需要CoverageStyle才能确定栅格中的数据如何转换为图像。某些光栅文件在独立的特定颜色图上建立了索引,您可以首先尝试使用DefaultCoverageStyle,这是“显示”向导中的默认选项。或者,您可以提供CoverageStyle类,并使用它来指定栅格数据如何确定显示颜色。 CoverageStyle返回一个GeoTools RasterSymbolizer实例,并且在BlueCoverageStyle类的Geography演示中可以找到一个示例。