问题标签 [geotrellis]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
487 浏览

raster - Java 或 scala、GeoTools 或 GeoTrellis,如何将 sentinel 2 数据转换为 Multiband geotif

我正在尝试处理来自(示例)的 Sentinel 2 数据

http://sentinel-s2-l1c.s3-website.eu-central-1.amazonaws.com/#tiles/10/S/EG/2016/10/12/0/

jp2 文件没有地理参考,我需要将所有 jp2 文件作为带放在 geotif 中。我用谷歌搜索了很多,但找不到在 Java 或 Scala 中执行此操作的方法。

我对 Geotools 很熟悉,我用 geotools 做了很多 geotif 处理,但我不知道怎么做

一种。用 jp2 文件制作 geotif 光栅(给定信封的坐标),以及

湾。把它们拿出来做一个多波段的geotif

我对 Scala 很满意,所以我看过 geotrellis,但也没有看到解决方案。

有谁知道如何用 JP2 文件(给定一个多边形)制作 geotif,然后制作多波段 geotif?

谢谢

0 投票
0 回答
313 浏览

java - 如何分析和限制 geotrellis 和 spark 用于平铺的内存使用情况

我们的主要目标是要对大量输入数据(大约 80 GB)执行操作。问题是即使对于较小的数据集,我们也经常会遇到 java 堆空间或其他与内存相关的错误。

我们的临时解决方案是简单地指定更高的最大堆大小(-Xmx在本地使用或通过设置spark.executor.memoryspark.driver.memory用于我们的 spark 实例),但这似乎不能很好地概括,对于更大的数据集或更高的缩放级别,我们仍然会遇到错误。

为了更好地理解,以下是我们处理数据的基本概念:

  1. 使用加载数据HadoopGeoTiffRDD.spatial(new Path(path))

  2. 将数据映射到某个缩放级别的图块

    和哪里layoutForZoom基本一样geotrellis.spark.tiling.ZoomedLayoutScheme.layoutForZoom

  3. rdd.map然后我们使用rdd.foreach映射的 rdds对 rdd 的条目执行一些操作。

  4. 我们聚合四个图块的结果,这些图块对应于更高缩放级别的单个图块,使用groupByKey

  5. 转到 3 直到我们达到一定的缩放级别

目标是:给定 X GB 的内存限制,以我们最多消耗 X GB 的方式对数据进行分区和处理。

似乎数据集的平铺tileToLayout在更高的缩放级别上已经占用了太多的内存(即使对于非常小的数据集)。根据某些 LayoutDefinition 平铺和加载数据是否有任何替代方法?据我们了解,HadoopGeoTiffRDD.spatial已经将数据集拆分为小区域,然后按tileToLayout. 是否可以直接加载与 LayoutDefinition 对应的数据集?

在我们的具体场景中,我们有 3 个工作人员,每个工作人员具有 2GB RAM 和 2 个内核。其中之一也在运行 spark master,它通过来自驱动程序实例的 spark-submit 获取其工作。我们尝试了这样的配置:

平铺步骤(步骤 2)中堆空间错误的示例:


更新:

我从我的代码中提取了一个示例并将其上传到位于https://gitlab.com/hwuerz/geotrellis-spark-example的存储库。sbt run您可以使用并选择类在本地运行示例demo.HelloGeotrellisexample.tif这将根据我们从缩放级别 20 开始的布局定义为微小的输入数据集创建图块(默认使用两个核心,可以在文件中进行调整HelloGeotrellis.scala~如果级别 20 仍然有效,它很可能会使用更高的值失败bottomLayer)。

要在 Spark 集群上运行代码,我使用以下命令:

submit.sh基本上在哪里运行spark-submit(请参阅 repo 中的文件)。

example.tif包含在目录中的 repo中DebugFiles。在我的设置中,文件是通过 glusterfs 分发的,这就是路径指向该位置的原因。这cesiumTerrainDir只是我们存储生成的输出的目录。

