GeoSpark->ST_Intersection

1、测试数据(area.csv:)

10.5,32.11,30.50,60.21,33.50,60.21,10.5,32.11,china1
9.51,30.11,32.50,62.21,34.50,62.21,9.51,30.11,china2
11.5,32.11,31.50,64.21,33.50,64.21,11.5,32.11,china3
10.5,31.16,32.51,63.21,35.51,63.21,10.5,31.16,china4
11.5,32.11,30.50,59.21,33.50,59.21,11.5,32.11,china5
50.1,60.31,70.10,80.21,60.23,81.12,50.1,60.31,v1
  1. 测试数据(area2.csv:)
9.3,31.11,29.50,59.21,32.50,59.21,9.3,31.11,childrenchina1
8.51,29.11,32.50,62.21,34.50,62.21,8.51,29.11,childrenchina2
11.5,32.11,31.50,64.21,33.50,64.21,11.5,32.11,childrenchina3
10.5,31.16,32.51,63.21,35.51,63.21,10.5,31.16,childrenchina4
11.5,32.11,30.50,59.21,33.50,59.21,11.5,32.11,childrenchina5
55.1,65.31,70.10,80.21,65.23,81.12,55.1,65.31,v2
  1. 测试代码
package txt_demo

import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.serializer.KryoSerializer
import org.apache.spark.sql.SparkSession
import org.datasyslab.geospark.enums.FileDataSplitter
import org.datasyslab.geospark.serde.GeoSparkKryoRegistrator
import org.datasyslab.geospark.spatialRDD.PolygonRDD
import org.datasyslab.geosparksql.utils.{Adapter, GeoSparkSQLRegistrator}
import org.datasyslab.geosparkviz.core.Serde.GeoSparkVizKryoRegistrator

object area2_demo {
  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)

    var sparkSession = SparkSession.builder()
      .master("local[*]") // Delete this if run in cluster mode
      .appName("readTestScala") // Change this to a proper name
      // Enable GeoSpark custom Kryo serializer
      .config("spark.serializer", classOf[KryoSerializer].getName)
      .config("spark.kryo.registrator", classOf[GeoSparkKryoRegistrator].getName)
      .config("spark.serializer", classOf[KryoSerializer].getName)
      .config("spark.kryo.registrator", classOf[GeoSparkVizKryoRegistrator].getName)
      .config("spark.sql.crossJoin.enabled","true") // 这个配置很关键
      .getOrCreate()

    GeoSparkSQLRegistrator.registerAll(sparkSession)

    val polygonRDD = createPolygonRDD(sc,path="D:\\idea\\demo_spark\\es_demo\\src\\data\\area.csv")
    val chpolygonRDD = createPolygonRDD(sc,path="D:\\idea\\demo_spark\\es_demo\\src\\data\\area2.csv")
    val polygonDf = Adapter.toDf(polygonRDD,sparkSession)
    val chpolygonDf = Adapter.toDf(chpolygonRDD,sparkSession)
    val testDf  =polygonDf

    polygonDf.createOrReplaceTempView("p_view")
    chpolygonDf.createOrReplaceTempView("c_view")

    val rslt = sparkSession.sql(
      """
        |select p_view._c1,c_view._c1,
        |ST_Intersection(ST_GeomFromWKT(p_view.geometry),ST_GeomFromWKT(c_view.geometry)) as intersection
        |from p_view, c_view""".stripMargin)

    rslt.show(truncate = false)
    
  }


  def createPolygonRDD(implicit sc:SparkContext,path:String):PolygonRDD={
    val polygonRDDInputLocation = path
    val polygonRDDStartOffset = 0
    val polygonRDDEndOffset = 7
    val polygonRDDSplitter = FileDataSplitter.CSV // or use  FileDataSplitter.TSV
    val carryOtherAttributes = true
    val objectRDD = new PolygonRDD(sc, polygonRDDInputLocation, polygonRDDStartOffset, polygonRDDEndOffset, polygonRDDSplitter, carryOtherAttributes)
    objectRDD
  }
}
  1. 测试结果
