Python读取GPS坐标生成列表后,如何去除引号适配Folium?
解决Folium中GPS坐标字符串转元组列表的问题
问题核心
你当前的坐标列表元素是带引号的字符串(如'(-27.414, -48.518)'),而folium.Marker()的location参数需要的是两个数值组成的可迭代对象(元组/列表),字符串格式会触发ValueError。
方案1:转换现有字符串列表
如果已经生成了带引号的字符串列表,用以下代码将每个元素转为浮点型元组:
# 假设你的字符串列表是 coordinates_str_list coordinates_tuple_list = [ tuple(map(float, coord_str.strip('()').split(','))) for coord_str in coordinates_str_list ]
代码说明:
coord_str.strip('()'):去掉字符串首尾的括号,得到'-27.414, -48.518'.split(','):按逗号分割成两个字符串['-27.414', ' -48.518']map(float, ...):将两个字符串转成浮点型数值tuple(...):把数值对打包成元组,最终得到[(-27.414, -48.518), ...]
方案2:修改读取函数直接生成正确格式
既然你的.txt文件每行是无括号、逗号分隔的坐标(如-27.414, -48.518),直接修改criaListaDeCoordenadas函数,跳过生成字符串列表的步骤,直接生成元组列表:
def criaListaDeCoordenadas(file_path): coordinates = [] with open(file_path, 'r', encoding='utf-8') as f: for line in f: # 跳过空行(可选) if not line.strip(): continue # 分割坐标并转成浮点型 lat, lon = map(float, line.strip().split(',')) coordinates.append( (lat, lon) ) return coordinates
错误方法分析
你之前尝试的两种方法失效原因:
list(map(int, coordinatesList)):试图把带括号的字符串转成整数,既无法解析格式,也错误使用了int(GPS坐标是浮点数)'[%s]' % ', '.join(map(str, coordinatesList)):把整个列表转成了一个大字符串,而非保持列表结构,自然无法被folium.Marker识别
使用示例
转换完成后,直接将元组列表传入folium.Marker:
import folium # 生成地图 m = folium.Map(location=coordinates_tuple_list[0], zoom_start=12) # 添加所有标记 for coord in coordinates_tuple_list: folium.Marker(location=coord).add_to(m) # 保存地图 m.save('gps_map.html')
内容的提问来源于stack exchange,提问作者hyper
相关产品推荐
相关产品推荐

