一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

基于QGIS初探PostgreSQL的PostGIS插件,包括YUM和編譯安裝PostGIS

 數(shù)據(jù)和云 2021-11-24

寫在前面:本文介紹 QGIS,只是為了展示怎么使用 PostGIS,因作者本人追求的是 PostgreSQL,所以本文的重點(diǎn)還是 PostGIS 這個(gè) PostgreSQL 的插件,QGIS軟件只做簡單介紹,留給地理空間開發(fā)工程師研究吧。在學(xué)這篇文章之前,我也只是小白,都是在網(wǎng)上邊學(xué)邊實(shí)驗(yàn)邊記錄的,寫這篇文章花了我整整3天的時(shí)間,在PostGIS編譯安裝的時(shí)候走了不少彎路,文章如有錯(cuò)誤或侵權(quán)的,望留言指出,立即改正。

除 QGIS 外,其他支持 PostGIS 的軟件詳見:https://trac./postgis/wiki/UsersWikiToolsSupportPostgis

簡介

QGIS (原稱Quantum GIS)是一個(gè)方便使用的免費(fèi)開源且跨平臺的桌面GIS軟件,可運(yùn)行在 Windows、Linux、MacOS 和 BSD 上,并支持眾多矢量、柵格、和數(shù)據(jù)庫格式及功能。

QGIS的最大特點(diǎn)在于界面很友好,熟悉ArcGIS的人都能很快的掌握QGIS的操作,支持WMS并無縫集成PostGIS(對象-關(guān)系型數(shù)據(jù)庫管理系統(tǒng)),幾乎完全照搬了GRASS的分析功能,因此其分析功能也很強(qiáng)大。相比于商業(yè)GIS軟件,QGIS的文件體積更小,需要的內(nèi)存和處理能力也更小,因此它可以在舊的硬件上或CPU運(yùn)算能力被限制的環(huán)境下運(yùn)行,是一款輕量化的桌面GIS軟件。

QGIS的官網(wǎng):https://www./en/site/

PostGIS 也是免費(fèi)開源的,PostGIS通過向PostgreSQL添加對空間數(shù)據(jù)類型、空間索引和空間函數(shù)的支持,將PostgreSQL數(shù)據(jù)庫管理系統(tǒng)轉(zhuǎn)換為空間數(shù)據(jù)庫。

因?yàn)镻ostGIS是建立在PostgreSQL之上的,所以PostGIS自動(dòng)繼承了重要的"企業(yè)級"特性以及開放源代碼的標(biāo)準(zhǔn)。

可以說PostGIS僅僅只是PostgreSQL的一個(gè)插件,但是它將PostgreSQL變成了一個(gè)強(qiáng)大的空間數(shù)據(jù)庫!

關(guān)于 PostGIS 更多介紹以及為什么使用 PostGIS,參考這個(gè)文章或自行百度:https://zhuanlan.zhihu.com/p/62034688,本文部分介紹性文字也是截取此處。

  • PostGIS的官網(wǎng):http:///

  • PostGIS的WIKI:https://trac./postgis/wiki

  • Developers PostGIS Wiki: https://trac./postgis/wiki/DevWikiMain

QGIS 的簡單操作

QGIS的官網(wǎng)下載獨(dú)立安裝版,Windows上安裝比較簡單,直接下一步就行,在QGIS軟件安裝完成后,再在QGIS中安裝以下兩個(gè)插件。

1.安裝QGIS的坐標(biāo)轉(zhuǎn)換插件 GeoHey Toolbox


2.安裝QGIS的底圖插件Quick Map Services

配置底圖

此時(shí)只有一個(gè)OSM的標(biāo)準(zhǔn)底圖,可以在 Settings 中 Get 更多的底圖。

更多的底圖也是有的能用,有的只能在國外網(wǎng)才能用

本示例選用了 ESRI 的 ESRI Gray (dark) 作為底圖。

3.下載全國路網(wǎng)數(shù)據(jù)

可通過OSM Geofabrik項(xiàng)目下載中國水系、道路路網(wǎng)、建筑物、湖泊河網(wǎng)數(shù)據(jù),數(shù)據(jù)坐標(biāo)系為WGS84,下載地址:http://download./asia/china-latest-free.shp.zip 。





gis_osm_roads_free_1.shp :# 全國公路路網(wǎng)數(shù)據(jù)gis_osm_railways_free_1.shp:# 全國鐵路網(wǎng)數(shù)據(jù)gis_osm_waterways_free_1.shp:# 全國河流網(wǎng)數(shù)據(jù)gis_osm_water_a_free_1.shp:# 全國湖泊數(shù)據(jù)

4.QGIS上展示全國路網(wǎng)數(shù)據(jù)

將想要展示的shp文件拖到 QGIS 中就能展示,如下展示全國鐵路網(wǎng)數(shù)據(jù)。


使用PostGIS來存儲(chǔ) Shapefiles 文件的數(shù)據(jù)

自 GIS 軟件被首次編寫以來,Shapefile(和其他文件格式)一直是空間數(shù)據(jù)的存儲(chǔ)和交互的標(biāo)準(zhǔn)方式。

