Flask服务器发送的GeoJSON数据无法在Folium实时地图显示
问题分析与解决方案
1. 核心问题:GeoJSON坐标顺序错误
GeoJSON标准中,Point类型的coordinates必须遵循**[经度, 纬度]**的顺序,但你的Flask代码里把纬度放在了前面([latitude1, longitude1]),这会导致生成的点完全偏离预期位置(甚至超出地图可视范围),自然无法在Folium地图上显示。
修正Flask代码中的坐标部分:
# 原错误代码 "coordinates": [latitude1, longitude1] # 修正后代码 "coordinates": [longitude1, latitude1]
对两个Feature的coordinates字段都做同样修改。
2. 跨域请求拦截问题
PySide6的QWebEngineView加载本地HTML时,请求localhost的Flask接口会触发跨域资源共享(CORS)限制,导致请求被浏览器内核拦截,无法获取GeoJSON数据。
解决步骤:
- 安装Flask-CORS扩展:
pip install flask-cors
- 在Flask代码中启用CORS:
from flask import Flask, jsonify from flask_cors import CORS # 导入CORS扩展 import random app = Flask(__name__) CORS(app) # 全局启用CORS,允许所有来源的请求 # 后续路由代码保持不变
3. 调整Realtime的更新间隔
你的需求是1秒更新一次位置,但当前代码中interval=10000(对应10秒),修改为interval=1000以符合需求:
rt = folium.plugins.Realtime( "http://127.0.0.1:5000/random_position.geojson", get_feature_id=JsCode("(f) => { return f.properties.objectid; }"), interval=1000, # 改为1000毫秒(1秒) )
4. 可选:WebView跨域增强设置
如果仍有问题,可以给PySide6的QWebEngineView添加额外的跨域允许配置:
from PySide6.QtWebEngineCore import QWebEngineSettings # 在初始化webview对象后添加以下配置 self.webview.settings().setAttribute(QWebEngineSettings.WebAttribute.AllowRunningInsecureContent, True) self.webview.settings().setAttribute(QWebEngineSettings.WebAttribute.AllowCrossOriginRequests, True)
测试步骤
- 重启Flask服务,确保CORS已启用且坐标顺序修正完成
- 运行PySide6程序,打开地图查看实时位置点是否正常显示
内容的提问来源于stack exchange,提问作者beatbox
相关产品推荐
相关产品推荐

