2016-10-01 99 views
1

你好,亲爱的程序员,Recenter QT/QML地图中的Qt 5

我想要做的就是回到中心我的地图下面的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++方面现在比较简单。 这是我迄今为止最好的拍摄,直接改变纬度和纬度似乎从来没有奏效。早期版本中的工作是创建一个新的对象作为坐标,然后将其提供给地图。

#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 
     } 
    } 
}