但是,這些平面文件還存在以下缺點(diǎn):

  • 文件需要特殊的應(yīng)用程序才能讀寫 —— SQL是對隨機(jī)數(shù)據(jù)訪問和分析的抽象。如果沒有這種抽象,你將需要自己編寫所有的訪問和分析數(shù)據(jù)的代碼

  • 并發(fā)操作可能導(dǎo)致?lián)p壞數(shù)據(jù) —— 雖然可以編寫額外的代碼以確保對同一文件的多次寫入不會(huì)損壞數(shù)據(jù),但當(dāng)你解決了問題并同時(shí)解決了相關(guān)性能問題時(shí),你已經(jīng)編寫了數(shù)據(jù)庫系統(tǒng)的較多部分。那為什么不直接使用標(biāo)準(zhǔn)數(shù)據(jù)庫呢?

  • 復(fù)雜的問題需要復(fù)雜的應(yīng)用程序來回答 —— 復(fù)雜而有趣的空間分析問題(空間連接、聚合等)可以在數(shù)據(jù)庫中使用一行SQL代碼來表達(dá),但是在對文件進(jìn)行編程時(shí),需要數(shù)百行專門的代碼來解決。

  • 大多數(shù) PostGIS 用戶都在建立多個(gè)應(yīng)用程序訪問數(shù)據(jù)的系統(tǒng),因此,使用標(biāo)準(zhǔn)的SQL訪問方法可以簡化部署和開發(fā)。

  • 有些用戶正在處理大型數(shù)據(jù)集,如果使用文件存儲(chǔ),它們可能被分成多個(gè)文件;但在數(shù)據(jù)庫中,它們可以存儲(chǔ)在單個(gè)大的二維表中。

總之,對多個(gè)用戶的支持,復(fù)雜的即時(shí)查詢和對于大型數(shù)據(jù)集的高性能表現(xiàn),是空間數(shù)據(jù)庫比文件系統(tǒng)的優(yōu)越之處。

1.Windows平臺下載安裝 PostGIS 插件

相對 Linux 平臺,對于 Windows 平臺的 EDB,安裝 PostGIS 插件還是比較簡單的,安裝數(shù)據(jù)庫軟件完成后可以在 Stack Buider 中直接安裝 PostGIS。




下載速度不是很快?。∠螺d完成后直接安裝。



出現(xiàn)對話框都點(diǎn)“是”,直到安裝完成。

出現(xiàn)個(gè)小插曲,我的數(shù)據(jù)庫用戶密碼輸入錯(cuò)誤了,可以先完成 PostGIS 插件的安裝,安裝完成后執(zhí)行它的建庫腳本就行了。


2.Linux平臺下載安裝 PostGIS 插件

Linux平臺安裝 PostGIS 插件分三種安裝方式:第一種是下載源碼編譯安裝,這種安裝過程可能會(huì)比較痛苦;第二種是從 Docker 構(gòu)建,我還沒研究 Docker,本文不做說明,PostGIS 官網(wǎng)有關(guān)于 Docker 上的拉取方式 http:///install/,最后一種是通過 pre-built packages 安裝,也就是通過 yum 已經(jīng)編譯好的rpm包進(jìn)行安裝,省去了編譯安裝之苦。

各種操作系統(tǒng)的 PostGIS 的 Pre-built 二進(jìn)制包分布: https://trac./postgis/wiki/UsersWikiPackages

以下列出了我知道的部分平臺,詳細(xì)的請進(jìn)入鏈接查看:

由此可見,CentOS 的系統(tǒng)鏡像包里沒有 PostGIS 軟件,不能直接通過 yum rpm 包直接安裝,ELEP 7 里有 PostGIS 軟件,但是版本較低(2.0.7),但是根據(jù) PostGIS 對 PostgreSQL 的兼容矩陣(https://trac./postgis/wiki/UsersWikiPostgreSQLPostGIS)來看,2.0.7 版本的 PostGIS 只支持 PostgreSQL 9.1 和 9.2 版本,而對于Debian 12、Fedora 35 和 Ubuntu 22 這種系統(tǒng)安裝 PostGIS 應(yīng)該會(huì)比較輕松,而且支持的功能相對較全。

  • 示例1:從 ELEP 7 中預(yù)編譯安裝 PostGIS 軟件,版本 2.0.7(如果想安裝較新的版本,請看下個(gè)示例)

這種方式適用于創(chuàng)建新環(huán)境或者現(xiàn)有數(shù)據(jù)庫的擴(kuò)展插件位置在 /usr/share/pgsql/extension,如果系統(tǒng)里沒有通過 YUM 方式安裝 PostgreSQL,yum install postgis 的同時(shí)會(huì)安裝 PostgreSQL 9.2,對于已經(jīng)存在 PostgreSQL 數(shù)據(jù)庫的環(huán)境,只有 PostgreSQL 是 YUM 方式安裝在默認(rèn)位置,執(zhí)行 CREATE EXTENSION postgis; 才會(huì)創(chuàng)建上 postgis 插件,因?yàn)?yum install postgis 安裝在默認(rèn)位置 /usr/share/pgsql/extension(至于 yum 安裝能否指定安裝路徑就不曉得了,同樣也不建議這樣使用,以免出現(xiàn)意外情況),否則在數(shù)據(jù)庫里執(zhí)行 CREATE EXTENSION postgis; 創(chuàng)建插件時(shí)會(huì)提示找不到postgis.control,而通過源碼編譯安裝的 PostgreSQL,其擴(kuò)展插件的默認(rèn)位置也是 /usr/share/pgsql/extension,是否能通過 yum install postgis 成功安裝也不得而知,但是還是建議預(yù)編譯安裝方式和編譯安裝方式不要混用,YUM 安裝的 PostgreSQL 就用 YUM 方式安裝 PostGIS,源碼編譯安裝的 PostgreSQL 就用 源碼編譯安裝 PostGIS,關(guān)于源碼安裝的 PostGIS 參考下面的 示例3 。

