Postgresql——postgis安裝

eastry發表於2024-12-05

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 還需要依賴一些庫,比如:GEOSProjprotobuf-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 晚風

相關文章