RasterFrames提取位置信息问题
RasterFrames extracting location information problem
有没有办法使用 RasterFrames (http://rasterframes.io/) extract/query 来自 tif 文件的纬度、经度和海拔数据?
按照文档,我从以下站点加载了一个 tif 文件:https://visibleearth.nasa.gov/view.php?id=73934,但是我只能看到一般信息,不知道要使用哪个 RasterFunction 来提取位置和高程或任何其他相关信息。我确实尝试了在 API.
中可以找到的所有内容
我也尝试使用以下来源提取温度信息:http://worldclim.org/version2
我得到的只是带有 DoubleUserDefinedNoDataArrayTile 和边界(扩展或 crs)的图块列。
R中的RasterStack可以根据这篇博客提取这些信息:https://www.benjaminbell.co.uk/2018/01/extracting-data-and-making-climate-maps.html
我需要一个更细粒度的 DataFrame,例如纬度、经度、温度(或嵌入到 tif 文件中的任何数据)。
RasterFrames 或 GeoTrellis 是否可行?
长话短说 - 是的,这是可能的(至少对于 GeoTrellis)。我想也可以使用 RasterFrames,但需要一些时间来弄清楚如何提取这些数据。我无法回答更详细的问题,因为我需要更多地了解数据集以及您要执行和应用的管道。
目前您必须使用 UDF 和相关的 GeoTrellis 方法。
我们有一张票要作为第一个 class 函数来实现,但与此同时,这是长格式:
import org.apache.spark.sql._
import org.apache.spark.sql.functions._
import org.locationtech.rasterframes._
import org.locationtech.rasterframes.datasource.raster._
import org.locationtech.rasterframes.encoders.CatalystSerializer._
import geotrellis.raster._
import geotrellis.vector.Extent
import org.locationtech.jts.geom.Point
object ValueAtPoint extends App {
implicit val spark = SparkSession.builder()
.master("local[*]").appName("RasterFrames")
.withKryoSerialization.getOrCreate().withRasterFrames
spark.sparkContext.setLogLevel("ERROR")
import spark.implicits._
val example = "https://raw.githubusercontent.com/locationtech/rasterframes/develop/core/src/test/resources/LC08_B7_Memphis_COG.tiff"
val rf = spark.read.raster.from(example).load()
val point = st_makePoint(766770.000, 3883995.000)
val rf_value_at_point = udf((extentEnc: Row, tile: Tile, point: Point) => {
val extent = extentEnc.to[Extent]
Raster(tile, extent).getDoubleValueAtPoint(point)
})
rf.where(st_intersects(rf_geometry($"proj_raster"), point))
.select(rf_value_at_point(rf_extent($"proj_raster"), rf_tile($"proj_raster"), point) as "value")
.show(false)
spark.stop()
}
有没有办法使用 RasterFrames (http://rasterframes.io/) extract/query 来自 tif 文件的纬度、经度和海拔数据?
按照文档,我从以下站点加载了一个 tif 文件:https://visibleearth.nasa.gov/view.php?id=73934,但是我只能看到一般信息,不知道要使用哪个 RasterFunction 来提取位置和高程或任何其他相关信息。我确实尝试了在 API.
中可以找到的所有内容我也尝试使用以下来源提取温度信息:http://worldclim.org/version2
我得到的只是带有 DoubleUserDefinedNoDataArrayTile 和边界(扩展或 crs)的图块列。
R中的RasterStack可以根据这篇博客提取这些信息:https://www.benjaminbell.co.uk/2018/01/extracting-data-and-making-climate-maps.html
我需要一个更细粒度的 DataFrame,例如纬度、经度、温度(或嵌入到 tif 文件中的任何数据)。
RasterFrames 或 GeoTrellis 是否可行?
长话短说 - 是的,这是可能的(至少对于 GeoTrellis)。我想也可以使用 RasterFrames,但需要一些时间来弄清楚如何提取这些数据。我无法回答更详细的问题,因为我需要更多地了解数据集以及您要执行和应用的管道。
目前您必须使用 UDF 和相关的 GeoTrellis 方法。
我们有一张票要作为第一个 class 函数来实现,但与此同时,这是长格式:
import org.apache.spark.sql._
import org.apache.spark.sql.functions._
import org.locationtech.rasterframes._
import org.locationtech.rasterframes.datasource.raster._
import org.locationtech.rasterframes.encoders.CatalystSerializer._
import geotrellis.raster._
import geotrellis.vector.Extent
import org.locationtech.jts.geom.Point
object ValueAtPoint extends App {
implicit val spark = SparkSession.builder()
.master("local[*]").appName("RasterFrames")
.withKryoSerialization.getOrCreate().withRasterFrames
spark.sparkContext.setLogLevel("ERROR")
import spark.implicits._
val example = "https://raw.githubusercontent.com/locationtech/rasterframes/develop/core/src/test/resources/LC08_B7_Memphis_COG.tiff"
val rf = spark.read.raster.from(example).load()
val point = st_makePoint(766770.000, 3883995.000)
val rf_value_at_point = udf((extentEnc: Row, tile: Tile, point: Point) => {
val extent = extentEnc.to[Extent]
Raster(tile, extent).getDoubleValueAtPoint(point)
})
rf.where(st_intersects(rf_geometry($"proj_raster"), point))
.select(rf_value_at_point(rf_extent($"proj_raster"), rf_tile($"proj_raster"), point) as "value")
.show(false)
spark.stop()
}