本示例的 ELEP 選用阿里開源鏡像站: http://mirrors.aliyun.com/repo/epel-7.repo

























































# 對于可以直接連接互聯(lián)網(wǎng)的主機(jī),直接下載 epel-7.repo 再 yum install postgis 即可完成安裝[root@proxy ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo[root@proxy ~]# yum install postgis

# 對于內(nèi)網(wǎng)環(huán)境又沒有YUM源,可以用老方法,在外網(wǎng)主機(jī)上下載制作YUM源傳到內(nèi)網(wǎng)主機(jī)上進(jìn)行安裝# 對于沒有外網(wǎng)的小伙伴,可以直接使用我打包好的進(jìn)行測試,鏈接:https://pan.baidu.com/s/1Pfho2dIDoO7HaX3CTk-sjA 提取碼:lj2r [root@proxy ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo[root@proxy ~]# mkdir postgis-2.0.7-rpm# 下載 postgis 及其依賴包[root@proxy ~]# yum install postgis --downloadonly --downloaddir=/root/postgis-2.0.7-rpm# 下載 制作YUM源的工具 createrepo[root@proxy ~]# yum install http://createrepo./download/createrepo-0.4.4-1.noarch.rpm -y[root@proxy ~]# cd /root/postgis-2.0.7-rpm/# 創(chuàng)建YUM源[root@proxy postgis-2.0.7-rpm]# createrepo -v ./# 打包[root@proxy postgis-2.0.7-rpm]# cd ..[root@proxy ~]# tar -zcvf /root/postgis-2.0.7-rpm.tar.gz postgis-2.0.7-rpm# 將打好的包傳輸?shù)絻?nèi)網(wǎng)主機(jī)并配置YUM安裝,這里我直接使用外網(wǎng)主機(jī)測試[root@proxy ~]# cd /enmo/soft[root@proxy soft]# tar -zxvf postgis-2.0.7-rpm.tar.gz # 配置yum源,加入以下內(nèi)容[root@proxy soft]# vi /etc/yum.repos.d/enmo.repo[postgis]name=postgisbaseurl=file:///enmo/soft/postgis-2.0.7-rpmenabled=yesgpgcheck=0

# 執(zhí)行yum安裝[root@proxy ~]# yum clean all[root@proxy ~]# yum install -y postgis

# 初始化數(shù)據(jù)庫,對于已經(jīng)存在 PostgreSQL 數(shù)據(jù)庫的環(huán)境,可以選擇忽略此步驟[root@proxy ~]# /usr/bin/postgresql-setup initdbInitializing database ... OK[root@proxy ~]# systemctl enable postgresqlCreated symlink from /etc/systemd/system/multi-user.target.wants/postgresql.service to /usr/lib/systemd/system/postgresql.service.[root@proxy ~]# systemctl start postgresql

# 新建數(shù)據(jù)庫,安裝 PostGIS 插件,每個(gè)新建的數(shù)據(jù)庫,如果想用 PostGIS 插件,必須執(zhí)行以下步驟創(chuàng)建 PostGIS 擴(kuò)展[root@proxy ~]# su - postgres-bash-4.2$ createdb postgis-bash-4.2$ psql -d postgispsql (9.2.24)Type "help" for help.

postgis=# CREATE EXTENSION postgis;CREATE EXTENSIONpostgis=# CREATE EXTENSION postgis_topology;CREATE EXTENSION
本示例安裝的 PostGIS 和 PostgreSQL 數(shù)據(jù)庫版本都比較老,而 PostgreSQL 有其自己的RPM存儲(chǔ)庫,從中可以安裝較新的版本,目前最新的版本是 postgis32_13 (PostGIS 3.2.0)。
  • 示例2:從 PostgreSQL RPM repository 中預(yù)編譯安裝 PostGIS 軟件,版本 3.2.0

同樣這種方式也只適用于創(chuàng)建新環(huán)境或者現(xiàn)有數(shù)據(jù)庫的擴(kuò)展插件位置在 /usr/pgsql-13/share/extension,如果系統(tǒng)里沒有通過 YUM 方式安裝 PostgreSQL,yum install postgis 的同時(shí)會(huì)安裝 PostgreSQL 13.5,關(guān)于其他說明,這里不贅述,詳見 示例1。
這里能查看到 PostgreSQL 提供的RPM存儲(chǔ)庫中有哪些最新的軟件包: https://yum./13/redhat/rhel-7-x86_64/repoview/



















































































# 對于可以直接連接互聯(lián)網(wǎng)的主機(jī),直接下載 pgdg-redhat-repo-latest.noarch.rpm 再 yum install postgis32_13 即可完成安裝# 一般安裝操作系統(tǒng)會(huì)默認(rèn)安裝 PostgreSQL 9.2,建議先將其卸載掉,再安裝新版本[root@proxy ~]# yum remove postgresql*[root@proxy ~]# yum -y install https://download./pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm[root@proxy ~]# yum -y install postgis32_13

