我正在实现基于QtLocation的地图,以显示某种热图,并在地图上带有彩色区域(“像素”)。此热图的一个像素覆盖100 * 100m左右的区域,因此可能有很多。我实现此目标的第一个尝试是通过根据像素值设置每个像素的颜色来为每个像素使用MapRectangle项,但是在完全加载的地图中,性能会急剧下降。我现在要实现的是将数据划分为这些像素的组,其中每个像素在我的QQuickItem子类ColorTileItem中都用OpenGL绘制。此ColorTileItem用作MapQuickItem的sourceItem,它是我的模型colorTileModel提供的MapItemView的委托。 colorTimeModel的项目是一个“ tile”,并包含图块中的像素数,每个像素的颜色和坐标。我的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值,但是(显然)它只能在父地图的特定zoomlevel上正常工作。 有什么方法可以设置以米为单位的MapQuickItem的大小,或将MapQuickItem的角设置为地理坐标(如在MapRectangle中一样)?
一个方便的解决方案是将QDeclarativeRectangleMapItem或QDeclarativeGeoMapItemBase子类化,但是不幸的是,这些是私有类,并且如果可能的话,我想避免依赖于特定的Qt版本。