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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 02:30:58