# 對于內(nèi)網(wǎng)環(huán)境又沒有YUM源,同樣可以用老方法,在外網(wǎng)主機(jī)上下載制作YUM源傳到內(nèi)網(wǎng)主機(jī)上進(jìn)行安裝# 對于沒有外網(wǎng)的小伙伴,可以直接使用我打包好的進(jìn)行測試,鏈接:https://pan.baidu.com/s/1OEmZM1eAiwFLNQbAYQtaxA 提取碼:kqlf [root@proxy ~]# yum remove postgresql*[root@proxy ~]# yum -y install https://download./pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm[root@proxy ~]# yum -y install postgis32_13 --downloadonly --downloaddir=/root/postgis32_13[root@proxy ~]# yum install http://createrepo./download/createrepo-0.4.4-1.noarch.rpm -y[root@proxy ~]# cd /root/postgis32_13# 創(chuàng)建YUM源[root@proxy postgis32_13]# createrepo -v ./# 打包[root@proxy postgis32_13]# cd ..[root@proxy ~]# tar -zcvf /root/postgis32_13-rpm.tar.gz postgis32_13# 將打好的包傳輸?shù)絻?nèi)網(wǎng)主機(jī)配置YUM安裝,這里我直接使用外網(wǎng)主機(jī)測試[root@proxy ~]# cd /enmo/soft[root@proxy soft]# tar -zxvf postgis32_13-rpm.tar.gz # 配置yum源,加入以下內(nèi)容[root@proxy soft]# vi /etc/yum.repos.d/enmo.repo[postgis-32]name=postgisbaseurl=file:///enmo/soft/postgis32_13enabled=yesgpgcheck=0

# 執(zhí)行yum安裝[root@proxy ~]# yum clean all[root@proxy ~]# yum -y install postgis32_13

# 初始化數(shù)據(jù)庫,對于已經(jīng)存在 PostgreSQL 數(shù)據(jù)庫的環(huán)境,可以選擇忽略此步驟[root@proxy ~]# /usr/pgsql-13/bin/postgresql-13-setup initdbInitializing database ... OK[root@proxy ~]# systemctl enable postgresql-13Created symlink from /etc/systemd/system/multi-user.target.wants/postgresql-13.service to /usr/lib/systemd/system/postgresql-13.service.[root@proxy ~]# systemctl start postgresql-13

# 新建數(shù)據(jù)庫,安裝 PostGIS 插件,每個(gè)新建的數(shù)據(jù)庫,如果想用 PostGIS 插件,必須執(zhí)行以下步驟創(chuàng)建 PostGIS 擴(kuò)展[root@proxy ~]# su - postgresLast login: Sat Nov 20 20:40:56 CST 2021 on pts/0-bash-4.2$ createdb postgis-bash-4.2$ psqlpostgres=# CREATE EXTENSION postgis;postgres=# CREATE EXTENSION postgis_raster;postgres=# CREATE EXTENSION postgis_topology;postgres=# CREATE EXTENSION address_standardizer;postgres=# CREATE EXTENSION postgis_sfcgal;postgres=# CREATE EXTENSION fuzzystrmatch;postgres=# CREATE EXTENSION postgis_tiger_geocoder;postgres=# CREATE EXTENSION address_standardizer_data_us;

postgis=# \dx List of installed extensions Name | Version | Schema | Description ------------------------------+------------+------------+--------------------------------------------------------------------------------------------------------------------- address_standardizer | 3.2.0beta1 | public | Used to parse an address into constituent elements. Generally used to support geocoding address normalization step. address_standardizer_data_us | 3.2.0beta1 | public | Address Standardizer US dataset example fuzzystrmatch | 1.1 | public | determine similarities and distance between strings plpgsql | 1.0 | pg_catalog | PL/pgSQL procedural language postgis | 3.2.0beta1 | public | PostGIS geometry and geography spatial types and functions postgis_raster | 3.2.0beta1 | public | PostGIS raster types and functions postgis_sfcgal | 3.2.0beta1 | public | PostGIS SFCGAL functions postgis_tiger_geocoder | 3.2.0beta1 | tiger | PostGIS tiger geocoder and reverse geocoder postgis_topology | 3.2.0beta1 | topology | PostGIS topology spatial types and functions(9 rows)

# postgis32_13提供以下軟件版本PostGIS 3.2.0PostgreSQL 13.5GEOS 3.10.0SFCGAL 1.3.1GDAL 3.3.3PROJ 7.2.1json-c 0.11
  • 示例3:最復(fù)雜的源碼編譯安裝,這個(gè)安裝過程比較既耗時(shí)又痛苦,比安裝 Oracle RAC 還要費(fèi)勁。

PostGIS 官方提出編譯安裝之前需要滿足一些條件,這里不列出了,有需要的去官網(wǎng)看看吧。
PostGIS 官方的在Linux平臺上源碼編譯安裝指導(dǎo): http:///docs/postgis_installation.html#install_short_version
本次測試的 PostgreSQL 數(shù)據(jù)庫環(huán)境沿用我之前測試 PostgreSQL 高可用的環(huán)境:PostgreSQL高可用測試系列之Patroni + etcd + HAProxy + Keepalived 離線部署。
安裝之前建議到 PostGIS 的 WIKI 上查詢一下 PostGIS 對 PostgreSQL 數(shù)據(jù)庫以及 GEOS 和 GDAL 的兼容矩陣,提前規(guī)劃合適的版本: https://trac./postgis/wiki/UsersWikiPostgreSQLPostGIS
我的 PostgreSQL version 是 13 ,目前支持 PostGIS 3.0/3.1/3.2,本次測試選擇 PostGIS 3.1.4,源碼安裝包下載地址:https://download./postgis/source/postgis-3.1.4.tar.gz
而且那個(gè)WIKI的開頭給出了當(dāng)前最佳配置,本次測試根據(jù)這個(gè)最佳配置選擇其他軟件版本:

本文測試所需的所有軟件包,不包含 PostgreSQL,PostgreSQL 需要提前編譯安裝,我安裝的 PostgreSQL 13.3 版本。

軟件包版本包名下載地址
GEOS3.9.1geos-3.9.1.tar.bz2http://download./geos/geos-3.9.1.tar.bz2
SFCGAL1.3.9sfcgal-v1.3.9.tar.gzhttps:///Oslandia/SFCGAL/-/archive/v1.3.9/SFCGAL-v1.3.9.tar.gz
GDAL3.3.1gdal-3.3.1.tar.gzhttps://github.com/OSGeo/gdal/releases/download/v3.3.1/gdal-3.3.1.tar.gz
Proj8.1.0proj-8.1.0.tar.gzhttps://download./proj/proj-8.1.0.tar.gz
protobuf-all3.19.1protobuf-all-3.19.1.tar.gzhttps://github.com/protocolbuffers/protobuf/releases/download/v3.19.1/protobuf-all-3.19.1.tar.gz
protobuf-c1.4.0protobuf-c-1.4.0.tar.gzhttps://github.com/protobuf-c/protobuf-c/releases/download/v1.4.0/protobuf-c-1.4.0.tar.gz
json-c0.15json-c-0.15-20200726.tar.gzhttps://github.com/json-c/json-c/archive/refs/tags/json-c-0.15-20200726.tar.gz
sqlite3.36sqlite-autoconf-3360000.tar.gzhttps://www./2021/sqlite-autoconf-3360000.tar.gz
cmake3.16.8cmake-3.16.8.tar.gzhttps://github.com/Kitware/CMake/releases/download/v3.16.8/cmake-3.16.8.tar.gz
CGAL4.14CGAL-4.14.tar.xzhttps://distfiles./cgal/cgal-4.14.tar.xz
  • 各個(gè)組件的簡單介紹:

  1. GEOS???官網(wǎng):https:/// ?? GNU Lesser General Public License (LGPL) 開源軟件

    GEOS 是一個(gè) C/C++ 庫,用于“地理信息系統(tǒng)(GIS)”軟件通常使用的那種空間幾何計(jì)算,GEOS 是 PostGIS、QGIS、GDAL 和 Shapely 的核心依賴項(xiàng)。

  2. SFCGAL??可用于為 PostGIS 提供額外的 2D 和 3D 高級分析功能。官網(wǎng):https://oslandia./SFCGAL/ ?? GNU Lesser General Public License 2+ 開源軟件

    SFCGAL 是一個(gè)圍繞 CGAL 的 C++ 包裝庫,旨在支持 ISO 19107:2013 和 OGC Simple Features Access 1.2 標(biāo)準(zhǔn)模型上實(shí)現(xiàn) 2D 和 3D 操作。

  3. GDAL???這是光柵支持所必需的。官網(wǎng):https:/// ?? X/MIT 開源地理空間數(shù)據(jù)抽象庫

    GDAL(Geospatial Data Abstraction Library)是一個(gè)在 X/MIT 許可協(xié)議下的開源柵格和矢量地理空間數(shù)據(jù)轉(zhuǎn)換庫。它利用抽象數(shù)據(jù)模型來表達(dá)所支持的各種文件格式。它還有一系列命令行工具來進(jìn)行數(shù)據(jù)轉(zhuǎn)換和處理。

  4. Proj????在 PostGIS 中提供坐標(biāo)重投影功能。??官網(wǎng):https:/// ??X/MIT 開源軟件

    PROJ 是一種通用坐標(biāo)轉(zhuǎn)換軟件,可將地理空間坐標(biāo)從一個(gè)坐標(biāo)參考系統(tǒng) (CRS) 轉(zhuǎn)換為另一個(gè),包括制圖投影以及大地測量變換。

  5. protobuf-c??Google 的數(shù)據(jù)交換格式的 C 語言實(shí)現(xiàn) ?? BSD-2-Clause 開源軟件

    protobuf(Google Protocol Buffers) 是Google提供的一種輕便高效的結(jié)構(gòu)化數(shù)據(jù)存儲(chǔ)格式,可以用于結(jié)構(gòu)化數(shù)據(jù)串行化,或者說序列化。它很適合做數(shù)據(jù)存儲(chǔ)或 RPC 數(shù)據(jù)交換格式??捎糜谕ㄓ崊f(xié)議、數(shù)據(jù)存儲(chǔ)等領(lǐng)域的語言無關(guān)、平臺無關(guān)、可擴(kuò)展的序列化結(jié)構(gòu)數(shù)據(jù)格式(類似Json),但相比于Json,Protobuf有更高的轉(zhuǎn)化效率,時(shí)間效率和空間效率都是JSON的3-5倍。

    protobuf-c,Google Protocol Buffers 數(shù)據(jù)序列化格式的 C 語言實(shí)現(xiàn)。它包括 libprotobuf-c,一個(gè)實(shí)現(xiàn) protobuf 編碼和解碼的純 C 庫,以及 protoc-c,一個(gè)代碼生成器,將 Protocol Buffer .proto 文件轉(zhuǎn)換為 C 描述符代碼,基于原始 protoc。protobuf-c 以前包含一個(gè) RPC 實(shí)現(xiàn);該代碼已拆分為 protobuf-c-rpc 項(xiàng)目。

  6. json-c??一個(gè)用于c語言的json解析庫,目前用于通過函數(shù) ST_GeomFromGeoJson 導(dǎo)入 GeoJSON。

  7. LibXML2?? 目前用于導(dǎo)入 ST_GeomFromGML 和 ST_GeomFromKML 函數(shù)。

  8. CGAL??官網(wǎng):https://www./ ?? 開源,但是應(yīng)該尤其自己的開源規(guī)則

    CGAL 是一個(gè)軟件,它以 C++ 庫的形式提供對高效可靠幾何算法的輕松訪問。 CGAL 用于需要幾何計(jì)算的各個(gè)領(lǐng)域,例如地理信息系統(tǒng)、計(jì)算機(jī)輔助設(shè)計(jì)、分子生物學(xué)、醫(yī)學(xué)成像、計(jì)算機(jī)圖形學(xué)和機(jī)器人技術(shù)。

    該庫提供數(shù)據(jù)結(jié)構(gòu)和算法,如三角剖分、Voronoi 圖、多邊形和多面體的布爾運(yùn)算、點(diǎn)集處理、曲線排列、曲面和體積網(wǎng)格生成、幾何處理、alpha 形狀、凸包算法、形狀重建、AABB 和 KD 樹…

