本文主要介绍DLA Ganos如何基于GeoTrellis对Lindorm(HBase)中的栅格数据进行查询和计算。
GeoTrellis是一个基于Spark开发的高性能程序的地理数据处理引擎。GeoTrellis 能够非常快的读/写/操作栅格数据,同时也支持大量的几何操作。有关GeoTrellis的详细介绍请参见:https://geotrellis.readthedocs.io/en/latest/。
读取栅格数据
- 初始化Spark Session:
val spark: SparkSession = { val session = SparkSession.builder .master("local[*]") .withKryoSerialization .config(additionalConf) .getOrCreate() session } //加载DLA Ganos Raster驱动 spark.withGanosRaster
- 通过geotrellisCatalog加载Catalog表:
val inputUri = "hbase://hb-proxy-pub-hbase实例id-001.hbase.rds.aliyuncs.com:2181?master=localhost&attributes=GF1C" val cat=spark.read.ganos.geotrellisCatalog(URI.create(inputUri)) cat.show
Catalog中包含各个图层的layer和其他元数据信息,支持属时空查询:val layer = cat.where($"layer.id.zoom" === "2").select(raster_layer).collect
- 您可以通过catalog得到图层Layer并加载数据:
val lots = layer.map(spark.read.ganos.geotrellis.loadLayer).map(_.toDF).reduce(_ union _) lots.show
- 也可以通过loadLayers接口批量加载图层:
val df = spark.read.ganos.geotrellis.loadLayers(layers)
- 您可以通过catalog得到图层Layer并加载数据:
输出栅格数据
您可以将DF模型输出到Lindorm表中:
lazy val layer = Layer(scratchDir.toUri, LayerId("test-layer", 4))
df.write.ganos.geotrellis.asLayer(layer).save()