文章目錄
- PostGIS使用小結
- 簡介
- 安裝
- 配合postgres使用的操作
- 1.python安裝gdal
PostGIS使用小結
簡介
PostGIS 是 PostgreSQL 數據庫的地理空間數據擴展,通過為 PostgreSQL數據庫增加地理空間數據類型、索引、函數和操作符,使其成為功能強大的空間數據庫,廣泛應用于 GIS(地理信息系統)等需要處理地理空間數據的場景。
安裝
-
PostgreSQL安裝
官網地址:https://www.enterprisedb.com/downloads/postgres-postgresql-downloads
-
安裝
2.1 windows安裝
安裝包一步步安裝即可。
注意點:
不要使用PostgreSQL 自帶的Stack Builder安裝擴展,網速太慢無法下載。
2.2 PostGIS擴展安裝
下載地址:
https://download.osgeo.org/postgis/windows/
下載對應版本的擴展
安裝注意點:
(1)勾選驅動和空間數據庫,如下圖
(2)安裝目錄選擇PostgreSQL 安裝的根目錄,如下圖所示
2.3 安裝QGIS
下載地址:
https://www.qgis.org/download/
安裝按照順序操作
- 使用
3.1 矢量數據導入
使用PostGIS的導入界面:PostGIS PostGIS Bundle 0 for PostgreSQL x64 17 Shapefile and DBF Loader Exporter。
注意點:
(1)導入路徑不能有中文字符
(2)導入選項里面的字符編碼要與dbf的編碼一致
(3)坐標系要自己填寫代號。比如4326-WGS84,4490-CGCS2000,自定義坐標系代號參照后續步驟。
數據導入成功后,通過PostgreSQL查看相應記錄:
a.數據表:
shp數據與數據表字段對應情況:
geom --> shp數據的幾何數據
其他字段 --> dbf數據的屬性數據
注意:
(1)geom字段以二進制形式記錄了幾何數據,可以通過以下查詢查看文本數據:
SELECT ST_AsText(geom) FROM public.數據表 ORDER BY gid ASC
b.spatial_ref_sys表
功能:
記錄數據的坐標系
注意:
(1)自定義坐標系導入:轉成proj4的描述串+自定義一個編號
轉化prj–>proj4:
#假設 a.prj 文件內容為 WKT 格式
projinfo -s “cat a.prj
” -o PROJ
INSERT INTO spatial_ref_sys (srid, auth_name, auth_srid, proj4text, srtext)
VALUES (99999, -- 自定義 SRID(確保未被占用)'USER', -- 權威機構為 USERNULL, -- 無 EPSG 編號'+proj=tmerc +lat_0=0 +lon_0=117 +k=0.9996 +x_0=500000 +y_0=0 +ellps=WGS84 +units=m +no_defs', -- Proj.4 字符串'PROJCS["自定義投影",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",117],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],UNIT["metre",1,AUTHORITY["EPSG","9001"]],AXIS["Easting",EAST],AXIS["Northing",NORTH]]' -- WKT 字符串
);
針對轉換參數的情況:
–指定七參數
-- 方法一:使用 +towgs84 參數(適用于粗略轉換)
INSERT INTO spatial_ref_sys (srid, auth_name, auth_srid, proj4text, srtext)
VALUES (99999, -- 自定義 SRID'USER',NULL,'+proj=tmerc +lat_0=0 +lon_0=117 +k=0.9996 +x_0=500000 +y_0=0 +ellps=WGS84 +towgs84=ΔX,ΔY,ΔZ,εx,εy,εz,m +units=m +no_defs','...' -- 對應的 WKT 定義
);-- 示例:假設七參數為 ΔX=100, ΔY=50, ΔZ=20, εx=0.5, εy=0.3, εz=0.1, m=0.2ppm
'+towgs84=100,50,20,0.5,0.3,0.1,0.2'
–使用自定義網格文件(更精確的轉換)
-- 將網格文件上傳至 PostGIS 服務器的 /usr/share/proj/ 目錄
INSERT INTO spatial_ref_sys (srid, auth_name, auth_srid, proj4text, srtext)
VALUES (99999,'USER',NULL,'+proj=tmerc +lat_0=0 +lon_0=117 +k=0.9996 +x_0=500000 +y_0=0 +ellps=WGS84 +nadgrids=/usr/share/proj/mygrid.gsb +units=m +no_defs','...'
);
c.geometry_columns視圖
記錄數據的坐標系、幾何類型、坐標維度等信息。
配合postgres使用的操作
1.python安裝gdal
下載輪子:
https://github.com/cgohlke/geospatial-wheels/releases
找到gdal相應版本進行下載。
cp312:表示python的3.12系列版本
定位到python安裝的根目錄,將輪子放到這里,然后在此目錄啟動命令行。
執行安裝:
pip install GDAL-3.13.0-cp312-cp312-win_amd64.whl
安裝成功后,即可正常使用gdal環境。同時可以發現已安裝osgeo環境
。
gdal轉prj成proj4串示例:
from osgeo import osr# 啟用異常處理(GDAL 4.0+默認行為,提前適配)
# 不啟用,提示錯誤:
# D:\Programs\miniconda3\Lib\site-packages\osgeo\osr.py:413: FutureWarning: Neither osr.UseExceptions() nor osr.DontUseExceptions() has been explicitly called. In GDAL 4.0, exceptions will be enabled by default.
# https://www.doubao.com/thread/wcce32b284e0e75ff
osr.UseExceptions()prj_text = open(r"G:\work\項目\test.prj").read()
sr = osr.SpatialReference()
sr.ImportFromWkt(prj_text)
proj4_str = sr.ExportToProj4()
print(proj4_str)