上一节我们使用GeoSpark SQL简单进行了空间的一些操作,本节我们继续利用GeoSpark SQL以及GeoSparkViz将我们的结果进行渲染展示。下面是我们今天要用到的新的6个SQL函数
GeosparkViz 可视化
GeoSparkViz 可视化
上一节我们使用GeoSpark SQL简单进行了空间的一些操作,本节我们继续利用GeoSpark SQL以及GeoSparkViz将我们的结果进行渲染展示。下面是我们今天要用到的新的6个SQL函数:
CAST ( expression AS type )
:这是PostGresql
原生提供的函数,用于字段类型转换ST_Point (X:decimal, Y:decimal, UUID1, UUID2, ...)
:从给定的X和Y生成一个点要素。ST_Pixelize (A:geometry, ResolutionX:int, ResolutionY:int, Boundary:geometry)
:将给定的geometry转为图片中的像素。ST_Colorize (weight:Double, maxWeight:Double, mandatory color: string (Optional))
:给定一个像素的权重,返回相应的颜色。权重可以是任意含义的数值,比如温度和湿度等观测值。ST_Render (A:pixel, B:color)
:给定像素和颜色,生成Java中的BufferedImage对象,代表了一副图片。ST_Envelope_Aggr (A:geometryColumn)
:返回A的最小外接矩形
加载数据
1 | SparkSession spark = SparkSession.builder(). |
构建几何图形(Geometry)
1 | // 创建Geometry列 |
1 | +--------------------+----------+ |
渲染
接下来就要对上面四个点进行展示,首先我们要将地理位置转为屏幕上的像素坐标,首先使用ST_Pixelize
,但是ST_Pixelize
要求首先提供一个边界范围,所以我们先用ST_Envelope_Aggr
来生成bound。
1 | sqlText = "SELECT ST_Envelope_Aggr(shape) as bound FROM pointtable"; |
1 | +--------------------+ |
生成像素
1 | sqlText = "SELECT pixel, shape FROM pointtable " + |
1 | +--------------------+--------------------+ |
生成颜色
本次仅仅是展示点,因此可以给每个点固定的颜色,所以这里权重就填1。
1 | sqlText = "SELECT ST_Colorize(1, 1, 'red') as color, pixel FROM pixels"; |
1 | +------+----------------------------------------------------------------------------+ |
渲染
在得到像素点和颜色后,就可以调用ST_Render
生成图片了
1 | sqlText = "SELECT ST_Render(pixel, color) AS image, (SELECT ST_AsText(bound) FROM boundtable) AS boundary FROM pixelaggregates" ; |
1 | +--------------------------+--------------------+ |
保存图片
1 | Dataset<org.apache.spark.sql.Row> images = spark.table("images"); |