Created
March 5, 2020 22:33
-
-
Save CloudNiner/adf1c4bd07aa4043b17b5fc9ccf3667e to your computer and use it in GitHub Desktop.
GeoTrellis Layer from Landsat 8 GeoTIFFs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package geotrellis.server.ogc | |
import java.time.ZonedDateTime | |
import cats.implicits._ | |
import geotrellis.layer.{LayoutLevel, TemporalKeyExtractor, ZoomedLayoutScheme} | |
import geotrellis.proj4.WebMercator | |
import geotrellis.raster._ | |
import geotrellis.spark._ | |
import geotrellis.spark.store.kryo.KryoRegistrator | |
import geotrellis.store.LayerId | |
import geotrellis.store.index.ZCurveKeyIndexMethod | |
import geotrellis.store.s3.S3AttributeStore | |
import geotrellis.spark.store.s3.S3LayerWriter | |
import org.apache.spark.rdd.RDD | |
import org.apache.spark.{SparkConf, SparkContext} | |
import org.apache.spark.serializer.KryoSerializer | |
object CreateSpaceTimeGTLayer { | |
def main(args: Array[String]): Unit = { | |
val targetCrs = WebMercator | |
val layoutScheme = ZoomedLayoutScheme(targetCrs, tileSize = 256) | |
val geotiffs = Array( | |
"gtiff+s3://geotrellis-test-non-public/landsat-8-PIT.2019-05-06T00:00:00Z.tif", | |
"gtiff+s3://geotrellis-test-non-public/landsat-8-PIT.2019-11-14T00:00:00Z.tif" | |
) | |
val layerName = "spacetimekey-test" | |
val keyExtractor = TemporalKeyExtractor.fromPath { sourceName => | |
ZonedDateTime.parse(sourceName.toString.split('.')(1)) | |
} | |
val sparkConf = new SparkConf() | |
.setAppName("CreateSpaceTimeGTLayer") | |
.setIfMissing("spark.master", "local[*]") | |
.set("spark.serializer", classOf[KryoSerializer].getName) | |
.set("spark.kryo.registrator", classOf[KryoRegistrator].getName) | |
implicit val sc: SparkContext = new SparkContext(sparkConf) | |
val rasterSourceRDD: RDD[RasterSource] = | |
sc.parallelize(geotiffs).map { uri => | |
RasterSource(uri).reproject(targetCrs) | |
} | |
val rasterSummary = | |
RasterSummary.fromRDD(rasterSourceRDD, keyExtractor.getMetadata) | |
val LayoutLevel(zoom, layout) = rasterSummary.levelFor(layoutScheme) | |
val contextRDD = | |
RasterSourceRDD.tiledLayerRDD( | |
rasterSourceRDD, | |
layout, | |
keyExtractor, | |
rasterSummary = Some(rasterSummary) | |
) | |
val attributeStore = S3AttributeStore( | |
"geotrellis-test-non-public", | |
"spacetimekey-test" | |
) | |
val writer = S3LayerWriter(attributeStore) | |
writer.write( | |
LayerId(layerName, zoom), | |
contextRDD, | |
ZCurveKeyIndexMethod.byDay | |
) | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment