带你入门GeoSpark系列之三【空间查询篇】
系列目录
带你入门GeoSpark系列之一【环境篇】
带你入门GeoSpark系列之二【Spatial RDD篇】
带你入门GeoSpark系列之三【空间查询篇】
1.空间范围查询( Spatial Range Query)
空间范围查询,顾名思义我们可以给定一个范围(query window),然后查询出包含在当前范围内的地理对象。
1.1 数据准备
创建checkin1.csv
在 data/checkin1.csv
路径下:
注意这里故意把bar坐标修改了一下
-88.331492,32.324142,hotel
-88.175933,32.360763,gas
-99.388954,32.357073,bar
-88.221102,32.35078,restaurant
1.2 代码示例
considerBoundaryIntersection
参数可以配置查询是否包括query window边界上的地理对象。
package com.suddev.bigdata.queryimport com.vividsolutions.jts.geom.Envelope
import org.apache.spark.serializer.KryoSerializer
import org.apache.spark.{SparkConf, SparkContext}
import org.datasyslab.geospark.enums.FileDataSplitter
import org.datasyslab.geospark.serde.GeoSparkKryoRegistrator
import org.datasyslab.geospark.spatialOperator.RangeQuery
import org.datasyslab.geospark.spatialRDD.PointRDD/*** Spatial Range Query* @author Rand* @date 2020/4/16 0016*/
object SpatialRangeQueryApp {def main(args: Array[String]): Unit = {val conf = new SparkConf().setAppName("SpatialRangeQueryApp").setMaster("local[*]").set("spark.serializer",classOf[KryoSerializer].getName).set("spark.kryo.registrator", classOf[GeoSparkKryoRegistrator].getName)implicit val sc = new SparkContext(conf)val objectRDD = createPointRDDobjectRDD.rawSpatialRDD.rdd.collect().foreach(println)// 定义QueryWindowval rangeQueryWindow = new Envelope(-90.01, -80.01, 30.01, 40.01)// 是否考虑边界val considerBoundaryIntersection = falseval usingIndex = falseval queryResult = RangeQuery.SpatialRangeQuery(objectRDD, rangeQueryWindow, considerBoundaryIntersection, usingIndex)queryResult.rdd.collect().foreach(println)}def createPointRDD(implicit sc:SparkContext): PointRDD ={val pointRDDInputLocation = "data/checkin1.csv"// 这个变量控制我们的地理经度和纬度在数据的哪两列,我们这里是第0,1列,Offset就设置为0val pointRDDOffset = 0val pointRDDSplitter = FileDataSplitter.CSV// 这个参数允许我们除了经纬度外还可以携带其他自定义数据val carryOtherAttributes = trueval objectRDD = new PointRDD(sc, pointRDDInputLocation,pointRDDOffset, pointRDDSplitter, carryOtherAttributes)objectRDD}
}
带你入门GeoSpark系列之三【空间查询篇】相关推荐
- 15分钟带你入门sklearn与机器学习——分类算法篇
作者 | 何从庆 本文转载自AI算法之心(ID:AIHeartForYou) [导读]众所周知,Scikit-learn(以前称为scikits.learn)是一个用于Python编程语言的免费软件机 ...
- 1.偏头痛杨的Java入门教学系列之认识Java篇
转载自:偏头痛杨的Java入门教学系列 地址:https://blog.csdn.net/piantoutongyang/article/details/70138697 前戏 今天我们主要来介绍一下 ...
- openlayers4 入门开发系列之地图工具栏篇(附源码下载)
前言 openlayers4 官网的 api 文档介绍地址 openlayers4 api,里面详细的介绍 openlayers4 各个类的介绍,还有就是在线例子:openlayers4 官网在线例子 ...
- openlayers4 入门开发系列之船讯篇
前言 openlayers4 官网的 api 文档介绍地址 openlayers4 api,里面详细的介绍 openlayers4 各个类的介绍,还有就是在线例子:openlayers4 官网在线例子 ...
- SuperMap iObject入门开发系列之三管线系统标注
本文是一位好友"托马斯"授权给我来发表的,介绍都是他的研究成果,在此,非常感谢. 管线系统会涉及到一些坐标标注,属性标注,提供给用户查询获取其需要的信息,这期的文章介绍的是基于超图 ...
- hadoop入门学习系列之三mysq+php+mysqladmin安装
由于hive需要由mysql来储存元数据,所以先安装一下mysql 一.安装mysql yum install mysql yum intall mysql-server yum install my ...
- C++入门课程系列:基础知识篇(1)
C++是一种静态数据类型语言. • 在C++语言中,变量是计算机编程的一个重要概念,它是一个存储值的字母或名称 • 有几种基本类型的变量: string ("一组词"). char ...
- openlayers入门开发系列之地图工具栏篇
本篇的重点内容是利用openlayers实现地图工具栏功能,包括地图缩放.移动.地图量算.地图打印.清空.全屏.鹰眼.比例尺.地图坐标显示等,效果图如下: 部分核心代码如下: 地图缩放 地图移动 地图 ...
- openlayers入门开发系列之地图属性查询篇
本篇的重点内容是利用openlayers实现地图属性查询功能,效果图如下: 实现思路: 模糊查询点击事件 //模糊查询 $("#swatchQuery").bind("c ...
最新文章
- python处理大量excel数据-python往excel写入大量数据
- 函数中{}输出格式详解(C#)
- 《训练指南》——6.9
- python下载后是黑的_python下载文件记录黑名单的实现代码
- 如何使用autotools工具
- linux如何运行qt源码,Linux/Ubuntu下编译Qt4.8.2源码
- react todolist代码优化
- 超级计算机手机芯片,美国开建arm超级计算机,单节点性能是手机芯片100倍
- 【PTA】7-1 jmu-Java-01入门-取数字浮点数(5分)
- 数学建模——粒子群优化算法(PSO)【有详细样例 + 工具:matlab】(万字总结)
- HttpUtils发送delete方法
- Google浏览器安装插件
- 一款快速搭建局域网http服务器的神器
- 文件后缀对应文件类型表
- 从pdf简历中提取信息——BiLSTM-CRF
- TI电量计--基本介绍及常见问题解答
- matlab中在xls单元格中填充颜色,!Excel中如何根据某一列的值对整行进行颜色填充?...
- ps修改证件照的底色
- element -ui如何去掉原来的蓝色下划线
- 一个老兵的linux学习和面试经验分享 【转载】