GeoTrellis
一、概述
GeoTrellis是一个高性能程序的地理数据处理引擎。
GeoTrellis是一个用Spark处理栅格数据的Scala库和框架。
GeoTrellis 能够非常快的读/写/操作栅格数据,他实现了很多的地图几何操作。支持渲染栅格数据为PNG格式,并且支持把栅格文件元信息保存为JSON格式,他致力于依赖网速实现栅格处理和提供大规模栅格的并行处理的REST服务接口。
二、模块及概念
三、数据输入
本地系统:GeoTiff,JPG,PNG,GeoJson(矢量),WKT/WKB(矢量),ShapeFile(矢量)
数据库:PostGIS(矢量)
分布式文件系统 : HDFS
其他:S3
四、数据存储/输出
NoSQL数据库 : HBase / Accumulo/ Cassandra
文件系统 : GeoTiff ,PNG/JPG ,GeoJson(矢量)
分布式文件 : HDFS
其他 : GeoMesa(矢量),GeoWave(矢量),S3
五、数据处理
5.1 三个分类
I/O : GeoTrellis 允许像在本地硬盘上读写数据那样用GeoTrellis处理数据。
处理:GeoTrellis 支持对栅格数据的多种操作,包括切割,采样,地图几何操作,渲染,矢栅转换,核密度等。
WEB服务:GeoTrellis提供了工具集帮助创建有用的,高效的WEB服务来加载和处理栅格数据。
5.2 核心模块
1. Spark处理空间数据
- RDDs表示图层,Key表示空间网格中的一个坐标
- RDD栅格瓦片表示空间或者时空栅格数据
- 通过Spark IO API ,应用空间填充曲线索引优化存储检索(支持希尔伯特曲线,Z阶曲线),加载/保存图层RDD数据和元数据从后端/到后端, 支持的存储包含文件系统,S3,Cassandra,Accumulo.
- 查询支持对图层数据的空间数据/时空数据的简单查询
- 栅格图层数据的Map Algebra 操作 包含 geotrellis-raster 要素列表中的所有Map Algebra操作。
- 支持通过对邻接栅格信息对当前栅格进行重投影,避免不合理的Nodata网格。
- 支持通过缩放等级,应用多种重采样方法对图层数据进行金字塔构建。
- 支持通过多种坐标系和样式渲染栅格瓦片图层。
- 支持对栅格RDD图层操作:切割,过滤,连接,遮罩,合并,分区,金字塔,渲染,重采样,切割
2. 栅格数据处理
- 支持单波段/多波段 多种栅格数据,数据类型支持Bit,Byte,Short,Int,Float,Double类型,支持常量Nodata和用户自定义Nodata。
- 对栅格集合支持通过Map 或者 Foreach 来访问对应的方法
- 合并栅格数据
- 支持通过颜色渐变/颜色映射渲染栅格数据为PNG/JPG 格式。
- 支持读取 DEFLATE,LAW,Packbites 压缩格式的栅格数据,并且提供对 LZW/DEFLATE 格式数据的水平和浮点预测。
3. 矢量数据处理
- 支持通过scala 对JTS 类型的支持:Point,Line,Polygon,MultiPoint,MultiLine,MultiPolygon,GeometryCollecion
- 支持JTS中对几何模型的支持,结果返回类型安全几何模型。
- 支持要素类型为复合几何和常用数据类型
- 支持通过GeoJSON读写几何模型和要素
- 支持通过WKT/WKB读写几何模型
六、ETL数据处理
1. JSON
俩种形式:Local ETL 和 GeoDocker ETL
- 定义文件
包含三个配置文件,input.json,output.json,backend-profile.json
input.json 描述输入数据,output.json描述输出数据,backend-profile.json 描述后端存储信息
-
执行
SPARK_HOME/bin/spark-submit \
--class geotrellis.spark.etl.MultibandIngest \
--master 'local[*]' \
--driver-memory 16G \
/tmp/geotrellis-spark-etl-assembly-1.0.0.jar \
--input "file:///tmp/json/input.json" \
--output "file:///tmp/json/output.json" \
--backend-profiles "file:///tmp/json/backend-profiles.json"
2. PIPELINE
附录
1. GeoPySpark
GeoTrellis 可以通过Python封装为 GeoPySpark,可以集成其他Python包,如NumPy,scikit-lean,JupyterNodeboos。GeoPySpark 构建了 GeoNotebook的可视化能力。
2. GeoNoteBook
3. GeoDocker
4. 工程模板
geotrellis-sbt-template
5. GeoTrellis子模块
geotrellis-proj4
: Coordinate Reference systems and reproject (Scala wrapper around Proj4j)
geotrellis-vector
: Vector data types and operations (Scala wrapper around JTS)
geotrellis-raster
: Raster data types and operations
geotrellis-spark
: Geospatially enables Spark; save to and from HDFS
geotrellis-s3
: S3 backend for geotrellis-spark
geotrellis-accumulo
: Accumulo backend for geotrellis-spark
geotrellis-cassandra
: Cassandra backend for geotrellis-spark
geotrellis-hbase
: HBase backend for geotrellis-spark
geotrellis-spark-etl
: Utilities for writing ETL (Extract-Transform-Load), or “ingest” applications for geotrellis-spark
geotrellis-geotools
: Conversions to and from GeoTools Vector and Raster data
geotrellis-geomesa
: Experimental GeoMesa integration
geotrellis-geowave
: Experimental GeoWave integration
geotrellis-shapefile
: Read shapefiles into GeoTrellis data types via GeoTools
geotrellis-slick
: Read vector data out of PostGIS via LightBend Slick
geotrellis-vectortile
: Experimental vector tile support, including reading and writing
geotrellis-raster-testkit
: Testkit for testing geotrellis-raster types
geotrellis-vector-testkit
: Testkit for testing geotrellis-vector types
geotrellis-spark-testkit
: Testkit for testing geotrellis-spark code
geotrellis-proj4
- 基于椭球,基准面定义坐标点参照系统
- 通过porj4 进行坐标转换
- 通过EPSG 进行CRS的查询
- 转换(X,Y)从一个坐标系到其他
geotrellis-vector
- 支持对JTS 类型的支持,见
矢量数据处理
节点
- 支持对JTS类型数据的几何操作,见
矢量数据处理
节点
- 支持要素类型为组合几何模型和常用几何类型,见
矢量数据处理
节点
- 支持从GeoJSON读写几何模型和要素
- 支持从WKT/WKB读取几何模型
- 支持几何模型间不同坐标系转换
- 支持几何操作:凸包,密度,简化
- 支持对点数据的克吕格 查询 运算
- 支持几何模型的仿射转换
geotrellis-raster
- 支持单波段/复合波段栅格的读取,见
栅格数据处理
节点
- 支持对待瓦片想数据集一样,见
栅格数据处理
节点
- 支持合并栅格数据,见
栅格数据处理
节点
- 支持根据颜色波段或颜色表 绘制PNG/JPG图片,见
栅格数据处理
节点
- 支持读取GeoTiff 压缩格式数据的,见
栅格数据处理
节点
- 支持写入 DEFLATE或者无压缩GeoTiff
- 支持栅格数据进行CRS重投影
- 支持栅格数据重采样
- 支持遮罩/切割栅格
- 支持切割栅格为小的瓦片,合并小的瓦片为大的栅格
- 支持获取栅格直方图,表示值的分布和创建中数中断
- 局部地图代数:Abs, Acos, Add, And, Asin, Atan, Atan2, Ceil, Cos, Cosh, Defined, Divide, Equal, Floor, Greater, GreaterOrEqual, InverseMask, Less, LessOrEqual, Log, Majority, Mask, Max, MaxN, Mean, Min, MinN, Minority, Multiply, Negate, Not, Or, Pow, Round, Sin, Sinh, Sqrt, Subtract, Tan, Tanh, Undefined, Unequal, Variance, Variety, Xor, If
- 焦点地图代数:Hillshade, Aspect, Slope, Convolve, Conway’s Game of Life, Max, Mean, Median, Mode, Min, MoransI, StandardDeviation, Sum
- 区域地图代数:ZonalHistogram(区域直方图), ZonalPercentage (区域百分比)
- 与面相交的 栅格整体信息:Min, Mean, Max, Sum.
- 根据摩擦栅格数据和 起始点集合 计算路径花费
- 水文(Hydrology)操作: 堆积,填充,流向
- 几何的栅格化及单元值的迭代
- 栅格矢量化
- 计算点集的高斯克吕格插值,输出为栅格
- 视域处理
- 区域操作
geotrellis-spark
- RDDs表示图层,Key表示空间网格中的一个坐标,见
Spark平台处理地理空间数据
节点
- RDD栅格瓦片表示空间或者时空栅格数据,见
Spark平台处理地理空间数据
节点
- 通过Spark IO API ,应用空间填充曲线索引优化存储检索(支持希尔伯特曲线,Z阶曲线),加载/保存图层RDD数据和元数据从后端/到后端, 支持的存储包含文件系统,S3,Cassandra,Accumulo.,见
Spark平台处理地理空间数据
节点
- 查询支持对图层数据的空间数据/时空数据的简单查询,见
Spark平台处理地理空间数据
节点
- 栅格图层数据的Map Algebra 操作 包含 geotrellis-raster 要素列表中的所有Map Algebra操作,见
Spark平台处理地理空间数据
节点
- 支持通过对邻接栅格信息对当前栅格进行重投影,避免不合理的Nodata网格,见
Spark平台处理地理空间数据
节点
- 支持通过缩放等级,应用多种重采样方法对图层数据进行金字塔构建,见
Spark平台处理地理空间数据
节点
- 支持通过多种坐标系和样式渲染栅格瓦片图层,见
Spark平台处理地理空间数据
节点
- 支持对栅格RDD图层操作:切割,过滤,连接,遮罩,合并,分区,金字塔,渲染,重采样,切割,见
Spark平台处理地理空间数据
节点
- 与面相交的 栅格整体信息:Min, Mean, Max, Sum,见
geotrellis-raster
节点
- 用特殊的Key保存RDD到HDFS或本地文件系统中的 z/x/y文件,用作Web地图中的地图图层或通过z / x / y瓦片坐标访问GeoTiff。
- 公共模块用于创建spark content上下文,处理GeoTrellis
geotrellis-accumulo
geotrellis-cassandra
geotrellis-hbase
geotrellis-s3
- 用Spark IO接口 保存/加载栅格图层从/到本地文件系统或HDFS
- 用特殊的Key保存RDD到S3的 z/x/y 文件, 保存为PNG格式,方便在Web地图中访问地图图层
geotrellis-etl
- 为ETL的输入/输出解析命令行选项(提取,转换,加载)。
- 为ETL提供了公共的方法方便用户使用
- 输入栅格可为本地文件系统,HDFS,S3
- 对输入栅格的每个瓦片,考虑相邻的瓦片进行 瓦片重投影或者无缝重投影
- 根据ZXY图层样式,转换输入栅格为图层
- 保存图层到Accumulo,S3,HDFS或本地文件系统
geotrellis-shapefile
- 通过GeoTools从Shape文件读取几何模型和要素到GeoTrellis
geotrellis-slick
- 用slick 模块 保存/导入几何模型和要素到/从PostGIS
- 可通过scala在 PostGIS 中 执行PostGIS的
ST_
操作加粗样式