当前位置: 首页 > 知识库问答 >
问题:

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

史朗
2023-03-14

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

我的问题如下:

>

  • 我的代理将在这种地理环境中移动,所以我是否需要创建可写的网格覆盖(针对光栅和形状文件),然后将其添加到地理环境中?

    是否可以向地理添加2个光栅文件和3-4个形状文件?

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

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

    我用过这个组织。geotools软件包,用于读取geotif格式的光栅文件。

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

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

  • 共有1个答案

    鲜于玮
    2023-03-14

    作为参考,我建议先看一下就餐地理演示模型,即关于覆盖范围的GIS文档(https://repast.github.io/docs/RepastReference/RepastReference.html#gis-以及GeoTools GridCoverage API(http://docs.geotools.org/latest/userguide/library/coverage/grid.html).就餐地理投影和显示与GeoTools GridCoverage 2D实现完全兼容。您可以使用GeoTools阅读器创建示例中描述的覆盖范围,也可以使用RepastCoverageFactory创建可写GridCoverage2D,这只是Repast中GridCoverage2D的自定义实现,允许代理在内存中写入覆盖范围。

    如果代理只需要读取覆盖范围,则可以使用GeoTools读卡器加载光栅文件,并通过“地理”指定给地理位置。addCoverage(“MyCoverage”,coverage),你可以随意添加。还可以根据需要从ShapeFile向地理位置添加任意多的代理层。就餐地理演示中也演示了这一点。

    一个警告是覆盖范围的光栅数据和代理的形状文件应该使用相同的CRS和投影。Repast Geography假设地理中的所有GIS数据都在同一个投影中。此外,GIS3D显示要求数据在WGS84中。GeoTools提供了动态转换的实用程序,但如果需要,我建议在ArcGIS或QGIS等外部GIS工具中重新投影。

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

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

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

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

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

     类似资料:
    • 我有50多个需要裁剪的光栅文件(ASCII格式)。我已经以ASCII格式从ArcMap导出了遮罩,并将其加载到R中。如何使其适用于一行中的所有光栅,并以与之前相同的名称导出它们(当然是在不同的文件夹中,以避免覆盖)? 我知道光栅软件包中有裁剪功能,但到目前为止我从未使用过。我只是把它们堆放起来做进一步的栖息地分析。 到目前为止,我的代码:

    • 我在on文件夹的几个zip文件中有几个csv文件,例如: null zip中的一个csv是这样工作的: 你知道如何优化这个循环吗?

    • 问题内容: 我喜欢新的Java8 StreamAPI,并希望不仅将其用于一个文件。通常,我使用以下代码: 但是,如果可能的话,如何在一个流中读取两个文件呢? 问题答案: 没有任何额外的帮助程序功能或外部库,最简单的方法是: 如果尚未声明抛出受检查的异常,则可以 但是,a,我们不能这样做。有几种解决方法。一种是制作自己的版本,将其称为标准版本,然后将其作为捕获并重新抛出。另一种方法是使用抛出检查异常

    • 我正在使用python,我有一个文件(

    • 我对JavaFX和JavaFX Scene Builder是新手,几个星期以来一直在研究并试图弄清楚如何简单地从文本文件中读取并在文本中显示其内容。我的controller类中有一个很好的文件读取功能,但我不知道如何将文本文件显示到fxml文档中的文本区域。我已经学会了如何单击按钮并使文件显示在文本区域中,但我希望GUI加载后立即在文本区域中显示内容。如果任何人有一个想法如何去做这件事,你的帮助将

    • 我有几个目录,里面都是每日的气候数据。我需要将每日栅格合并为每周栅格,一些是通过值的总和,一些是通过值的平均值。到目前为止,我已经在目录(其中包含每日光栅文件)中创建了一个文件名向量,并为编写了一个