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

Gis 在Repast Simphony中读取并显示1个或多个光栅文件,gis,raster,shapefile,geotools,repast-simphony,Gis,Raster,Shapefile,Geotools,Repast Simphony,我对使用地理信息系统就餐还不熟悉。 代理必须从多个shapefile和2个光栅文件(基于lat和long)中获取像素值,以确定它们在每个滴答声中的移动路线。 到目前为止,我首先创建了一个地理位置,然后将光栅覆盖率添加到地理位置 我的问题如下: 我的代理将在此地理位置中移动,因此我是否需要创建可写网格覆盖(针对光栅和形状文件),然后将其添加到地理位置 是否可以将2个光栅文件和3-4个形状文件添加到地理位置 如何从光栅文件中读取数据?例如,植被光栅文件中的NDVI指数。 (我正在查看光栅图层类。)

我对使用地理信息系统就餐还不熟悉。 代理必须从多个shapefile和2个光栅文件(基于lat和long)中获取像素值,以确定它们在每个滴答声中的移动路线。 到目前为止,我首先创建了一个地理位置,然后将光栅覆盖率添加到地理位置

我的问题如下:

  • 我的代理将在此地理位置中移动,因此我是否需要创建可写网格覆盖(针对光栅和形状文件),然后将其添加到地理位置

  • 是否可以将2个光栅文件和3-4个形状文件添加到地理位置

  • 如何从光栅文件中读取数据?例如,植被光栅文件中的NDVI指数。 (我正在查看光栅图层类。)

  • 上述所有文件都是按年创建的。所以,我需要根据适当的记号重新创建这些层。这种方法正确吗?但是,我的主要问题是,如何在repast simphony中显示光栅数据?一些资源将是有用的

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

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

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

    对于参考资料,我建议从Repast Geographic演示模型、关于覆盖率的GIS文档()和GeoTools GridCoverage API()开始。Repast地理投影和显示与GeoTools GridCoverage 2D实现完全兼容。您可以使用GeoTools读取器创建示例中描述的覆盖范围,也可以使用RepastCoverageFactory创建可写GridCoverage2D,这只是Repast中GridCoverage2D的自定义实现,允许代理在内存中写入覆盖范围

    如果您的代理只需要读取覆盖范围,那么您可以使用GeoTools阅读器加载光栅文件,并通过geography.addCoverage(“MyCoverage”,coverage)分配给地理位置,并且您可以添加任意数量的覆盖范围。您还可以将任意多个代理层从ShapeFile添加到地理位置。就餐地理演示中也演示了这一点

    需要注意的是,覆盖率的光栅数据和代理的形状文件应使用相同的CRS和投影。就餐地理假定地理图中的所有GIS数据都在同一投影中。此外,GIS3D显示要求数据在WGS84中。GeoTools提供了用于动态转换的实用程序,但如果需要,我建议在外部GIS工具(如ArcGIS或QGIS)中重新投影

    要引用加载的覆盖范围,代理可以调用geography.getCoverage(coverageName),您可以使用geography.removeCoverage(coverageName)删除覆盖范围。一旦代理拥有覆盖率实例,它就可以通过

    double[] value = null;
    DirectPosition pos = new DirectPosition2D(loc.x, loc.y);
    coverage.evaluate(pos,value);
    
    值的类型将取决于光栅文件中的数据,例如浮点、int、byte等。值数组将包含与位置相对应的每个标注栏的所有值,因此您需要知道光栅文件是如何索引的-通常可以从下载文件的位置获得规格。对于NDVI光栅文件,索引可能是双精度或浮点型,并且可能是阵列中的唯一值

    您当然可以在不同的时间点添加和删除覆盖层,以模拟随时间的变化。只需确保代理行为的顺序考虑到这一点,例如,覆盖范围应在勾号开始时更新,以便代理在每个勾号使用新数据。可以创建负责更新的图层管理器代理。基于勾号删除和添加图层应该不会有任何问题,尽管我还没有用显示器测试过,所以我不确定这是否会对视觉产生影响


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

    谢谢,Eric。你的回答很有帮助。