Python导入Shapefile到PostGIS的常见问题和解决方案

news2024/10/5 14:08:06

导入Shapefile到PostGIS的常见问题和解决方案

先决条件:        

        已经拥有含有GDAL的python环境(如果大家需要,我可以后面出一片文章

问题一:QGIS连接到PostGIS数据库失败

错误描述:

Connection to server at "localhost" (127.0.0.1), port 5432 failed: Connection refused (0x0000274D/10061)

解决方法:

1. 确认PostgreSQL服务器正在运行。

        " Win + R "启动命令行,输入'services.msc',看到如下界面,并找到你所安装的‘postgresql’的版本

        检查,右边状态列中的状态是否为“正在运行”,如果不是,右击该栏-启动

        由于我已经启动过,所以就不再做过多演示

问题二:访问被拒绝,无法启动PostgreSQL服务(解决办法同问题一)

错误描述:

在命令行中输入 net start postgresql-x64-16 启动PostgreSQL服务时,报错

发生系统错误 5。拒绝访问。

解决方法:

1. 以管理员身份运行命令提示符。

2. 通过Windows服务管理器启动PostgreSQL服务。

3. 确保PostgreSQL服务的权限设置正确。(如果未解决)

问题三:Unicode解码错误

错误描述:

UnicodeDecodeError: 'gbk' codec can't decode byte

解决方法:

1. 设置subprocess.run的编码为UTF-8,使用capture_output=True并设置encoding='utf-8'。

2. 手动解码标准输出和标准错误。

问题四:几何类型不匹配

错误描述:

Geometry type (MultiPolygon) does not match column type (Polygon)

解决方法:

1. 确保在PostGIS数据库中创建的表可以接受MultiPolygon类型。

2. 在ogr2ogr命令中使用-nlt PROMOTE_TO_MULTI选项,将几何类型提升为MultiPolygon。

最终解决方案

以下是最终的解决方案代码,解决了上述所有问题:

关于如何找到'ogr2ogr_path'路径,在我之前的文章中有解释。

import subprocess



def import_shapefile_to_postgis(shapefile_path, host, dbname, user, password, schema_name, table_name, ogr2ogr_path='ogr2ogr'):

    # 设置PostGIS连接字符串

    connection_string = f"PG:host={host} dbname={dbname} user={user} password={password}"

    

    # 使用subprocess运行ogr2ogr命令,并指定schema

    result = subprocess.run([

        ogr2ogr_path,

        '-f', 'PostgreSQL',

        connection_string,

        shapefile_path,

        '-nln', f'{schema_name}.{table_name}',  # 指定目标schema和表名

        '-lco', f'SCHEMA={schema_name}',        # 指定目标schema

        '-nlt', 'PROMOTE_TO_MULTI',             # 提升几何类型为MultiPolygon

        '-overwrite'                            # 覆盖已存在的表

    ], capture_output=True)



    # 手动解码输出

    stdout = result.stdout.decode('utf-8', errors='replace')

    stderr = result.stderr.decode('utf-8', errors='replace')

    

    # 打印结果

    print("STDOUT:", stdout)

    print("STDERR:", stderr)



if __name__ == "__main__":

    # 设置参数

    shapefile_path = 'STATES.shp'  # 替换为您的shapefile路径

    host = 'localhost'

    dbname = 'gis'

    user = 'lipeijin'

    password = 'password'

    schema_name = 'public'         # 目标schema名称

    table_name = 'states_postgis'  # 确保表名符合PostgreSQL命名规范

    ogr2ogr_path = r'C:\Users\Liai_\anaconda3\envs\geo_env\Library\bin\ogr2ogr.exe'  # 这里设置完整路径



    # 导入Shapefile到PostGIS

    import_shapefile_to_postgis(shapefile_path, host, dbname, user, password, schema_name, table_name, ogr2ogr_path)

QGIS展示

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1689626.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

211初试自命题复试线仅302分!延边大学计算机考研考情分析!

延边大学(Yanbian University),简称“延大”,地处吉林省延边朝鲜族自治州,是国家“双一流”建设高校、国家“211工程”重点建设大学、西部开发重点建设院校、吉林省人民政府和教育部共同重点支持建设大学、吉林省人民政…

[保姆式教程]使用目标检测模型YOLO V5 OBB进行旋转目标的检测:训练自己的数据集(基于卫星和无人机的农业大棚数据集)

最近需要做基于卫星和无人机的农业大棚的旋转目标检测,基于YOLO V5 OBB的原因是因为尝试的第一个模型就是YOLO V5,后面会基于其他YOLO系列模型做农业大棚的旋转目标检测,尤其是YOLO V9,YOLO V9目前还不能进行旋转目标的检测&#…

C++ 实现AVL树

目录​​​​​​​ 0.二叉搜索树 1.AVL树的概念 2.AVL树节点的定义 3.AVL树的插入 4.AVL树的旋转逻辑 5.判断是否符合AVL树 6.完整代码 7.数据测试 0.二叉搜索树 C 搜索二叉树-CSDN博客 1.AVL树的概念 二叉搜索树虽可以缩短查找的效率,但如果数据有序或接近…

基于地理坐标的高阶几何编辑工具算法(2)——相交面裁剪

文章目录 工具步骤应用场景算法输入算法输出算法示意图算法原理后处理 工具步骤 选中一个需要裁剪的面,点击“相交面裁剪”工具,多选裁剪模板面,空格执行。 应用场景 常用于基于遥感影像的建筑物几何面编辑。 算法输入 一个待裁剪的面&a…

国家自然博物馆“云端自然”线上虚拟展厅是如何搭建的?

国家级综合性自然博物馆国家自然博物馆,联手积木易搭打造“云端自然”线上虚拟展览,形成一个集参观游览、科普教育为一体的线上虚拟数字博物馆平台,让数千以至数万年的古生物,栩栩如生地呈现在我们面前。 通过数字化的展示手段&am…

C# 文件清理

/// <summary>/// 定期清除文件/// </summary>/// <param name"fileDirect">文件夹</param>/// <param name"postFix">文件后缀</param>/// <param name"saveDay">保存天数</param>private voi…

blender 烘焙渲染图片,已经导出fbx,导出贴图。插件生成图片

1.新建一个模型。选择资产浏览器的材质&#xff0c;并拖动到模型身上&#xff0c;如下图。资产浏览器的材质可以网上找。 2.打开着色器面板。正下方着色器窗口中&#xff0c;点击空白取消选择&#xff0c;然后右击-添加-着色器-原理化BSDF&#xff0c;右击-添加-纹理-图像纹理。…

oracle怎么处理json格式

向数据库导入json相关jar包 loadjava -r -f -u bsuser/XXXX192.168.10.31/bsorcl json.jar 要删除的话&#xff0c;删除指定jar dropjava -u bsuser/XXXX192.168.10.31/bsorcl json.jar select * from user_java_classes 然后我们就可以取到json串中任意节点的值

几个原则

&#xff08;1&#xff09; 成功是成功之母&#xff0c;失败不是成功之母。100分的试卷一模一样&#xff0c;不及格的试卷千奇百怪。向成功者学习。 不要研究失败&#xff0c;因为研究了一万个失败的原因&#xff0c;也不能找到一把成功的钥匙。 &#xff08;2&#xff09; 要定…

Controlnet作者放出新的大招 IC-Light,可以操控图像生成时的光照,对内容主体重新打光生成符合新背景环境光照的图片

IC-Light代表Impose Constant Light,是一个控制图像照明的项目。可以操控图像生成时的光照&#xff0c;对内容主体重新打光生成符合新背景环境光照的图片。这下商品图合成这种需要最大程度保持原有主体 ID 需求的最大的问题解决了。 目前&#xff0c;已经发布了两种类型的模型…

如何将手机中的音乐转移到 SD 卡上?轻松传输音乐

概括 如何将音乐从手机转移到 SD 卡&#xff1f;我们的智能手机可以充当个人点唱机&#xff0c;因此有效管理我们的音乐库变得至关重要。无论您是存储空间不足还是只是想整理您的音乐收藏&#xff0c;将音乐从手机传输到 SD 卡都是一个实用的解决方案。 在本指南中&#xff0…

Python数据可视化(七)

绘制 3D 图形 到目前为止&#xff0c;我们一直在讨论有关 2D 图形的绘制方法和绘制技术。3D 图形也是数据可视化的 一个很重要的应用方面&#xff0c;我们接下来就重点讲解有关 3D 图形的实现方法。绘制 3D 图形通常需要导 入 mpl_toolkits 包中的 mplot3d 包的相关模块&#x…

【博主推荐】HTML5实现520表白、情人节表白模板源码

文章目录 1.设计来源1.1 表白首页1.2 甜蜜瞬间11.3 甜蜜瞬间21.4 甜蜜瞬间31.5 甜蜜瞬间41.6 甜蜜瞬间51.7 甜蜜瞬间61.8 永久珍藏 2.效果和源码2.1 页面动态效果2.2 页面源代码2.3 源码目录2.4 更多为爱表白源码 3.源码下载地址 作者&#xff1a;xcLeigh 文章地址&#xff1a;…

【每日一题】52.20个机器学习问题 2 (模型部署、实践流程和应用问题)

在上一篇《20个机器学习问答题》中&#xff0c;问题主要围绕机器学习的基础概念和理论知识。 这次&#xff0c;本篇内容针对机器学习的实践和应用继续提出了20个不同的问题。【点击跳转原文】 在实际应用中&#xff0c;机器学习模型的建立流程是怎样的&#xff1f; 机器学习模…

C++语言基础光速入门笔记

目录 从C到CC和C语言的关系C编译器C面向对象程序设计标准库ANSI 标准C的使用场景标准化 安装 GNU 的 C/C 编译器g 应用说明g 常用命令选项 C 基本语法C 关键字三字符组 C 数据类型基本的内置类型typedef 声明枚举类型类型转换静态转换&#xff08;Static Cast&#xff09;动态转…

Linux--09---RPM 、YUM

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 RPM1 什么是RPM2 RPM包的名称格式3.RPM查询命令4.RPM卸载命令5.RPM安装命令 YUM1 什么是YUMYUM优势1.自动下载RPM包并且安装2.自动处理依赖性关系&#xff0c;并且一…

【从C++到Java一周速成】章节14:网络编程

章节14&#xff1a;网络编程 【1】网络编程的概念【2】IP地址与端口的概念【3】网络通信协议引入网络通信协议的分层 【3】Socket套接字【4】单向通信【5】双向通信 【1】网络编程的概念 把分布在不同地理区域的计算机与专门的外部设备用通信线路互联成一个规模大、功能强的网…

记录Python低代码开发框架zdppy_amcrud的开发过程

实现新增接口 基础代码 import env import mcrud import api import snowflakeenv.load(".env") db mcrud.new_env()table "user" columns ["name", "age"]async def add_user(req):data await api.req.get_json(req)values [d…

贪心算法--区间调度问题

贪心算法 引言 贪心算法是一种简单而有效的算法设计技巧&#xff0c;在解决一些优化问题时具有广泛的应用。其基本思想是通过每一步的局部最优选择&#xff0c;最终达到全局最优解。贪心算法通常不会回溯之前的决策&#xff0c;而是根据当前状态作出最优决策&#xff0c;因此…

数据库的约束 not null, unique, default, primary key, foreign key, check

约束可以理解成 数据库提供的一种针对数据的合法性进行验证的机制, 在创建表的时候使用 1. 约束类型 NOT NULL - 指示某列不能存储 NULL 值, 表里的这个内容是必填项UNIQUE - 保证某列的每行必须有唯一的值, 不能重复 每次插入/修改时, 都要先触发查询, 如果当前插入/修改的…