Как реализовать привязанный MapQuickItem
Я реализую карту на основе QtLocation для отображения своего рода тепловой карты с цветными областями ("пикселями") на карте. Один пиксель этой тепловой карты покрывает область размером 100*100 м, поэтому их может быть огромное количество. Моя первая попытка реализовать это состояла в том, чтобы использовать элемент MapRectangle для каждого пикселя, устанавливая цвет каждого пикселя в соответствии с его значением, но при полностью загруженной карте производительность резко снижалась. Сейчас я пытаюсь реализовать разделение данных на группы этих пикселей, где каждый пиксель закрашивается OpenGL в моем подклассе QQuickItem под названием ColorTileItem. Этот ColorTileItem используется в качестве sourceItem для MapQuickItem, который является делегатом MapItemView, предоставленного моей моделью под названием colorTileModel. Элемент 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.