centos7安装python-gdal环境

python3

yum install python3 python3-pip -y

gdal-3.6.2

参考编译postgis

python安装gdal

export CPLUS_INCLUDE_PATH=/usr/local/gdal-3.6.2/include
export C_INCLUDE_PATH=/usr/local/gdal-3.6.2/include
export LDFLAGS="-L/usr/local/gdal-3.6.2/lib64"
pip3 install gdal==3.6.2

python导入gdb脚本

from osgeo import ogr
import psycopg2db_name = 'filegdb' #瀚高数据库postgis
db_user = 'postgres'
db_password = 'postgres'
db_host = '192.168.110.217'
db_port = '5432'  # PostGIS 通常使用的端口号# 连接到PostgreSQL数据库
conn = psycopg2.connect("dbname='filegdb' user='postgres' host='192.168.110.217' password='postgres'")
cur = conn.cursor()# 打开File Geodatabase文件
filegdb_path = "/opt/test_highgo.gdb"
filegdb_driver = ogr.GetDriverByName("FileGDB")
filegdb_dataset = filegdb_driver.Open(filegdb_path, 0)if filegdb_dataset is None:print("Failed to open FileGDB.")exit(1)# 获取File Geodatabase中的图层
num_layers = filegdb_dataset.GetLayerCount()
for i in range(num_layers):layer = filegdb_dataset.GetLayerByIndex(i)# 获取图层中的字段layer_defn = layer.GetLayerDefn()num_fields = layer_defn.GetFieldCount()field_names = [layer_defn.GetFieldDefn(j).GetName() for j in range(num_fields)]field_names_str = ", ".join(field_names)# 创建PostGIS表table_name = layer.GetName().lower()create_table_query = "CREATE TABLE {} (id SERIAL PRIMARY KEY, geom geometry, {})".format(table_name, ", ".join("{} VARCHAR".format(name) for name in field_names))cur.execute(create_table_query)conn.commit()# 从File Geodatabase中读取要素,并插入到PostGIS表中for feature in layer:geometry = feature.GetGeometryRef()wkt = geometry.ExportToWkt()values = [wkt] + [feature.GetField(name) for name in field_names]insert_query = "INSERT INTO {} (geom, {}) VALUES (ST_GeomFromText(%s, 4326), {})".format(table_name, field_names_str, ", ".join(["%s"] * len(field_names)))cur.execute(insert_query, values)conn.commit()# 关闭数据库连接
cur.close()
conn.close()

实例二 

# import os
import subprocess# 设置GDB文件路径和数据库连接信息
gdb_path = r'/opt/test_highgo.gdb'
db_name = 'filegdb' #瀚高数据库postgis
db_user = 'postgres'
db_password = 'postgres'
db_host = '192.168.110.217'
db_port = '5432'  # PostGIS 通常使用的端口号# 获取GDB中所有图层的名称
def get_layer_names(gdb_path):layers = []cmd = ['ogrinfo', '-so', gdb_path]# 使用subprocess.run来执行命令 获取gdb内的图层信息output = subprocess.run(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True,errors='ignore')# output.stdout.splitlines() 读取结果,将结果按行分割成字符串列表for line in output.stdout.splitlines():#逐行读取,当行内含有'Layer'字符时,进行信息提取if 'Layer' in line:layers.append(line.split(':')[1].strip().split('(')[0].strip())print(line)return layers# 批量导入图层到PostGIS
def import_layers_to_postgis(gdb_path, pg_conn_str):for layer in get_layer_names(gdb_path):if not layers:print("No layers found in the specified GDB path.")return#command = f'ogr2ogr -f "PostgreSQL" PG:"{pg_conn_str}" {gdb_path} -nln {layer} -overwrite {layer} -progress -lco GEOMETRY_NAME=geom --config PG_USE_COPY YES'command = 'ogr2ogr'args = ['-f', 'PostgreSQL','PG:host=192.168.110.217 port=5432 user=postgres password=postgres dbname=filegdb','/opt/test_highgo.gdb','-overwrite', '-progress','-nln', layer,'-lco', 'GEOMETRY_NAME=geom','--config', 'PG_USE_COPY', 'YES']full_command = [command] + argsprint(full_command)        print(f'Importing layer {layer}...')importdb = subprocess.run(full_command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True, errors='ignore')# 运行函数
#拼接一个连接地址
pg_conn_str="host="+db_host+" port="+db_port+" user="+db_user+" password="+db_password+" dbname="+db_name
import_layers_to_postgis(gdb_path, pg_conn_str)

执行

