Postgresql導(dǎo)入幾何數(shù)據(jù)(shp,geojson)的幾種方式
一、PostGIS 方式導(dǎo)入空間數(shù)據(jù)
導(dǎo)入前需完成PostgreSQL + 對應(yīng)版本 PostGIS的安裝,所有導(dǎo)入方式的核心前提為:目標(biāo)數(shù)據(jù)庫必須啟用 PostGIS 擴(kuò)展,否則空間數(shù)據(jù)無法導(dǎo)入 / 識別。
1.1 PostGIS 客戶端直接導(dǎo)入
通過 PostGIS 專用客戶端軟件可視化操作,步驟簡單直觀,適合基礎(chǔ)導(dǎo)入場景。
操作步驟
創(chuàng)建數(shù)據(jù)庫:在 PostGIS 中執(zhí)行 SQL 語句創(chuàng)建目標(biāo)數(shù)據(jù)庫(示例庫名),語句如下:
Create database ChinaMapFDD;
啟用 PostGIS 擴(kuò)展:必做步驟,未啟用則無法導(dǎo)入數(shù)據(jù),執(zhí)行語句:
Create extension postgis;
建立客戶端與數(shù)據(jù)庫連接:在 PostGIS 客戶端配置連接信息(數(shù)據(jù)庫地址、端口、賬號、密碼、已創(chuàng)建的數(shù)據(jù)庫名),測試連接成功后完成綁定。

導(dǎo)入 SHP 文件:在客戶端導(dǎo)入模塊選擇待導(dǎo)入的 SHP 文件,關(guān)鍵注意:SHP 文件及所在目錄避免包含中文,防止路徑識別錯誤。

驗(yàn)證導(dǎo)入結(jié)果:在 PostgreSQL 數(shù)據(jù)庫中查看對應(yīng)數(shù)據(jù)表,確認(rèn)數(shù)據(jù)導(dǎo)入成功。

可視化校驗(yàn):通過 ArcMap、QGIS 等 GIS 軟件連接數(shù)據(jù)庫,加載數(shù)據(jù)查看導(dǎo)入效果。



關(guān)鍵注意
當(dāng)前使用的ArcMap 10.2.2無法打開PostgreSQL 12.9數(shù)據(jù)庫,原因?yàn)榘姹静患嫒?,ArcMap SDE 模塊對 PostgreSQL 版本有嚴(yán)格匹配要求。
1.2 osm2pgsql 方式導(dǎo)入
基于 SQL 語句操作,適配 OpenStreetMap(OSM)數(shù)據(jù)及通用空間數(shù)據(jù)導(dǎo)入,需依賴 PostGIS 擴(kuò)展的空間函數(shù)支持。
前提條件
目標(biāo)數(shù)據(jù)庫已安裝并啟用 PostGIS 擴(kuò)展,PostGIS 官方文檔參考:http://www.postgis.net/docs/ST_AsText.html
操作步驟
創(chuàng)建 GIS 專用數(shù)據(jù)庫:
create database gisdb;
啟用 PostGIS 擴(kuò)展,保證空間函數(shù)可正常執(zhí)行:
create extension postgis;
驗(yàn)證擴(kuò)展添加成功:查詢 PostGIS 完整版本信息,確認(rèn)擴(kuò)展啟用正常:
select postgis_full_version();
執(zhí)行導(dǎo)入:通過 osm2pgsql 命令行工具,指定數(shù)據(jù)庫連接信息和待導(dǎo)入文件路徑,執(zhí)行導(dǎo)入命令(命令可根據(jù)文件類型 / 工具版本調(diào)整)。
結(jié)果驗(yàn)證:在數(shù)據(jù)庫中查詢數(shù)據(jù)表,或通過 GIS 軟件可視化校驗(yàn)數(shù)據(jù)完整性。
1.3 ArcMap SDE 方式導(dǎo)入
通過 ArcMap 的 SDE(空間數(shù)據(jù)庫引擎)模塊實(shí)現(xiàn)數(shù)據(jù)導(dǎo)入,核心要求為 ArcMap 與 PostgreSQL 版本嚴(yán)格匹配。
操作步驟
版本兼容性校驗(yàn):安裝 ArcMap 后,在軟件安裝目錄的數(shù)據(jù)支持模塊中,查看 SDE 所支持的 PostgreSQL 版本,確認(rèn)本地?cái)?shù)據(jù)庫版本在支持范圍內(nèi)。

配置 SDE 與數(shù)據(jù)庫連接:在 ArcMap 中通過 SDE 模塊填寫數(shù)據(jù)庫連接信息,完成綁定。
導(dǎo)入數(shù)據(jù):在 ArcMap 中選擇待導(dǎo)入空間數(shù)據(jù),通過 SDE 導(dǎo)入功能寫入 PostgreSQL 數(shù)據(jù)庫。
結(jié)果驗(yàn)證:在數(shù)據(jù)庫中查看數(shù)據(jù)表,或在 ArcMap 中直接加載數(shù)據(jù)校驗(yàn)完整性。
二、GeoServer 發(fā)布空間數(shù)據(jù)三種方案
方案 A:導(dǎo)入 PostgreSQL (PostGIS) 后發(fā)布(推薦)
該方案為大數(shù)據(jù)量空間數(shù)據(jù)的最優(yōu)解,PostGIS 的 GIST 空間索引能大幅提升 GeoServer 的查詢與渲染速度,解決數(shù)據(jù)過濾卡頓問題。
第一步:準(zhǔn)備環(huán)境
- 完成 PostgreSQL 安裝,并為目標(biāo)數(shù)據(jù)庫安裝 PostGIS 擴(kuò)展;
- 執(zhí)行 SQL 語句啟用空間功能,確保數(shù)據(jù)庫支持空間數(shù)據(jù)處理:
CREATE EXTENSION postgis;
第二步:將 GeoJSON 導(dǎo)入 PostGIS 數(shù)據(jù)庫
以下三種方法任選,按操作難度從易到難排序:
方法 1:QGIS 導(dǎo)入(圖形化界面,最簡單)
- 打開 QGIS,將 GeoJSON 文件直接拖入軟件加載;
- 點(diǎn)擊菜單欄【數(shù)據(jù)庫】→【數(shù)據(jù)庫管理器】;
- 配置并連接本地 PostGIS 數(shù)據(jù)庫,點(diǎn)擊【導(dǎo)入圖層】,選擇已加載的 GeoJSON 圖層完成導(dǎo)入。
方法 2:ogr2ogr 命令行導(dǎo)入(專業(yè)級,支持自動化)
該工具為 GDAL 內(nèi)置工具,一行命令即可完成導(dǎo)入,適合批量 / 自動化操作(需提前配置 GDAL 環(huán)境變量):
# 基礎(chǔ)命令模板,需替換<>內(nèi)的自定義信息 ogr2ogr -f "PostgreSQL" PG:"host=<數(shù)據(jù)庫地址> port=<端口> dbname=<數(shù)據(jù)庫名> user=<賬號> password=<密碼>" <GeoJSON文件本地路徑>
方法 3:DBeaver 導(dǎo)入(通用數(shù)據(jù)庫工具)
- 打開 DBeaver,連接目標(biāo) PostGIS 數(shù)據(jù)庫;
- 右鍵左側(cè)【表】列表→【導(dǎo)入數(shù)據(jù)】;
- 選擇數(shù)據(jù)源為 GeoJSON 文件,按向?qū)瓿蓪?dǎo)入。
第三步:在 GeoServer 中發(fā)布 PostGIS 數(shù)據(jù)
- 登錄 GeoServer 管理后臺(默認(rèn)地址:http://localhost:8080/geoserver);
- 創(chuàng)建工作區(qū):點(diǎn)擊左側(cè)【工作區(qū)】→【添加新工作區(qū)】,填寫工作區(qū)名稱和命名空間 URI,保存;
- 創(chuàng)建數(shù)據(jù)存儲:點(diǎn)擊左側(cè)【數(shù)據(jù)存儲】→【添加新數(shù)據(jù)存儲】,選擇數(shù)據(jù)源為PostGIS,填寫數(shù)據(jù)庫連接信息(地址、端口、庫名、賬號、密碼),保存;
- 發(fā)布圖層:數(shù)據(jù)存儲創(chuàng)建成功后,GeoServer 會自動識別數(shù)據(jù)庫中的空間表,點(diǎn)擊目標(biāo)表后的【發(fā)布】按鈕;
- 配置圖層范圍:在圖層發(fā)布頁面,依次點(diǎn)擊【從數(shù)據(jù)中計(jì)算】和【計(jì)算本地邊界】,自動生成圖層的空間邊界,保存配置。
方案 B:GeoServer 直接發(fā)布 GeoJSON 文件
該方案無需配置數(shù)據(jù)庫,操作簡單,適合小體量 GeoJSON 數(shù)據(jù)(10MB 以下) 的快速發(fā)布。
第一步:安裝 GeoJSON 插件(按需操作)
GeoServer 部分低版本無默認(rèn) GeoJSON 支持,需手動安裝插件,高版本一般自帶該功能:
- 前往 GeoServer 官方下載頁,找到與本地版本完全一致的安裝包;
- 在【Extensions】欄目下下載 GeoJSON 擴(kuò)展包(命名格式:geoserver-xx-geojson-plugin.zip);
- 解壓擴(kuò)展包,將所有.jar 文件復(fù)制到 GeoServer 安裝目錄的
webapps/geoserver/WEB-INF/lib文件夾中; - 重啟 GeoServer 服務(wù),完成插件加載。
第二步:直接發(fā)布 GeoJSON 步驟
- 登錄 GeoServer 管理后臺,創(chuàng)建工作區(qū)(首次發(fā)布需操作);
- 創(chuàng)建數(shù)據(jù)存儲:點(diǎn)擊【數(shù)據(jù)存儲】→【添加新數(shù)據(jù)存儲】,選擇數(shù)據(jù)源為GeoJSON(插件安裝成功后顯示);若需批量發(fā)布,可選擇【Directory of spatial files】并指向 GeoJSON 文件所在文件夾;
- 配置文件路徑:選擇服務(wù)器磁盤上的 GeoJSON 文件(建議文件無中文 / 空格),保存配置;
- 發(fā)布圖層:數(shù)據(jù)存儲保存后,點(diǎn)擊目標(biāo)圖層后的【發(fā)布】按鈕,完成基礎(chǔ)發(fā)布。
方案 C:發(fā)布 WMS 及圖層樣式控制
GeoServer 發(fā)布的圖層可通過 WMS(Web 地圖服務(wù))對外提供地圖服務(wù),默認(rèn)樣式為基礎(chǔ)灰色(點(diǎn) / 線),需通過 SLD 文件自定義樣式,實(shí)現(xiàn)可視化效果優(yōu)化。
第一步:發(fā)布 WMS 服務(wù)
圖層通過方案 A / 方案 B 發(fā)布后,GeoServer 會自動生成 WMS 服務(wù),可通過左側(cè)【圖層預(yù)覽】找到目標(biāo)圖層,選擇 WMS 相關(guān)預(yù)覽格式(如 OpenLayers),即可查看 WMS 服務(wù)效果,預(yù)覽地址即為 WMS 服務(wù)地址。
第二步:通過 SLD 配置圖層樣式
SLD(Styled Layer Descriptor)是 GeoServer 的樣式描述文件,通過 XML 代碼定義圖層的顏色、線寬、標(biāo)記、縮放級別適配等樣式規(guī)則。
- 創(chuàng)建自定義樣式:點(diǎn)擊左側(cè)【Styles】→【添加新樣式】,填寫樣式名稱,在編輯區(qū)編寫 SLD XML 代碼(新手可使用 QGIS/GeoCat Bridge 等工具導(dǎo)出現(xiàn)成 SLD 文件,直接復(fù)制粘貼);
- 樣式與圖層關(guān)聯(lián):返回目標(biāo)圖層的配置頁面,點(diǎn)擊【Publishing(發(fā)布)】選項(xiàng)卡,在【默認(rèn)樣式】下拉框中選擇剛創(chuàng)建的自定義樣式,保存配置;
- 生效驗(yàn)證:在【圖層預(yù)覽】中重新加載圖層,查看自定義樣式是否生效。
三、發(fā)布方案對比與最終建議
3.1 核心方案對比表
| 特性 | GeoJSON 文件直接發(fā)布(方案 B) | PostgreSQL/PostGIS 方案(方案 A) |
|---|---|---|
| 適配數(shù)據(jù)量 | 適合 10MB 以下小體量數(shù)據(jù) | 適合 GB 級別大數(shù)據(jù)量(無上限) |
| 訪問性能 | 每次渲染需重新解析文件,速度較慢、易卡頓 | 極快,依托 PostGIS 空間索引,瞬間過濾要素 |
| 維護(hù)難度 | 簡單,直接修改本地 GeoJSON 文件即可 | 需基礎(chǔ)數(shù)據(jù)庫維護(hù),數(shù)據(jù)存儲更安全、可追溯 |
| 功能支持 | 僅支持基礎(chǔ)地圖展示 | 支持空間 SQL 統(tǒng)計(jì)、動態(tài)查詢、數(shù)據(jù)聯(lián)動等高級功能 |
3.2 最終建議
結(jié)合數(shù)據(jù)量巨大、存在過濾卡頓的核心問題,強(qiáng)烈推薦使用方案 A(PostGIS+GeoServer):PostGIS 的 R-Tree 空間索引能精準(zhǔn)、快速過濾出視野內(nèi)的空間要素,配合 GeoServer 的 WMS 服務(wù)返回渲染后的圖片,可讓前端 OpenLayers 等地圖框架在處理百萬級甚至千萬級空間數(shù)據(jù)時,保持流暢的交互體驗(yàn);同時 PostGIS 支持空間 SQL 查詢,可實(shí)現(xiàn)數(shù)據(jù)的高級分析與動態(tài)篩選,擴(kuò)展性遠(yuǎn)優(yōu)于直接發(fā)布 GeoJSON 文件。
到此這篇關(guān)于Postgresql導(dǎo)入幾何數(shù)據(jù)(shp,geojson)的幾種方式的文章就介紹到這了,更多相關(guān)Postgresql導(dǎo)入幾何數(shù)據(jù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
postgreSQL查詢結(jié)果添加一個額外的自增序列操作
這篇文章主要介紹了postgreSQL查詢結(jié)果添加一個額外的自增序列操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-02-02
Postgresql 數(shù)據(jù)庫 varchar()字符占用多少字節(jié)介紹
這篇文章主要介紹了Postgresql 數(shù)據(jù)庫 varchar()字符占用多少字節(jié)介紹,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-12-12
PostgreSQL 打印日志信息所在的源文件和行數(shù)的實(shí)例
這篇文章主要介紹了PostgreSQL 打印日志信息所在的源文件和行數(shù)的實(shí)例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-01-01
PostgreSQL?10分區(qū)表及性能測試報告小結(jié)
PostgreSQL的分區(qū)表跟先前版本一樣,也要先建立主表,然后再建立子表,使用繼承的特性,但不需要手工寫規(guī)則了,目前支持range、list分區(qū),10正式版本發(fā)布時不知會不會支持其它方法,感興趣的朋友跟隨小編一起看看吧2022-01-01