開始安裝,我的環(huán)境是 PostgreSQL 高可用,需要在所有節(jié)點(diǎn)編譯安裝以下軟件。



















































































































































# yum 安裝依賴包[root@pgtest1 ~]# yum -y install libxml2 libxml2-devel libtiff libtiff-devel curl libcurl-devel sqlite-devel boost-devel gmp-devel mpfr-devel gcc gcc-c++ make # 解壓所需軟件集合包,有需要的可以直接下載使用:鏈接:https://pan.baidu.com/s/1mJY4v6Gpw7lkqffrXzjJPQ 提取碼:iqt8 [root@pgtest1 ~]# cd /enmo/soft/[root@pgtest1 soft]# tar -xvf PostGIS-3.1.4-x86_64.tar.gz# 編譯安裝 GEOS[root@pgtest1 soft]# tar -xvf geos-3.9.1.tar.bz2[root@pgtest1 soft]# cd geos-3.9.1[root@pgtest1 geos-3.9.1]# ./configure[root@pgtest1 geos-3.9.1]# make[root@pgtest1 geos-3.9.1]# make install# 編譯安裝 sqlite,這個(gè)是 proj 和 gdal 的依賴軟件[root@pgtest1 ~]# cd /enmo/soft/[root@pgtest1 soft]# tar -zxvf sqlite-autoconf-3360000.tar.gz [root@pgtest1 soft]# cd sqlite-autoconf-3360000# 編譯安裝之前建議修改以下配置添加 SQLITE_ENABLE_COLUMN_METADATA, # 不然安裝 gdal 的 make 時(shí)會(huì)報(bào)錯(cuò) libgdal.so: undefined reference to `sqlite3_column_origin_name' `sqlite3_column_table_name'# https://www.cnblogs.com/xuanmanstein/p/13227545.html[root@pgtest1 sqlite-autoconf-3360000]# sed -i '25i #define SQLITE_ENABLE_COLUMN_METADATA 1' sqlite3.c[root@pgtest1 sqlite-autoconf-3360000]# ./configure[root@pgtest1 sqlite-autoconf-3360000]# make[root@pgtest1 sqlite-autoconf-3360000]# make install# 編譯安裝 PROJ[root@pgtest1 ~]# export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig[root@pgtest1 ~]# cd /enmo/soft/[root@pgtest1 soft]# tar -zxvf proj-8.1.0.tar.gz[root@pgtest1 soft]# cd proj-8.1.0[root@pgtest1 geos-3.9.1]# ./configure[root@pgtest1 geos-3.9.1]# make[root@pgtest1 geos-3.9.1]# make install# 編譯安裝 GDAL[root@pgtest1 ~]# cd /enmo/soft/[root@pgtest1 soft]# tar -zxvf gdal-3.3.1.tar.gz[root@pgtest1 soft]# cd gdal-3.3.1[root@pgtest1 gdal-3.3.1]# ./configure[root@pgtest1 gdal-3.3.1]# make # 時(shí)間比較長[root@pgtest1 gdal-3.3.1]# make install# 編譯安裝 protobuf ,以為 protobuf-c 是 protobuf 的C語言實(shí)現(xiàn),所有要先安裝 protobuf [root@pgtest1 ~]# cd /enmo/soft/[root@pgtest1 soft]# tar -zxvf protobuf-all-3.19.1.tar.gz[root@pgtest1 soft]# cd protobuf-3.19.1[root@pgtest1 protobuf-3.19.1]# ./configure[root@pgtest1 protobuf-3.19.1]# make[root@pgtest1 protobuf-3.19.1]# make install# 編譯安裝 protobuf-c[root@pgtest1 ~]# cd /enmo/soft/[root@pgtest1 soft]# tar -zxvf protobuf-c-1.4.0.tar.gz [root@pgtest1 soft]# cd protobuf-c-1.4.0[root@pgtest1 protobuf-c-1.4.0]# ./configure[root@pgtest1 protobuf-c-1.4.0]# make[root@pgtest1 protobuf-c-1.4.0]# make install# 需要使用 cmake 安裝 SFCGAL CGAL SFCGAL json-c[root@pgtest1 ~]# cd /enmo/soft/[root@pgtest1 soft]# tar -zxvf cmake-3.16.8.tar.gz[root@pgtest1 soft]# cd cmake-3.16.8[root@pgtest1 cmake-3.16.8]# ./configure[root@pgtest1 cmake-3.16.8]# gmake[root@pgtest1 cmake-3.16.8]# gmake install# SFCGAL需要依賴 Boost、CGAL、GMP、MPFR 這四個(gè)軟件,Boost 、GMP 和 MPFR 已經(jīng)用 YUM 解決# 編譯安裝 SFCGAL 的依賴 CGAL[root@pgtest1 ~]# cd /enmo/soft/[root@pgtest1 soft]# tar -xvf cgal-4.14.tar.xz[root@pgtest1 soft]# cd CGAL-4.14[root@pgtest1 CGAL-4.14]# cmake -DCMAKE_BUILD_TYPE=Release .[root@pgtest1 CGAL-4.14]# make[root@pgtest1 CGAL-4.14]# make install# 編譯安裝 SFCGAL[root@pgtest1 ~]# cd /enmo/soft/[root@pgtest1 soft]# tar -zxvf sfcgal-v1.3.9.tar.gz[root@pgtest1 soft]# cd SFCGAL-v1.3.9[root@pgtest1 SFCGAL-v1.3.9]# cmake -DCMAKE_BUILD_TYPE=Release .[root@pgtest1 SFCGAL-v1.3.9]# make[root@pgtest1 SFCGAL-v1.3.9]# make install# 編譯安裝 json-c[root@pgtest1 ~]# cd /enmo/soft/[root@pgtest1 soft]# tar -zxvf json-c-0.15-20200726.tar.gz[root@pgtest1 soft]# cd json-c-json-c-0.15-20200726[root@pgtest1 json-c-json-c-0.15-20200726]# cmake -DCMAKE_BUILD_TYPE=Release .[root@pgtest1 json-c-json-c-0.15-20200726]# make[root@pgtest1 json-c-json-c-0.15-20200726]# make install# 最后編譯安裝 PostGIS[root@pgtest1 ~]# cd /enmo/soft/[root@pgtest1 soft]# tar -zxvf postgis-3.1.4.tar.gz[root@pgtest1 soft]# cd postgis-3.1.4[root@pgtest1 postgis-3.1.4]# ./configure \--with-pgconfig=/enmo/app/pg13/13.3/bin/pg_config \--with-gdalconfig=/usr/local/bin/gdal-config \--with-geosconfig=/usr/local/bin/geos-config \--with-xml2config=/usr/bin/xml2-config \--with-sfcgal=/usr/local/bin/sfcgal-config \--without-protobuf[root@pgtest1 postgis-3.1.4]# make[root@pgtest1 postgis-3.1.4]# make install