[root@baidu bin]# python3 gdb2postgis.py
Layer: AGNP (Point)
Layer: BOUL (Multi Line String)
Layer: HYDA (Multi Polygon)
Layer: ChinaSheng (Multi Polygon)
['ogr2ogr', '-f', 'PostgreSQL', 'PG:host=192.168.110.217 port=5432 user=postgres password=postgres dbname=filegdb', '/opt/test_highgo.gdb', '-progress', '-overwrite', '-nln', 'AGNP', '-lco', 'GEOMETRY_NAME=geom', '--config', 'PG_USE_COPY', 'YES']
Importing layer AGNP...
['ogr2ogr', '-f', 'PostgreSQL', 'PG:host=192.168.110.217 port=5432 user=postgres password=postgres dbname=filegdb', '/opt/test_highgo.gdb', '-progress', '-overwrite', '-nln', 'BOUL', '-lco', 'GEOMETRY_NAME=geom', '--config', 'PG_USE_COPY', 'YES']
Importing layer BOUL...
['ogr2ogr', '-f', 'PostgreSQL', 'PG:host=192.168.110.217 port=5432 user=postgres password=postgres dbname=filegdb', '/opt/test_highgo.gdb', '-progress', '-overwrite', '-nln', 'HYDA', '-lco', 'GEOMETRY_NAME=geom', '--config', 'PG_USE_COPY', 'YES']
Importing layer HYDA...
['ogr2ogr', '-f', 'PostgreSQL', 'PG:host=192.168.110.217 port=5432 user=postgres password=postgres dbname=filegdb', '/opt/test_highgo.gdb', '-progress', '-overwrite', '-nln', 'ChinaSheng', '-lco', 'GEOMETRY_NAME=geom', '--config', 'PG_USE_COPY', 'YES']
Importing layer ChinaSheng...

验证

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

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

相关文章

wordpress子比主题文章付费发卡插件

插件仅适用于子比主题 插件演示 免费下载 :子比主题文章付费发卡插件_麦田吧 如下图,添加卡密支持批量添加,按照卡号(英文逗号/空格/—-)密码的格式输入,一行一条,可以直接添加数据&#xff0…

​​人工智能_大模型083_大模型时代机遇02_提示词优化开发工具_立项_计量模式_真实需求_5why法---人工智能工作笔记0218

上一节我们提供了一个非常好用的提示词,优化开发的,调试工具 vellum 可以看到是这个工具 使用的时候,写完一段提示词,可以选择不同的模型,看看给出的效果情况 对应的模型非常多. ### 立项在立项阶段,要对这三个要素有初步的答案:1. 真实需求是什么? 2. 商业模式是什么? 3…

Tomcat端口配置和网页浏览

安装完成Tomcat后,到安装目录里看到内容如下: 各文件夹作用 bin:可执行文件(启动文件startup.bat、关闭文件shutdown.bat)conf:配置文件(修改端口号:server.xml,建议将s…

[自动驾驶技术]-5 Tesla自动驾驶方案之算法(AI Day 2021)

有朋友问我,如何有效学习一个新技术。笔者这么多年的经验是:1)了解国内外产业应用和标准法规现状,先建立宏观知识图谱及技术系统框架;2)根据系统框架逐块进行深入研究(横向、纵向)&a…

【html+css(大作业)】二级菜单导航栏

目录 实现效果 代码及其解释 html部分 CSS部分 hello&#xff0c;hello好久不见&#xff01; 今天我们来写二级导航栏&#xff0c;所谓二级导航栏&#xff0c;简单来说就是鼠标放上去就有菜单拉出&#xff1a; 实现效果 代码及其解释 html部分 <!DOCTYPE html> &l…

嵌入式进阶——矩阵键盘

&#x1f3ac; 秋野酱&#xff1a;《个人主页》 &#x1f525; 个人专栏:《Java专栏》《Python专栏》 ⛺️心若有所向往,何惧道阻且长 文章目录 矩阵按键原理图按键状态检测单行按键状态检测多行按键状态检测 状态记录状态优化循环优化 矩阵按键 矩阵键盘是一种常见的数字输入…

Databend 开源周报第 146 期

Databend 是一款现代云数仓。专为弹性和高效设计&#xff0c;为您的大规模分析需求保驾护航。自由且开源。即刻体验云服务&#xff1a;https://app.databend.cn 。 Whats On In Databend 探索 Databend 本周新进展&#xff0c;遇到更贴近你心意的 Databend 。 支持 Expressio…

网络编程基础知识

一、网络的相关概念 二、Ip 对于ipv4&#xff0c;是由4个字节&#xff08;32位&#xff09;表示&#xff0c;一个字节的范围是0~255&#xff0c;采用的是十进制表示ipv6的地址长度位128位&#xff0c;是ipv4的4倍&#xff0c;采用的是16进制表示查看ip地址&#xff1a;在命令行…

windows 下载redis (通过redis-server.exe启动服务)

