PostGIS安裝
PostGIS 是一個開源資料庫擴充,它為 PostgreSQL 資料庫增加了對地理空間資料的支援。PostGIS 使得空間資料的儲存、查詢和分析變得簡單高效。
PostGIS 是 Postgresql 的一個外掛,本文將介紹 Unbuntu 平臺下如何安裝 PostGIS 擴充的一些步驟和注意的問題。
在安裝 PostGIS 前應該先安裝好 Postgresql。
版本說明:
Unbuntu Version:22.04.4
Postgresql Version:14
安裝前準備
安裝 PostGIS 前讀者可以先確認下正在使用的 Postgresql 版本,根據 Postgresql 的版本來確定你要安裝哪個版本的 PostGIS。
# 檢視 postgresql 版本
# 切換到 postgres 使用者
su postgres
# 進入 postgresql 資料庫
psql
# 檢視 postgresql 資料庫版本
SELECT version();
PostgreSQL 與 PostGIS 對應支援關係
PostgreSQL Version | PostGIS Version |
---|---|
11(EOL) | 2.5(EOL)、3.0、3.1、3.2、3.3 |
12 | 2.5(EOL)、3.0、3.1、3.2、3.3、3.4、3.5 |
13 | 3.0、3.1、3.2、3.3、3.4、3.5 |
14 | 3.1、3.2、3.3、3.4、3.5 |
15 | 3.2、3.3、3.4、3.5 |
16 | 3.3、3.4、3.5 |
17 | 3.3、3.4、3.5 |
統計時間為:2024-09-04 ,其中標註為(EOL)的是官方不再支援更新的。所以最好選擇較新版本的。這個列表官方可能會有變動,最新資訊見參考目錄的“PostGIS 版本對應關係”。
我在安裝的時候,本地的 postgresql 的版本是 14 ,所以我這裡選擇安裝 PostGIS 3.3。
PostGIS 還需要依賴一些庫,比如:GEOS、Proj、protobuf-c
、GDAL等,他們之間也有一些版本的依賴和匹配關係,具體關係見參考目錄的“PostGIS 版本對應關係”。
除了上面三個特意標出來的依賴庫,還需要依賴一些如xml2、libpq等庫,但是暫時先不用管,到安裝的時候會提示你缺少哪些東西,到時候再安裝也不晚。
如果讀者使用原始碼編譯安裝,那麼 gcc、g++、make、cmake 等這些工具都需要提前裝好,或者等遇到報錯後再取百度就行了,這裡就不浪費篇幅了。
安裝 Geos 庫
Geos下載地址
這裡我選擇的版本是 Geos3.12.2,下載的檔案為 geos-3.12.2.tar.bz2
。
原始碼安裝:
# 解壓
sudo tar jxf geos-3.12.2.tar.bz2
# 進入解壓出來的目錄的src目錄
cd geos-3.12.2/src
# 構建
sudo cmake ../
# 編譯
sudo make
# 安裝
sudo make install
sudo 命令大家應該都知道,這裡就不說了,如果用的是虛擬機器的 root 使用者安裝的可以不加 sudo。
也可以直接apt安裝:sudo apt-get install libgeos-dev
安裝 Proj 庫
Proj 9 下載地址
這裡我選擇的是 Proj 9.4.1,下載的檔案為 proj-9.4.1.tar.gz
。
原始碼安裝:
# proj 9 需要依賴sqlite3和TIEF和CURL的一些庫,如果之前沒安裝可以執行下面命令安裝
sudo apt-get install libsqlite3-dev
sudo apt-get install libtiff-dev
sudo apt-get install libcurl4-openssl-dev
# 將下載的proj包解壓
sudo tar zxf proj-9.4.1.tar.gz
# 進入目錄
cd proj-9.4.1/
# 建個build目錄
sudo mkdir build
# 進入build目錄
cd build
# 構建編譯和安裝
sudo cmake ..
sudo cmake --build .
sudo cmake --build . --target install
也可以直接apt安裝:sudo apt-get install libproj-dev
安裝 Protobuf-c 庫
protobuf-c下載地址
protobuf-c原始碼地址
這裡我選擇的是 1.5.0,下載的檔案為 protobuf-c-1.5.0.tar.gz
。
原始碼安裝:
# 解壓
sudo tar zxf protobuf-c-1.5.0.tar.gz
# 配置
sudo ./configure
# 編譯
sudo make
# 安裝
sudo make install
安裝 protobuf-c 的時候需要依賴一些其他的庫,比如:protobuf,pkg-config等,也要先安裝。具體可以看 protobuf-c 的 github倉庫,這裡就不多說了。
也可以直接apt安裝:sudo apt-get install libprotobuf-c-dev
安裝 Gdal 庫
Gdal 官網地址
Gdal 倉庫地址
這裡我選擇的是 gdal-3.5.3.tar.gz
。
原始碼安裝:
# 解壓
sudo tar xf gdal-3.5.3.tar.gz
# 進入解壓出的目錄
cd gdal-3.5.3/
# 配置
./configure --prefix=/usr/local/gdal
# 編譯
sudo make
# 安裝
sudo make install
也可以直接apt安裝:sudo apt-get install libgdal-dev
安裝 Postgis
上面的準備工作做好了,我們就可以安裝 Postgis 了。當然你要是不確定哪些庫你已經安裝了,也可以先直接安裝 Postgis 。在執行 ./configure
的時候,如果缺少某些依賴庫,它會提醒你,然後再去安裝就可以了。
PostGIS 官網
我這裡使用的是 postgis-3.3.6.tar.gz
版本。
原始碼安裝:
# 解壓
sudo tar zxf
# 進入目錄
# 配置
# --with-pgsql 要改成讀者自己的 postgresql 目錄下的 pg_config 檔案路徑。
# --with-gdalconfig 就是上面剛安裝的 gdal 路徑下的 gdal-config 檔案路徑。
sudo ./configure --with-pgsql=/usr/lib/postgresql/14/bin/pg_config --with-gdalconfig=/usr/local/gdal/bin/gdal-config
# 編譯
sudo make
# 安裝
sudo make install
如果在 執行 make 的時候報
fatal error: postgres.h No such file or directory
的錯誤,可以安裝一下 sudo apt install postgresql-server-dev-XX (xx換成你的postgresql版本)。
也可以直接apt安裝:sudo apt-get install postgis
安裝成功後可以進入 postgresql 資料庫,在資料庫中建立 postgis 擴充外掛。
# 切換到 postgres 使用者
su postgres
# 連結進入資料庫
postgres@virtual-machine:/$ psql
psql (14.13 (Ubuntu 14.13-0ubuntu0.22.04.1))
Type "help" for help.
postgres=#
#建立 postgis 擴充
postgres=# create extension postgis;
CREATE EXTENSION
# 檢視一下是否建立成功
postgres=# select * from pg_available_extensions where name like 'postgis%';
name | default_version | installed_version | comment
------------------------+-----------------+-------------------+------------------------------------------------------------
postgis_raster | 3.3.6 | | PostGIS raster types and functions
postgis_tiger_geocoder | 3.3.6 | | PostGIS tiger geocoder and reverse geocoder
postgis_topology | 3.3.6 | | PostGIS topology spatial types and functions
postgis | 3.3.6 | 3.3.6 | PostGIS geometry and geography spatial types and functions
(4 rows)
使用 Postgis
# 建立外掛擴充
create extension postgis;
# 建立表格
CREATE TABLE t_point(
"id" int4 NOT NULL,
"point" geometry(point, 4326),
PRIMARY KEY ("id")
);
# 插入資料
INSERT INTO t_point
(id,point)
VALUES
(1,ST_GeomFromText('Point(31.2323 120.2323)',4326))
# 查詢資料
SELECT id,ST_ASTEXT(point) FROM t_point WHERE id = 1
ST_ASTEXT、ST_GeomFromText
是內建方法,其他一些常用方法可以參考:官方文件
完...
參考
- PostGIS 版本對應關係,by osgeo.org
- PostGIS 官網,by postgis.net
- PostGIS 方法文件
- 離線安裝postgresql12.5和postgis3.0,by 晚風