我们认为主要问题可能是使用给定的 api 调用,geotrellis 将布局的完整结构加载到内存中,这对于更高的缩放级别来说太大了。有没有办法避免这种情况?

0 投票
1 回答
211 浏览

scala - GeoTrellis/Scala:为 Json 解析找到缺失的隐含证据

需要哪些导入来定位隐式证据以编译从 GeoTrellis 对 GeoJson.parse 的调用?

geotrellis.vector.io.json.Geometry 使用 spray.json 进行解析,并且必须能够定位 JsonReader 或 JsonFormats 实例,模板化为 WithCrs 和 Geometry 类。

证据在 FeatureFormats 中定义;但是下面的代码片段如何使用它?

以下不能解决证据:

  1. 导入geotrellis.vector.io.json.*包中的所有内容
  2. 专门导入隐式import geotrellis.vector.io.json.Implicits
  3. 直接导入特征格式import geotrellis.vector.io.json.FeatureFormats
  4. 确保正确的导入,尤其是没有com.vividsolutions.jts.Geometry会掩盖目标对象的导入

这是有问题的代码

编译错误显示在当前可用的情况下无法找到正确的证据

0 投票
1 回答
211 浏览

geotiff - GeoTrellis:为在 GeoTrellis 之外托管的云优化 GeoTIFF 创建属性存储

云优化 GeoTiff 的战略性能优势是能够检索给定范围的栅格数据,同时仅从远程资源中提取概览和字节范围。

在 Python 中,vsicurl 和 gdal.Warp 抽象使得只需一个 URL 和一个范围就可以做到这一点:

新创建的COG Spark 示例解释了如何使用在上一步中对 RDD 进行平铺而创建的 AttributeStore 来获得 Raster[Tile]:

GeoTrellis 中关于 COG 支持的示例发行说明文档都确认支持平铺数据并使其可供客户端作为 COG 使用。GeoTrellis 是否也支持充当客户端的能力?

FileCOGLayerReader如果您没有预先存在的目录,但有一个支持范围请求的 URL,您如何创建一个?

0 投票
1 回答
48 浏览

scala - GetComponent[?, ProjectedExtent]: (? => TilerKeyMethods[K, K2]) 和 SpatialComponent: Boundable 是什么意思?

在 FromRdd 的定义中,我无法理解 K、V 和 K2。我知道它们都是隐式参数。但是 GetComponent[?, ProjectedExtent]: (? => TilerKeyMethods[K, K2]) 和 SpatialComponent: Boundable 是什么意思?任何人都可以帮我一个忙吗?非常感谢。

0 投票
1 回答
124 浏览

scala - scala for mapbox vector tiles - 将“id”字段放入写入矢量切片的功能中

我正在使用 geotrellis vectorpipe 编写 MapBox 矢量图块。

有关基本流程,请参见此处:https ://geotrellis.github.io/vectorpipe/usage.html

通常 GeoJson Features 可以有一个id字段,以便可以将 Features 汇总到 FeatureCollections 中。我需要使用这个字段,但是vectorpipe(本机)没有这个功能。

这是使用的Feature类型,您可以看到它只有 1) aGeometry和 2) 数据对象D(最终填充properties到输出中)的空间。没有位置id

https://geotrellis.github.io/scaladocs/latest/index.html#geotrellis.vector.Feature

上游有一个名为的方法writeFeatureJsonWithID(),它可以让您在编写 GeoJson 时将id字段注入到 a中。Feature

https://github.com/locationtech/geotrellis/blob/master/vector/src/main/scala/geotrellis/vector/io/json/FeatureFormats.scala#L41-L49

我的问题是这样的:

