2016-10-01 18 views
1

こんにちは親愛なるプログラマ、私が何をしたいのかのQt 5でrecenterはQT/QML地図

は、次のQMLと私のマップを更新したりすることです。 私は座標を数字のペアとして持っていますが、マップビューの例ではアドレスと似ていません。

ApplicationWindow { 
    visible: true 
    width: 720 
    height: 1280 
    title: qsTr("") 
    id: root 
    Map { 
     id: map 
     anchors.centerIn: parent; 
     anchors.fill: parent 
     zoomLevel: 11 
     objectName: "mainMap" 

     center { 
     id: mapCenter 
     latitude : 50.89 
     longitude: 11.23 
     } 
     plugin: Plugin { 
      name: "here" 
      PluginParameter { name: "here.app_id"; value: "R9qav4Kw6gO5XKSxNiOO" } 
      PluginParameter { name: "here.token"; value: "58UCNRCr1dZxhLL2Bmmz3Q" } 
      PluginParameter { name: "here.proxy"; value: "system" } 
     } 
     function setPosition(pos) { 
      map.toCoordinate(pos); 
      map.update(); 
     } 
} 

C++側は、現在のところ比較的単純です。 これまでのところ私の最高のショットです。緯度と経度を直接変更することは決してできませんでした。以前のバージョンでは、新しいObjectを座標として作成してマップに渡しました。

#include <QGuiApplication> 
#include <QQmlApplicationEngine> 
#include <QGuiApplication> 
#include <QQmlApplicationEngine> 
#include <QQmlContext> 
#include <QObject> 
#include <QTime> 
#include <QBasicTimer> 
#include <QDebug> 
#include <QEasingCurve> 
#include <QGeoCoordinate> 
#include <QtPositioning/private/qgeoprojection_p.h> 
#include <QGeoServiceProvider> 
#include <QDebug> 
#include <QNetworkRequest> 

int main(int argc, char *argv[]) 
{ 
    QGuiApplication app(argc, argv); 
    QUrl data("https://lstsim.de/js/dispatch/1.js"); 
    QNetworkRequest request(data); 

    QQmlApplicationEngine engine; 
    engine.load(QUrl(QStringLiteral("qrc:/main.qml"))); 
    QObject *rootObject = engine.rootObjects().first(); 
    QObject* mainMapCenter = rootObject->findChild<QObject*>("mainMap"); 
    if(mainMapCenter != NULL){ 
     QVariant returnedValue; 
     QPoint point(12,12); 
     QMetaObject::invokeMethod(mainMapCenter, "setPosition", 
     Q_RETURN_ARG(QVariant, returnedValue), 
     Q_ARG(QVariant, point)); 
     qDebug() << "found map"; 
    } 
    return app.exec(); 
} 

これは働いていた以前のバージョンでbefor言及のように:

function centermyposition(){ //sets my position, but only once (do not update automatically) 
     var coord = Qt.createQmlObject('import QtMobility.location 1.1; Coordinate{latitude:' + positionSource.position.coordinate.latitude + ';longitude:' + positionSource.position.coordinate.longitude + ';}', positionSource, "coord"); 
     map.center = coord; 
     myMapRoot.updateViewport() 
} 

答えて

1

を、私は私の作品解決策を見つけた:

ApplicationWindow { 

Location { 
     id: mapCentre 
     coordinate { 
      latitude: -27.5 
      longitude: 153.1 
     } 
    } 
    Map { 
     id: map 
     anchors.centerIn: parent; 
     anchors.fill: parent 
     zoomLevel: 11 
     objectName: "mainMap" 

     function recenter(lat,lng) { 
      mapCentre.coordinate.latitude = lat 
      mapCentre.coordinate.longitude = lng 
     } 
    } 
}