GeoPandas+DataFrame实现shapefile文件导入PostGIS数据库

首先,确保你的环境已经安装了必要的库。你需要 geopandas, sqlalchemy, psycopg2 (或 psycopg2-binary), 和 geoalchemy2。可以通过以下命令安装:

pip install geopandas sqlalchemy psycopg2-binary geoalchemy2

上代码

python 复制代码
import geopandas as gpd
from sqlalchemy import create_engine
 
# 读取Shapefile
gdf = gpd.read_file('./files/par/par.shp')
 
 
# 如果需要,转换坐标系统至合适的SRID(例如WGS 84的EPSG:4326)
gdf = gdf.to_crs(epsg=4326)
# 设置编码
# gdf.columns = [col.encode('GBK') for col in gdf.columns]
# 检查当前几何列
print("当前活跃几何列:", gdf._geometry_column_name)
print("所有列:", gdf.columns.tolist())
gdf
 
try:
    db_config = {
    "host": "X",       # 例如 "localhost"
    "port": "5432",       # 例如 "5432"
    "database": "postgres",
    "user": "postgres",
    "password": "XX"
    }
 
# 2. 创建SQLAlchemy引擎
# 连接字符串格式:postgresql://用户名:密码@主机:端口/数据库名
    engine = create_engine(f'postgresql://{db_config["user"]}:{db_config["password"]}@{db_config["host"]}:{db_config["port"]}/{db_config["database"]}')
# # 导入数据到PostGIS
    gdf.to_postgis(
        name='传感器数据',  # 数据库中目标表名
        con=engine,
        if_exists='replace',     # 表存在时的操作:'replace'替换,'append'追加,'fail'失败
        index=True              # 不建议将DataFrame索引作为列导入
    )
    print("数据已成功导入PostGIS!")
except Exception as e:
    print(e)

查看结果 可以看到,字段的类型没有完全都转为string

相关推荐
澄江静如练_15 小时前
表单输入绑定
服务器·前端·javascript
猩球中的木子15 小时前
vue-plugin-hiprint打印高度不够,提示:没有足够空间,显示下方内容,问题处理方案及实操
前端·vue.js
狗头大军之江苏分军15 小时前
Node.js 原生功能越来越强,我们是不是被 npm 玩坏了?
前端·javascript·架构
独自破碎E15 小时前
TS7016: Could not find a declaration file for module ‘vue-router‘.解决办法
前端·javascript·vue.js
仰望星空@脚踏实地15 小时前
DataKit js-yaml和follow-redirects组件依赖影响分析
前端·datakit
Mr_fang7194016 小时前
iframe 导致 Vue Router go(-1) 无法正常返回问题解决方案
前端
Drift_Dream16 小时前
Node.js 第二课:用核心模块构建你的第一个服务器
前端·后端
DEMO派16 小时前
首页图片懒加载实现方案解析
前端
用户9520816117916 小时前
百度地图MapVThree Editor:地图编辑
前端
程序员龙语16 小时前
CSS 文本样式与阴影属性
前端·css