GeoSpark
GeoSpark是基于Spark分布式的地理信息计算引擎,相比于传统的ArcGIS,GeoSpark可以提供更好性能的空间分析、查询服务。
功能:并行计算,空间查询,查询服务
GeoSpark 继承自Apache Apark,并拥有创造性的 空间弹性分布式数据集(SRDD),
GeoSpark 将JTS集成到项目中,支持拓扑运算
GeoSpark 支持PostGIS SQL语法
GeoSpark 内置了 GeoTools
String sql = "select ST_GeomFromWKB(geom) as geom, parkname, parkid from parks";
df = spark.sql(sql);
官方参考网站:
https://datasystemslab.github.io/GeoSpark/api/sql/GeoSparkSQL-Overview/
-1. 主要功能
1.1 GeoSparkSQL
包含了最新的SQL功能
1.2 SRDDs
支持特殊的SRDDs,包括PointRDD,RectangleRDD,PolygonRDD,LineStringRDD
支持泛类型异构几何,Point,Polygon, LineString,MultiPoint,MultiPolygon,MultiLineString,GeometryCollection,LinearRing等
1.3 空间分割
空间分割技术有四叉树,KDB树,R树,沃罗诺伊图(Voronoi diagram)、均匀网络(Uniform grids)
1.4 空间索引
支持四叉树,R树,空间K近邻查询
0. 主要概念
SparkSession //初始化Spark
JavaSparkContext
FileDataSplitter
JavaSparkContext
JavaPairRDD
ShapefileReader readToGeometryRDD
SpatialRDD buildIndex
JavaRDD
GeoSparkSQLRegistrator
GeoSparkVizRegistrator
Adapter //在DataFrame和RDD之间进行转换操作
Dataset
SpatialRDD PointRDD ,GeometryRDD // 几何弹性数据集RDD
Dataset<Row> //DataFrame 数据集
createOrReplaceTempView
printSchema
ImageSerializableWrapper
ImageGenerator
GeoTools
ShapefileDataStore
ShapefileDataStoreFactory
DataStoreFinder
俩种数据集:几何弹性数据集RDD及DataFrame数据集
DataFrame 数据集可以通过SQL语句来操作
0.1 SpatialRDD
rawSpatialRDD 有 setRawSpatialRDD 构建
indexedRawRDD 由 buildIndex 构建
包含分区判断,spatialPartitionedRDD 和 rawSpatialRDD 完成
0.2 分区
rawSpatialRDD和spatialPartitionedRDD的区别就是spatialPartitionedRDD保存的是rawSpatialRDD分区后的RDD
SpatialPartitioner //集成自Spark中的Partitioner方法
Geospark就开始调用private JavaRDD partition(final SpatialPartitioner partitioner)方法来进行分区
SpatialPartitioner 需要实现俩个函数,第一个函数是告诉Spark要分成多少区,第二个函数是将对象与分区ID对应起来。
GeoSpark 实现了三种分区策略,分别为
0.3 并行计算
1. 空间索引
1.1 索引查询
RangeQuery SpatialRangeQuery
1.2 KNN临近查询
KNNQuery SpatialKnnQuery
1.3 空间关联查询
JoinQuery SpatialJoinQuery
2. 坐标系转换
PointRDD CRSTransform //支持EPGS标准坐标系
3. 支持数据类型
文件数据:ShapeFile , CSV,GeoJson , WKT , NetCDF/HDF
数据库:MySql,PostGreSQL,PostGIS
4. 内部数据类型
Geometry,GeometryFactory , Coordinate, PointRDD , Polygon , Point ,
5. GeoSpark SQL
https://datasystemslab.github.io/GeoSpark/api/sql/GeoSparkSQL-Overview/
ST_GeomFromWKT
ST_Transform
ST_Contains
ST_PolygonFromEnvelope
ST_PointFromText
6. GeoSpark计算框架及逻辑
6.1 GeoSpark如何利用分布式实现高效查询
要想利用Spark,需要将自己的类型转换为RDD, SpatialRDD 是泛型,泛型要求类型是Geometry的子类
GeoSpark提供有PointRDD,PolygonRDD
7. 几何操作
数据集边界,最小边界矩形,多边形联合
8. 空间操作
空间范围查询,距离加入查询,空间加入查询(内部和重叠)以及空间K最近相邻元素查询
9. GeoSpark 方案
http://www.sohu.com/a/282853074_326074
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-f1iVWGST-1577671565141)(C:\Users\ADMINI~1\AppData\Local\Temp\1572248661374.png)]
参考
BigGiser https://www.jianshu.com/u/922878a44beb
jyj019 https://blog.csdn.net/jyj1100/article/category/7913410