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

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)

测试步骤

  1. 重启Flask服务,确保CORS已启用且坐标顺序修正完成
  2. 运行PySide6程序,打开地图查看实时位置点是否正常显示

内容的提问来源于stack exchange,提问作者beatbox

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 12:05:19