Folium地图标记偏移至非洲、部分点位不显示问题咨询
问题原因
点位偏移至非洲、仅部分点位可渲染的问题由两处代码错误导致:
- Folium 所有定位相关参数(包括地图初始化、标记点定位)强制要求坐标格式为
[纬度, 经度],但你的SQL查询返回的字段顺序为(经度, 纬度),和组件要求的顺序完全相反。 - 你给
folium.Marker传入location参数时仅写了item[0],只传了经度单个值,未传入完整坐标对。对于非法格式的坐标,Folium会默认将经度置为0,当传入的单值(即你存的经度值)在-90~90的纬度合法区间内时,就会被渲染在0经度穿过的非洲区域;如果传入的单值超出纬度取值范围(<-90或>90),点位会被直接丢弃,这就是仅部分点位显示的原因。
修复方法
调整标记点的传参逻辑,按Folium要求的顺序传入完整的经纬度二元组即可,修复后的完整代码如下:
import folium import sqlite3 fga = folium.FeatureGroup(name="POI") # 地图初始化的坐标顺序本身正确:[纬度, 经度],对应多伦多位置 map = folium.Map(location=[43.733777671205, -79.37156631524043], zoom_start=11) try: sqliteConnection = sqlite3.connect('cord.db') cursor = sqliteConnection.cursor() print("Connected to SQLite") sqlite_select_query = """SELECT longitude, latitude FROM cord;""" cursor.execute(sqlite_select_query) items = cursor.fetchall() for item in items: lon, lat = item # 按[纬度, 经度]顺序传入完整坐标对 fga.add_child(folium.Marker(location = [lat, lon])) cursor.close() finally: if (sqliteConnection): sqliteConnection.close() print("The SQLite connection is closed") map.add_child(fga) map.add_child(folium.LayerControl()) map.save("CORD.html")
校验提示:可以在循环内加一行
print(f"当前点位坐标:纬度{lat}, 经度{lon}"),确认打印出的纬度在43上下、经度在-79上下,和地图初始化的多伦多坐标范围匹配,再生成最终地图文件即可。
内容的提问来源于stack exchange,提问作者kaptnpy
相关产品推荐
相关产品推荐

