[Interest] How to dynamically add a MapItemView to a Map?

Kishore J kitts.mailinglists at gmail.com
Tue Sep 6 15:34:34 CEST 2016


Hi

I am inching forward with using QML maps in my C++ application. Now i'm
interested in dynamically adding multiple MapItemView objects to a given
map.


import QtQuick 2.5
import QtLocation 5.6

Map {
    id: map
    objectName: "MyMap"
//     zoomLevel: (maximumZoomLevel - minimumZoomLevel)/2
    zoomLevel: minimumZoomLevel

    plugin: Plugin {
        name: "here"
        PluginParameter {name: "here.app_id"; value: "xxxxx"}
        PluginParameter {name: "here.token"; value: "xxxxx"}
    }
//     activeMapType: supportedMapTypes[3]
    center {
        latitude: 10
        longitude: 20
    }

    MapCircle {
        id: staticCircle
        center {
            latitude: 5
            longitude: 10
        }
        radius: 500000.0
        color: 'yellow'
        border.width: 4
        border.color: 'yellow'
        Component.onCompleted: {
            console.debug("Loaded static MapCircle")
            console.debug(center + ' radius: ' + radius)
        }
        Component.onDestruction: {
            console.debug("Unloaded static MapCircle")
        }
    }

    MapItemView {
        id: mapitemview
        objectName: "MyMapItemView"
        model: ListModel {
            id: list
            ListElement{lat: 10; lon: 20; rad: 800000}
            ListElement{lat: 30; lon: 40; rad: 700000}
        }
        delegate: Component {
            id: delegate

            MapCircle {
                id: dynmapcircle
                center {
                    latitude: lat;
                    longitude: lon;
                }
                radius: 500000.0
                color: 'black'
                border.width: 4
                border.color: 'black'
                Component.onCompleted: {
                    console.count("Loaded a MapCircle")
                    map.addMapItem(dynmapcircle)
                }
            }
        }

        Component.onCompleted: {
            console.debug("Loaded first MapItemView")
            console.debug(model.count)
        }
        Component.onDestruction: {
            console.debug("Unloaded first MapItemView")
        }
    }

    MapItemView {
        id: mapitemview2
        objectName: "MyMapItemView2"
        model: ListModel {
            id: list2
            ListElement{lat: -10; lon: 20; rad: 800000}
            ListElement{lat: -30; lon: 40; rad: 700000}
        }
        delegate: Component {
            id: delegate2

            MapCircle {
                id: dynmapcircle2
                center {
                    latitude: lat;
                    longitude: lon;
                }
                radius: 500000.0
                color: 'blue'
                border.width: 4
                border.color: 'blue'
                Component.onCompleted: {
                    console.count("Loaded a MapCircle2")
                    map.addMapItem(dynmapcircle2)
                }
            }
        }

        Component.onCompleted: {
            console.debug("Loaded second MapItemView")
        }
        Component.onDestruction: {
            console.debug("Unloaded second MapItemView")
        }
    }

    Component.onCompleted:{
        center.latitude = 10
        center.longitude = 20
        console.debug('Loaded map ' + map.center)
    }
    Component.onDestruction:{
        console.debug('Unloaded map')
    }
}

Further, i do not understand why i have to call the map.addMapItem()
function for each MapItem. I suspect that, that is the source of my
problem. I am currently able to define a separate qml file containing the
second MapItemView which i instantiate in C++ and set the map as it's
parent but that does not work.

Any help would be appreciated.
--
Regards,
Kishore

PS: I also seem to be facing another issue where the center value specified
in the map initialization does not work and I have to set the center in the
onCompleted() slot. Funnily, it only considers the Latitude or Longitude
value in the initialization depending on which is first specified!
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/interest/attachments/20160906/e2b14632/attachment.html>


More information about the Interest mailing list