日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

Geospark-SQL加载SHP数据

發(fā)布時間:2025/1/21 数据库 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Geospark-SQL加载SHP数据 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

title: (六)Geospark SQL加載SHP數(shù)據(jù)(JAVA版)
date: 2021-05-08 09:29:06
tags:

  • GeoSpark

GeoSpark SQL默認(rèn)是無法讀取Shp和GeoJson格式的矢量數(shù)據(jù)的,必須要通過RDD讀取,然后利用GeoSpark提供的Adapter在RDD和DataFrame之間互轉(zhuǎn)。

接下來我們還是利用我們上一節(jié)的公園的數(shù)據(jù)來學(xué)習(xí)。

初始化一個SparkSession

SparkSession spark = SparkSession.builder().config("spark.serializer","org.apache.spark.serializer.KryoSerializer").config("spark.kryo.registrator", "org.datasyslab.geospark.serde.GeoSparkKryoRegistrator").master("local[*]").appName("Learn06").getOrCreate();GeoSparkSQLRegistrator.registerAll(spark); GeoSparkVizRegistrator.registerAll(spark);

利用RDD讀取shp

JavaSparkContext context = new JavaSparkContext(spark.sparkContext()); String inputPath = Learn06.class.getResource("/parks").toString(); SpatialRDD<Geometry> rdd = ShapefileReader.readToGeometryRDD(new JavaSparkContext(spark.sparkContext()), inputPath);

將RDD轉(zhuǎn)為DataFrame