+------+--------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|_c1   |_c1           |intersection                                                                                                                                                                                               |
+------+--------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|china1|childrenchina1|POLYGON ((12.839857651245545 35.397499999999994, 29.78825622775801 59.21, 32.5 59.21, 12.839857651245545 35.397499999999994))                                                                              |
|china1|childrenchina2|POLYGON ((31.050453172205437 60.21, 32.92960725075529 60.21, 19.483667409057173 43.08569800845681, 12.109559422351188 34.07646172904645, 31.050453172205437 60.21))                                        |
|china1|childrenchina3|POLYGON ((18.525000000000016 43.38512500000002, 30.5 60.21, 30.75856697819315 60.21, 16.647377185678607 39.62049125728561, 14.687748156551335 37.22633579126489, 18.525000000000016 43.38512500000002))    |
|china2|childrenchina1|POLYGON ((16.288370938490992 39.574363076361934, 30.351401869158877 59.21, 32.16448598130841 59.21, 26.620985388579093 52.089296957718645, 16.288370938490992 39.574363076361934))                         |
|china2|childrenchina2|POLYGON ((11.739694448233537 33.223231482744524, 32.5 62.21, 34.5 62.21, 11.739694448233537 33.223231482744524))                                                                                           |
|china2|childrenchina3|POLYGON ((15.229774221444291 38.096287625418086, 23.891138802353808 50.18979797979806, 14.685884412215188 36.758494983277615, 13.235433483790018 34.89537074148298, 15.229774221444291 38.096287625418086))|
|china3|childrenchina1|POLYGON ((15.727232924693523 38.894708844133106, 21.132029622772514 47.56940754454988, 29.5 59.21, 30.073208722741438 59.21, 18.215460006323113 41.90846664558963, 15.727232924693523 38.894708844133106)) |
|china3|childrenchina2|POLYGON ((13.937789864115771 36.02265273190581, 16.496160216138215 40.12883714690183, 25.683194441128062 52.804570070918665, 15.855037283533976 38.464395309156394, 13.937789864115771 36.02265273190581)) |
|china3|childrenchina3|POLYGON ((11.5 32.11, 31.5 64.21, 33.5 64.21, 11.5 32.11))                                                                                                                                                 |
|china1|childrenchina4|POLYGON ((29.070540432523607 58.20160930769567, 30.5 60.21, 33.16897035881435 60.21, 26.400040734382703 51.535701940702346, 14.552604302724369 37.06122525680673, 29.070540432523607 58.20160930769567))   |
|china1|childrenchina5|POLYGON ((32.68149466192171 59.21, 17.47203579418344 40.628008948545855, 30.5 59.21, 32.68149466192171 59.21))                                                                                             |
|china1|v2            |MULTIPOLYGON EMPTY                                                                                                                                                                                         |
|china2|childrenchina4|POLYGON ((16.047796657703277 39.238459013148116, 32.5 62.21, 34.5 62.21, 11.791455695196936 33.04056133716773, 16.047796657703277 39.238459013148116))                                                     |
|china2|childrenchina5|POLYGON ((32.16448598130841 59.21, 15.422247471371925 37.70436349864101, 30.5 59.21, 32.16448598130841 59.21))                                                                                             |
|china2|v2            |MULTIPOLYGON EMPTY                                                                                                                                                                                         |
|china3|childrenchina4|POLYGON ((12.524650694285667 33.754564364328495, 14.900589124097635 37.5679455441767, 32.51 63.21, 32.81464174454829 63.21, 13.366446311437688 34.833314845324985, 12.524650694285667 33.754564364328495)) |
|china3|childrenchina5|POINT (11.5 32.11)                                                                                                                                                                                         |
|china3|v2            |MULTIPOLYGON EMPTY                                                                                                                                                                                         |
|china4|childrenchina1|POLYGON ((16.22954372836366 39.50311115375081, 29.763042121684865 59.21, 32.3886271450858 59.21, 30.469239069128683 56.75032835528086, 16.22954372836366 39.50311115375081))                               |
|china4|childrenchina2|POLYGON ((13.152933215891089 35.023085396152176, 19.604078094600776 44.41696060572262, 32.5 62.21, 34.5 62.21, 13.152933215891089 35.023085396152176))                                                     |
|china4|childrenchina3|POLYGON ((14.900589124097635 37.5679455441767, 32.51 63.21, 32.81464174454829 63.21, 13.366446311437688 34.833314845324985, 12.524650694285667 33.754564364328495, 14.900589124097635 37.5679455441767))   |
|china5|childrenchina1|POLYGON ((19.238662729381986 43.147776840329044, 30.5 59.21, 32.5 59.21, 19.238662729381986 43.147776840329044))                                                                                           |
|china5|childrenchina2|POLYGON ((16.78949077940845 39.65448421694573, 30.5 59.21, 32.14441087613293 59.21, 16.78949077940845 39.65448421694573))                                                                                  |
|china5|childrenchina3|POINT (11.5 32.11)                                                                                                                                                                                         |
|v1    |childrenchina1|MULTIPOLYGON EMPTY                                                                                                                                                                                         |
|v1    |childrenchina2|MULTIPOLYGON EMPTY                                                                                                                                                                                         |
|v1    |childrenchina3|MULTIPOLYGON EMPTY                                                                                                                                                                                         |
|china4|childrenchina4|POLYGON ((10.5 31.16, 32.51 63.21, 35.51 63.21, 10.5 31.16))                                                                                                                                               |
|china4|childrenchina5|POLYGON ((32.3886271450858 59.21, 13.788828991150957 35.37459292948374, 30.5 59.21, 32.3886271450858 59.21))                                                                                               |
|china4|v2            |MULTIPOLYGON EMPTY                                                                                                                                                                                         |
|china5|childrenchina4|POLYGON ((13.788828991150957 35.37459292948374, 30.5 59.21, 32.3886271450858 59.21, 13.788828991150957 35.37459292948374))                                                                                 |
|china5|childrenchina5|POLYGON ((11.5 32.11, 30.5 59.21, 33.5 59.21, 11.5 32.11))                                                                                                                                                 |
|china5|v2            |MULTIPOLYGON EMPTY                                                                                                                                                                                         |
|v1    |childrenchina4|MULTIPOLYGON EMPTY                                                                                                                                                                                         |
|v1    |childrenchina5|MULTIPOLYGON EMPTY                                                                                                                                                                                         |
|v1    |v2            |POLYGON ((64.95110212207209 80.6847210809437, 70.1 80.21, 55.1 65.31, 64.95110212207209 80.6847210809437))                                                                                                 |
+------+--------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,188评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,464评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,562评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,893评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,917评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,708评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,430评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,342评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,801评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,976评论 3 337
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,115评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,804评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,458评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,008评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,135评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,365评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,055评论 2 355

推荐阅读更多精彩内容