news 2026/4/22 10:23:50

Excel/CSV转GIS:一键WKT转gdf、Shapefile等图层

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Excel/CSV转GIS:一键WKT转gdf、Shapefile等图层

Python数据处理:如何将Excel/CSV中的WKT文本转换为Shapefile/GeoJSON——tablegis库df_to_gdf详解

前言

在地理数据处理中,我们经常遇到一种尴尬的情况:
从数据库(PostGIS, MySQL, ClickHouse)导出的数据,或者别人发来的CSV/Excel文件,里面有一列长得像这样:

  • POINT (116.40 39.90)
  • POLYGON ((116.3 39.9, 116.4 39.9, ...))

这叫做WKT (Well-Known Text)格式。虽然它描述了地理形状,但对Python的普通DataFrame来说,它就是一串纯文本字符串,无法直接进行地图可视化或空间计算(如求面积、缓冲区)。

通常我们需要手动调用shapely.wkt.loads并配合geopandas进行转换,步骤繁琐且容易出错(比如坐标系问题)。

今天介绍tablegis库中的df_to_gdf方法,一行代码将包含WKT文本的普通表格转换为标准的 GeoDataFrame,方便导出为 Shapefile、GeoJSON 等格式。

1. 场景痛点

场景一:数据库导出数据
后端工程师丢给你一个 CSV,里面全是POINT(...),你需要把它转换成shp文件给规划师画图。

场景二:数据可视化
你想用 Python 做地图分析,但pandas读取的数据无法直接 plot,必须转成geopandas对象。

2. 核心方法:df_to_gdf

这个方法专门用于“文本转几何对象”。

安装

pipinstalltablegis

函数签名