# 建庫創(chuàng)建擴(kuò)展,主節(jié)點(diǎn)操作即可[root@pgtest1 ~]# createdb postgis[root@pgtest1 ~]# psql -d postgis

postgres=# CREATE EXTENSION postgis;postgres=# CREATE EXTENSION postgis_raster;postgres=# CREATE EXTENSION postgis_topology;postgres=# CREATE EXTENSION address_standardizer;postgres=# CREATE EXTENSION postgis_sfcgal;postgres=# CREATE EXTENSION fuzzystrmatch;postgres=# CREATE EXTENSION postgis_tiger_geocoder;postgres=# CREATE EXTENSION address_standardizer_data_us;

# 創(chuàng)建擴(kuò)展可能會(huì)報(bào)錯(cuò)以下錯(cuò)誤,原因是找不到 libgeos_c.so.1 和 libSFCGAL.so.1postgis=# CREATE EXTENSION postgis;ERROR: could not load library "/enmo/app/pg13/13.3/lib/postgis-3.so": libgeos_c.so.1: cannot open shared object file: No such file or directory

postgis=# CREATE EXTENSION postgis;ERROR: could not load library "/enmo/app/pg13/13.3/lib/postgis-3.so": libSFCGAL.so.1: cannot open shared object file: No such file or directory

# find / -name libgeos_c.so.1 找到路徑后寫進(jìn) /etc/ld.so.conf 就可以了[root@pgtest1 ~]# echo "/enmo/app/pgsql/13.3/lib" >> /etc/ld.so.conf[root@pgtest1 ~]# echo "/usr/local/lib" >> /etc/ld.so.conf[root@pgtest1 ~]# echo "/usr/local/lib64" >> /etc/ld.so.conf[root@pgtest1 ~]# ldconfig

# 主節(jié)點(diǎn)創(chuàng)建擴(kuò)展完成后,從節(jié)點(diǎn)自動(dòng)同步[root@pgtest2 ~]# psql -d postgispsql (13.3)Type "help" for help.

postgis=# \dx List of installed extensions Name | Version | Schema | Description ------------------------------+---------+------------+--------------------------------------------------------------------------------------------------------------------- address_standardizer | 3.1.4 | public | Used to parse an address into constituent elements. Generally used to support geocoding address normalization step. address_standardizer_data_us | 3.1.4 | public | Address Standardizer US dataset example fuzzystrmatch | 1.1 | public | determine similarities and distance between strings plpgsql | 1.0 | pg_catalog | PL/pgSQL procedural language postgis | 3.1.4 | public | PostGIS geometry and geography spatial types and functions postgis_raster | 3.1.4 | public | PostGIS raster types and functions postgis_sfcgal | 3.1.4 | public | PostGIS SFCGAL functions postgis_tiger_geocoder | 3.1.4 | tiger | PostGIS tiger geocoder and reverse geocoder postgis_topology | 3.1.4 | topology | PostGIS topology spatial types and functions(9 rows)

