首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Repast Simphony中读取和显示一个或多个光栅文件

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

Stack Overflow用户
提问于 2019-07-14 15:07:20
回答 1查看 146关注 0票数 1

我是新的使用地理信息系统方面的Repast。代理必须从多个形状文件和2个栅格文件(基于lat,long)中获取像素值,以确定它们在每一个滴答的移动过程。到目前为止,我首先创建了一个地理,然后添加了光栅覆盖的地理。

我的问题如下:

  1. 我的代理将在这个地理位置移动,所以我是否需要创建可写的网格覆盖(用于栅格和shapefiles),然后将其添加到地理位置?
  2. 是否可以在地理上增加2个光栅文件和3-4个形状文件?
  3. 如何从光栅文件读取数据?例如,植被光栅文件中的NDVI索引。(我在看Raster Layer课程。)
  4. 上述所有文件都是按年创建的。因此,我需要重建这些层,根据适当的滴答。这个方法正确吗?然而,我的主要问题是,如何在晚餐模拟电话中显示光栅数据?一些资源将是有用的。

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

代码语言:javascript
复制
GeoTiffReader geoTiffReader = new GeoTiffReader(new File(filename));
GridCoverage2D coverage = (GridCoverage2D) geoTiffReader.read(null);
geography.addCoverage("coverage1", coverage);

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

EN

回答 1

Stack Overflow用户

发布于 2019-07-17 13:32:25

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

如果您的代理只需要从覆盖率读取,那么您可以使用GeoTools读取器加载光栅文件,并通过geography.addCoverage("MyCoverage",coverage)将其分配给地理位置,您可以添加任意数量的内容。您还可以从shapefiles添加任意多个代理层到地理位置。在Repast地理演示中也演示了这一点。

一个警告是,覆盖层的栅格数据和代理的形状文件应该使用相同的CRS和投影。Repast地理假定地理信息系统中的所有数据都在同一个投影中。此外,GIS3D显示要求数据在WGS84中。GeoTools提供即时转换的实用程序,但如果需要,我建议在外部ArcGIS或QGIS工具中重新投影。

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

代码语言:javascript
复制
double[] value = null;
DirectPosition pos = new DirectPosition2D(loc.x, loc.y);
coverage.evaluate(pos,value);

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

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

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57028598

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档