在Flask-Folium中添加GeoJson数据时遭遇UnicodeDecodeError错误
解决Folium加载GeoJson时的UnicodeDecodeError错误
问题详情
报错信息:
UnicodeDecodeError: 'charmap'编解码器无法解码位置100657处的字节0x9e:字符映射到<未定义>
在向Folium地图添加GeoJson数据时触发该错误,使用的代码如下:
from flask import Flask,render_template import folium import os app = Flask(__name__) @app.route("/") def index(): return render_template("index.html") @app.route("/map") def map(): d = os.path.dirname(os.path.abspath(__file__)) m = folium.Map(location=[39.92121147768605,32.81907498836517], zoom_start=2, tiles="Stamen Terrain") TurkiyeBorder = { "color " : "Black", "weight" : 0.2, "fillColor" : "Blue" } Ankara_data = d + "/Ankara/Ankara.geojson" folium.GeoJson(Ankara_data , name = "Ankara", style_function=lambda x:TurkiyeBorder).add.to(m) folium.LayerControl().add_to(m) m.save("map.html") return m._repr_html_() if __name__ == "__main__": app.run(debug=True)
修复方案
这个错误是因为Python默认使用系统编码读取文件,而你的GeoJson文件包含非ASCII特殊字符(比如土耳其语字符),导致编码不匹配。同时代码里还有一处语法错误,一起修复:
1. 修正编码问题
显式指定UTF-8编码打开GeoJson文件,再传入folium.GeoJson:
Ankara_data = d + "/Ankara/Ankara.geojson" # 用utf-8编码打开文件 with open(Ankara_data, 'r', encoding='utf-8') as f: folium.GeoJson(f, name="Ankara", style_function=lambda x:TurkiyeBorder).add_to(m)
2. 修正语法错误
原代码里的.add.to(m)是错误写法,应该改为.add_to(m),否则会触发属性错误。
内容的提问来源于stack exchange,提问作者Mehmet Aksungur
相关产品推荐
相关产品推荐

