GeoTrellis is a geographic data processing engine for high performance applications.
pomadchin on master
In GDALDataset, lazy compute of… (compare)
Yeh, I'm more hung up on the fact that the relationship doesn't exist in the JVM. Here's the trigger:
scala> val rc = classOf[Raster[Tile]]
rc: Class[geotrellis.raster.Raster[geotrellis.raster.Tile]] = class geotrellis.raster.Raster
scala> rc.getConstructors
res0: Array[java.lang.reflect.Constructor[_]] = Array(public geotrellis.raster.Raster(geotrellis.raster.CellGrid,geotrellis.vector.Extent))
scala> rc.getConstructor(classOf[Tile], classOf[Extent])
java.lang.NoSuchMethodException: geotrellis.raster.Raster.<init>(geotrellis.raster.Tile, geotrellis.vector.Extent)
However, it's clearly in the compile-time typing:
scala> import scala.reflect.runtime.universe._
scala> typeOf[Tile].baseClasses
res0: List[reflect.runtime.universe.Symbol] = List(trait Tile, trait MappableTile, trait MacroMappableTile, trait IterableTile, trait MacroIterableTile, class CellGrid, class Grid, trait Serializable, trait Serializable, class Object, class Any)
case classes
) expects a ctor to exist:scala> rf.printSchema()
raster
|-- tile: tile (nullable = true)
|-- extent: struct (nullable = true)
| |-- xmin: double (nullable = false)
| |-- ymin: double (nullable = false)
| |-- xmax: double (nullable = false)
| |-- ymax: double (nullable = false)
scala> rf .select(col("raster").as[Raster[Tile]])
ERROR CodeGenerator: failed to compile: org.codehaus.commons.compiler.CompileException: File 'generated.java', Line 102, Column 11: No applicable constructor/method found for actual parameters "geotrellis.raster.Tile, geotrellis.vector.Extent"; candidates are: "geotrellis.raster.Raster(geotrellis.raster.CellGrid, geotrellis.vector.Extent)"
org.codehaus.commons.compiler.CompileException: File 'generated.java', Line 102, Column 11: No applicable constructor/method found for actual parameters "geotrellis.raster.Tile, geotrellis.vector.Extent"; candidates are: "geotrellis.raster.Raster(geotrellis.raster.CellGrid, geotrellis.vector.Extent)"
Encoder
s make a lot of assumptions.
:javap geotrellis.raster.Tile
Size 5432 bytes
MD5 checksum 130428f0bb0a80b0748ad561f426f1ab
Compiled from "Tile.scala"
public interface geotrellis.raster.Tile extends geotrellis.raster.IterableTile, geotrellis.raster.MappableTile<geotrellis.raster.Tile>
val (_, rasterMetaData) =
TileLayerMetadata.fromRDD(inputRdd, FloatingLayoutScheme(512))
val tiled: RDD[(SpatialKey, MultibandTile)] =
inputRdd
.tileToLayout(rasterMetaData.cellType, rasterMetaData.layout, Bilinear)
.repartition(200)
geotrellis.raster.io.geotiff.reader.MalformedGeoTiffException: No StripByteCount information.
at geotrellis.raster.io.geotiff.tags.TiffTags.segmentCount(TiffTags.scala:556)
at geotrellis.raster.io.geotiff.compression.Decompressor$.apply(Decompressor.scala:96)
at
geotrellis.raster.io.geotiff.reader.GeoTiffInfo$.getGeoTiffInfo$1(GeoTiffInfo.scala:179)