importtablegisastg gdf=tg.df_to_gdf(df,# 你的普通DataFramegeometry='geometry',# 包含WKT文本的那一列的列名crs='epsg:4326'# 坐标系,默认为 WGS84 (EPSG:4326))

它的作用:

  1. 自动解析指定列的 WKT 字符串。
  2. 将其转换为真实的 Shapely 几何对象。
  3. 自动设置坐标系(CRS)。
  4. 智能重命名:无论你原来的列名叫wkt_geom还是shape,转换后都会统一规范为geometry,方便后续兼容。

3. 实战案例

案例一:CSV 转 Shapefile (最常见需求)

假设你有一个data.csv

idnamewkt_shape
1A区POLYGON ((…))
2B区POLYGON ((…))

代码实现:

importpandasaspdimporttablegisastg# 1. 读取 CSVdf=pd.read_csv('data.csv')# 2. 一行转换!# 指定 'wkt_shape' 是存几何文本的列gdf=tg.df_to_gdf(df,geometry='wkt_shape')# 现在 gdf 已经是 GeoDataFrame 了,可以直接操作print(gdf.crs)# 输出: EPSG:4326print(type(gdf.geometry.iloc[0]))# 输出: <class 'shapely.geometry.polygon.Polygon'># 3. 导出为 Shapefilegdf.to_file('output_shapefile.shp',encoding='utf-8')# 或者导出为 GeoJSONgdf.to_file('output.geojson',driver='GeoJSON')

案例二:处理自定义坐标系

如果你的 WKT 数据不是经纬度(WGS84),而是投影坐标(比如 Web Mercator 3857 或 UTM),你可以通过crs参数指定。

# 假设数据是 Web Mercator 投影gdf=tg.df_to_gdf(df,geometry='geom',crs='epsg:3857')# 转换后直接进行重投影到经纬度gdf_wgs84=gdf.to_crs('epsg:4326')

案例三:结合 match_layer 使用

通常df_to_gdf是数据处理的第一步。转换成功后,你就可以用它来做空间分析了,比如上面介绍的match_layer

# 1. 加载含 WKT 的 CSVdf_raw=pd.read_csv('zones.csv')# 2. 转为 GeoDataFrame (面数据)gdf_zones=tg.df_to_gdf(df_raw,geometry='the_geom')# 3. 此时它就可以作为 match_layer 的 layer 参数输入了# result = tg.match_layer(df_points, gdf_zones, ...)

4. 参数详解

参数类型默认值说明
dfDataFrame必填包含 WKT 文本列的 pandas DataFrame。
geometrystr‘geometry’关键:指定哪一列包含 WKT 文本。转换后该列会被解析并重命名为geometry
crsstr‘epsg:4326’指定结果的坐标参考系统。通常经纬度数据用 4326,高德/百度坐标可能需要先转码(tablegis也提供了坐标转换工具)。

总结

df_to_gdf是打通“文本数据”与“空间数据”的桥梁。它极其简洁,解决了新手在shapelygeopandas之间转换时常遇到的格式错误和坐标系丢失问题。

一句话总结:只要看到 Excel/CSV 里有POINT(...)POLYGON(...)这种列,直接用tg.df_to_gdf(df, geometry='列名')把它变成能用的 GIS 数据!


本文基于 tablegis 库编写,欢迎在 PyPI 下载使用。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/17 22:08:10

L298N驱动直流电机PWM调速核心要点解析

用L298N玩转直流电机&#xff1a;PWM调速从原理到实战的完整指南你有没有遇到过这种情况&#xff1f;精心写好代码&#xff0c;给电机发了启动信号&#xff0c;结果电机要么纹丝不动&#xff0c;要么“嗡嗡”作响像在抗议——最后摸一下L298N模块&#xff0c;烫得能煎蛋。别急&…

作者头像 李华
网站建设 2026/4/18 20:43:17

libwebkit2gtk-4.1-0安装常见问题深度剖析与解决方案

libwebkit2gtk-4.1-0 安装难题实战解析&#xff1a;从依赖地狱到稳定部署你有没有在某个深夜&#xff0c;满怀希望地敲下一行sudo apt install libwebkit2gtk-4.1-0&#xff0c;结果终端却冷冷抛出一串红字&#xff1a;The following packages have unmet dependencies:libwebk…

作者头像 李华
网站建设 2026/4/17 16:28:48

obsidian_url_clipper插件介绍

1. Obsidian URL Clipper 一个支持可视化正文选择的网页剪藏插件 1.1. 插件简介 Obsidian URL Clipper 是一款为 Obsidian 设计的网页剪藏插件&#xff0c;专注于解决传统网页剪藏中最棘手的问题之一&#xff1a; 如何稳定、准确地剪藏网页“正文内容”&#xff0c;而不是整页…

作者头像 李华
网站建设 2026/4/17 23:42:35

高速信号反射对USB2.0传输速度的影响:全面讲解

高速信号反射为何让USB2.0跑不满480Mbps&#xff1f;一个硬件工程师的实战复盘最近帮客户调试一款工业摄像头&#xff0c;明明用的是STM32F4的OTG高速外设&#xff0c;理论上支持USB2.0 High-Speed&#xff08;480 Mbps&#xff09;&#xff0c;结果实测传输速率只有180 Mbps出…

作者头像 李华
网站建设 2026/4/21 11:43:54

思科:速修复已出现 exp 的身份服务引擎漏洞

聚焦源代码安全&#xff0c;网罗国内外最新资讯&#xff01;编译&#xff1a;代码卫士思科修复了位于身份服务引擎 (ISE) 网络访问控制解决方案中的一个漏洞CVE-2026-20029。目前已出现该漏洞的公开利用代码&#xff0c;可被攻击者以管理员权限利用。企业管理员在执行零信任架构…

作者头像 李华
网站建设 2026/4/19 10:00:49

【Godot】【2D】TileMap 快速上手:自动拼接/碰撞/导航(含最小可用示例)

15 分钟搭出可行的 2D 关卡:导入素材、生成 TileSet、自动拼接地形、添加碰撞与导航,并给出常见坑的排查方法。附最小项目参数可直接照抄。(精力有限,配套增值案例制作中,完成后上传。) 为什么先学 TileMap 关卡绘制效率高:拖格子即可铺地形、平台、装饰。 自动碰撞与导航…

作者头像 李华