qt - 编写自定义 Qt Location GeoServices 插件以使用地理引用图像文件作为 map 源

标签 qt qml qtlocation

我目前正在开发一个 Qt Quick 应用程序,该应用程序将为较小的区域(1 平方公里左右)提供 map 查看器,其 map 详细信息将在单个地理引用图像文件(GeoTIFF,地理引用 PDF、ESRI 形状文件等),以及当前位置的显示、运算符(operator)确定的兴趣点等。它的主要职责是显示自定义 map (与从公共(public) map 图像服务提供商 (OSM) 检索的通用 map 相反, MabBox, ESRI etc)), 常用于连接受限的区域

广泛的网络搜索发现其他人过去也有过类似的查询(这里,Qt 论坛等),一般的解决方案建议如下:

  • 带有 Qt SDK 的 ArcGIS Runtime 不适合我,因为我打算使用 ARM 处理器定位嵌入式 linux 设备,并且 ArcGIS 不提供可用于任意交叉编译的源代码目标。他们最近制作了一个 Android 版本,但一般没有针对 ARM linux 的版本)
  • QGIS 开发人员库 GPL 许可证与我的商业开发不兼容
  • 将 Qt Location Map 组件与本 map block 服务器或离线图 block 集合一起使用(一些插件最近引入了对此的支持)似乎有点 hack,正如我所指出的主要使用自定义 map ,而不是公共(public) map 服务器图像的离线副本,否则我的图像不够大,无法真正保证平铺

从头开始开发 Qt Quick 组件来执行此操作是可行的,但考虑到现有的 Qt Location Map 组件为我的 map 需要的所有内容提供了定义良好的预先存在的前端界面需要做的并且具有基于可扩展插件的架构,编写自定义 Qt Location GeoServices 插件似乎是最明智和优雅的前进方式。

我已经开始检查现有插件的源代码,但无法动摇的感觉是,在一个拥有 80 亿人口的世界中,“太阳底下没有新鲜事”,如果它是好主意....

有没有更熟悉 Qt Location 模块的人愿意发表评论?

最佳答案

由于地理引用图像可以任意大,将它们转换为平铺金字塔是标准,以便能够在任何硬件上有效地显示它们(以加倍大小为代价,最坏情况取决于如何你想要的很多层)。 即使您会编写自己的地理服务插件,您很可能最终会(直接或通过使用第 3 方代码)平铺您的 geotiff。

也就是说,QtLocation 确实允许您使用以大多数方式(http、https、文件、qrc 等)提供的自定义图 block 集(http://doc.qt.io/qt-5/location-plugin-osm.html,查找osm.mapping.custom.host) .).

继续吧,启动QGis,安装QTiler 插件,然后转换您的图像。 如果您需要通过网络将这些图片直接提供给客户端(因此需要在客户端进行转换),您可以查看 QTiler 的功能,或者构建您的 gdal 管道(gdal_translate、gdalwarp 和 gdal2tiles),然后发布与您的应用程序相关的 gdal 位。

如果您同时需要多个图像,您可以使用具有不同插件参数的多个 Plugin 元素,或者您可以 fork osm 插件并支持多个自定义主机。

关于qt - 编写自定义 Qt Location GeoServices 插件以使用地理引用图像文件作为 map 源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47670504/

相关文章:

QT QML QtLocation map 插件

c++ - 为什么 QMultiMap 的查找操作没有像我预期的那样工作?

c++ - 在 Visual Studio 2005 中基于命令行作为 GUI 应用程序或控制台应用程序启动的可执行文件

c++ - 为什么在 Qt C++ 中关闭主窗口后打印消息?

c++ - QSqlTableModel 到 qml 列表多次通过

c++ - Qt5 Beta - 找不到 serviceframework.pro

qt - 动态更改 QML 映射中 osm 插件的自定义主机 URL

c++ - 使用 Wayland 在 Linux 上获取 Capslock 状态

qt - AbstractItemModel 到 QML 路由