寫在前面:本文介紹 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 (原稱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,本文部分介紹性文字也是截取此處。
二QGIS 的簡單操作 QGIS的官網(wǎng)下載獨(dú)立安裝版,Windows上安裝比較簡單,直接下一步就行,在QGIS軟件安裝完成后,再在QGIS中安裝以下兩個(gè)插件。 1.安裝QGIS的坐標(biāo)轉(zhuǎn)換插件 GeoHey Toolbox2.安裝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):
總之,對多個(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ì)比較輕松,而且支持的功能相對較全。
這種方式適用于創(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=postgis baseurl=file:///enmo/soft/postgis-2.0.7-rpm enabled=yes gpgcheck=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 initdb Initializing database ... OK [root@proxy ~]# systemctl enable postgresql Created 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 postgis psql (9.2.24) Type "help" for help.
postgis=# CREATE EXTENSION postgis; CREATE EXTENSION postgis=# CREATE EXTENSION postgis_topology; CREATE EXTENSION
# 對于可以直接連接互聯(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=postgis baseurl=file:///enmo/soft/postgis32_13 enabled=yes gpgcheck=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 initdb Initializing database ... OK [root@proxy ~]# systemctl enable postgresql-13 Created 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 - postgres Last login: Sat Nov 20 20:40:56 CST 2021 on pts/0 -bash-4.2$ createdb postgis -bash-4.2$ psql 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;
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.0 PostgreSQL 13.5 GEOS 3.10.0 SFCGAL 1.3.1 GDAL 3.3.3 PROJ 7.2.1 json-c 0.11
本文測試所需的所有軟件包,不包含 PostgreSQL,PostgreSQL 需要提前編譯安裝,我安裝的 PostgreSQL 13.3 版本。
開始安裝,我的環(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.1 postgis=# 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 postgis psql (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$ psql postgres=# 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-256 host 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)入的圖層文件,因?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ù)。 全選 geom 列,點(diǎn)擊 geom 字段上藍(lán)色的小眼睛圖標(biāo),就可以直接瀏覽這些數(shù)據(jù),比如我要查詢 京廣鐵路。 pgAdmin 不用 GIS 軟件就可以顯示要查詢的數(shù)據(jù)在哪。 5.使用 QGIS 編輯 PostGIS 數(shù)據(jù)庫墨天輪原文鏈接:https://www./db/172815?sjhy(復(fù)制到瀏覽器或者點(diǎn)擊“閱讀原文”立即查看)
|
|