文章目录
- 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)