Dataset<Row> rawDF = Adapter.toDf(rdd, spark); rawDF.createOrReplaceTempView("park"); rawDF.show(); rawDF.printSchema(); +--------------------+------+---------+--------------------+--------------+---------------+---------------+-------+---------+----------+ | geometry|ParkId|RefParkId| ParkName| Neighborho| EWStreet| NSStreet|DogPark|Washrooms|SpecialFea| +--------------------+------+---------+--------------------+--------------+---------------+---------------+-------+---------+----------+ |POLYGON ((-123.15...| 1| -9999| | Kitsilano| | | N| | | |POLYGON ((-123.15...| 2| 208| Rosemary Brown Park| Kitsilano| W 11th Avenue| Vine Street| N| N| N| |MULTIPOLYGON (((-...| 3| 141| Tea Swamp Park|Mount Pleasant| E 15th Avenue| Sophia Street| N| N| N| |MULTIPOLYGON (((-...| 4| -9999| | Strathcona| | | N| | | |MULTIPOLYGON (((-...| 5| 202| Morton Park| West End| Morton Avenue| Denman Street| N| N| N| |MULTIPOLYGON (((-...| 6| -9999| Mcbride Park| Kitsilano| | | N| | | |MULTIPOLYGON (((-...| 7| -9999| Granville Park| Fairview| | | N| | | |MULTIPOLYGON (((-...| 8| -9999| |Mount Pleasant| | | N| | | |MULTIPOLYGON (((-...| 9| 15| Creekside Park|Mount Pleasant|Terminal Avenue| Quebec Street| N| N| Y| |MULTIPOLYGON (((-...| 10| 134|China Creek South...|Mount Pleasant| E 10th Avenue| Clark Drive| N| N| N| |MULTIPOLYGON (((-...| 11| 200|Barclay Heritage ...| West End| Barclay Street| Nicola Street| N| Y| N| |POLYGON ((-123.15...| 12| 233|Arbutus Greenway ...| Kitsilano| W 11th Avenue| Arbutus Street| N| N| N| |POLYGON ((-123.18...| 13| 106| Almond Park| Kitsilano| W 12th Avenue| Dunbar Street| N| N| N| |POLYGON ((-123.15...| 14| 109| Delamont Park| Kitsilano| W 7th Avenue| Arbutus Street| N| N| N| |POLYGON ((-123.15...| 15| -9999| | Kitsilano| | | N| | | |POLYGON ((-123.14...| 16| 118| Seaforth Peace Park| Kitsilano|Cornwall Avenue|Chestnut Street| N| N| N| |POLYGON ((-123.10...| 17| 139| Mount Pleasant Park|Mount Pleasant| W 16th Avenue| Ontario Street| N| N| N| |POLYGON ((-123.10...| 18| 138| Major Matthews Park|Mount Pleasant| W 11th Avenue|Manitoba Street| N| N| N| |POLYGON ((-123.10...| 19| 137|Jonathan Rogers Park|Mount Pleasant| W 7th Avenue|Manitoba Street| N| Y| N| |POLYGON ((-123.09...| 20| 183| Thornton Park| Strathcona|Terminal Avenue| Main Street| N| N| N| +--------------------+------+---------+--------------------+--------------+---------------+---------------+-------+---------+----------+ only showing top 20 rowsroot|-- geometry: string (nullable = true)|-- ParkId: string (nullable = true)|-- RefParkId: string (nullable = true)|-- ParkName: string (nullable = true)|-- Neighborho: string (nullable = true)|-- EWStreet: string (nullable = true)|-- NSStreet: string (nullable = true)|-- DogPark: string (nullable = true)|-- Washrooms: string (nullable = true)|-- SpecialFea: string (nullable = true)

從輸出結(jié)果中可以看到,轉(zhuǎn)為dataframe后,默認(rèn)是沒有Geometry的,需要我們自己構(gòu)建。

// 構(gòu)建幾何圖形(Geometry) String sqlText = "select ST_GeomFromWKT(geometry) as shape, * from park"; rawDF = spark.sql(sqlText); rawDF.createOrReplaceTempView("park"); rawDF.show(); rawDF.printSchema(); +--------------------+--------------------+------+---------+--------------------+--------------+---------------+---------------+-------+---------+----------+ | shape| geometry|ParkId|RefParkId| ParkName| Neighborho| EWStreet| NSStreet|DogPark|Washrooms|SpecialFea| +--------------------+--------------------+------+---------+--------------------+--------------+---------------+---------------+-------+---------+----------+ |POLYGON ((-123.15...|POLYGON ((-123.15...| 1| -9999| | Kitsilano| | | N| | | |POLYGON ((-123.15...|POLYGON ((-123.15...| 2| 208| Rosemary Brown Park| Kitsilano| W 11th Avenue| Vine Street| N| N| N| |MULTIPOLYGON (((-...|MULTIPOLYGON (((-...| 3| 141| Tea Swamp Park|Mount Pleasant| E 15th Avenue| Sophia Street| N| N| N| |MULTIPOLYGON (((-...|MULTIPOLYGON (((-...| 4| -9999| | Strathcona| | | N| | | |MULTIPOLYGON (((-...|MULTIPOLYGON (((-...| 5| 202| Morton Park| West End| Morton Avenue| Denman Street| N| N| N| |MULTIPOLYGON (((-...|MULTIPOLYGON (((-...| 6| -9999| Mcbride Park| Kitsilano| | | N| | | |MULTIPOLYGON (((-...|MULTIPOLYGON (((-...| 7| -9999| Granville Park| Fairview| | | N| | | |MULTIPOLYGON (((-...|MULTIPOLYGON (((-...| 8| -9999| |Mount Pleasant| | | N| | | |MULTIPOLYGON (((-...|MULTIPOLYGON (((-...| 9| 15| Creekside Park|Mount Pleasant|Terminal Avenue| Quebec Street| N| N| Y| |MULTIPOLYGON (((-...|MULTIPOLYGON (((-...| 10| 134|China Creek South...|Mount Pleasant| E 10th Avenue| Clark Drive| N| N| N| |MULTIPOLYGON (((-...|MULTIPOLYGON (((-...| 11| 200|Barclay Heritage ...| West End| Barclay Street| Nicola Street| N| Y| N| |POLYGON ((-123.15...|POLYGON ((-123.15...| 12| 233|Arbutus Greenway ...| Kitsilano| W 11th Avenue| Arbutus Street| N| N| N| |POLYGON ((-123.18...|POLYGON ((-123.18...| 13| 106| Almond Park| Kitsilano| W 12th Avenue| Dunbar Street| N| N| N| |POLYGON ((-123.15...|POLYGON ((-123.15...| 14| 109| Delamont Park| Kitsilano| W 7th Avenue| Arbutus Street| N| N| N| |POLYGON ((-123.15...|POLYGON ((-123.15...| 15| -9999| | Kitsilano| | | N| | | |POLYGON ((-123.14...|POLYGON ((-123.14...| 16| 118| Seaforth Peace Park| Kitsilano|Cornwall Avenue|Chestnut Street| N| N| N| |POLYGON ((-123.10...|POLYGON ((-123.10...| 17| 139| Mount Pleasant Park|Mount Pleasant| W 16th Avenue| Ontario Street| N| N| N| |POLYGON ((-123.10...|POLYGON ((-123.10...| 18| 138| Major Matthews Park|Mount Pleasant| W 11th Avenue|Manitoba Street| N| N| N| |POLYGON ((-123.10...|POLYGON ((-123.10...| 19| 137|Jonathan Rogers Park|Mount Pleasant| W 7th Avenue|Manitoba Street| N| Y| N| |POLYGON ((-123.09...|POLYGON ((-123.09...| 20| 183| Thornton Park| Strathcona|Terminal Avenue| Main Street| N| N| N| +--------------------+--------------------+------+---------+--------------------+--------------+---------------+---------------+-------+---------+----------+ only showing top 20 rowsroot|-- shape: geometry (nullable = false)|-- geometry: string (nullable = true)|-- ParkId: string (nullable = true)|-- RefParkId: string (nullable = true)|-- ParkName: string (nullable = true)|-- Neighborho: string (nullable = true)|-- EWStreet: string (nullable = true)|-- NSStreet: string (nullable = true)|-- DogPark: string (nullable = true)|-- Washrooms: string (nullable = true)|-- SpecialFea: string (nullable = true)

渲染

方法參考上一小節(jié)。

// 轉(zhuǎn)為像素 sqlText = "select ST_Envelope_Aggr(shape) as boundary from park"; rawDF = spark.sql(sqlText); rawDF.createOrReplaceTempView("bound");sqlText = "select ST_Pixelize(shape, 256, 256, (select boundary from bound)) as pixel, shape from park "; rawDF = spark.sql(sqlText); rawDF.createOrReplaceTempView("pixels"); rawDF.show(false); // 選擇顏色 sqlText = "select pixel, shape, ST_Colorize(1, 1, 'red') as color from pixels"; rawDF = spark.sql(sqlText); rawDF.createOrReplaceTempView("pixels"); rawDF.show(); // 渲染 sqlText = "select ST_Render(pixel, color) as image from pixels"; rawDF = spark.sql(sqlText); rawDF.createOrReplaceTempView("images"); rawDF.show(); // 保存 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") + "/park", ImageType.PNG);

參考連接:https://www.jianshu.com/p/8100714295bc

總結(jié)

以上是生活随笔為你收集整理的Geospark-SQL加载SHP数据的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。