GeosparkViz 可视化
title: ‘(五)GeosparkViz 可视化’
date: 2029-01-01 00:00:00
tags: [scala]
published: true
hideInList: false
#feature: /post-images/hello-gridea.png
isTop: false
上一节我们使用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的最小外接矩形
加载数据
SparkSession spark = SparkSession.builder().config("spark.serializer","org.apache.spark.serializer.KryoSerializer").config("spark.kryo.registrator", "org.datasyslab.geospark.serde.GeoSparkKryoRegistrator").master("local[*]").appName("Learn05").getOrCreate();GeoSparkSQLRegistrator.registerAll(spark);
GeoSparkVizRegistrator.registerAll(spark);// 加载CSV文件,CSV中的第一列为WKT格式
String inputCSVPath = Learn04.class.getResource("/checkin.csv").toString();
Dataset rawDF = spark.read().format("csv").option("delimiter", ",").option("header", "false").load(inputCSVPath);
rawDF.createOrReplaceTempView("pointtable");
构建几何图形(Geometry)
// 创建Geometry列
String sqlText = "select ST_Point(cast(_c0 as Decimal(24,20)), cast(_c1 as Decimal(24,20))) AS shape, _c2 from pointtable";
Dataset spatialDf = spark.sql(sqlText);
spatialDf.createOrReplaceTempView("pointtable");
spatialDf.show();
+--------------------+----------+
| shape| _c2|
+--------------------+----------+
|POINT (-88.331492...| hotel|
|POINT (-88.175933...| gas|
|POINT (-88.388954...| bar|
|POINT (-88.221102...|restaurant|
+--------------------+----------+
渲染
接下来就要对上面四个点进行展示,首先我们要将地理位置转为屏幕上的像素坐标,首先使用ST_Pixelize
,但是ST_Pixelize
要求首先提供一个边界范围,所以我们先用ST_Envelope_Aggr
来生成bound。
sqlText = "SELECT ST_Envelope_Aggr(shape) as bound FROM pointtable";
spatialDf = spark.sql(sqlText);
spatialDf.createOrReplaceTempView("boundtable");
spatialDf.show();
+--------------------+
| bound|
+--------------------+
|POLYGON ((-88.388...|
+--------------------+
生成像素
sqlText = "SELECT pixel, shape FROM pointtable " +"LATERAL VIEW ST_Pixelize(ST_Transform(shape, 'epsg:4326','epsg:3857'), 256, 256, (SELECT ST_Transform(bound, 'epsg:4326','epsg:3857') FROM boundtable)) AS pixel";
spatialDf = spark.sql(sqlText);
spatialDf.createOrReplaceTempView("pixels");
spatialDf.show();
+--------------------+--------------------+
| pixel| shape|
+--------------------+--------------------+
|Pixel(x=69.0, y=0...|POINT (-88.331492...|
|Pixel(x=255.0, y=...|POINT (-88.175933...|
|Pixel(x=0.0, y=23...|POINT (-88.388954...|
|Pixel(x=201.0, y=...|POINT (-88.221102...|
+--------------------+--------------------+
生成颜色
本次仅仅是展示点,因此可以给每个点固定的颜色,所以这里权重就填1。
sqlText = "SELECT ST_Colorize(1, 1, 'red') as color, pixel FROM pixels";
spatialDf = spark.sql(sqlText);
spatialDf.createOrReplaceTempView("pixelaggregates");
spatialDf.show(false);
+------+----------------------------------------------------------------------------+
|color |pixel |
+------+----------------------------------------------------------------------------+
|-65536|Pixel(x=69.0, y=0.0, width=256, height=256, isDuplicate=false, tileId=-1) |
|-65536|Pixel(x=255.0, y=255.0, width=256, height=256, isDuplicate=false, tileId=-1)|
|-65536|Pixel(x=0.0, y=230.0, width=256, height=256, isDuplicate=false, tileId=-1) |
|-65536|Pixel(x=201.0, y=186.0, width=256, height=256, isDuplicate=false, tileId=-1)|
+------+----------------------------------------------------------------------------+
渲染
在得到像素点和颜色后,就可以调用ST_Render
生成图片了
sqlText = "SELECT ST_Render(pixel, color) AS image, (SELECT ST_AsText(bound) FROM boundtable) AS boundary FROM pixelaggregates" ;
spatialDf = spark.sql(sqlText);
spatialDf.createOrReplaceTempView("images");
spatialDf.show();
+--------------------------+--------------------+
| image| boundary|
+--------------------------+--------------------+
|Image(width=256height=256)|POLYGON ((-88.388...|
+--------------------------+--------------------+
保存图片
Dataset<org.apache.spark.sql.Row> images = spark.table("images");
Row[] take = (Row[])images.take(1);
ImageSerializableWrapper image = (ImageSerializableWrapper)take[0].get(0);
new ImageGenerator().SaveRasterImageAsLocalFile(image.getImage(),System.getProperty("user.home") + "/point", ImageType.PNG);
参考链接:https://www.jianshu.com/p/9a0e7b151f49
GeosparkViz 可视化相关推荐
- 【置顶】利用 NLP 技术做简单数据可视化分析教程(实战)
置顶 本人决定将过去一段时间在公司以及日常生活中关于自然语言处理的相关技术积累,将在gitbook做一个简单分享,内容应该会很丰富,希望对你有所帮助,欢迎大家支持. 内容介绍如下 你是否曾经在租房时因 ...
- windows安装MongoDB环境以及在pycharm中配置可视化插件
安装MongoDB数据库 参考这里 安装PyMongo python3 -m pip3 install pymongo指定版本 python3 -m pip3 install pymongo==3.5 ...
- 只要5分钟用数据可视化带你看遍11月份新闻热点事件
2017年11月份已经离我们而去,在过去的11月份我们也许经历了双十一的剁手,也可能亲眼看见了别人剁手.11月份的北京大兴区发生了"11·18"重大火灾,国内多家幼儿园也多次上了头 ...
- 模型可视化_20210208
20210204 https://ezyang.github.io/convolution-visualizer/index.html 卷积动态可视化 今天小编要给大家推荐的这个可视化工具Visual ...
- lightgbm 决策树 可视化 graphviz
决策树模型,XGBoost,LightGBM和CatBoost模型可视化 安装 graphviz 参考文档 http://graphviz.readthedocs.io/en/stable/manua ...
- 深度学习网络模型可视化netron
很多时候,复现人家工程的时候,需要了解人家的网络结构.但不同框架之间可视化网络层方法不一样,这样给研究人员造成了很大的困扰. 前段时间,发现了一个可视化模型结构的神奇:Netron 查看全文 http ...
- Pytorch使用tensorboardX可视化。超详细
tensorboard --logdir runs 改为 tensorboard --logdir=D:\model\tensorboard\runs 重点 在网上看了很多方法后发现将原本链接中的计算 ...
- Pytorch的网络结构可视化(tensorboardX)(详细)
20210610 if config.test is True:model = load_test_model(model, config)print(model) 打印网络结构 版权声明:本文为博主 ...
- BERT可视化工具bertviz体验
BERT可视化工具体验:bertviz是用于BERT模型注意力层的可视化页面. 1,bertviz的github地址:https://github.com/jessevig/bertviz 2,将be ...
最新文章
- 数字图像处理——第九章 形态学图像处理
- 元宇宙专题深度(附链接)
- redis(19)--事务
- Scala入门到精通——第二十七节 Scala操纵XML
- 拼接SQL的一个技巧
- python社招面试_百度大牛总结十条Python面试题陷阱,看看你是否会中招
- PipedInputStream/PipedOutputStream
- python属性查找 深入理解(attribute lookup)
- 小马虎g用计算机计算题目,四年级奥数期末复习题二
- 抓包工具tcpdump的使用总结(持续更新)
- 用TCL调用Hypermesh中的求解器
- 欧姆龙NX控制器与Sysmac studio的电机配置方法
- 算法导论习题(持续更新)
- 前端处理后端返回的二进制流文件
- 智能制造信息化系统·详解
- 2017-2018-2 20179216 《网络攻防与实践》 第八周总结
- mac 剪切移动文件
- sqlyog导入数据的两种方式
- 数模国赛历年题目 1992——2021
- 西门子828D数控系统主轴参数(不带编码器,只输出电压信号)
热门文章
- (视频+图文)机器学习入门系列-第9章 集成学习
- 【深度学习】实战深度学习检测疟疾
- Pytorch入门.pptx
- 【万字长文详解】Python库collections,让你击败99%的Pythoner
- 全国人工智能大赛 行人重识别(Person ReID)赛项 季军团队方案分享
- 一文读懂图卷积GCN
- 知乎高赞:中国有哪些不错的开源软件产品?
- 复现经典:《统计学习方法》第 5 章 决策树
- 364 页 PyTorch 版《动手学深度学习》PDF 开源了(全中文,支持 Jupyter 运行)
- 给大家介绍一下:网易云信新晋音视频质量诊断专家