至此,PostGIS 編譯安裝完成,下面用 QGIS 做個(gè)簡單的測試,詳細(xì)的測試過程見下章節(jié)。

QGIS 使用 VIP + 5000 讀寫端口連接數(shù)據(jù)庫成功。

QGIS 導(dǎo)入數(shù)據(jù)成功

pgAdmin 查詢導(dǎo)入的數(shù)據(jù)成功。

數(shù)據(jù)顯示正常。

3.使用 QGIS 連接 PostGIS 數(shù)據(jù)庫

QGIS 連接 PostGIS 數(shù)據(jù)庫之前要先確定 PostgreSQL 數(shù)據(jù)庫可供外界訪問:












-bash-4.2$ psqlpostgres=# ALTER USER postgres WITH PASSWORD 'postgres';-bash-4.2$ cd $PGDATA-bash-4.2$ vi pg_hba.conf# IPv4 local connections:host all all 127.0.0.1/32 scram-sha-256host all all 192.168.0.0/24 scram-sha-256-bash-4.2$ vi postgresql.conf listen_addresses = '*'[root@pgtest1 ~]# systemctl stop postgresql-13[root@pgtest1 ~]# systemctl start postgresql-13





4.使用 QGIS 將 Shapefiles 文件的數(shù)據(jù)導(dǎo)入到 PostGIS 中



選中要導(dǎo)入到的 Schema,點(diǎn)擊 導(dǎo)入圖層或文件。

選擇要導(dǎo)入的圖層文件,因?yàn)槲以谧笙陆菆D層中已經(jīng)打開了4個(gè)圖層,所以這里會(huì)默認(rèn)顯示這4個(gè),如果沒有在QGIS中打開圖層,可以點(diǎn)擊后面的3個(gè)點(diǎn)去選擇要導(dǎo)入的文件。

導(dǎo)入時(shí)建議勾選下面3項(xiàng),并注意字符編碼,然后點(diǎn)擊 OK ,就能聽到我的主機(jī)風(fēng)扇在瘋狂的轉(zhuǎn)動(dòng),說明開始導(dǎo)入了,最后提示導(dǎo)入成功。





使用 pgAdmin 連接數(shù)據(jù)庫查看導(dǎo)入的數(shù)據(jù)



可以查詢到導(dǎo)入進(jìn)來的數(shù)據(jù),其中g(shù)eom字段就是存儲(chǔ)幾何圖形數(shù)據(jù)的字段。

全選 geom 列,點(diǎn)擊 geom 字段上藍(lán)色的小眼睛圖標(biāo),就可以直接瀏覽這些數(shù)據(jù),比如我要查詢 京廣鐵路。

pgAdmin 不用 GIS 軟件就可以顯示要查詢的數(shù)據(jù)在哪。

5.使用 QGIS 編輯 PostGIS 數(shù)據(jù)庫








再次查詢數(shù)據(jù)庫,就可以查詢到我新建的表和創(chuàng)建的 點(diǎn) 要素。

同樣點(diǎn)擊 geom 字段上藍(lán)色的小眼睛圖標(biāo),可以在地圖上瀏覽到我點(diǎn)擊的 點(diǎn) 要素。

墨天輪原文鏈接:https://www./db/172815?sjhy(復(fù)制到瀏覽器或者點(diǎn)擊“閱讀原文”立即查看)

關(guān)于作者
張玉龍,云和恩墨交付技術(shù)顧問,長期服務(wù)于移動(dòng)運(yùn)營商客戶,從事Oracle和PostgreSQL的技術(shù)服務(wù)工作,擁有RHCE、PGCA、OBCA、TDSQL等證書,熱衷于PostgreSQL數(shù)據(jù)庫產(chǎn)品的研究。

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    亚洲专区中文字幕在线| 好吊色免费在线观看视频| 人人妻在人人看人人澡| 伊人久久青草地综合婷婷| 国产目拍亚洲精品区一区| 午夜精品国产精品久久久| 精品al亚洲麻豆一区| 在线免费观看一二区视频| 亚洲精品中文字幕一二三| 日本一品道在线免费观看| 日本一本在线免费福利| 国产亚洲不卡一区二区| 免费在线播放一区二区| 国产av精品一区二区| 国产午夜免费在线视频| 国产精品久久香蕉国产线| 91人妻丝袜一区二区三区| 好吊日在线视频免费观看| 亚洲一区二区三区四区| 国产日本欧美韩国在线| 欧洲自拍偷拍一区二区| 国产精品午夜福利免费阅读| 出差被公高潮久久中文字幕| 精品国产亚洲一区二区三区| 久久成人国产欧美精品一区二区| 欧美日韩成人在线一区| 中文字幕乱码一区二区三区四区| 精品人妻一区二区三区四区久久| 丰满人妻少妇精品一区二区三区 | 日韩免费av一区二区三区| 欧美成人精品国产成人综合| 国产成人高清精品尤物| 99久久精品一区二区国产| 亚洲另类欧美综合日韩精品| 国产老熟女乱子人伦视频| 亚洲美女国产精品久久| 日韩欧美一区二区黄色| 国产一区欧美一区日本道| 激情三级在线观看视频| 国产av熟女一区二区三区四区| 欧美精品久久99九九|