Как реализовать привязанный MapQuickItem - PullRequest
0 голосов
/ 14 ноября 2018

Я реализую карту на основе 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.

...