下载链接&#xff1a; https://github.com/MicrosoftArchive/redis/releases 启动&#xff1a; 查看&#xff1a; 人工智能学习网站 https://chat.xutongbao.top

玩转STM32-I2C通信协议(详细-慢工出细活)

文章目录 一、I2C总线原理&#xff08;掌握&#xff09;1.1 硬件构成1.2 传输位1.3数据传输格式 二、STM32的I2C特性和结构三、STM32的I2C通信实现&#xff08;硬件实现方式&#xff09;3.1 I2C主模式 四、应用实例 一、I2C总线原理&#xff08;掌握&#xff09; 1.1 硬件构成…

day19--IO流(二)

day19-IO流&#xff08;二&#xff09; 一、字符流 同学们&#xff0c;前面我们学习了字节流&#xff0c;使用字节流可以读取文件中的字节数据。但是如果文件中有中文使用字节流来读取&#xff0c;就有可能读到半个汉字的情况&#xff0c;这样会导致乱码。虽然使用读取全部字…

Harmony OS 开发指南——源码下载和编译

本文介绍了如何下载鸿蒙系统源码&#xff0c;如何一次性配置可以编译三个目标平台&#xff08;Hi3516&#xff0c;Hi3518和Hi3861&#xff09;的编译环境&#xff0c;以及如何将源码编译为三个目标平台的二进制文件。 坑点总结&#xff1a; 下载源码基本上没有太多坑&#xff…

爬虫案例-亚马逊反爬分析-验证码突破(x-amz-captcha)

总体概览&#xff1a;核心主要是需要突破该网站的验证码&#xff0c;成功后会返回我们需要的参数后再去请求一个中间页&#xff08;类似在后台注册一个session&#xff09;&#xff0c;最后需要注意一下 IP 是不能随意切换的 主要难点&#xff1a; 1、梳理整体反爬流程 2、验证…

【C++初阶】--- C++入门(中)

目录 一、缺省参数1.1 缺省参数概念1.2 缺省参数分类 二、函数重载2.1 函数重载概念2.2 C支持函数重载的原理 --- 名字修饰 三、引用3.1 引用概念3.2 引用特性3.3 常引用3.4 使用场景3.5 引用和指针的区别 一、缺省参数 1.1 缺省参数概念 缺省参数是声明或定义函数时为函数的…

数据挖掘与机器学习——回归分析

目录 回归分析定义&#xff1a; 案例&#xff1a; 线性回归 预备知识&#xff1a; 定义&#xff1a; 一元线性回归&#xff1a; 如何找出最佳的一元线性回归模型&#xff1a; 案例&#xff1a; python实现&#xff1a; 多元线性回归 案例&#xff1a; 线性回归的优缺…

大疆、猛犸、西圣无线麦克风哪个牌子好?大疆、西圣麦克风测评PK

在当今这个全民参与媒体创作的时代&#xff0c;视频分享已经崛起为引领流行文化的关键力量。随着自媒体领域的竞争日益白热化&#xff0c;要想在浩瀚的内容海洋中脱颖而出&#xff0c;创作出卓越的作品无疑是吸引观众目光的核心要素。然而想要成功打造这样的佳作&#xff0c;除…

学习Uni-app开发小程序Day21

学习了评分组件、自定义导航栏 评分组件uni-rate 这是需要达到的效果图&#xff0c;这里先分析下效果图&#xff0c; 1、图片是从布局中间弹出的&#xff0c;那这里就要用到uni-popup &#xff0c;设置type从中间弹出 2、这个弹出的顶部和上一张的顶部布局是一样的&#xff0c…

水电表远程抄表:智能化时代的能源管理新方式

1.行业背景与界定 水电表远程抄表&#xff0c;是随着物联网技术发展&#xff0c;完成的一种新型的能源计量管理方式。主要是通过无线传输技术&#xff0c;如GPRS、NB-IoT、LoRa等&#xff0c;将水电表的信息实时传输到云服务器&#xff0c;进而取代了传统人工当场抄水表。这种…

目标检测——家庭日常用品数据集

引言 亲爱的读者们&#xff0c;您是否在寻找某个特定的数据集&#xff0c;用于研究或项目实践&#xff1f;欢迎您在评论区留言&#xff0c;或者通过公众号私信告诉我&#xff0c;您想要的数据集的类型主题。小编会竭尽全力为您寻找&#xff0c;并在找到后第一时间与您分享。 …

CentOS 7如何使用systemctl管理应用

说明&#xff1a;本文介绍如何使用systemctl命令的方式来启动、查看、停止和重启应用&#xff0c;以安装后的prometheus、alertmanager为例&#xff1b; Step1&#xff1a;创建文件 在系统/etc/systemd/system/路径下&#xff0c;创建一个xxx.service文件&#xff0c;该文件内…