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

F#中Plotly.Net离线使用地理地图时本地JSON未生效问题

解决Plotly.Net离线运行地理地图仍请求CDN的问题

问题根源

你当前的代码只是将本地GeoJSON传入Chart.PointGeo的GeoJson参数,但这个参数是用来关联数据与地理边界的,并非替换Plotly默认加载的基础底图。默认情况下,Plotly.js会自动从CDN拉取预定义的world_110m.json作为geo图表的底图,哪怕你替换了JS文件路径,这个默认的资源请求逻辑依然存在。

解决方案

1. 完全禁用默认底图,使用本地GeoJSON绘制底图

修改代码,关闭默认底图加载,将本地GeoJSON作为独立图层添加到图表中:

open Plotly.NET
open Newtonsoft.Json

// 读取本地GeoJSON文件
let geoJsonString = IO.File.ReadAllText("world_110m.json")
let geoJsonData = JsonConvert.DeserializeObject(geoJsonString)

let baseMapOnly = 
    // 创建空的点图表作为基础
    Chart.PointGeo(locations = [])
    // 关闭默认的陆地、海岸线等底图元素
    |> Chart.withGeoStyle(
        ShowLand = false,
        ShowCoastlines = false,
        ShowFrame = false
    )
    // 添加本地GeoJSON作为自定义底图图层
    |> Chart.withGeoJson(geoJsonData, [
        GeoJsonFeatureStyle(
            FillColor = "lightgray",
            LineColor = "white",
            LineWidth = 0.5
        )
    ])
    |> Chart.withMarginSize(0,0,0,0)

baseMapOnly |> Chart.show

2. 配置Plotly.js离线资源路径(可选,保留默认底图逻辑)

若想继续使用Plotly的默认底图逻辑,需在生成的HTML中添加配置,覆盖远程资源路径:

  • 加载本地plotly-2.6.3.min.js后,插入以下配置脚本:
Plotly.setPlotConfig({
    mapboxAccessToken: '', // 离线模式无需token
    // 覆盖地图资源的加载路径,指向本地文件
    mapUrl: {
        'world_110m': './world_110m.json',
        'world_50m': './world_50m.json'
    }
});
  • 确保world_110m.json与HTML文件路径匹配。

3. 直接生成带离线配置的HTML文件

避免手动修改HTML,通过Chart.toHTMLFile直接生成包含本地资源配置的文件:

let htmlContent = 
    baseMapOnly
    |> Chart.toHTML(
        includePlotlyJS = false, // 不嵌入CDN的Plotly.js
        htmlDocumentOptions = HtmlDocumentOptions(
            HeadContent = """
                <script src="./require.min.js"></script>
                <script src="./plotly-2.6.3.min.js"></script>
                <script>
                    Plotly.setPlotConfig({
                        mapUrl: {
                            'world_110m': './world_110m.json'
                        }
                    });
                </script>
            """
        )
    )

IO.File.WriteAllText("offline_map.html", htmlContent)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 23:37:45