当前位置: 首页 > ai >正文

PostGIS使用小结

文章目录

  • PostGIS使用小结
    • 简介
    • 安装
    • 配合postgres使用的操作
      • 1.python安装gdal


PostGIS使用小结

简介

PostGIS 是 PostgreSQL 数据库的地理空间数据扩展,通过为 PostgreSQL数据库增加地理空间数据类型、索引、函数和操作符,使其成为功能强大的空间数据库,广泛应用于 GIS(地理信息系统)等需要处理地理空间数据的场景。

安装

  1. PostgreSQL安装
    官网地址:https://www.enterprisedb.com/downloads/postgres-postgresql-downloads
    在这里插入图片描述

  2. 安装

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/
在这里插入图片描述
安装按照顺序操作

  1. 使用
    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)
http://www.xdnf.cn/news/8812.html

相关文章:

  • 微雪墨水屏 如何 控制绘制图形(如点、线、矩形等)线条粗细或点的大小
  • ChatGPT+知网,AI如何辅助真实科研写作流程?
  • 以太坊的基本理解
  • 2025年- H47-Lc155 --102. 二叉树的层序遍历(队列、广搜)--Java版
  • STL-从list节点创建和释放展开(内存管理)
  • Claude Code Agent 模式深度解读(一)!Anthropic提出的下一代Code CLI工具
  • 第四章 面向对象(基础)
  • ​​UniBoard:私有化部署,导航笔记文件一站式管理
  • JavaScript 中的 structuredClone() 如何彻底改变你的对象复制方式
  • 几个直觉泵问题
  • 线程池优雅关闭的哲学
  • java基础知识回顾3(可用于Java基础速通)考前,面试前均可用!
  • 空间计算的未来:在通用芯片上构建高可靠系统
  • 沙井SMT贴片加工核心工艺解析
  • JVM 的垃圾回收机制
  • Linux线程互斥与同步(下)(30)
  • 软件质量保证与测试实验
  • 历年北京师范大学保研上机真题
  • 数据库设计核心流程
  • 探索智能仓颉
  • 软件设计师-错题笔记-面向对象技术
  • 继电器相关梳理
  • pytorch基础
  • LabVIEW开发FPGA磁声发射应力检测系统
  • C++与Python中除法运算的区别(易错)
  • Linux路径解析指南:逻辑路径 vs 实际路径详解
  • Linux 文件系统
  • 第5章:任务间通信机制(IPC)全解析
  • 自定义 win10 命令
  • Leetcode 3269. 构建两个递增数组