我已经完成了vectorpipe代码(https://github.com/geotrellis/vectorpipe),我无法确定数据是否/在哪里以GeoJson的形式存在,我可以覆盖和注入id,也许使用我明确写的writeFeatureJsonWithID()或东西。许多转换是隐式的,但它也可能永远不会显式地以 json 格式存在。

关于如何id将最终 GeoJson 中的字段写入矢量图块的任何想法?

编辑

现在我认为诀窍是找到一种方法来覆盖.unfeature()这里的方法:

https://github.com/locationtech/geotrellis/blob/master/vectortile/src/main/scala/geotrellis/vectortile/Layer.scala

问题是它internal.vector_tile.Tile是私有的,所以我可以在不分叉项目的情况下构建它。

0 投票
0 回答
47 浏览

raster - 提取每个像素值时缺少像素

在此处输入图像描述我们正在尝试将 lzw 压缩栅格(tiff)转换为文本格式(意味着提取每个像素质心和 band1 值..我们看到转换时缺少栅格的某些部分..但是有一个模式缺失数据(数据以不相等的条纹图案出现)请查看快照。黄点表示已转换的质心,而黄色没有重叠,表示转换时丢失了数据。

我们尝试了 128 和 256 的瓷砖尺寸,但两种情况下的输出都不同

_

0 投票
1 回答
614 浏览

scala - 如何在scala中将多个TIFF组合成一个大的Geotiff?

我正在开展一个使用数字地面模型 (DGM) 查找水深和范围的项目。我有多个覆盖感兴趣区域的 tiff 文件,我想将它们组合成一个 tiff 文件以进行快速处理。我如何使用下面我自己的代码或任何其他方法来组合它们?

我试图连接瓷砖,让它们一个一个地作为输入,然后将它们组合起来,但它GC error可能会抛出,因为代码本身有问题。下面提供了代码

它应该能够从所有单独的文件中创建一个 tif 文件,但它会引发内存错误。

0 投票
1 回答
87 浏览

scala - 如何将包含栅格的 RDD 重新投影到不同的 crs(WGS84)?

我创建了一个 RDD,其中包含特定区域的 DGM 栅格并具有crs : EPSG 32632. 我想将此数据覆盖在图像上以进行进一步分析,该图像crs:EPSG 4326也是 RDD。

尽管这两个图像在 QGIS 中彼此重叠,但投影系统和范围不同,这就是为什么后来当我尝试将两个 RDD 重新投影到它时,webmercator它会给我一个黑色图像。

inputrdd4326.

如何将 rasterrdd 重新投影到 inputrdd 投影系统?

0 投票
2 回答
206 浏览

scala - Geotrellis.spark._ 从当前主服务器拉出时不是包 Geotrellis 的成员吗?

我下载了 Geotrellis 并尝试按照以下位置的说明进行操作: https
://github.com/locationtech/geotrellis 我将解析器和 libraryDependency 拉入我的 build.sbt 文件。

已安装:已安装 Spark 2.1.1 Scala 2.11.12 Java 8 JRE 和 JDK。

环境:
Mac 10.14.4 Mojave

我尝试了以下方法来解决这个问题,但没有解决这个问题:

将 Spark 降级到 2.1.1 版本(spark 的引用版本) 之前使用 2.3.3 和 2.4.3 将 Scala 更新到 2.11.12 版本 确保 JRE 和 JDK 中的 Java 版本是版本 8 验证 Scala 配置正确
验证 Java 是正确配置

进入 Geotrellis-master(截至 2019 年 5 月 16 日)--> 运行命令 './sbt' 并获得没有问题的积极反馈 --> 运行命令 'console' 并出现错误。
错误:对象 spark 不是包 geotrellis import geotrellis.spark._ 的成员

我之前遇到的问题是:scala> :12: error: not found: value geotrellis import geotrellis.raster._ ^ :13: error: not found: value geotrellis import geotrellis.vector._ ^ :14: error:未找到:值 geotrellis 导入 geotrellis.proj4._ ^ :15:错误:未找到:值 geotrellis 导入 geotrellis.spark._

这已通过将 Scala 版本从 2.12.x 中的较新版本更改为 2.11.x 来解决。所以我一直期待改变火花版本来解决火花问题,但到目前为止这还没有解决问题。如果有人对如何解决此问题有任何想法,我将不胜感激。谢谢您的帮助。