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

无网络环境下Qml无法加载QtLocation离线地图瓦片问题求助

QtLocation离线地图需联网才能加载的解决办法(Qt 5.12.3)

针对你遇到的必须联网才能加载离线瓦片的问题,可通过以下步骤解决:

1. 修正离线瓦片路径

Qt资源路径(:/offline_tiles/)无法被OSM插件底层的文件系统读取逻辑识别,需将瓦片文件夹放在程序运行目录下,改用本地相对路径:

PluginParameter {
    name: 'osm.mapping.offline.directory'
    value: './offline_tiles/' // 瓦片文件夹与可执行文件同目录
}

2. 添加强制离线参数

Qt 5.12.3的OSM插件默认会尝试联网获取地图元数据,需添加参数禁用在线请求:

PluginParameter {
    name: 'osm.mapping.providersrepository.disabled'
    value: true // 禁用在线仓库,强制使用本地瓦片
}
PluginParameter {
    name: 'osm.mapping.highdpi_tiles'
    value: false // 若瓦片非高分辨率,关闭该选项避免无效请求
}

3. 明确指定匹配的地图类型

避免因supportedMapTypes[1]指向不兼容的地图类型导致加载失败,改用筛选方式指定OpenStreetMap类型:

activeMapType: map.supportedMapTypes.filter(function(type) { return type.name === "OpenStreetMap"; })[0]

4. 验证瓦片结构

确保离线瓦片遵循zoom/x/y.png的层级结构(例如1/0/0.png),文件名和格式(PNG/JPG)符合OSM插件要求。

修改后的完整代码

import QtQuick 2.7
import QtQuick.Window 2.2
import QtLocation 5.8

Window {
    id: win
    objectName: "window"
    visible: true
    width: 512
    height: 512

    Map {
        id: map
        anchors.fill: parent
        activeMapType: map.supportedMapTypes.filter(function(type) { return type.name === "OpenStreetMap"; })[0]
        zoomLevel: 1
        plugin: Plugin {
            name: 'osm';
            PluginParameter {
                name: 'osm.mapping.offline.directory'
                value: './offline_tiles/'
            }
            PluginParameter {
                name: 'osm.mapping.providersrepository.disabled'
                value: true
            }
            PluginParameter {
                name: 'osm.mapping.highdpi_tiles'
                value: false
            }
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 11:21:10