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

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

安装

bash 复制代码
pip install tablegis

函数签名

python 复制代码
import tablegis as tg

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

它的作用:

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

3. 实战案例

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

假设你有一个 data.csv

id name wkt_shape
1 A区 POLYGON ((...))
2 B区 POLYGON ((...))

代码实现:

python 复制代码
import pandas as pd
import tablegis as tg

# 1. 读取 CSV
df = pd.read_csv('data.csv')

# 2. 一行转换!
# 指定 'wkt_shape' 是存几何文本的列
gdf = tg.df_to_gdf(df, geometry='wkt_shape')

# 现在 gdf 已经是 GeoDataFrame 了,可以直接操作
print(gdf.crs) # 输出: EPSG:4326
print(type(gdf.geometry.iloc[0])) # 输出: <class 'shapely.geometry.polygon.Polygon'>

# 3. 导出为 Shapefile
gdf.to_file('output_shapefile.shp', encoding='utf-8')

# 或者导出为 GeoJSON
gdf.to_file('output.geojson', driver='GeoJSON')

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

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

python 复制代码
# 假设数据是 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

python 复制代码
# 1. 加载含 WKT 的 CSV
df_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. 参数详解

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

总结

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

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


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

相关推荐
内存不泄露18 小时前
基于Spring Boot和Vue的宠物医院管理系统设计与实现
vue.js·spring boot·信息可视化
dyxal18 小时前
Excel情感标注工具:用Python+Flask打造高效数据标注平台
python·flask·excel
开开心心就好19 小时前
音频格式互转工具,支持Mp3ApeWavFlac互转
java·网络·c++·windows·qt·电脑·excel
刘一说19 小时前
腾讯位置服务JavaScript API GL与JavaScript API (V2)全面对比总结
开发语言·javascript·信息可视化·webgis
夜流冰1 天前
Excel - MS Support for Excel: 2 Collaborate
数据库·windows·excel
容智信息2 天前
Hyper Agent:企业级Agentic架构怎么实现?
人工智能·信息可视化·自然语言处理·架构·自动驾驶·智慧城市
min1811234562 天前
产品开发跨职能流程图在线生成工具
人工智能·microsoft·信息可视化·架构·机器人·流程图
LingRannn2 天前
【vim 中如何替换】
编辑器·vim·excel