arm板部署离线瓦片地图

ops/2025/2/12 18:45:36/

引言:技术使用qt的qml自带Map组件,没必要像网上那样用纯qt编写各种复杂的代码,直接部署一个自己的地图瓦片源,像调库一般,用几行代码就能简单的实现类似高德的离线地图效果,支持旋转、倾斜,缩放各种基本地图操作,本人的arm板为正点原子的stm32mp157,文件系统用的也是正点的出厂文件系统,同时十分推荐想学习mpu的朋友用正点的板子

1.准备瓦片地图

使用java编写的开源地图下载器下载瓦片地图,感谢大佬开源,链接如下

 地图下载器: 使用Java开发的地图瓦片图下载工具,支持OpenStreetMap、天地图、谷歌地图、高德地图、腾讯地图、必应地图的XYZ瓦片图下载与合并。icon-default.png?t=O83Ahttps://gitee.com/CrimsonHu/java_map_download#https://gitee.com/link?target=https%3A%2F%2Fpan.baidu.com%2Fs%2F1CA7sdH6zL4OjJxVydKwrWQ在软件中选择想要的图层和地图区域,地图区域也可以自己绘制图形选取

下载地图,注意选择/{z}/{x}/{y}.[image],因为qml的组件Map默认支持这种格式显示

得到地图瓦片后可以将其部署到arm板能访问到的nginx服务器或者apache服务器上(相关操作可自行搜索下nginx部署图片),以便qml的map组件可以通过此在线地址访问到地图瓦片,其有一个缓存机制,第一次访问到这些在线瓦片后可以保存这些瓦片到本地,第二次如果连接不到在线的地图源就会去加载本地的缓存地图,这样可以用来实现离线地图,还有一种方式就是在你的arm板上移植部署nginx服务器,直接访问本地的网址地图源也可以,正点的mp157默认帮忙移植好了nginx

如下就是我本地缓存的地图瓦片,也是从我的云服务器上获取到的地图瓦片自动加载到本地缓存了

2.编写qml代码

代码很简单,qt官方提供了一个基于qml的mapviewer的示例,大家可以看看如何实现的

qtlocation提供了相关显示和处理地图瓦片的组件Map,我们只需要修改下插件配置,qml的map默认是去在线的openstreetmap官方地图源获取瓦片,我们改为向我们自己的瓦片源获取瓦片即可,同时开启缓存,这样第一次加载完地图后,第二次就能实现离线地图的功能了,以下是我的代码

import QtQuick 2.0
import QtQuick.Window 2.0
import QtLocation 5.12
import QtPositioning 5.6Window {width: Screen.desktopAvailableWidthheight: Screen.desktopAvailableHeightvisible: true// 地图插件配置Plugin {id: mapPluginname: "osm"PluginParameter {name: "osm.mapping.custom.host"value: "http://你自己的地图瓦片源/"}PluginParameter {name: "osm.mapping.providersrepository.disabled"value: true}//设置地图瓦片的缓存目录PluginParameter {name: "osm.mapping.cache.directory"value: "/home/shanghai/tmp"}}// 地图组件Map {id: mapwidth: Screen.desktopAvailableWidthheight: Screen.desktopAvailableHeightactiveMapType: supportedMapTypes[6]plugin: mapPlugincenter: QtPositioning.coordinate(26.835462782119,110.36449842665)zoomLevel: 17 //在16-18之间// 用户交互时限制缩放级别onZoomLevelChanged: {map.zoomLevel = Math.max(16, Math.min(18, map.zoomLevel))}}
}

3.实现效果


http://www.ppmy.cn/ops/157831.html

相关文章

126,【2】攻防世界unseping

进入靶场 审代码 <?php // 高亮显示当前 PHP 文件的源代码&#xff0c;常用于调试和展示代码结构 highlight_file(__FILE__);// 定义一个名为 ease 的类 class ease {// 定义一个私有属性 $method&#xff0c;用于存储要调用的方法名private $method;// 定义一个私有属性…

【逆向工程】破解unity的安卓apk包

先了解一下普通apk包的逆向方法&#xff08;无加密或加壳&#xff09; 开发环境&#xff1a; 操作系统&#xff1a;windows 解apk包 下载工具&#xff1a;apktool【Install Guide | Apktool】按照文档说的操作就行&#xff0c;先安装java运行时环境【我安装的是jre-8u441-wind…

百度高德地图坐标转换

百度地图和高德地图的侧重点不太一样。同样一个地名&#xff0c;在百度地图网站上搜索到的地点可能是商业网点&#xff0c;在高德地图网站上搜索到的地点可能是自然行政地点。 高德地图api 在高德地图中&#xff0c;搜索地名&#xff0c;如“乱石头川”&#xff0c;该地名会出…

第R8周:RNN实现阿尔茨海默病诊断(pytorch)

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 数据集包含 2,149 名患者的广泛健康信息&#xff0c;每名患者的 ID 范围从 4751 到 6900 不等。该数据集包括人口统计详细信息、生活方式因素、病史、临床测量…

Matlab机械手碰撞检测应用

本文包含三个部分&#xff1a; Matlab碰撞检测的实现URDF文件的制作机械手STL文件添加夹爪 一.Matlab碰撞检测的实现 首先上代码 %% 检测在结构环境中机器人是否与物体之间发生碰撞情况&#xff0c;如何避免&#xff1f; % https://www.mathworks.com/help/robotics/ug/che…

互联网企业线上业务拓展与开源AI智能名片2+1链动模式S2B2C商城小程序的创新应用

摘要&#xff1a;随着互联网技术的飞速发展&#xff0c;互联网企业不断探索线上业务的边界&#xff0c;寻求新的增长动力。在互联网初期&#xff0c;面对商业模式和盈利模式的不成熟&#xff0c;国内互联网企业多从借鉴国外成功经验起步&#xff0c;逐步摸索出适合本土市场的线…

HPM_SDK应用本地化——基于6750evkmini

文章目录 前言一、准备工作1、下载官方的SDK2、解压SDK 二、实操1、新建目标工程文件夹2、回到SDK中将相关文件复制1、Borad文件夹2、hello_world文件夹 三、实验现象总结 前言 为什么要对sdk进行应用本地化&#xff1f;在嵌入式开发中我们一般将官方提供的SDK作为参考&#x…

基于HarmonyOS 3.0的智能理财APP开发方案

以下是基于HarmonyOS 3.0的智能理财APP开发方案&#xff0c;充分利用鸿蒙系统特性实现差异化功能&#xff1a; 一、架构设计 技术栈&#xff1a; - 开发框架&#xff1a;ArkUI 3.0 (声明式UI) - 数据管理&#xff1a;分布式数据服务 - 安全架构&#xff1a;TEE微内核 硬件级加…