1

我是使用 Repast 的 GIS 方面的新手。代理必须从多个 shapefile 和 2 个光栅文件(基于纬度、经度)中获取像素值,以便在每个滴答声中决定它们的运动路线。到目前为止,我首先创建了一个地理,然后将栅格覆盖添加到地理。

我的问题如下:

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

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

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

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

我使用了 org.geotools 包来读取 geotif 格式的光栅文件。

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

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

4

1 回答 1

3

对于参考,我建议盯着 Repast Geography 演示模型、关于覆盖率的 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 阅读器来创建您在示例中描述的覆盖,或者您可以使用 RepastCoverageFactory 创建 WritableGridCoverage2D,它们只是 Repast 中 GridCoverage2D 的自定义实现,允许代理写入内存中的覆盖。

如果您的代理只需要从 coverage 中读取,那么您可以使用 GeoTools 读取器加载栅格文件并通过 geography.addCoverage("MyCoverage", coverage) 分配给地理,您可以添加任意数量的内容。您还可以根据需要从 shapefile 向地理添加任意数量的代理层。这也在 Repast Geography 演示中得到了展示。

需要注意的是,coverage 的栅格数据和代理的 shapefile 应使用相同的 CRS 和投影。Repast Geography 假设 geograpy 中的所有 GIS 数据都在同一个投影中。此外,GIS3D 显示需要 WGS84 格式的数据。GeoTools 提供了用于即时转换的实用程序,但如果需要,我建议在 ArcGIS 或 QGIS 等外部 GIS 工具中重新投影。

要引用加载的覆盖,代理可以调用​​ geography.getCoverage(coverageName),您可以使用 geography.removeCoverage(coverageName) 删除覆盖。一旦代理拥有了覆盖实例,它就可以通过以下方式直接从中读取值

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

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

您当然可以在不同的滴答声中添加和删除覆盖层,以模拟随时间的变化。只需确保代理行为的排序考虑到这一点,例如覆盖率应在滴答开始时更新,以便代理在每个滴答时使用新数据。您可以创建一个负责更新的图层管理器​​代理。根据刻度删除和添加图层应该没有任何问题,虽然我没有用显示器测试过这个,所以我不确定这会在视觉上产生影响。

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

于 2019-07-17T13:32:25.433 回答