我正在实现一个基于 QtLocation 的地图来显示某种热图,在地图上带有彩色区域(“像素”)。这张热图的一个像素覆盖了大约 100*100m 的区域,因此它们的数量可能很大。我第一次尝试实现这一点是为每个像素使用一个 MapRectangle 项,通过根据每个像素的值设置每个像素的颜色,但是对于一个完全加载的地图,性能会急剧下降。我现在要实现的是将数据划分为这些像素的组,其中每个像素在我的 QQuickItem 子类 ColorTileItem 中用 OpenGL 绘制。此 ColorTileItem 用作 MapQuickItem 的 sourceItem,它是由我的名为 colorTileModel 的模型提供的 MapItemView 的委托。colorTimeModel 的项目是一个“瓦片”,并带有瓦片中的像素数,每个像素的颜色和坐标。我的 QML 代码目前如下所示:
MapItemView
{
id:colorTileView
model: colorTileModel
delegate: MapQuickItem
{
id: tile
coordinate: model.item.centralcoordinate
zoomLevel: mapBase.zoomLevel
visible: true
sourceItem: ColorTileItem
{
id: colorcell
width: 10
height: 10
opacity: 1
visible: true
tile: model.item
}
}
}
我的问题是这些图块项目需要正确地进行地理参考,以覆盖地图的确切区域,无论缩放级别如何,但 MapQuickItem 期望其大小为像素值,而不是地图上的距离。我正在尝试不同的 zoomLevel 值,但(显然)它只能在父地图的特定缩放级别上正常工作。有没有办法以米为单位设置 MapQuickItem 的大小,或将 MapQuickItem 的角设置为地理坐标(如 MapRectangle 中)?
一个方便的解决方案是将 QDeclarativeRectangleMapItem 或 QDeclarativeGeoMapItemBase 子类化,但不幸的是,这些是私有类,如果可能的话,我想避免依赖特定的 Qt 版本。