【问题标题】:Read and display 1 or more raster files in Repast Simphony在 Repast Simphony 中读取并显示 1 个或多个光栅文件
【发布时间】:2019-07-14 15:07:20
【问题描述】:

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

我的问题如下:

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

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

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

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

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

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

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

【问题讨论】:

    标签: gis raster shapefile geotools repast-simphony


    【解决方案1】:

    对于参考,我建议关注 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 的自定义实现,允许代理写入内存中的覆盖。

    如果您的代理只需要读取覆盖范围,那么您可以使用 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);
    

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

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

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

    【讨论】:

    • 谢谢,埃里克。您的回复很有帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-12
    • 1970-01-01
    • 1970-01-01
    • 2020-03-06
    • 2021-06-21
    相关资源
    最近更新 更多