从SQLite3表向folium地图添加标记失败:无显示无报错
解决folium地图不显示标记的问题
我帮你排查出了几个关键问题,咱们一步步来解决:
1. 标记未添加到地图实例(核心原因)
你创建了folium.Marker对象,但没有把它们绑定到你的map实例上!folium需要通过add_to()方法将标记、图层等元素添加到地图中,否则这些元素不会出现在最终的地图里。
2. 关于你遇到的ValueError
错误信息显示你传入了[(-37.7650309, 144.9613659)],这说明你可能错误地把整个查询结果列表(items)当成了单个标记的坐标,而不是遍历每个item。其实fetchall()返回的每个item本身就是(纬度, 经度)的元组,folium完全支持直接用元组作为location参数,不需要额外转列表。
3. 函数未输出/保存地图
你的maps()函数创建了地图,但最后没有返回地图对象,也没有保存为可查看的HTML文件,这会导致你无法看到生成的地图。
修正后的完整代码
import sqlite3 import folium def maps(): melbourne = (-37.840935, 144.946457) map = folium.Map(location=melbourne) try: sqliteConnection = sqlite3.connect('25july_database.db') cursor = sqliteConnection.cursor() print("Connected to SQLite") sqlite_select_query = """SELECT latitude, longitude FROM test555;""" cursor.execute(sqlite_select_query) items = cursor.fetchall() # 遍历每个坐标元组,创建标记并添加到地图 for item in items: # 确保坐标是合法的数值(可选,用于排查数据问题) if isinstance(item[0], (int, float)) and isinstance(item[1], (int, float)): folium.Marker(location=item).add_to(map) else: print(f"无效的坐标数据: {item}") cursor.close() except sqlite3.Error as error: print("Failed to read data from sqlite table", error) finally: if sqliteConnection: sqliteConnection.close() print("The SQLite connection is closed") # 保存地图为HTML文件,这样你就能在浏览器中打开查看 map.save('melbourne_map.html') # 也可以返回地图对象,方便在其他地方使用 return map # 调用函数生成地图 maps()
额外排查建议
- 检查
test555表中的latitude和longitude字段是否存储了有效的数值,有没有空值或字符串类型的数据(如果是字符串需要转成float)。 - 运行代码后,打开生成的
melbourne_map.html文件,就能看到带有标记的地图了。
内容的提问来源于stack exchange,提问作者deadant88
相关产品推荐
相关产品推荐

