Пространственный ключ Геотреллиса с отрицательными значениями
Я пытаюсь выложить GeoTiff и индексировать, используя HilbertIndex. Иногда я сталкиваюсь с SpatialKey с отрицательными значениями и ошибками индексации:
[info] Indexing Spatial Key: SpatialKey(5,-1)
[error] 18/04/25 17:49:49 ERROR Executor: Exception in task 21.0 in stage 49.0 (TID 404)
[error] java.lang.IllegalArgumentException: value doesn't fit
[error] at com.google.common.base.Preconditions.checkArgument(Preconditions.java:125)
[error] at com.google.uzaygezen.core.LongBitVector.copyFrom(LongBitVector.java:347)
[error] at geotrellis.spark.io.index.hilbert.HilbertSpatialKeyIndex.toIndex(HilbertSpatialKeyIndex.scala:73)
[error] at thesis.InProgress$$anonfun$10.apply(InProgress.scala:183)
[error] at thesis.InProgress$$anonfun$10.apply(InProgress.scala:179)
[error] at scala.collection.Iterator$$anon$11.next(Iterator.scala:410)
[error] at org.apache.spark.util.Utils$.getIteratorSize(Utils.scala:1801)
[error] at org.apache.spark.rdd.RDD$$anonfun$count$1.apply(RDD.scala:1158)
[error] at org.apache.spark.rdd.RDD$$anonfun$count$1.apply(RDD.scala:1158)
[error] at org.apache.spark.SparkContext$$anonfun$runJob$5.apply(SparkContext.scala:2062)
[error] at org.apache.spark.SparkContext$$anonfun$runJob$5.apply(SparkContext.scala:2062)
[error] at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:87)
[error] at org.apache.spark.scheduler.Task.run(Task.scala:108)
[error] at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:335)
[error] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
[error] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
[error] at java.lang.Thread.run(Thread.java:748)
Я перепроектировал GeoTiff RDD до того, как выложил плитку, чтобы получить перепроектированный RDD[(SpatialKey,MultibandTile)]
, Перепроектирует причину этого? Если так, как этого можно избежать или обойти?
Также я строю индекс Гильберта так:
val hilbert_index = {
new HilbertSpatialKeyIndex(
KeyBounds(
reprojected_rdd.keys.min(),
reprojected_rdd.keys.max()),
reprojected_rdd.keys.max()._1,
reprojected_rdd.keys.max()._2)
}