You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在GeoPandas中将LineString转换为多行经纬度列

报错原因

报错核心原因是你DataFrame里的geometry列存储的是WKT格式的字符串,不是Shapely库的几何对象,字符串类型没有.coords属性,所以调用时报错。
另外补充:你给出的示例坐标(95.xxx, 5.xxx)本身就是WGS84坐标系下的经纬度值,不需要调用UTM转经纬度的逻辑,直接解析拆分即可。如果你的实际业务数据是UTM 44N投影坐标,可以在拆分坐标后追加转换步骤。

实现代码
import pandas as pd
from shapely import wkt

# 1. 将WKT字符串转换为Shapely几何对象
df['geometry'] = df['geometry'].apply(wkt.loads)

# 2. 提取LineString中所有坐标点
df['coord_list'] = df['geometry'].apply(lambda geom: list(geom.coords))

# 3. 将坐标列表拆分为单行,每个坐标点对应一行记录
df = df.explode('coord_list', ignore_index=True)

# 4. 拆分经度、纬度为独立列
# Shapely坐标存储顺序为 (经度, 纬度),和字段对应
df['Longitude'] = df['coord_list'].apply(lambda item: item[0])
df['Latitude'] = df['coord_list'].apply(lambda item: item[1])

# 5. 筛选需要的字段输出,可根据需要调整列名和你预期完全一致
final_df = df[['Name', 'Longitude', 'Latitude']]
# 如果要完全匹配你给出的输出表头(注意原表头Langitude为拼写笔误),可执行重命名
# final_df = final_df.rename(columns={'Longitude': 'Langitude', 'Latitude': 'Longitude'})
补充:如果实际使用UTM坐标的调整方式

如果你的真实数据geometry列存储的是UTM 44N投影坐标,不是示例里的WGS84经纬度,只需要在拆分行之后增加转换逻辑即可,注意utm.to_latlon返回值顺序为(纬度, 经度),拆分字段时要对应调整顺序:

import utm
# 坐标转换
df['coord_list'] = df['coord_list'].apply(lambda xy: utm.to_latlon(xy[0], xy[1], 44, 'N'))
# 拆分列时调整顺序
df['Latitude'] = df['coord_list'].apply(lambda item: item[0])
df['Longitude'] = df['coord_list'].apply(lambda item: item[1])

内容的提问来源于stack exchange,提问作者Nabih Bawazir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 06:45:44