数据坐标系为地理坐标:
读取栅格数据范围时,需将其投影为WebMercator
.reproject(LatLng,WebMercator)
LatLng为经纬度具体查看
数据坐标系为投影坐标:
// .reproject(CRS.fromEpsgCode(4549),WebMercator) // 4549为坐标编号,可以参照https://epsg.io/地址查询。
完整读取栅格数据的边界范围代码(依赖库自行下载)
package tutorial
import geotrellis.proj4.{CRS, WebMercator}
import geotrellis.raster._
import geotrellis.spark.io.hadoop.HadoopGeoTiffRDD
import geotrellis.spark.tiling.ZoomedLayoutScheme
import geotrellis.spark.util.SparkUtils
import geotrellis.vector.{Extent, ProjectedExtent}
import org.apache.spark._
import geotrellis.spark._
import geotrellis.util._
import scala.collection.immutable.HashMap
object ReadTif{
def main(args: Array[String]): Unit = {
/* Some location on your computer */
implicit val sc = SparkUtils.createSparkContext("GeoTrellis ETL SinglebandIngest", new SparkConf(true).set("spark.testing.memory", "536870912").setMaster("local"))
//你的栅格数据路径,数据空间参考为 EPSG:4549
val filepath: String = "D:\\LENOVO\\Geotrellis\\geotrellis-landsat-tutorial-master\\data\\yz84-2000.tif"
val path = new org.apache.hadoop.fs.Path(filepath)
val rdd = HadoopGeoTiffRDD.spatialMultiband(path)
val sm = rdd
.map { case (key, grid) =>
val ProjectedExtent(extent, crs) = key.getComponent[ProjectedExtent]
// Bounds are return to set the non-spatial dimensions of the KeyBounds;
// the spatial KeyBounds are set outside this call.
val boundsKey = key.translate(SpatialKey(0,0))
val cellSize = CellSize(extent, grid.cols, grid.rows)
HashMap(crs -> RasterCollection(crs, grid.cellType, cellSize, extent, KeyBounds(boundsKey, boundsKey), 1))
}
.reduce { (m1, m2) => m1.merged(m2){ case ((k,v1), (_,v2)) => (k,v1 combine v2) } }
.values.toSeq.head
val layoutScheme = ZoomedLayoutScheme(WebMercator, tileSize = 256)
val layoutDefinition = layoutScheme.levelForZoom(16).layout
val tiffExtent = TileLayerMetadata[SpatialKey](
sm.cellType,
layoutDefinition,
sm.extent,
sm.crs,
sm.bounds.setSpatialBounds(layoutDefinition.mapTransform(sm.extent))
).extent.reproject(CRS.fromEpsgCode(4549),WebMercator)
println("Tiff Extent:"+tiffExtent)
}
}
数据切片和渲染均需投影为WebMercator,在Cesium上加载报跨域需添加CorsSupport。
效果图: