【寫在創作紀念日】基于SpringBoot和PostGIS的各省東西南北四至極點區縣可視化

目錄

前言

一、空間檢索簡介

1、空間表結構

2、四至空間檢索

二、前后端實現

1、后端實現

2、前端集成

三、成果展示

1、東部省份

2、西部省份

3、南部省份

4、北部省份

5、中部省份

四、總結


前言

????????在當今數字化時代,地理信息數據的分析與可視化對于眾多領域都有著至關重要的意義。從城市規劃到資源管理,從環境監測到交通物流,精準、直觀地呈現地理空間數據能夠為決策提供有力支持。在中國這樣一個地域遼闊、行政區劃復雜的國家,各省的地理四至極點信息在一定程度上反映了該省的地理位置特征和空間分布情況。通過確定各省的東西南北四至極點所在的區縣,并將其可視化展示,可以為眾多領域提供有價值的參考。

????????在城市規劃方面,了解周邊省份的四至極點區縣有助于明確自身的區域優勢和潛在發展方向,合理布局城市功能區,規劃交通線路和基礎設施建設,促進區域間的協調發展。對于資源管理,直觀的可視化界面可以幫助管理者快速了解資源的地理分布范圍,以便更好地制定資源開發與保護策略,優化資源分配,提高資源利用效率。?在環境監測領域,通過觀察四至極點區縣及其周邊環境數據的可視化呈現,可以及時發現環境問題的空間關聯性,為跨區域的環境治理提供依據,實現區域性環境協同監測與管理。此外,交通物流行業也可以借助該可視化系統,優化運輸路線規劃,提高物流配送效率,降低運輸成本,更好地應對復雜的地理環境和運輸需求。

????????本次研究聚焦于基于 SpringBoot 和 PostGIS 的各省東西南北四至極點區縣可視化項目。本項目旨在整合 SpringBoot 的高效開發能力和 PostGIS 的強大空間數據處理功能,構建一個精準、實時且交互性強的各省東西南北四至極點區縣可視化平臺,為相關領域的研究與決策提供一種創新、直觀且便捷的地理信息可視化解決方案,助力探索和挖掘地理空間數據蘊含的巨大價值,推動各行業在地理維度上的科學決策與可持續發展。接下來,本文將深入探討該可視化項目的空間查詢設計、關鍵技術實現以及實際應用場景與效果評估等內容,詳細闡述如何利用 SpringBoot 和 PostGIS 實現地理數據的有效處理與可視化展示,以滿足不同用戶的需求,為地理信息相關領域的研究和實踐提供有價值的參考與借鑒。通過本文可以實現一個查找對應省份的四至區縣和對應經緯度點坐標信息。

一、空間檢索簡介

????????本節將重點對空間檢索的知識進行綜合介紹,分別從以下兩點開展,首先是空間表結構展示,對縣域這張空間表進行簡單介紹。其次介紹如何基于PostGIS來進行省域范圍的區縣四至空間檢索實踐。

1、空間表結構

????????本實例涉及的空間表結構有以下這張表,這張便是區域信息,是省份對象的區縣信息。表結構如下:

????????具體的表結構SQL如下所示:

?

CREATE TABLE "public"."biz_area" ("id" int8 NOT NULL,"province_code" varchar(16) COLLATE "pg_catalog"."default" NOT NULL,"province_name" varchar(64) COLLATE "pg_catalog"."default" NOT NULL,"city_code" varchar(16) COLLATE "pg_catalog"."default" NOT NULL,"city_name" varchar(512) COLLATE "pg_catalog"."default" NOT NULL,"area_code" varchar(16) COLLATE "pg_catalog"."default" NOT NULL,"area_name" varchar(512) COLLATE "pg_catalog"."default" NOT NULL,"type" varchar(32) COLLATE "pg_catalog"."default","geom" "public"."geometry",CONSTRAINT "pk_biz_area" PRIMARY KEY ("id")
);
CREATE INDEX "idx_biz_area_areacode" ON "public"."biz_area" USING btree ("area_code" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST
);
CREATE INDEX "idx_biz_area_city_code" ON "public"."biz_area" USING btree ("city_code" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST
);
CREATE INDEX "idx_biz_area_geom" ON "public"."biz_area" USING gist ("geom" "public"."gist_geometry_ops_2d"
);
CREATE INDEX "idx_biz_area_geom_gp" ON "public"."biz_area" USING gist ((geom::geography) "public"."gist_geography_ops"
);
CREATE INDEX "idx_biz_area_provincec_code" ON "public"."biz_area" USING btree ("province_code" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST
);
COMMENT ON COLUMN "public"."biz_area"."id" IS '主鍵ID';
COMMENT ON COLUMN "public"."biz_area"."province_code" IS '省份編碼';
COMMENT ON COLUMN "public"."biz_area"."province_name" IS '省份名稱';
COMMENT ON COLUMN "public"."biz_area"."city_code" IS '市級編碼';
COMMENT ON COLUMN "public"."biz_area"."city_name" IS '市級名稱';
COMMENT ON COLUMN "public"."biz_area"."area_code" IS '區縣編碼';
COMMENT ON COLUMN "public"."biz_area"."area_name" IS '區縣名稱';
COMMENT ON COLUMN "public"."biz_area"."type" IS '類型';
COMMENT ON COLUMN "public"."biz_area"."geom" IS 'geom';

????????區縣表的查詢數據結果如下所示:

????????以上就是空間表模型和表結構的簡單介紹。 這張表是基礎數據表格,是后續進行四至空間分析的基礎。

2、四至空間檢索

????????要想實現空間四至的求解,其實可以轉換成尋找當前面數據的四至范圍極值的問題。因此我們只需要找到能包圍當前面數據的做大點的坐標即可。為了方便實現按照某省份來查詢其對應的四至范圍,因此在Postgresql中使用子查詢來進行數據的過濾,首先定義with 子句。查詢的SQL如下:

WITH temp_area AS (SELECT *  FROM biz_area T WHERE T.province_code = '510000'),bounds_info AS ((SELECT '最東' AS direction, T.*, ST_X(dp.geom) AS x, ST_Y(dp.geom) AS yFROM temp_area T, LATERAL ST_DumpPoints(T.geom) AS dpORDER BY x DESC LIMIT 1)UNION (SELECT '最西' AS direction, T.*, ST_X(dp.geom) AS x, ST_Y(dp.geom) AS yFROM temp_area T, LATERAL ST_DumpPoints(T.geom) AS dpORDER BY x ASC LIMIT 1)UNION (SELECT '最北' AS direction, T.*, ST_X(dp.geom) AS x, ST_Y(dp.geom) AS yFROM temp_area T, LATERAL ST_DumpPoints(T.geom) AS dpORDER BY y ASC LIMIT 1)UNION (SELECT '最南' AS direction, T.*, ST_X(dp.geom) AS x, ST_Y(dp.geom) AS yFROM temp_area T, LATERAL ST_DumpPoints(T.geom) AS dpORDER BY y DESC LIMIT 1)) SELECT  direction,id, province_code, province_name, city_code,city_name,area_code,area_name,type,st_asgeojson(geom) AS geomJson,x AS lon,y AS lat FROM bounds_info;

????????這里我們以四川省為例,查詢四川省的四至縣域結果:

????????可以直觀的看到,四川省最東邊是達州市的宣漢縣,最西邊是甘孜藏族自治州的石渠縣,最南邊是涼山彝族自治州的會理縣,最北邊是阿壩藏族羌族自治州的若爾蓋縣。?

二、前后端實現

????????介紹完空間表以及四至的空間檢索實現后,接下來我們來介紹一下如何在前后端實現接口的接入和WebGIS界面的可視化。

1、后端實現

????????后端比較簡單,這里我們將前面的四至查詢函數包裝成一個公共的方法,供后續的分析方法調用。在Mapper中定義查詢請求的方法體,具體如下圖所示:

static final String FIND_ESWNAREA_BYPROVINCE_SQL = "<script>"+ " WITH temp_area AS ( SELECT * FROM biz_area T WHERE T.province_code = #{province_code} ), "+ " bounds_info AS ("+ " ( SELECT '最東' AS direction,T.*,ST_X ( dp.geom ) AS x,ST_Y ( dp.geom ) AS y "+ " FROM temp_area T,LATERAL ST_DumpPoints ( T.geom ) AS dp ORDER BY x DESC LIMIT 1 "+ " ) UNION  "+ " ( SELECT '最西' AS direction,T.*,ST_X ( dp.geom ) AS x,ST_Y ( dp.geom ) AS y "+ " FROM temp_area T,LATERAL ST_DumpPoints ( T.geom ) AS dp ORDER BY x ASC LIMIT 1 "+ " ) UNION "+ " ( SELECT '最南' AS direction,T.*,ST_X ( dp.geom ) AS x,ST_Y ( dp.geom ) AS y "+ " FROM temp_area T, LATERAL ST_DumpPoints ( T.geom ) AS dp ORDER BY y ASC LIMIT 1 "+ " ) UNION  "+ " (SELECT '最北' AS direction,T.*,ST_X ( dp.geom ) AS x,ST_Y ( dp.geom ) AS y "+ " FROM temp_area T, LATERAL ST_DumpPoints( T.geom ) AS dp ORDER BY y DESC LIMIT 1 "+ ") SELECT direction,id,province_code,province_name,city_code,city_name,area_code, "+ " area_name,type, st_asgeojson(geom) geomJson, x lon,y lat FROM bounds_info "+ "</script>";
/**
* - 根據省份code查詢對應省份的四至區縣信息
* @param provinceCode 需要查詢的目標省份code
* @return
*/
@Select(FIND_ESWNAREA_BYPROVINCE_SQL)
List<EwsnAreaVo> findEswnAreaByProvinceCode(@Param("province_code")String provinceCode);

????????這里僅介紹Mapper的實現,具體的業務層和控制層代碼比較簡單,在此不在贅述。?

2、前端集成

????????介紹完后端的方法實現后,再來介紹一下前端如何使用Leaflet來進行具體的展示。關于地圖頁面的展示分為兩個部分,第一部分展示省份信息,第二部分是展示四至極值的所在區縣信息。首先是展示省份信息的方法,關鍵代碼如下:

 function previewProvince(gid,name){var myStyle = {color:"red",weight:3,"opacity":0.65};$.ajax({  type:"get",  url:prefix + "/geojson/" + gid,  data:{},  dataType:"json",  cache:false,processData:false,success:function(result){if(result.code == web_status.SUCCESS){var geojson = JSON.parse(result.data);var areaLayer = L.geoJSON(geojson,{style:myStyle}).addTo(mymap);var myIcon = L.divIcon({className: 'my-div-icon',iconSize: 100});showLayerGroup.clearLayers();showLayerGroup.addLayer(areaLayer);}},error:function(){$.modal.alertWarning("獲取空間信息失敗");}});
}

?展示東南西北四至點和所在區縣的核心方法如下:

function previewEwsn(pid,provinceCode,name){previewProvince(pid,name);$.ajax({  type:"get",  url:prefix + "/ewsnprovince/list/" + provinceCode,  data:{},  dataType:"json",  cache:false,processData:false,success:function(result){if(result.code == web_status.SUCCESS){var legendData = new Array();for(var i = 0;i< result.data.length;i++){var areaData = result.data[i];var color = ccolor = getRandomColor();var areaLayer = L.geoJSON(JSON.parse(areaData.geomJson),{style: {color:color,fillColor:color,weight:3,"opacity":0.65, fillOpacity: 0.65 }}).addTo(mymap);var myIcon = L.divIcon({iconSize: null,className: '',popupAnchor:[5,5],shadowAnchor:[5,5],html: buildShowInfo(i,color,areaData)});showLayerGroup.addLayer(areaLayer);//中心點位L.marker([areaData.lat,areaData.lon], { icon: myIcon}).addTo(showLayerGroup);legendData.push({label: "\xa0\xa0"+areaData.cityName + areaData.areaName,type: "rectangle",radius: 12,color: color,fillColor: color,fillOpacity: 0.8,weight: 2});}mymap.fitBounds(showLayerGroup.getBounds());initLegend(legendData);}},error:function(){$.modal.alertWarning("獲取空間信息失敗");}});}

三、成果展示

????????篇幅有限不能將所有省份一一展示,從東西南北中四個方向各選取一些省份及其對應的四至區縣來進行展示和講解。各個省份排名不分先后,區縣信息位置是準確的,文中展示不全的,如有興趣,歡迎在評論區留言。

1、東部省份

????????上海市四至:?

序號四至所在區縣
1最北邊上海崇明區
2最東邊上海崇明區
3最西邊上海青浦區
4最南邊上海金山區

?????????江蘇省四至:??

序號四至所在區縣
1最北邊連云港市贛榆區
2最東邊南通市啟東市
3最西邊徐州市豐縣
4最南邊蘇州市吳江區

2、西部省份

????????西藏自治區四至:??

序號四至所在區縣
1最北邊那曲市雙湖縣
2最東邊昌都市芒康縣
3最西邊阿里地區札達縣
4最南邊山南市錯那縣

3、南部省份

?????????廣西壯族自治區四至:??

序號四至所在區縣
1最北邊桂林市全州縣
2最東邊賀州市八步區
3最西邊百色市西林縣
4最南邊北海市海城區

4、北部省份

?????????河北省四至:??

序號四至所在區縣
1最北邊承德市圍場滿族蒙古族自治縣
2最東邊秦皇島市山海關區
3最西邊邯鄲市涉縣
4最南邊邯鄲市魏縣

5、中部省份

? ? ? ? ?湖北省四至:??

序號四至所在區縣
1最北邊十堰市鄖西縣
2最東邊黃岡市黃梅縣
3最西邊恩施土家族苗族自治州利川市
4最南邊咸寧市通城縣

四、總結

????????以上就是本文的主要內容,本次研究聚焦于基于 SpringBoot 和 PostGIS 的各省東西南北四至極點區縣可視化項目。本項目旨在整合 SpringBoot 的高效開發能力和 PostGIS 的強大空間數據處理功能,構建一個精準、實時且交互性強的各省東西南北四至極點區縣可視化平臺,為相關領域的研究與決策提供一種創新、直觀且便捷的地理信息可視化解決方案,助力探索和挖掘地理空間數據蘊含的巨大價值,推動各行業在地理維度上的科學決策與可持續發展。行文倉促,定有不足之處,歡迎各位朋友在評論區批評指正,不勝感激。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/82015.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/82015.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/82015.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

智能守護校園“舌尖安全“:AI視頻分析賦能名廚亮灶新時代

引言&#xff1a; 在校園食品安全備受關注的今天&#xff0c;一套融合視頻監控管理平臺與AI視頻分析盒子的智能解決方案正在全國多地學校食堂悄然落地&#xff0c;為傳統的"名廚亮灶"工程注入科技新動能。這套系統不僅實現了后廚操作的"透明化"&#xff0…

【軟件設計師】計算機網絡考點整理

以下是軟件設計師考試中 ??計算機網絡?? 的核心考點總結&#xff0c;幫助您高效備考&#xff1a; ??一、網絡體系結構與協議?? ??OSI七層模型 & TCP/IP四層模型?? 各層功能&#xff08;物理層-數據鏈路層-網絡層-傳輸層-會話層-表示層-應用層&#xff09;對應協…

Starrocks的CBO基石--統計信息的來源 StatisticAutoCollector

背景 本文來從底層代碼的實現來分析一下Starrocks怎么獲取統計信息&#xff0c;這些統計信息在后續基于CBO的代價計算的時候有著重要的作用 本文基于Starrrocks 3.3.5 結論 Starrocks的統計信息的收集是通過周期性的運行一系列的SQL&#xff08;以分區為維度&#xff0c;如果…

深度學習模型部署(四)——RKNN

一、RKNN部署及工具包安裝 參考1&#xff1a;https://blog.csdn.net/qq_40280673/article/details/136211086#/ 參考2&#xff1a;瑞芯微官方教程 RKNN部署針對瑞芯微芯片優化&#xff0c;支持NPU硬件加速&#xff0c;需要安裝rknn-toolkit&#xff0c;用于將pytorch模型轉換為…

重構研發效能:項目管理引領軟件工廠邁向智能化

1.項目管理智能化&#xff0c;激活軟件工廠新引擎 在高速發展的軟件開發時代&#xff0c;企業如何高效管理多個項目、協調團隊合作、優化資源配置&#xff0c;已成為推動技術進步的關鍵。尤其是在多任務、多項目并行的復雜環境下&#xff0c;智能項目組合管理工具正成為軟件工…

小米汽車二期工廠下月將竣工,產能提升助力市場拓展

在新能源汽車市場競爭日益激烈的當下&#xff0c;小米汽車傳來重要進展消息。據多方信息顯示&#xff0c;小米汽車二期工廠下月即將竣工&#xff0c;這一關鍵節點的到來&#xff0c;有望為小米汽車的產能提升與市場布局帶來重大突破。? 小米汽車二期工廠位于北京亦莊&#xff…

Python 爬蟲實戰:電競比賽直播數據實時抓取與可視化分析

一、引言 在電競行業快速發展的今天,電競比賽直播數據成為了電競愛好者、分析師和商業機構關注的焦點。實時抓取電競比賽直播數據并進行分析,不僅可以幫助觀眾更好地理解比賽,還能為戰隊戰術優化、選手表現評估以及賽事運營提供重要參考。 本文將詳細介紹如何使用Python爬…

零基礎設計模式——創建型模式 - 生成器模式

第二部分&#xff1a;創建型模式 - 生成器模式 (Builder Pattern) 前面我們學習了單例、工廠方法和抽象工廠模式&#xff0c;它們都關注如何創建對象。生成器模式&#xff08;也常被稱為建造者模式&#xff09;是另一種創建型模式&#xff0c;它專注于將一個復雜對象的構建過程…

Debezium快照事件監聽器系統設計

Debezium快照事件監聽器系統設計 1. 系統概述 1.1 設計目標 為 Debezium 的快照過程提供可擴展的事件監聽機制允許外部系統在快照過程中執行自定義邏輯提供線程安全的事件分發機制確保監聽器的異常不會影響主快照流程1.2 核心功能 表快照開始事件監聽表快照完成事件監聽行數據…

手術機器人行業新趨勢:Kinova多機械臂協同系統如何突破復雜場景適應性瓶頸?

機器人手術歷經多階段技術演進&#xff0c;已成為現代醫療重要方向。其需求增長源于醫療機構對高精度低風險手術方案的需求、微創手術普及及技術進步帶來的復雜場景適應性提升。Kinova 輕型機械臂憑借模塊化設計與即插即用功能&#xff0c;可快速適配不同手術環境&#xff0c;為…

力扣面試150題-- 二叉樹展開為鏈表

Day 46 題目描述 思路 初次做法&#xff1a;由于我直接考慮O&#xff08;1&#xff09;級別的空間復雜度&#xff0c;于是采取了以下做法&#xff1a; 接下來的內容就是遞歸函數如果該節點為空&#xff0c;就返回null將此時的current作為頭節點&#xff0c;left和right作為孩…

【Python】開發工具uv

文章目錄 1. uv install1.1 下載安裝腳本來安裝1.2 使用pipx安裝uv1.3 補充 2. 考慮在離線系統上安裝uv2.1 下載并上傳安裝包2.2 用戶級安裝uv&#xff08;~/.local/bin/&#xff09;2.3 補充 3. uv 管理Python解釋器4. uv 管理依賴5. uv運行代碼5.1 uv不在項目下執行腳本5.2 u…

zabbix批量主機維護腳本兼容性更新

最近做新老版本zabbix監控主機遷移發現zabbix6.0后api安全有了效大升級&#xff0c;批量主機維護腳本出現認證兼容性問題&#xff0c;以下為腳本更新token支持&#xff1a;在這里插入代碼片&#xff1a; # /usr/bin/env python3 # -*- coding:utf-8 -*- import requests impor…

Java中static關鍵字深度解析:從入門到高階實戰

Java中static關鍵字深度解析&#xff1a;從入門到高階實戰 目錄 static的本質與核心特性靜態變量 vs 實例變量&#xff1a;底層對比靜態方法的設計哲學與應用場景高級用法&#xff1a;突破常規的static技巧 4.1 靜態代碼塊&#xff1a;類加載的“初始化引擎”4.2 靜態內部類&…

基于RT-Thread的STM32F4開發第五講——軟件模擬I2C

文章目錄 前言一、RT-Thread工程創建二、AT24C02三、函數編寫1.I2C_soft.c2.I2C_soft.h3.main.h 四、效果展示五、資源分享總結 前言 本章是基于RT-Thread studio實現軟件模擬I2C&#xff0c;開發板是正點原子的STM32F4探索者&#xff0c;使用的RT-Thread驅動是5.1.0&#xff0…

49、c# 能?foreach 遍歷訪問的對象需滿足什么條件?

在 C# 中&#xff0c;要使用 foreach 循環遍歷一個對象&#xff0c;該對象必須滿足以下條件之一&#xff1a; 1. 實現 IEnumerable 或 IEnumerable 接口 非泛型版本&#xff1a;System.Collections.IEnumerable public class MyCollection : IEnumerable {private int[] _da…

推客小程序系統開發:全棧式技術解決方案與行業賦能實踐?

? 在數字化營銷深度滲透各行業的當下&#xff0c;傳統推廣模式已難以滿足企業精細化運營與高效獲客的需求。專業的推客小程序系統憑借其強大的裂變傳播能力與靈活的推廣機制&#xff0c;成為企業構建私域流量池、提升推廣效能的核心工具。我們基于多年技術沉淀與行業洞察&…

WPF布局系統詳解:掌握界面設計的核心藝術

掌握界面設計的核心藝術 1. WPF布局系統概述2. Grid布局詳解2.1 基本行列定義2.2 單元格定位與跨行跨列 3. StackPanel布局4. DockPanel布局5. WrapPanel與Canvas5.1 WrapPanel自動換行布局 5. Canvas絕對定位6. 布局嵌套與綜合應用7. 布局性能優化8. 響應式布局技巧9. 實戰&am…

labview實現LED流水燈的第一種方法

目的&#xff1a;寫一個跑馬燈程序&#xff0c;7個燈從左到右不停的輪流點亮&#xff0c;閃爍間隔由滑動條調節。 一、方法1&#xff1a;使用順序結構 使用順序結構&#xff0c;平鋪式順序結構與創建局部變量實現LED流水燈 具體步驟如下&#xff1a; 第一步&#xff0c;選擇…

uniapp如何設置uni.request可變請求ip地址

文章目錄 簡介方法一&#xff1a;直接在請求URL中嵌入變量方法二&#xff1a;使用全局變量方法三&#xff1a;使用環境變量方法四&#xff1a;服務端配置方法五&#xff1a;使用配置文件&#xff08;如config.js&#xff09;:總結 簡介 在uni-app中&#xff0c;uni.request 用…