diff options
41 files changed, 5045 insertions, 7 deletions
diff --git a/demos/demos.pro b/demos/demos.pro new file mode 100644 index 00000000..8cff09b3 --- /dev/null +++ b/demos/demos.pro @@ -0,0 +1,2 @@ +TEMPLATE = subdirs +SUBDIRS += mapsdemo diff --git a/demos/mapsdemo/main.cpp b/demos/mapsdemo/main.cpp new file mode 100644 index 00000000..50fd3043 --- /dev/null +++ b/demos/mapsdemo/main.cpp @@ -0,0 +1,89 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the Qt Mobility Components. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/* Part of the Maps Demo tutorial */ +/* You probably want to read it first, look under Tutorials in + the Mobility documentation */ + +#include "mainwindow.h" + +#include <QApplication> +#include <QList> +#include <QString> +#include <QUrl> +#include <QSettings> +#include <QProcessEnvironment> +#include <QNetworkProxyFactory> + +#include "qgeoserviceprovider.h" + +int main(int argc, char *argv[]) +{ + QApplication a(argc, argv); + + // not in the tutorial text: set up a proxy server from + // a QSettings file if necessary (useful on Linux) + + QApplication::setOrganizationName("Nokia"); + QApplication::setApplicationName("MapsDemo"); + + QSettings settings; + + QVariant value = settings.value("http.proxy"); + if (value.isValid()) { + QUrl url(value.toString(), QUrl::TolerantMode); + QNetworkProxy proxy; + proxy.setType(QNetworkProxy::HttpProxy); + proxy.setHostName(url.host()); + proxy.setPort(url.port(8080)); + QNetworkProxy::setApplicationProxy(proxy); + } + + // launch the main window + MainWindow mw; +#if defined(Q_OS_SYMBIAN) || defined(Q_WS_MAEMO_5) || defined(Q_WS_SIMULATOR) + mw.showMaximized(); +#else + mw.resize(360,640); + mw.show(); +#endif + return a.exec(); +} diff --git a/demos/mapsdemo/mainwindow.cpp b/demos/mapsdemo/mainwindow.cpp new file mode 100644 index 00000000..69f204fd --- /dev/null +++ b/demos/mapsdemo/mainwindow.cpp @@ -0,0 +1,286 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the Qt Mobility Components. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "mainwindow.h" +#include "navigator.h" + +#include <QCoreApplication> +#include <QMenuBar> +#include <QMenu> +#include <QMessageBox> +#include <QAction> +#include <QVBoxLayout> + +MainWindow::MainWindow() : + serviceProvider(0), + markerManager(0), + positionSource(0), + lastNavigator(0), + tracking(true), + firstUpdate(true) +{ + // our actual maps widget is the centre of the mainwindow + mapsWidget = new MapsWidget; + setCentralWidget(mapsWidget); + + // set up the menus + QMenuBar *mbar = new QMenuBar(this); + mbar->addAction("Quit", qApp, SLOT(quit())); + mbar->addAction("My Location", this, SLOT(goToMyLocation())); + + QMenu *searchMenu = new QMenu("Search"); + mbar->addMenu(searchMenu); + + searchMenu->addAction("For address or name", this, SLOT(showSearchDialog())); + + QMenu *navigateMenu = new QMenu("Directions"); + mbar->addMenu(navigateMenu); + + navigateMenu->addAction("From here to address", this, SLOT(showNavigateDialog())); + + setMenuBar(mbar); + setWindowTitle("Maps Demo"); + + // now begin the process of opening the network link + netConfigManager = new QNetworkConfigurationManager; + connect(netConfigManager, SIGNAL(updateCompleted()), + this, SLOT(openNetworkSession())); + netConfigManager->updateConfigurations(); +} + +void MainWindow::openNetworkSession() +{ + // use the default network configuration and make sure that + // the link is open + session = new QNetworkSession(netConfigManager->defaultConfiguration()); + if (session->isOpen()) { + initialize(); + } else { + connect(session, SIGNAL(opened()), + this, SLOT(initialize())); + session->open(); + } +} + +MainWindow::~MainWindow() +{ + delete mapsWidget; + if (serviceProvider) + delete serviceProvider; + if (markerManager) + delete markerManager; +} + +void MainWindow::goToMyLocation() +{ + mapsWidget->animatedPanTo(markerManager->myLocation()); + mapsWidget->map()->setFocus(); + tracking = true; +} + +void MainWindow::initialize() +{ + if (serviceProvider) + delete serviceProvider; + + // check we have a valid default provider + + QList<QString> providers = QGeoServiceProvider::availableServiceProviders(); + if (providers.size() < 1) { + QMessageBox::information(this, tr("Maps Demo"), + tr("No service providers are available")); + QCoreApplication::quit(); + return; + } + + foreach (QString provider, providers) { + serviceProvider = new QGeoServiceProvider(provider); + if (serviceProvider->mappingManager() && + serviceProvider->searchManager() && + serviceProvider->routingManager()) + break; + } + + if (serviceProvider->error() != QGeoServiceProvider::NoError) { + QMessageBox::information(this, tr("Maps Demo"), + tr("Error loading geoservice plugin")); + QCoreApplication::quit(); + return; + } + + if (!serviceProvider->mappingManager() || + !serviceProvider->searchManager() || + !serviceProvider->routingManager()) { + QMessageBox::information(this, tr("Maps Demo"), + tr("No geoservice found with mapping/search/routing")); + QCoreApplication::quit(); + return; + } + + // start initialising things (maps, searching, routing) + + mapsWidget->initialize(serviceProvider->mappingManager()); + + if (markerManager) + delete markerManager; + markerManager = new MarkerManager(serviceProvider->searchManager()); + mapsWidget->setMarkerManager(markerManager); + + connect(markerManager, SIGNAL(searchError(QGeoSearchReply::Error,QString)), + this, SLOT(showErrorMessage(QGeoSearchReply::Error,QString))); + connect(mapsWidget, SIGNAL(markerClicked(Marker*)), + this, SLOT(showMarkerDialog(Marker*))); + connect(mapsWidget, SIGNAL(mapPanned()), + this, SLOT(disableTracking())); + + if (positionSource) + delete positionSource; + + // set up position feeds (eg GPS) + + positionSource = QGeoPositionInfoSource::createDefaultSource(this); + + if (!positionSource) { + mapsWidget->statusBar()->showText("Could not open GPS", 5000); + mapsWidget->setMyLocation(QGeoCoordinate(-27.5796, 153.1)); + //mapsWidget->setMyLocation(QGeoCoordinate(21.1813, -86.8455)); + } else { + positionSource->setUpdateInterval(1000); + connect(positionSource, SIGNAL(positionUpdated(QGeoPositionInfo)), + this, SLOT(updateMyPosition(QGeoPositionInfo))); + positionSource->startUpdates(); + mapsWidget->statusBar()->showText("Opening GPS..."); + } +} + +void MainWindow::disableTracking() +{ + tracking = false; +} + +void MainWindow::updateMyPosition(QGeoPositionInfo info) +{ + if (mapsWidget) { + mapsWidget->setMyLocation(info.coordinate(), false); + if (tracking) + mapsWidget->animatedPanTo(info.coordinate()); + if (firstUpdate) + mapsWidget->statusBar()->showText("Receiving from GPS"); + } + + firstUpdate = false; +} + +void MainWindow::showNavigateDialog() +{ + NavigateDialog nd; + if (nd.exec() == QDialog::Accepted) { + if (markerManager) { + QGeoRouteRequest req; + + req.setTravelModes(nd.travelMode()); + + // tell the old navigator instance to delete itself + // so that its map objects will disappear + if (lastNavigator) + lastNavigator->deleteLater(); + + Navigator *nvg = new Navigator(serviceProvider->routingManager(), + serviceProvider->searchManager(), + mapsWidget, nd.destinationAddress(), + req); + + lastNavigator = nvg; + + connect(nvg, SIGNAL(searchError(QGeoSearchReply::Error,QString)), + this, SLOT(showErrorMessage(QGeoSearchReply::Error,QString))); + connect(nvg, SIGNAL(routingError(QGeoRouteReply::Error,QString)), + this, SLOT(showErrorMessage(QGeoRouteReply::Error,QString))); + + mapsWidget->statusBar()->setText("Routing..."); + mapsWidget->statusBar()->show(); + + nvg->start(); + + connect(nvg, SIGNAL(finished()), + mapsWidget->statusBar(), SLOT(hide())); + + mapsWidget->map()->setFocus(); + } + } +} + +void MainWindow::showSearchDialog() +{ + SearchDialog sd; + if (sd.exec() == QDialog::Accepted) { + if (markerManager) { + markerManager->removeSearchMarkers(); + markerManager->search(sd.searchTerms(), sd.radius()); + mapsWidget->map()->setFocus(); + } + } +} + +void MainWindow::showErrorMessage(QGeoSearchReply::Error err, QString msg) +{ + Q_UNUSED(err) + QMessageBox::critical(this, tr("Error"), msg); + mapsWidget->statusBar()->hide(); + mapsWidget->map()->setFocus(); +} + +void MainWindow::showErrorMessage(QGeoRouteReply::Error err, QString msg) +{ + Q_UNUSED(err) + QMessageBox::critical(this, tr("Error"), msg); + mapsWidget->statusBar()->hide(); + mapsWidget->map()->setFocus(); +} + +void MainWindow::showMarkerDialog(Marker *marker) +{ + MarkerDialog md(marker); + if (md.exec() == QDialog::Accepted) { + md.updateMarker(); + mapsWidget->map()->setFocus(); + } +} diff --git a/demos/mapsdemo/mainwindow.h b/demos/mapsdemo/mainwindow.h new file mode 100644 index 00000000..b47f4aaa --- /dev/null +++ b/demos/mapsdemo/mainwindow.h @@ -0,0 +1,98 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the Qt Mobility Components. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef MAINWINDOW_H +#define MAINWINDOW_H + +#include <QMainWindow> +#include <qnetworksession.h> +#include <qnetworkconfigmanager.h> + +#include "qgeoserviceprovider.h" +#include "qgeopositioninfosource.h" +#include "qgeoroutereply.h" + +#include "mapswidget.h" +#include "marker.h" +#include "searchdialog.h" +#include "markerdialog.h" +#include "navigatedialog.h" +#include "navigator.h" + +class MainWindow : public QMainWindow +{ + Q_OBJECT +public: + MainWindow(); + ~MainWindow(); + +public slots: + void initialize(); + +private slots: + void showSearchDialog(); + void showNavigateDialog(); + void showMarkerDialog(Marker *marker); + void goToMyLocation(); + + void updateMyPosition(QGeoPositionInfo info); + void disableTracking(); + + void showErrorMessage(QGeoSearchReply::Error err, QString msg); + void showErrorMessage(QGeoRouteReply::Error err, QString msg); + + void openNetworkSession(); + +private: + QGeoServiceProvider *serviceProvider; + MapsWidget *mapsWidget; + MarkerManager *markerManager; + QGeoPositionInfoSource *positionSource; + Navigator *lastNavigator; + + QNetworkSession *session; + QNetworkConfigurationManager *netConfigManager; + + bool tracking; + bool firstUpdate; +}; + +#endif // MAINWINDOW_H diff --git a/demos/mapsdemo/mapsdemo.pro b/demos/mapsdemo/mapsdemo.pro new file mode 100644 index 00000000..9c2bb26b --- /dev/null +++ b/demos/mapsdemo/mapsdemo.pro @@ -0,0 +1,41 @@ +TEMPLATE = app +TARGET = mapsdemo + +CONFIG += qt warn_on + +QT += network location + + +RESOURCES += mapsdemo.qrc + +symbian: { + TARGET.CAPABILITY = Location \ + NetworkServices \ + ReadUserData \ + WriteUserData +} + +HEADERS += \ + mapswidget.h \ + marker.h \ + mainwindow.h \ + searchdialog.h \ + markerdialog.h \ + navigatedialog.h \ + navigator.h + +SOURCES += \ + mapswidget.cpp \ + main.cpp \ + marker.cpp \ + mainwindow.cpp \ + searchdialog.cpp \ + markerdialog.cpp \ + navigatedialog.cpp \ + navigator.cpp + +#install +target.path = $$[QT_INSTALL_DEMOS]/qtlocation/mapsdemo +sources.files = $$SOURCES $HEADERS $$RESOURCES $$FORMS *.pro +sources.path = $$[QT_INSTALL_DEMOS]/qtlocation/mapsdemo +INSTALLS += target sources diff --git a/demos/mapsdemo/mapsdemo.qrc b/demos/mapsdemo/mapsdemo.qrc new file mode 100644 index 00000000..a46ea7db --- /dev/null +++ b/demos/mapsdemo/mapsdemo.qrc @@ -0,0 +1,12 @@ +<!DOCTYPE RCC> + <RCC version="1.0"> + + <qresource prefix="/"> + <file>icons/mylocation.png</file> + <file>icons/startmarker.png</file> + <file>icons/endmarker.png</file> + <file>icons/pathmarker.png</file> + <file>icons/searchmarker.png</file> + <file>icons/waypointmarker.png</file> + </qresource> + </RCC> diff --git a/demos/mapsdemo/mapswidget.cpp b/demos/mapsdemo/mapswidget.cpp new file mode 100644 index 00000000..5328a570 --- /dev/null +++ b/demos/mapsdemo/mapswidget.cpp @@ -0,0 +1,531 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the Qt Mobility Components. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "mapswidget.h" +#include "marker.h" + +#include <QGraphicsSceneMouseEvent> +#include <QGraphicsSceneWheelEvent> +#include <QPropertyAnimation> +#include <QParallelAnimationGroup> +#include <QTimer> + +#include "qgeocoordinate.h" + +GeoMap::GeoMap(QGeoMappingManager *manager, MapsWidget *mapsWidget) : + QGraphicsGeoMap(manager), + mapsWidget(mapsWidget), + panActive(false), + markerPressed(false), + pressed(0) +{ + this->setFocus(); +} + +GeoMap::~GeoMap() +{ +} + +double GeoMap::centerLatitude() const +{ + return center().latitude(); +} + +double GeoMap::centerLongitude() const +{ + return center().longitude(); +} + +void GeoMap::setCenterLatitude(double lat) +{ + QGeoCoordinate c = center(); + c.setLatitude(lat); + setCenter(c); +} + +void GeoMap::setCenterLongitude(double lon) +{ + QGeoCoordinate c = center(); + c.setLongitude(lon); + setCenter(c); +} + +void GeoMap::mousePressEvent(QGraphicsSceneMouseEvent *event) +{ + panActive = true; + markerPressed = false; + QList<QGeoMapObject*> objects = mapObjectsAtScreenPosition(event->pos()); + if (objects.size() > 0) { + pressed = objects.first(); + markerPressed = true; + } + + this->setFocus(); + event->accept(); +} + +void GeoMap::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) +{ + panActive = false; + + if (markerPressed) { + // check if we're still over the object + QList<QGeoMapObject*> objects = mapObjectsAtScreenPosition(event->pos()); + if (objects.contains(pressed)) { + Marker *m = dynamic_cast<Marker*>(pressed); + if (m) + emit clicked(m); + } + + markerPressed = false; + } + + this->setFocus(); + event->accept(); +} + +void GeoMap::mouseMoveEvent(QGraphicsSceneMouseEvent *event) +{ + if (panActive) { + QPointF delta = event->lastPos() - event->pos(); + pan(delta.x(), delta.y()); + emit panned(); + } + this->setFocus(); + event->accept(); +} + +void GeoMap::wheelEvent(QGraphicsSceneWheelEvent *event) +{ + // pan our current point to the centre, zoom, then pan back + + qreal panx = event->pos().x() - size().width() / 2.0; + qreal pany = event->pos().y() - size().height() / 2.0; + pan(panx, pany); + if (event->delta() > 0) { // zoom in + if (zoomLevel() < maximumZoomLevel()) { + setZoomLevel(zoomLevel() + 1); + } + } else { // zoom out + if (zoomLevel() > minimumZoomLevel()) { + setZoomLevel(zoomLevel() - 1); + } + } + pan(-panx, -pany); + this->setFocus(); + event->accept(); +} + +void GeoMap::keyPressEvent(QKeyEvent *event) +{ + QGeoCoordinate center; + QPropertyAnimation *anim; + const qreal width = size().width(); + const qreal height = size().height(); + + switch (event->key()) { + case Qt::Key_4: + case Qt::Key_Left: + center = screenPositionToCoordinate( + QPointF(width/2 - width/5, height/2)); + anim = new QPropertyAnimation(this, "centerLongitude"); + anim->setEndValue(center.longitude()); + anim->setDuration(200); + anim->start(QAbstractAnimation::DeleteWhenStopped); + break; + case Qt::Key_6: + case Qt::Key_Right: + center = screenPositionToCoordinate( + QPointF(width/2 + width/5, height/2)); + anim = new QPropertyAnimation(this, "centerLongitude"); + anim->setEndValue(center.longitude()); + anim->setDuration(200); + anim->start(QAbstractAnimation::DeleteWhenStopped); + break; + case Qt::Key_2: + case Qt::Key_Up: + center = screenPositionToCoordinate( + QPointF(width/2, height/2 - height/5)); + anim = new QPropertyAnimation(this, "centerLatitude"); + anim->setEndValue(center.latitude()); + anim->setDuration(200); + anim->start(QAbstractAnimation::DeleteWhenStopped); + break; + case Qt::Key_8: + case Qt::Key_Down: + center = screenPositionToCoordinate( + QPointF(width/2, height/2 + height/5)); + anim = new QPropertyAnimation(this, "centerLatitude"); + anim->setEndValue(center.latitude()); + anim->setDuration(200); + anim->start(QAbstractAnimation::DeleteWhenStopped); + break; + case Qt::Key_1: + if (zoomLevel() > minimumZoomLevel()) { + setZoomLevel(zoomLevel() - 1); + } + break; + case Qt::Key_3: + if (zoomLevel() < maximumZoomLevel()) { + setZoomLevel(zoomLevel() + 1); + } + break; + } + this->setFocus(); + event->accept(); +} + + +class ZoomButtonItemPrivate +{ +public: + GeoMap *map; + + QGraphicsSimpleTextItem *plusText; + QGraphicsSimpleTextItem *minusText; + + bool pressedOverTopHalf; + bool pressedOverBottomHalf; +}; + +ZoomButtonItem::ZoomButtonItem(GeoMap *map) : + d(new ZoomButtonItemPrivate) +{ + d->map = map; + d->pressedOverBottomHalf = false; + d->pressedOverTopHalf = false; + + setPen(QPen(QBrush(), 0)); + setBrush(QBrush(QColor(0,0,0,150))); + + d->plusText = new QGraphicsSimpleTextItem(this); + d->plusText->setText("+"); + d->plusText->setBrush(QBrush(Qt::white)); + + d->minusText = new QGraphicsSimpleTextItem(this); + d->minusText->setText("-"); + d->minusText->setBrush(QBrush(Qt::white)); +} + +void ZoomButtonItem::setRect(qreal x, qreal y, qreal w, qreal h) +{ + QGraphicsRectItem::setRect(x, y, w, h); + + QFont f; + f.setFixedPitch(true); + f.setPixelSize(h/5.0); + d->plusText->setFont(f); + d->minusText->setFont(f); + + QRectF plusBound = d->plusText->boundingRect(); + QPointF plusCenter(x+w/2.0, y+h/4.0); + QPointF plusDelta = plusCenter - plusBound.center(); + d->plusText->setPos(plusDelta); + + QRectF minusBound = d->minusText->boundingRect(); + QPointF minusCenter(x+w/2.0, y+3.0*h/4.0); + QPointF minusDelta = minusCenter - minusBound.center(); + d->minusText->setPos(minusDelta); +} + +void ZoomButtonItem::mousePressEvent(QGraphicsSceneMouseEvent *event) +{ + const QPointF pos = event->pos(); + if (!d->pressedOverTopHalf && !d->pressedOverBottomHalf) { + if (isTopHalf(pos)) { + d->pressedOverTopHalf = true; + } else if (isBottomHalf(pos)) { + d->pressedOverBottomHalf = true; + } + } + d->map->setFocus(); + event->accept(); +} + +bool ZoomButtonItem::isTopHalf(const QPointF &point) +{ + return QRectF(rect().x(), rect().y(), + rect().width(), rect().height()/2).contains(point); +} + +bool ZoomButtonItem::isBottomHalf(const QPointF &point) +{ + return QRectF(rect().x(), rect().y() + rect().height()/2, + rect().width(), rect().height()/2).contains(point); +} + +void ZoomButtonItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) +{ + const QPointF pos = event->pos(); + if (isTopHalf(pos) && d->pressedOverTopHalf) { + d->map->setZoomLevel(d->map->zoomLevel() + 1.0); + } else if (isBottomHalf(pos) && d->pressedOverBottomHalf) { + d->map->setZoomLevel(d->map->zoomLevel() - 1.0); + } + d->pressedOverBottomHalf = false; + d->pressedOverTopHalf = false; + d->map->setFocus(); + event->accept(); +} + +void ZoomButtonItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event) +{ + event->accept(); +} + + +class StatusBarItemPrivate +{ +public: + int offset; + QGraphicsSimpleTextItem *textItem; +}; + +StatusBarItem::StatusBarItem() : + d(new StatusBarItemPrivate) +{ + d->offset = 0; + + setPen(QPen(QBrush(), 0)); + setBrush(QBrush(QColor(0,0,0,120))); + + d->textItem = new QGraphicsSimpleTextItem(this); + d->textItem->setBrush(QBrush(Qt::white)); + + setText(""); +} + +StatusBarItem::~StatusBarItem() +{ +} + +void StatusBarItem::setText(QString text) +{ + d->textItem->setText(text); + QRectF rect = d->textItem->boundingRect(); + QPointF delta = this->rect().center() - rect.center(); + d->textItem->setPos(delta.x(), delta.y()); +} + +int StatusBarItem::offset() const +{ + return d->offset; +} + +void StatusBarItem::setRect(qreal x, qreal y, qreal w, qreal h) +{ + QGraphicsRectItem::setRect(x, y + d->offset, w, h); + setText(d->textItem->text()); +} + +void StatusBarItem::setOffset(int offset) +{ + this->setY(this->y() - d->offset + offset); + d->offset = offset; +} + +void StatusBarItem::showText(QString text, quint32 timeout) +{ + setText(text); + show(); + QTimer::singleShot(timeout, this, SLOT(hide())); +} + +void StatusBarItem::show() +{ + QPropertyAnimation *anim = new QPropertyAnimation(this, "offset"); + anim->setStartValue(0); + anim->setEndValue(-1 * rect().height()); + anim->setDuration(500); + anim->start(QAbstractAnimation::DeleteWhenStopped); +} + +void StatusBarItem::hide() +{ + QPropertyAnimation *anim = new QPropertyAnimation(this, "offset"); + anim->setStartValue(d->offset); + anim->setEndValue(0); + anim->setDuration(500); + anim->start(QAbstractAnimation::DeleteWhenStopped); +} + + +FixedGraphicsView::FixedGraphicsView(QWidget *parent) : + QGraphicsView(parent) +{ +} + +void FixedGraphicsView::scrollContentsBy(int dx, int dy) +{ + Q_UNUSED(dx) + Q_UNUSED(dy) +} + + +class MapsWidgetPrivate +{ +public: + GeoMap *map; + QGraphicsView *view; + MarkerManager *markerManager; + StatusBarItem *statusBarItem; + ZoomButtonItem *zoomButtonItem; +}; + +MapsWidget::MapsWidget(QWidget *parent) : + QWidget(parent), + d(new MapsWidgetPrivate) +{ + d->map = 0; + d->view = 0; + d->markerManager = 0; +} + +MapsWidget::~MapsWidget() +{ +} + +void MapsWidget::initialize(QGeoMappingManager *manager) +{ + d->map = new GeoMap(manager, this); + if (d->markerManager) + d->markerManager->setMap(d->map); + + connect(d->map, SIGNAL(clicked(Marker*)), + this, SIGNAL(markerClicked(Marker*))); + connect(d->map, SIGNAL(panned()), + this, SIGNAL(mapPanned())); + + QGraphicsScene *sc = new QGraphicsScene; + sc->addItem(d->map); + + d->map->setPos(0, 0); + d->map->resize(this->size()); + d->view = new FixedGraphicsView(this); + d->view->setVisible(true); + d->view->setInteractive(true); + d->view->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); + d->view->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); + d->view->setScene(sc); + + d->statusBarItem = new StatusBarItem; + sc->addItem(d->statusBarItem); + + d->zoomButtonItem = new ZoomButtonItem(d->map); + sc->addItem(d->zoomButtonItem); + + d->view->resize(this->size()); + d->view->centerOn(d->map); + resizeEvent(0); + d->map->setCenter(QGeoCoordinate(-27.5796, 153.1)); + d->map->setZoomLevel(15); +} + +void MapsWidget::setMyLocation(QGeoCoordinate location, bool center) +{ + if (d->markerManager) + d->markerManager->setMyLocation(location); + if (d->map && center) + d->map->setCenter(location); +} + +QGraphicsGeoMap *MapsWidget::map() const +{ + return d->map; +} + +StatusBarItem *MapsWidget::statusBar() const +{ + return d->statusBarItem; +} + +void MapsWidget::resizeEvent(QResizeEvent *event) +{ + Q_UNUSED(event) + + if (d->view && d->map) { + d->view->resize(size()); + d->map->resize(width()-2, height()-2); + d->view->centerOn(d->map); + d->statusBarItem->setRect(0, height()-2, width()-2, 20); + d->zoomButtonItem->setRect((width()-2)-(width()-2)/10.0, + (height()-2)/2.0 - (height()-2)/6.0, + (width()-2)/10.0, + (height()-2)/3.0); + } +} + +void MapsWidget::animatedPanTo(QGeoCoordinate center) +{ + if (!d->map) + return; + + QPropertyAnimation *latAnim = new QPropertyAnimation(d->map, "centerLatitude"); + latAnim->setEndValue(center.latitude()); + latAnim->setDuration(200); + QPropertyAnimation *lonAnim = new QPropertyAnimation(d->map, "centerLongitude"); + lonAnim->setEndValue(center.longitude()); + lonAnim->setDuration(200); + + QParallelAnimationGroup *group = new QParallelAnimationGroup; + group->addAnimation(latAnim); + group->addAnimation(lonAnim); + group->start(QAbstractAnimation::DeleteWhenStopped); +} + +void MapsWidget::showEvent(QShowEvent *event) +{ + Q_UNUSED(event) + resizeEvent(0); +} + +MarkerManager *MapsWidget::markerManager() const +{ + return d->markerManager; +} + +void MapsWidget::setMarkerManager(MarkerManager *markerManager) +{ + d->markerManager = markerManager; + if (d->map) + d->markerManager->setMap(d->map); + d->markerManager->setStatusBar(d->statusBarItem); +} diff --git a/demos/mapsdemo/mapswidget.h b/demos/mapsdemo/mapswidget.h new file mode 100644 index 00000000..289555db --- /dev/null +++ b/demos/mapsdemo/mapswidget.h @@ -0,0 +1,191 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the Qt Mobility Components. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef MAPSWIDGET_H +#define MAPSWIDGET_H + +#include <QGraphicsView> +#include <QGraphicsScene> +#include <QWidget> +#include <QGraphicsRectItem> +#include <QGraphicsSimpleTextItem> + +#include "qgraphicsgeomap.h" +#include "qgeomappingmanager.h" +#include "qgeocoordinate.h" + +class MapsWidget; +class MarkerManager; +class Marker; +class StatusBarItem; +class ZoomButtonItem; + +// The graphics item that actually contains the map +class GeoMap : public QGraphicsGeoMap +{ + Q_OBJECT + + Q_PROPERTY(double centerLatitude READ centerLatitude WRITE setCenterLatitude) + Q_PROPERTY(double centerLongitude READ centerLongitude WRITE setCenterLongitude) + +public: + explicit GeoMap(QGeoMappingManager *manager, MapsWidget *mapsWidget); + ~GeoMap(); + + double centerLatitude() const; + void setCenterLatitude(double lat); + double centerLongitude() const; + void setCenterLongitude(double lon); + +private: + MapsWidget *mapsWidget; + + bool panActive; + bool markerPressed; + QGeoMapObject *pressed; + + void mousePressEvent(QGraphicsSceneMouseEvent *event); + void mouseReleaseEvent(QGraphicsSceneMouseEvent *event); + void mouseMoveEvent(QGraphicsSceneMouseEvent *event); + void wheelEvent(QGraphicsSceneWheelEvent *event); + void keyPressEvent(QKeyEvent *event); + +signals: + void clicked(Marker *marker); + void panned(); +}; + +class FixedGraphicsView : public QGraphicsView +{ + Q_OBJECT + +public: + FixedGraphicsView(QWidget *parent); + +protected: + void scrollContentsBy(int dx, int dy); +}; + +// A widget to hold the view and scene for a GeoMap, as well +// as control widgets +class MapsWidgetPrivate; +class MapsWidget : public QWidget +{ + Q_OBJECT + +public: + explicit MapsWidget(QWidget *parent = 0); + ~MapsWidget(); + + void setMarkerManager(MarkerManager *markerManager); + MarkerManager *markerManager() const; + + QGraphicsGeoMap *map() const; + StatusBarItem *statusBar() const; + + void animatedPanTo(QGeoCoordinate center); + void setMyLocation(QGeoCoordinate location, bool center=true); + +public slots: + void initialize(QGeoMappingManager *manager); + +signals: + void markerClicked(Marker *marker); + void mapPanned(); + +private: + MapsWidgetPrivate *d; + + void resizeEvent(QResizeEvent *event); + void showEvent(QShowEvent *event); +}; + +// An animated status bar item that appears at the bottom +// of the map +class StatusBarItemPrivate; +class StatusBarItem : public QObject, public QGraphicsRectItem +{ + Q_OBJECT + Q_PROPERTY(int offset READ offset WRITE setOffset) + +public: + explicit StatusBarItem(); + ~StatusBarItem(); + + int offset() const; + void setRect(qreal x, qreal y, qreal w, qreal h); + +public slots: + void setText(QString text); + + void showText(QString text, quint32 timeout=3000); + void show(); + void hide(); + + void setOffset(int offset); + +private: + StatusBarItemPrivate *d; +}; + +// Zoom in / zoom out buttons, touch-friendly, appearing on the +// side of the map +class ZoomButtonItemPrivate; +class ZoomButtonItem : public QGraphicsRectItem +{ +public: + explicit ZoomButtonItem(GeoMap *map); + + void setRect(qreal x, qreal y, qreal w, qreal h); + +private: + ZoomButtonItemPrivate *d; + + bool isTopHalf(const QPointF &point); + bool isBottomHalf(const QPointF &point); + +protected: + void mousePressEvent(QGraphicsSceneMouseEvent *event); + void mouseReleaseEvent(QGraphicsSceneMouseEvent *event); + void mouseMoveEvent(QGraphicsSceneMouseEvent *event); +}; + +#endif // MAPSWIDGET_H diff --git a/demos/mapsdemo/marker.cpp b/demos/mapsdemo/marker.cpp new file mode 100644 index 00000000..fee02ada --- /dev/null +++ b/demos/mapsdemo/marker.cpp @@ -0,0 +1,332 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the Qt Mobility Components. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "marker.h" +#include "mapswidget.h" + +#include <QPixmap> + +#include "qlandmark.h" +#include "qgeoboundingcircle.h" + +class MarkerPrivate +{ +public: + Marker::MarkerType type; + QString name; + bool moveable; + QGeoAddress address; +}; + +Marker::Marker(MarkerType type) : + QGeoMapPixmapObject(), + d(new MarkerPrivate) +{ + setMarkerType(type); +} + +void Marker::setMarkerType(MarkerType type) +{ + QString filename; + QPoint offset; + int scale; + + d->type = type; + + switch (d->type) { + case MyLocationMarker: + filename = ":/icons/mylocation.png"; + break; + case SearchMarker: + filename = ":/icons/searchmarker.png"; + break; + case WaypointMarker: + filename = ":/icons/waypointmarker.png"; + break; + case StartMarker: + filename = ":/icons/startmarker.png"; + break; + case EndMarker: + filename = ":/icons/endmarker.png"; + break; + case PathMarker: + filename = ":/icons/pathmarker.png"; + break; + } + + if (d->type == MyLocationMarker) { + offset = QPoint(-13,-13); + scale = 25; + } else { + offset = QPoint(-15, -36); + scale = 30; + } + + setOffset(offset); + setPixmap(QPixmap(filename).scaledToWidth(scale, Qt::SmoothTransformation)); +} + +void Marker::setAddress(QGeoAddress addr) +{ + if (d->address != addr) { + d->address = addr; + emit addressChanged(d->address); + } +} + +Marker::MarkerType Marker::markerType() const +{ + return d->type; +} + +QString Marker::name() const +{ + return d->name; +} + +QGeoAddress Marker::address() const +{ + return d->address; +} + +bool Marker::moveable() const +{ + return d->moveable; +} + +void Marker::setName(QString name) +{ + if (d->name != name) { + d->name = name; + emit nameChanged(d->name); + } +} + +void Marker::setMoveable(bool moveable) +{ + if (d->moveable != moveable) { + d->moveable = moveable; + emit moveableChanged(d->moveable); + } +} + + +class MarkerManagerPrivate +{ +public: + Marker *myLocation; + QList<Marker*> searchMarkers; + + // a reverse geocode request is currently running + bool revGeocodeRunning; + // a request is currently running, and my location has changed + // since it started (ie, the request is stale) + bool myLocHasMoved; + + QGraphicsGeoMap *map; + StatusBarItem *status; + QGeoSearchManager *searchManager; + + QSet<QGeoSearchReply*> forwardReplies; + QSet<QGeoSearchReply*> reverseReplies; +}; + +MarkerManager::MarkerManager(QGeoSearchManager *searchManager, QObject *parent) : + QObject(parent), + d(new MarkerManagerPrivate) +{ + d->searchManager = searchManager; + d->status = 0; + d->revGeocodeRunning = false; + d->myLocHasMoved = false; + + d->myLocation = new Marker(Marker::MyLocationMarker); + d->myLocation->setName("Me"); + + // hook the coordinateChanged() signal for reverse geocoding + connect(d->myLocation, SIGNAL(coordinateChanged(QGeoCoordinate)), + this, SLOT(myLocationChanged(QGeoCoordinate))); + + connect(d->searchManager, SIGNAL(finished(QGeoSearchReply*)), + this, SLOT(replyFinished(QGeoSearchReply*))); + connect(d->searchManager, SIGNAL(finished(QGeoSearchReply*)), + this, SLOT(reverseReplyFinished(QGeoSearchReply*))); +} + +MarkerManager::~MarkerManager() +{ + d->map->removeMapObject(d->myLocation); + delete d->myLocation; + removeSearchMarkers(); +} + +void MarkerManager::setStatusBar(StatusBarItem *bar) +{ + d->status = bar; +} + +void MarkerManager::setMap(QGraphicsGeoMap *map) +{ + d->map = map; + map->addMapObject(d->myLocation); +} + +void MarkerManager::setMyLocation(QGeoCoordinate coord) +{ + d->myLocation->setCoordinate(coord); +} + +void MarkerManager::search(QString query, qreal radius) +{ + QGeoSearchReply *reply; + if (radius > 0) { + QGeoBoundingCircle *boundingCircle = new QGeoBoundingCircle( + d->myLocation->coordinate(), radius); + reply = d->searchManager->search(query, + QGeoSearchManager::SearchAll, + -1, 0, + boundingCircle); + } else { + reply = d->searchManager->search(query); + } + + d->forwardReplies.insert(reply); + + if (d->status) { + d->status->setText("Searching..."); + d->status->show(); + } + + if (reply->isFinished()) { + replyFinished(reply); + } else { + connect(reply, SIGNAL(error(QGeoSearchReply::Error,QString)), + this, SIGNAL(searchError(QGeoSearchReply::Error,QString))); + } +} + +void MarkerManager::removeSearchMarkers() +{ + foreach (Marker *m, d->searchMarkers) { + d->map->removeMapObject(m); + delete m; + } +} + +QGeoCoordinate MarkerManager::myLocation() const +{ + return d->myLocation->coordinate(); +} + +void MarkerManager::myLocationChanged(QGeoCoordinate location) +{ + if (d->revGeocodeRunning) { + d->myLocHasMoved = true; + } else { + QGeoSearchReply *reply = d->searchManager->reverseGeocode(location); + d->reverseReplies.insert(reply); + d->myLocHasMoved = false; + + if (reply->isFinished()) { + d->revGeocodeRunning = false; + reverseReplyFinished(reply); + } else { + d->revGeocodeRunning = true; + } + } +} + +void MarkerManager::reverseReplyFinished(QGeoSearchReply *reply) +{ + if (!d->reverseReplies.contains(reply)) + return; + + if (reply->places().size() > 0) { + QGeoPlace place = reply->places().first(); + d->myLocation->setAddress(place.address()); + } + + d->revGeocodeRunning = false; + if (d->myLocHasMoved) + myLocationChanged(d->myLocation->coordinate()); + + d->reverseReplies.remove(reply); + reply->deleteLater(); +} + +void MarkerManager::replyFinished(QGeoSearchReply *reply) +{ + if (!d->forwardReplies.contains(reply)) + return; + + // generate the markers and add them to the map + foreach (QGeoPlace place, reply->places()) { + Marker *m = new Marker(Marker::SearchMarker); + m->setCoordinate(place.coordinate()); + + if (place.isLandmark()) { + QLandmark lm(place); + m->setName(lm.name()); + } else { + m->setName(QString("%1, %2").arg(place.address().street()) + .arg(place.address().city())); + } + m->setAddress(place.address()); + m->setMoveable(false); + + d->searchMarkers.append(m); + + if (d->map) { + d->map->addMapObject(m); + // also zoom out until marker is visible + while (!d->map->viewport().contains(place.coordinate())) + d->map->setZoomLevel(d->map->zoomLevel()-1); + } + } + + d->forwardReplies.remove(reply); + reply->deleteLater(); + + emit searchFinished(); + + if (d->status) + d->status->hide(); +} diff --git a/demos/mapsdemo/marker.h b/demos/mapsdemo/marker.h new file mode 100644 index 00000000..f90d2fa8 --- /dev/null +++ b/demos/mapsdemo/marker.h @@ -0,0 +1,130 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the Qt Mobility Components. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef MARKER_H +#define MARKER_H + +#include <QSignalMapper> + +#include "qgeomappixmapobject.h" +#include "qgeosearchmanager.h" +#include "qgeocoordinate.h" +#include "qgraphicsgeomap.h" +#include "qgeoaddress.h" +#include "qgeosearchreply.h" + + +class StatusBarItem; + +class MarkerPrivate; +class Marker : public QGeoMapPixmapObject +{ + Q_OBJECT + + Q_PROPERTY(MarkerType markerType READ markerType WRITE setMarkerType NOTIFY markerTypeChanged) + Q_PROPERTY(QString name READ name WRITE setName NOTIFY nameChanged) + Q_PROPERTY(QGeoAddress address READ address WRITE setAddress NOTIFY addressChanged) + Q_PROPERTY(bool moveable READ moveable WRITE setMoveable NOTIFY moveableChanged) +public: + enum MarkerType { + MyLocationMarker, + SearchMarker, + WaypointMarker, + StartMarker, + EndMarker, + PathMarker + }; + + explicit Marker(MarkerType type); + + MarkerType markerType() const; + void setMarkerType(MarkerType type); + + QString name() const; + QGeoAddress address() const; + bool moveable() const; + +public slots: + void setName(QString name); + void setAddress(QGeoAddress addr); + void setMoveable(bool moveable); + +signals: + void markerTypeChanged(const MarkerType &type); + void nameChanged(const QString &name); + void addressChanged(const QGeoAddress &address); + void moveableChanged(const bool &moveable); + +private: + MarkerPrivate *d; +}; + +class MarkerManagerPrivate; +class MarkerManager : public QObject +{ + Q_OBJECT +public: + explicit MarkerManager(QGeoSearchManager *sm, QObject *parent=0); + ~MarkerManager(); + + QGeoCoordinate myLocation() const; + +public slots: + void setMap(QGraphicsGeoMap *map); + void setStatusBar(StatusBarItem *bar); + void setMyLocation(QGeoCoordinate coord); + void search(QString query, qreal radius=-1); + void removeSearchMarkers(); + +signals: + void searchError(QGeoSearchReply::Error error, QString errorString); + void searchFinished(); + +private: + MarkerManagerPrivate *d; + +private slots: + void replyFinished(QGeoSearchReply *reply); + void myLocationChanged(QGeoCoordinate location); + void reverseReplyFinished(QGeoSearchReply *reply); +}; + +#endif // MARKER_H diff --git a/demos/mapsdemo/markerdialog.cpp b/demos/mapsdemo/markerdialog.cpp new file mode 100644 index 00000000..4a86e373 --- /dev/null +++ b/demos/mapsdemo/markerdialog.cpp @@ -0,0 +1,117 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the Qt Mobility Components. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "markerdialog.h" + +#include <QFormLayout> +#include <QLabel> +#include <QDialogButtonBox> +#include <QVBoxLayout> + +MarkerDialog::MarkerDialog(Marker *marker) : + marker(marker) +{ + QVBoxLayout *vbox = new QVBoxLayout; + + QFormLayout *fm = new QFormLayout; + + nameEdit = new QLineEdit; + nameEdit->setText(marker->name()); + connect(marker, SIGNAL(nameChanged(QString)), + nameEdit, SLOT(setText(QString))); + fm->addRow("Name", nameEdit); + + addressLabel = new QLabel; + setAddressLabel(marker->address()); + connect(marker, SIGNAL(addressChanged(QGeoAddress)), + this, SLOT(setAddressLabel(QGeoAddress))); + fm->addRow("Address", addressLabel); + + lonSpin = new QDoubleSpinBox; + lonSpin->setMinimum(-180.0); + lonSpin->setMaximum(180.0); + lonSpin->setDecimals(7); + lonSpin->setValue(marker->coordinate().longitude()); + fm->addRow("Longitude", lonSpin); + + latSpin = new QDoubleSpinBox; + latSpin->setMinimum(-90.0); + latSpin->setMaximum(90.0); + latSpin->setDecimals(7); + latSpin->setValue(marker->coordinate().latitude()); + fm->addRow("Latitude", latSpin); + + QDialogButtonBox *bb = new QDialogButtonBox(QDialogButtonBox::Save | + QDialogButtonBox::Close, + Qt::Horizontal); + connect(bb, SIGNAL(accepted()), this, SLOT(accept())); + connect(bb, SIGNAL(rejected()), this, SLOT(reject())); + + vbox->addLayout(fm); + vbox->addWidget(bb); + setLayout(vbox); + setWindowTitle("Edit marker"); +} + +void MarkerDialog::updateMarker() +{ + marker->setName(nameEdit->text()); + QGeoCoordinate c(latSpin->value(), lonSpin->value()); + marker->setCoordinate(c); +} + +void MarkerDialog::setAddressLabel(QGeoAddress address) +{ + QString addressFormat = tr("$street\n$city, $state $postcode\n$country"); + addressFormat.replace("$street", address.street()); + addressFormat.replace("$city", address.city()); + addressFormat.replace("$county", address.county()); + addressFormat.replace("$state", address.state()); + addressFormat.replace("$postcode", address.postcode()); + addressFormat.replace("$district", address.district()); + addressFormat.replace("$country", address.country()); + + addressLabel->setText(addressFormat); +} + +MarkerDialog::~MarkerDialog() +{ +} diff --git a/demos/mapsdemo/markerdialog.h b/demos/mapsdemo/markerdialog.h new file mode 100644 index 00000000..7882c181 --- /dev/null +++ b/demos/mapsdemo/markerdialog.h @@ -0,0 +1,76 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the Qt Mobility Components. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef MARKERDIALOG_H +#define MARKERDIALOG_H + +#include <QDialog> +#include <QLineEdit> +#include <QLabel> +#include <QDoubleSpinBox> + +#include "qgeoaddress.h" + +#include "marker.h" + +class MarkerDialog : public QDialog +{ + Q_OBJECT +public: + MarkerDialog(Marker *marker); + ~MarkerDialog(); + +public slots: + void updateMarker(); + +private slots: + void setAddressLabel(QGeoAddress address); + +private: + QLineEdit *nameEdit; + QLabel *addressLabel; + QDoubleSpinBox *lonSpin; + QDoubleSpinBox *latSpin; + + Marker *marker; +}; + +#endif // MARKERDIALOG_H diff --git a/demos/mapsdemo/navigatedialog.cpp b/demos/mapsdemo/navigatedialog.cpp new file mode 100644 index 00000000..2521a091 --- /dev/null +++ b/demos/mapsdemo/navigatedialog.cpp @@ -0,0 +1,95 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the Qt Mobility Components. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "navigatedialog.h" + +#include <QFormLayout> +#include <QDialogButtonBox> +#include <QVBoxLayout> +#include <QMetaObject> + +Q_DECLARE_METATYPE(QGeoRouteRequest::TravelMode) + +NavigateDialog::NavigateDialog(QWidget *parent) : + QDialog(parent) +{ + QFormLayout *formLayout = new QFormLayout; + QVBoxLayout *vbox = new QVBoxLayout; + + addressEdit = new QLineEdit; + formLayout->addRow("Address", addressEdit); + + modeCombo = new QComboBox; + modeCombo->addItem("Car", qVariantFromValue(QGeoRouteRequest::CarTravel)); + modeCombo->addItem("Pedestrian", qVariantFromValue(QGeoRouteRequest::PedestrianTravel)); + modeCombo->addItem("Bicycle", qVariantFromValue(QGeoRouteRequest::BicycleTravel)); + modeCombo->addItem("Public Transit", qVariantFromValue(QGeoRouteRequest::PublicTransitTravel)); + formLayout->addRow("Mode", modeCombo); + + QDialogButtonBox *bb = new QDialogButtonBox; + bb->addButton(QDialogButtonBox::Ok); + bb->addButton(QDialogButtonBox::Cancel); + connect(bb, SIGNAL(accepted()), this, SLOT(accept())); + connect(bb, SIGNAL(rejected()), this, SLOT(reject())); + + vbox->addLayout(formLayout); + vbox->addWidget(bb); + + setLayout(vbox); + setWindowTitle("Directions to address"); +} + +NavigateDialog::~NavigateDialog() +{ +} + +QString NavigateDialog::destinationAddress() const +{ + return addressEdit->text(); +} + +QGeoRouteRequest::TravelModes NavigateDialog::travelMode() const +{ + QVariant v = modeCombo->itemData(modeCombo->currentIndex()); + QGeoRouteRequest::TravelModes mode; + mode |= qVariantValue<QGeoRouteRequest::TravelMode>(v); + return mode; +} diff --git a/demos/mapsdemo/navigatedialog.h b/demos/mapsdemo/navigatedialog.h new file mode 100644 index 00000000..5e6b343a --- /dev/null +++ b/demos/mapsdemo/navigatedialog.h @@ -0,0 +1,68 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the Qt Mobility Components. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef NAVIGATEDIALOG_H +#define NAVIGATEDIALOG_H + +#include <QDialog> +#include <QLineEdit> +#include <QComboBox> + +#include "qgeorouterequest.h" +#include "qgeocoordinate.h" + + +class NavigateDialog : public QDialog +{ + Q_OBJECT +public: + NavigateDialog(QWidget *parent=0); + ~NavigateDialog(); + + QString destinationAddress() const; + QGeoRouteRequest::TravelModes travelMode() const; + +private: + QLineEdit *addressEdit; + QComboBox *modeCombo; +}; + +#endif // NAVIGATEDIALOG_H diff --git a/demos/mapsdemo/navigator.cpp b/demos/mapsdemo/navigator.cpp new file mode 100644 index 00000000..11df70e5 --- /dev/null +++ b/demos/mapsdemo/navigator.cpp @@ -0,0 +1,155 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the Qt Mobility Components. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "navigator.h" +#include "mapswidget.h" +#include "marker.h" + +Navigator::Navigator(QGeoRoutingManager *routingManager, + QGeoSearchManager *searchManager, + MapsWidget *mapsWidget, const QString &address, + const QGeoRouteRequest &requestTemplate) : + address(address), + request(requestTemplate), + routingManager(routingManager), + searchManager(searchManager), + mapsWidget(mapsWidget), + routeObject(0), + endMarker(0), + startMarker(0) +{ +} + +Navigator::~Navigator() +{ + if (routeObject) { + mapsWidget->map()->removeMapObject(routeObject); + delete routeObject; + } + if (endMarker) { + mapsWidget->map()->removeMapObject(endMarker); + delete endMarker; + } + if (startMarker) { + mapsWidget->map()->removeMapObject(startMarker); + delete startMarker; + } +} + +void Navigator::start() +{ + QList<QGeoCoordinate> waypoints = request.waypoints(); + waypoints.append(mapsWidget->markerManager()->myLocation()); + request.setWaypoints(waypoints); + + startMarker = new Marker(Marker::StartMarker); + startMarker->setCoordinate(mapsWidget->markerManager()->myLocation()); + startMarker->setName("Start point"); + mapsWidget->map()->addMapObject(startMarker); + + addressReply = searchManager->search(address); + if (addressReply->isFinished()) { + on_addressSearchFinished(); + } else { + connect(addressReply, SIGNAL(error(QGeoSearchReply::Error,QString)), + this, SIGNAL(searchError(QGeoSearchReply::Error,QString))); + connect(addressReply, SIGNAL(finished()), + this, SLOT(on_addressSearchFinished())); + } +} + +void Navigator::on_addressSearchFinished() +{ + if (addressReply->places().size() <= 0) { + addressReply->deleteLater(); + return; + } + + QGeoPlace place = addressReply->places().at(0); + + QList<QGeoCoordinate> waypoints = request.waypoints(); + waypoints.append(place.coordinate()); + request.setWaypoints(waypoints); + + routeReply = routingManager->calculateRoute(request); + if (routeReply->isFinished()) { + on_routingFinished(); + } else { + connect(routeReply, SIGNAL(error(QGeoRouteReply::Error,QString)), + this, SIGNAL(routingError(QGeoRouteReply::Error,QString))); + connect(routeReply, SIGNAL(finished()), + this, SLOT(on_routingFinished())); + } + + endMarker = new Marker(Marker::EndMarker); + endMarker->setCoordinate(place.coordinate()); + endMarker->setAddress(place.address()); + endMarker->setName("Destination"); + mapsWidget->map()->addMapObject(endMarker); + + addressReply->deleteLater(); +} + +QGeoRoute Navigator::route() const +{ + return firstRoute; +} + +void Navigator::on_routingFinished() +{ + if (routeReply->routes().size() <= 0) { + emit routingError(QGeoRouteReply::NoError, "No valid routes returned"); + routeReply->deleteLater(); + return; + } + + QGeoRoute route = routeReply->routes().at(0); + firstRoute = route; + + routeObject = new QGeoMapRouteObject; + routeObject->setRoute(route); + routeObject->setPen(QPen(Qt::blue, 2.0)); + + mapsWidget->map()->addMapObject(routeObject); + + emit finished(); + routeReply->deleteLater(); +} diff --git a/demos/mapsdemo/navigator.h b/demos/mapsdemo/navigator.h new file mode 100644 index 00000000..47e04d1e --- /dev/null +++ b/demos/mapsdemo/navigator.h @@ -0,0 +1,96 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the Qt Mobility Components. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef NAVIGATOR_H +#define NAVIGATOR_H + +#include <qgeoroutingmanager.h> +#include <qgeosearchmanager.h> + +#include <qgeoroutereply.h> +#include <qgeoroutereply.h> +#include <qgeosearchreply.h> +#include <qgeomaprouteobject.h> + +#include "marker.h" + +class MapsWidget; + +class Navigator : public QObject +{ + Q_OBJECT +public: + Navigator(QGeoRoutingManager *routingManager, QGeoSearchManager *searchManager, + MapsWidget *mapsWidget, const QString &address, + const QGeoRouteRequest &requestTemplate); + ~Navigator(); + + void start(); + QGeoRoute route() const; + +signals: + void finished(); + void searchError(QGeoSearchReply::Error error, QString errorString); + void routingError(QGeoRouteReply::Error error, QString errorString); + +private slots: + void on_addressSearchFinished(); + void on_routingFinished(); + +private: + QString address; + QGeoRouteRequest request; + + QGeoRoutingManager *routingManager; + QGeoSearchManager *searchManager; + MapsWidget *mapsWidget; + + QGeoSearchReply *addressReply; + QGeoRouteReply *routeReply; + + QGeoMapRouteObject *routeObject; + Marker *endMarker; + Marker *startMarker; + + QGeoRoute firstRoute; +}; + +#endif // NAVIGATOR_H diff --git a/demos/mapsdemo/searchdialog.cpp b/demos/mapsdemo/searchdialog.cpp new file mode 100644 index 00000000..2d58d666 --- /dev/null +++ b/demos/mapsdemo/searchdialog.cpp @@ -0,0 +1,90 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the Qt Mobility Components. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "searchdialog.h" + +#include <QFormLayout> +#include <QDialogButtonBox> +#include <QVBoxLayout> + +SearchDialog::SearchDialog(QWidget *parent) : + QDialog(parent) +{ + QFormLayout *formLayout = new QFormLayout; + QVBoxLayout *vbox = new QVBoxLayout; + + searchTermEdit = new QLineEdit; + formLayout->addRow("Search for", searchTermEdit); + + whereCombo = new QComboBox; + whereCombo->addItem(tr("Nearby (<10km)"), 10000); + whereCombo->addItem(tr("Within 30 mins drive of me (<25km)"), 25000); + whereCombo->addItem(tr("Within 100km of me"), 100000); + whereCombo->addItem(tr("Anywhere in the world"), -1); + whereCombo->setCurrentIndex(1); + formLayout->addRow(tr("Where"), whereCombo); + + QDialogButtonBox *bb = new QDialogButtonBox(QDialogButtonBox::Ok | + QDialogButtonBox::Cancel, + Qt::Horizontal); + connect(bb, SIGNAL(accepted()), this, SLOT(accept())); + connect(bb, SIGNAL(rejected()), this, SLOT(reject())); + + vbox->addLayout(formLayout); + vbox->addWidget(bb); + setLayout(vbox); + setWindowTitle("Search for location"); +} + +qreal SearchDialog::radius() const +{ + const int i = whereCombo->currentIndex(); + return whereCombo->itemData(i).toReal(); +} + +SearchDialog::~SearchDialog() +{ +} + +QString SearchDialog::searchTerms() const +{ + return searchTermEdit->text(); +} diff --git a/demos/mapsdemo/searchdialog.h b/demos/mapsdemo/searchdialog.h new file mode 100644 index 00000000..9d2f214d --- /dev/null +++ b/demos/mapsdemo/searchdialog.h @@ -0,0 +1,64 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the Qt Mobility Components. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef SEARCHDIALOG_H +#define SEARCHDIALOG_H + +#include <QDialog> +#include <QLineEdit> +#include <QComboBox> + +class SearchDialog : public QDialog +{ + Q_OBJECT +public: + SearchDialog(QWidget *parent=0); + ~SearchDialog(); + + QString searchTerms() const; + qreal radius() const; + +private: + QLineEdit *searchTermEdit; + QComboBox *whereCombo; +}; + +#endif // SEARCHDIALOG_H diff --git a/examples/declarative/declarative.pro b/examples/declarative/declarative.pro new file mode 100644 index 00000000..a797e425 --- /dev/null +++ b/examples/declarative/declarative.pro @@ -0,0 +1,4 @@ +TEMPLATE = subdirs +SUBDIRS += flickr \ + landmarkmap \ + mapviewer diff --git a/examples/declarative/flickr/flickr-90.qml b/examples/declarative/flickr/flickr-90.qml new file mode 100755 index 00000000..23fb2fb5 --- /dev/null +++ b/examples/declarative/flickr/flickr-90.qml @@ -0,0 +1,51 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Mobility Components. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import Qt 4.7 + +Item { + width: 480; height: 320 + + Loader { + y: 320; rotation: -90 + transformOrigin: Item.TopLeft + source: "flickr.qml" + } +} diff --git a/examples/declarative/flickr/flickr.pro b/examples/declarative/flickr/flickr.pro new file mode 100644 index 00000000..adcc0a5a --- /dev/null +++ b/examples/declarative/flickr/flickr.pro @@ -0,0 +1,19 @@ +TEMPLATE=app +TARGET = qml_location_flickr + +QT += declarative network location +SOURCES += qmllocationflickr.cpp + +symbian { + TARGET.CAPABILITY = NetworkServices Location ReadUserData WriteUserData + TARGET.EPOCHEAPSIZE = 0x20000 0x2000000 +} + +RESOURCES += \ + flickr.qrc + +target.path = $$[QT_INSTALL_DEMOS]/qtlocation/declarative/flickr +sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS *.pro *.qml flickrcommon flickrmobile +sources.path = $$[QT_INSTALL_DEMOS]/qtlocation/declarative/flickr + +INSTALLS += target sources diff --git a/examples/declarative/flickr/flickr.qml b/examples/declarative/flickr/flickr.qml new file mode 100755 index 00000000..8597b38a --- /dev/null +++ b/examples/declarative/flickr/flickr.qml @@ -0,0 +1,126 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Mobility Components. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import Qt 4.7 +import "flickrcommon" as Common +import "flickrmobile" as Mobile + +Item { + id: screen; width: 320; height: 480 + property bool inListView : false + + Rectangle { + id: background + anchors.fill: parent; color: "#343434"; + + Image { source: "flickrmobile/images/stripes.png"; fillMode: Image.Tile; anchors.fill: parent; opacity: 0.3 } + + Common.RestModel { + id: restModel; + latitude: geoTab.latitude + longitude: geoTab.longitude} + + Item { + id: views + x: 2; width: parent.width - 4 + anchors.top: titleBar.bottom; anchors.bottom: toolBar.top + + Mobile.GridDelegate { id: gridDelegate } + GridView { + x: (width/4-79)/2; y: x + id: photoGridView; model: restModel; delegate: gridDelegate; cacheBuffer: 100 + cellWidth: (parent.width-2)/4; cellHeight: cellWidth; width: parent.width; height: parent.height - 1; z: 6 + } + Mobile.ListDelegate { id: listDelegate } + ListView { + id: photoListView; model: restModel; delegate: listDelegate; z: 6 + width: parent.width; height: parent.height; x: -(parent.width * 1.5); cacheBuffer: 100; + } + states: State { + name: "ListView"; when: screen.inListView == true + PropertyChanges { target: photoListView; x: 0 } + PropertyChanges { target: photoGridView; x: -(parent.width * 1.5) } + } + + transitions: Transition { + NumberAnimation { properties: "x"; duration: 500; easing.type: Easing.InOutQuad } + } + } + Mobile.ImageDetails { id: imageDetails; width: parent.width; anchors.left: views.right; height: parent.height; z:1 } + Mobile.TitleBar { id: titleBar; z: 5; width: parent.width; height: 40; opacity: 0.9 } + Mobile.GeoTab { + id: geoTab; + x: 15; y:50; + } + Mobile.ToolBar { + id: toolBar; z: 5 + height: 40; anchors.bottom: parent.bottom; width: parent.width; opacity: 0.9 + button1Label: "Update"; button2Label: "View mode" + onButton1Clicked: restModel.reload() + onButton2Clicked: if (screen.inListView == true) screen.inListView = false; else screen.inListView = true + } + Connections { + target: imageDetails + onClosed: { + if (background.state == "DetailedView") { + background.state = ''; + imageDetails.photoUrl = ""; + } + } + } + + states: State { + name: "DetailedView" + PropertyChanges { target: views; x: -parent.width } + PropertyChanges { target: geoTab; x: -parent.width } + PropertyChanges { target: toolBar; button1Label: "More..." } + PropertyChanges { + target: toolBar + onButton1Clicked: if (imageDetails.state=='') imageDetails.state='Back'; else imageDetails.state='' + } + PropertyChanges { target: toolBar; button2Label: "Back" } + PropertyChanges { target: toolBar; onButton2Clicked: imageDetails.closed() } + } + + transitions: Transition { + NumberAnimation { properties: "x"; duration: 500; easing.type: Easing.InOutQuad } + } + } +} diff --git a/examples/declarative/flickr/flickr.qmlproject b/examples/declarative/flickr/flickr.qmlproject new file mode 100755 index 00000000..d4909f86 --- /dev/null +++ b/examples/declarative/flickr/flickr.qmlproject @@ -0,0 +1,16 @@ +import QmlProject 1.0 + +Project { + /* Include .qml, .js, and image files from current directory and subdirectories */ + QmlFiles { + directory: "." + } + JavaScriptFiles { + directory: "." + } + ImageFiles { + directory: "." + } + /* List of plugin directories passed to QML runtime */ + // importPaths: [ " ../exampleplugin " ] +} diff --git a/examples/declarative/flickr/flickr.qrc b/examples/declarative/flickr/flickr.qrc new file mode 100644 index 00000000..1019f7d8 --- /dev/null +++ b/examples/declarative/flickr/flickr.qrc @@ -0,0 +1,30 @@ +<!DOCTYPE RCC><RCC version="1.0"> + <qresource prefix="/"> + <file>flickr.qml</file> + <file>flickr-90.qml</file> + <file>flickrcommon/Progress.qml</file> + <file>flickrcommon/RestModel.qml</file> + <file>flickrcommon/ScrollBar.qml</file> + <file>flickrcommon/Slider.qml</file> + <file>flickrmobile/Button.qml</file> + <file>flickrmobile/GeoTab.qml</file> + <file>flickrmobile/GridDelegate.qml</file> + <file>flickrmobile/ImageDetails.qml</file> + <file>flickrmobile/ListDelegate.qml</file> + <file>flickrmobile/nmealog.txt</file> + <file>flickrmobile/TitleBar.qml</file> + <file>flickrmobile/ToolBar.qml</file> + <file>flickrmobile/images/gloss.png</file> + <file>flickrmobile/images/lineedit.png</file> + <file>flickrmobile/images/lineedit.sci</file> + <file>flickrmobile/images/moon.png</file> + <file>flickrmobile/images/quit.png</file> + <file>flickrmobile/images/star.png</file> + <file>flickrmobile/images/stripes.png</file> + <file>flickrmobile/images/sun.png</file> + <file>flickrmobile/images/titlebar.png</file> + <file>flickrmobile/images/titlebar.sci</file> + <file>flickrmobile/images/toolbutton.png</file> + <file>flickrmobile/images/toolbutton.sci</file> + </qresource> +</RCC> diff --git a/examples/declarative/flickr/qmllocationflickr.cpp b/examples/declarative/flickr/qmllocationflickr.cpp new file mode 100644 index 00000000..45a36f93 --- /dev/null +++ b/examples/declarative/flickr/qmllocationflickr.cpp @@ -0,0 +1,62 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Mobility Components. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include <QtGui/QApplication> +#include <QtDeclarative/QDeclarativeView> +#include <QtDeclarative/QDeclarativeEngine> + +int main(int argc, char *argv[]) +{ + QApplication application(argc, argv); + const QString mainQmlApp = QLatin1String("qrc:///flickr.qml"); + QDeclarativeView view; + view.setSource(QUrl(mainQmlApp)); + view.setResizeMode(QDeclarativeView::SizeRootObjectToView); + // Qt.quit() called in embedded .qml by default only emits + // quit() signal, so do this (optionally use Qt.exit()). + QObject::connect(view.engine(), SIGNAL(quit()), qApp, SLOT(quit())); +#if defined(Q_OS_SYMBIAN) || defined(Q_WS_MAEMO_6) + view.showFullScreen(); +#else + view.setGeometry(QRect(100, 100, 360, 640)); + view.show(); +#endif + return application.exec(); +} diff --git a/examples/declarative/landmarkmap/landmarkmap.pro b/examples/declarative/landmarkmap/landmarkmap.pro new file mode 100644 index 00000000..de018240 --- /dev/null +++ b/examples/declarative/landmarkmap/landmarkmap.pro @@ -0,0 +1,24 @@ +TEMPLATE=app +TARGET = qml_location_landmarkmap + +QT += declarative network location + +SOURCES += qmllandmarkmap.cpp + +symbian { + TARGET.CAPABILITY = NetworkServices Location ReadUserData WriteUserData + TARGET.CAPABILITY += LocalServices ReadDeviceData WriteDeviceData + TARGET.EPOCHEAPSIZE = 0x20000 0x2000000 +} + +RESOURCES += \ + landmarkmap.qrc + +install_files.files += nmealog.txt mylm.lmx landmarkmapcommon landmarkmapmobile landmarkmap.qml +install_files.path = $$[QT_INSTALL_DEMOS]/qtlocation/declarative/landmark + +target.path = $$[QT_INSTALL_DEMOS]/qtlocation/declarative/landmark +sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS *.pro +sources.path = $$[QT_INSTALL_DEMOS]/qtlocation/declarative/landmark + +INSTALLS += target sources install_files diff --git a/examples/declarative/landmarkmap/landmarkmap.qml b/examples/declarative/landmarkmap/landmarkmap.qml new file mode 100644 index 00000000..fb88c0fc --- /dev/null +++ b/examples/declarative/landmarkmap/landmarkmap.qml @@ -0,0 +1,381 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Mobility Components. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import Qt 4.7 +import QtMobility.location 1.2 +import "landmarkmapcommon" as Common +import "landmarkmapmobile" as Mobile + +Item { + id: page + width: 320 + height: 480 + focus: true + + PositionSource { + id: myPositionSource + active: true + updateInterval: 2000 + onPositionChanged: console.log("Position changed in PositionSource") + } + //![Map toCoordinate] + LandmarkBoxFilter { + id: boxFilter + topLeft: map.toCoordinate(Qt.point(0,0)) + bottomRight: map.toCoordinate(Qt.point(map.width, map.height)) + } + //![Map toCoordinate] + + LandmarkProximityFilter { + id: proximityFilter + center: myPositionSource.position.coordinate + radius: 500000 + } + + LandmarkModel { + id: landmarkModelAll + autoUpdate: true + filter: boxFilter + limit: 20 + onModelChanged: { + console.log("All landmark model changed, landmark count: " + count) + } + } + + LandmarkModel { + id: landmarkModelNear + autoUpdate: true + filter: proximityFilter + limit: 20 + onModelChanged: { + console.log("Near landmark model changed, landmark count: " + count) + } + } + + Component { + id: landmarkListDelegate + Item { + width: 200; height: 80 + Text { + color: "white"; font.bold: true; style: Text.Raised; styleColor: "black" + id: nameField; text: landmark.name + } + Text { + color: "white"; font.bold: true; style: Text.Raised; styleColor: "black" + anchors.top: nameField.bottom + id: latField; text: " Lat: " + landmark.coordinate.latitude + } + Text { + color: "white"; font.bold: true; style: Text.Raised; styleColor: "black" + anchors.top: latField.bottom + id: lonField; text: " Lon: " + landmark.coordinate.longitude + } + } + } + + //![Category model] + LandmarkCategoryModel { + id: landmarkCategoryModel + autoUpdate: true + onModelChanged: console.log("Category model changed, category count: " + count) + } + + Coordinate { + id: initCoordinate + latitude: -27.5 + longitude: 153 + } + + Component { + id: landmarkCategoryListDelegate + Item { + width: 200; height: 50 + Text { + color: "white"; font.bold: true; style: Text.Raised; styleColor: "black" + id: nameField; text: category.name + } + } + } + //![Category model] + + Mobile.TitleBar { id: titleBar; z: 5; width: parent.width - statusBar.width; height: 40; opacity: 0.8 } + Mobile.StatusBar { id: statusBar; z: 6; width: 80; height: titleBar.height; opacity: titleBar.opacity; anchors.right: parent.right} + + Rectangle { + id: dataArea + anchors.top: titleBar.bottom + anchors.bottom: toolbar2.bottom + width: parent.width + color: "#343434" + //height: toolbar1.y - titleBar.height + Image { source: "landmarkmapmobile/images/stripes.png"; fillMode: Image.Tile; anchors.fill: parent; opacity: 0.3 } + + ListView { + id: landmarkListView; + model: landmarkModelAll; + delegate: landmarkListDelegate; + width: parent.width - 20; + height: parent.height -20; + x: -(parent.width * 1.5); + highlightFollowsCurrentItem: false + focus: true + } + + //![Category model] + ListView { + id: landmarkCategoryListView; + model: landmarkCategoryModel; + delegate: landmarkCategoryListDelegate; + width: parent.width - 20; + height: parent.height -20; + x: -(parent.width * 1.5); + highlightFollowsCurrentItem: false + focus: true + } + //![Category model] + //![Map Plugin] + Map { + id: map + plugin : Plugin { name : "nokia"} + //![Map Plugin] + anchors.fill: parent + size.width: parent.width + size.height: parent.height + zoomLevel:9 + center: initCoordinate + + MapObjectView { + id: allLandmarks + model: landmarkModelAll + delegate: Component { + //![MapImage] + MapImage { + source: "landmarkmapmobile/images/landmarkstar.png" + coordinate: landmark.coordinate + } + //![MapImage] + } + } + + MapObjectView { + id: landmarksNearMe + model: landmarkModelNear + delegate: Component { + //![MapGroup] + MapGroup { + MapCircle { + color: "green" + radius: 100 + center: landmark.coordinate + } + MapCircle { + color: "red" + radius: 30 + center: landmark.coordinate + } + } + //![MapGroup] + } + } + onZoomLevelChanged: { + console.log("Zoom changed") + updateFilters(); + } + onCenterChanged: { + console.log("Center changed") + updateFilters(); + } + function updateFilters () { + // The pixel coordinates used are the map's pixel coordinates, not + // the absolute pixel coordinates of the application. Hence e.g. (0,0) is always + // the top left point + var topLeftCoordinate = map.toCoordinate(Qt.point(0,0)) + var bottomRightCoordinate = map.toCoordinate(Qt.point(map.size.width, map.size.height)) + boxFilter.topLeft = topLeftCoordinate; + boxFilter.bottomRight = bottomRightCoordinate; + } + } // map + + MouseArea { + anchors.fill: parent + + property bool mouseDown : false + property int lastX : -1 + property int lastY : -1 + + onPressed : { + mouseDown = true + // While panning, its better not to actively udpate the model + // as it results in poor performance. + landmarkModelAll.autoUpdate = false + landmarkModelNear.autoUpdate = false + lastX = mouse.x + lastY = mouse.y + } + onReleased : { + mouseDown = false + landmarkModelAll.autoUpdate = true + landmarkModelNear.autoUpdate = true + landmarkModelAll.update() + landmarkModelNear.update() + lastX = -1 + lastY = -1 + } + onPositionChanged: { + if (mouseDown) { + var dx = mouse.x - lastX + var dy = mouse.y - lastY + map.pan(-dx, -dy) + page.state = "NoFollowing" + myPositionSource.active = false + lastX = mouse.x + lastY = mouse.y + } + } + onDoubleClicked: { + page.state = "NoFollowing" + myPositionSource.active = false + map.center = map.toCoordinate(Qt.point(mouse.x, mouse.y)) + if (map.zoomLevel < map.maximumZoomLevel) + map.zoomLevel += 1 + } + } // MouseArea + + + + Mobile.Floater { + id : dataFloater + latitude: myPositionSource.position.coordinate.latitude + longitude: myPositionSource.position.coordinate.longitude + landmarks: landmarkModelAll.count + categories: landmarkCategoryModel.count + } + } // dataArea + + Item { + id: sliderContainer + anchors {bottom: toolbar1.top;} + height: 40 + width: parent.width + + Common.Slider { + id: zoomSlider; + minimum: 1; maximum: 18; + anchors { + fill: parent + bottomMargin: 5; rightMargin: 5; leftMargin: 5 + } + onValueChanged: { + map.zoomLevel = value + } + } + } + + Mobile.ToolBar { + id: toolbar1 + opacity: titleBar.opacity + height: 40; width: parent.width + anchors.bottom: toolbar2.top + z: 6 + button1Label: "map"; button2Label: "landmarks"; button3Label: "categories" + onButton1Clicked: { + if (page.state != "") + page.state = "" + } + onButton2Clicked: { + if (page.state != "LandmarkView") + page.state = "LandmarkView" + } + onButton3Clicked: { + if (page.state != "CategoryView") + page.state = "CategoryView" + } + } + + Mobile.ToolBar { + id: toolbar2 + opacity: titleBar.opacity + height: 40; width: parent.width + anchors.bottom: parent.bottom + z: 6 + button1Label: "nmealog.txt"; button2Label: "mylm.lmx"; button3Label: "follow me" + button3FontColor: "pink" + onButton1Clicked: { + myPositionSource.nmeaSource = "nmealog.txt" + myPositionSource.start() + } + onButton2Clicked: { + landmarkModelAll.importFile = "mylm.lmx" + toolbar2.disableButton2() + } + onButton3Clicked: { + page.state = "Following" + myPositionSource.active = true + } + } + // states of page + states: [State { + name: "CategoryView" + PropertyChanges { target: map; x: -dataArea.width } + PropertyChanges { target: map; x: -dataArea.width } + PropertyChanges { target: sliderContainer; x: -dataArea.width} + PropertyChanges { target: landmarkCategoryListView; x: 0 } + }, State { + name: "LandmarkView" + PropertyChanges { target: map; x: -dataArea.width } + PropertyChanges { target: sliderContainer; x: -dataArea.width} + PropertyChanges { target: landmarkListView; x: 0 } + }, State { + name: "Following" + PropertyChanges { target: map; center: myPositionSource.position.coordinate} + PropertyChanges { target: toolbar2; button3FontColor: 'grey'} + PropertyChanges { target: toolbar2; button3Label: '(following)'} + PropertyChanges { target: myPositionSource; active: true} + }, State { + name : "NoFollowing" + PropertyChanges { target: toolbar2; button3FontColor: 'pink'} + PropertyChanges { target: toolbar2; button3Label: 'follow me'} + PropertyChanges { target: myPositionSource; active: false} + }] + // state-transition animations for page + transitions: Transition { + NumberAnimation { properties: "x"; duration: 500; easing.type: Easing.InOutQuad } + } +} // page diff --git a/examples/declarative/landmarkmap/landmarkmap.qrc b/examples/declarative/landmarkmap/landmarkmap.qrc new file mode 100644 index 00000000..b7c9a160 --- /dev/null +++ b/examples/declarative/landmarkmap/landmarkmap.qrc @@ -0,0 +1,28 @@ +<!DOCTYPE RCC><RCC version="1.0"> +<qresource> + <file>landmarkmap.qml</file> + <file>nmealog.txt</file> + <file>mylm.lmx</file> + <file>landmarkmapcommon/ScrollBar.qml</file> + <file>landmarkmapcommon/Slider.qml</file> + <file>landmarkmapmobile/Button.qml</file> + <file>landmarkmapmobile/Floater.qml</file> + <file>landmarkmapmobile/ListDelegate.qml</file> + <file>landmarkmapmobile/StatusBar.qml</file> + <file>landmarkmapmobile/TitleBar.qml</file> + <file>landmarkmapmobile/ToolBar.qml</file> + <file>landmarkmapmobile/images/gloss.png</file> + <file>landmarkmapmobile/images/landmarkstar.png</file> + <file>landmarkmapmobile/images/lineedit.png</file> + <file>landmarkmapmobile/images/lineedit.sci</file> + <file>landmarkmapmobile/images/moon.png</file> + <file>landmarkmapmobile/images/quit.png</file> + <file>landmarkmapmobile/images/star.png</file> + <file>landmarkmapmobile/images/stripes.png</file> + <file>landmarkmapmobile/images/sun.png</file> + <file>landmarkmapmobile/images/titlebar.png</file> + <file>landmarkmapmobile/images/titlebar.sci</file> + <file>landmarkmapmobile/images/toolbutton.png</file> + <file>landmarkmapmobile/images/toolbutton.sci</file> +</qresource> +</RCC> diff --git a/examples/declarative/landmarkmap/mylm.lmx b/examples/declarative/landmarkmap/mylm.lmx new file mode 100644 index 00000000..de205298 --- /dev/null +++ b/examples/declarative/landmarkmap/mylm.lmx @@ -0,0 +1,61 @@ +<?xml version="1.0" encoding="UTF-8"?> +<lmx xmlns="http://www.nokia.com/schemas/location/landmarks/1/0/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.nokia.com/schemas/location/landmarks/1/0/ lmx.xsd"> + <landmarkCollection> + <landmark> + <name>Brisbane</name> + <coordinates> + <latitude>-27.47</latitude> + <longitude>153.02</longitude> + </coordinates> + </landmark> + <landmark> + <name>Sydney</name> + <coordinates> + <latitude>-33.87</latitude> + <longitude>151.2</longitude> + </coordinates> + </landmark> + <landmark> + <name>Canberra</name> + <coordinates> + <latitude>-35.3</latitude> + <longitude>149.13</longitude> + </coordinates> + </landmark> + <landmark> + <name>Adelaide</name> + <coordinates> + <latitude>-34.93</latitude> + <longitude>138.6</longitude> + </coordinates> + </landmark> + <landmark> + <name>Darwin</name> + <coordinates> + <latitude>-12.45</latitude> + <longitude>-130.83</longitude> + </coordinates> + </landmark> + <landmark> + <name>Hobart</name> + <coordinates> + <latitude>-42.88</latitude> + <longitude>147.32</longitude> + </coordinates> + </landmark> + <landmark> + <name>Melbourne</name> + <coordinates> + <latitude>-37.82</latitude> + <longitude>144.97</longitude> + </coordinates> + </landmark> + <landmark> + <name>Perth</name> + <coordinates> + <latitude>-31.95</latitude> + <longitude>115.85</longitude> + </coordinates> + </landmark> + </landmarkCollection> +</lmx> diff --git a/examples/declarative/landmarkmap/nmealog.txt b/examples/declarative/landmarkmap/nmealog.txt new file mode 100755 index 00000000..8c8286dd --- /dev/null +++ b/examples/declarative/landmarkmap/nmealog.txt @@ -0,0 +1,1403 @@ +$GPGGA,222437.000,2734.33926,S,15305.44310,E,1,07,1.3,50.6,M,39.2,M,,*72 +$GPGLL,2734.33926,S,15305.44310,E,222437.000,A,A*49 +$GPGSA,A,3,16,25,23,20,13,27,11,,,,,,2.3,1.3,1.9*3D +$GPGST,222437.000,13.3,7.4,6.6,85.1,6.0,6.8,13.7*56 +$GPGSV,3,1,10,16,49,115,42,25,39,269,36,23,58,176,29,20,72,335,35*75 +$GPGSV,3,2,10,19,02,028,,04,06,241,22,13,30,223,30,27,19,284,35*78 +$GPGSV,3,3,10,11,06,337,30,03,13,055,25*7C +$GPRMC,222437.000,A,2734.33926,S,15305.44310,E,33.9,157.8,030308,11.2,W,A*0F +$GPVTG,157.8,T,169.0,M,33.9,N,62.9,K,A*22 +$GPGGA,222438.000,2734.34821,S,15305.44697,E,1,07,1.2,50.8,M,39.2,M,,*79 +$GPGLL,2734.34821,S,15305.44697,E,222438.000,A,A*4D +$GPGSA,A,3,16,25,23,20,13,27,03,,,,,,2.1,1.2,1.7*33 +$GPGST,222438.000,12.4,6.4,9.3,16.2,6.1,8.3,16.4*5F +$GPGSV,3,1,10,16,49,115,41,25,39,269,36,23,58,176,28,20,72,335,36*74 +$GPGSV,3,2,10,19,02,028,,04,06,241,20,13,30,223,28,27,19,284,35*73 +$GPGSV,3,3,10,11,06,337,28,03,13,055,25*75 +$GPRMC,222438.000,A,2734.34821,S,15305.44697,E,33.8,158.3,030308,11.2,W,A*0E +$GPVTG,158.3,T,169.5,M,33.8,N,62.5,K,A*2E +$GPGGA,222439.000,2734.35696,S,15305.45072,E,1,06,1.7,51.2,M,39.2,M,,*78 +$GPGLL,2734.35696,S,15305.45072,E,222439.000,A,A*43 +$GPGSA,A,3,16,25,23,20,13,27,,,,,,,3.3,1.7,2.8*3A +$GPGST,222439.000,10.3,9.1,12.2,44.6,9.8,9.9,25.2*62 +$GPGSV,3,1,10,16,49,115,34,25,39,269,36,23,58,175,29,20,72,335,35*77 +$GPGSV,3,2,10,19,02,028,,04,06,241,20,13,30,223,27,27,19,284,32*7B +$GPGSV,3,3,10,11,06,337,28,03,14,055,25*72 +$GPRMC,222439.000,A,2734.35696,S,15305.45072,E,33.2,158.7,030308,11.2,W,A*0E +$GPVTG,158.7,T,169.9,M,33.2,N,61.5,K,A*2F +$GPGGA,222440.000,2734.36580,S,15305.45446,E,1,07,1.3,52.0,M,39.2,M,,*76 +$GPGLL,2734.36580,S,15305.45446,E,222440.000,A,A*49 +$GPGSA,A,3,16,25,23,20,13,27,11,,,,,,2.3,1.3,1.9*3D +$GPGST,222440.000,13.0,8.0,13.4,6.2,7.4,12.2,20.9*64 +$GPGSV,3,1,10,16,49,115,40,25,39,269,38,23,58,175,31,20,72,335,34*72 +$GPGSV,3,2,10,19,02,028,,04,06,241,20,13,30,223,26,27,19,284,30*78 +$GPGSV,3,3,10,11,06,337,26,03,14,055,25*7C +$GPRMC,222440.000,A,2734.36580,S,15305.45446,E,33.7,159.1,030308,11.2,W,A*06 +$GPVTG,159.1,T,170.3,M,33.7,N,62.4,K,A*2D +$GPGGA,222441.000,2734.37483,S,15305.45825,E,1,07,1.3,52.7,M,39.2,M,,*7A +$GPGLL,2734.37483,S,15305.45825,E,222441.000,A,A*42 +$GPGSA,A,3,16,25,23,20,13,27,11,,,,,,2.3,1.3,1.9*3D +$GPGST,222441.000,14.0,7.6,14.1,17.6,7.7,12.5,21.0*51 +$GPGSV,3,1,10,16,49,115,41,25,39,269,39,23,58,175,29,20,72,335,35*7A +$GPGSV,3,2,10,19,02,028,,04,06,241,20,13,30,223,24,27,19,284,30*7A +$GPGSV,3,3,10,11,06,337,28,03,14,055,25*72 +$GPRMC,222441.000,A,2734.37483,S,15305.45825,E,34.6,159.4,030308,11.2,W,A*0E +$GPVTG,159.4,T,170.6,M,34.6,N,64.1,K,A*28 +$GPGGA,222442.000,2734.38407,S,15305.46216,E,1,06,1.3,53.3,M,39.2,M,,*77 +$GPGLL,2734.38407,S,15305.46216,E,222442.000,A,A*4B +$GPGSA,A,3,16,25,20,13,27,11,,,,,,,2.3,1.3,1.9*3C +$GPGST,222442.000,16.6,7.0,14.4,14.6,7.0,12.8,21.6*5A +$GPGSV,3,1,10,16,49,115,40,25,39,269,38,23,58,175,22,20,72,335,35*71 +$GPGSV,3,2,10,19,02,028,,04,06,241,20,13,30,223,25,27,19,284,29*73 +$GPGSV,3,3,10,11,06,337,27,03,14,055,25*7D +$GPRMC,222442.000,A,2734.38407,S,15305.46216,E,35.5,159.3,030308,11.2,W,A*02 +$GPVTG,159.3,T,170.5,M,35.5,N,65.8,K,A*26 +$GPGGA,222443.000,2734.39347,S,15305.46609,E,1,05,1.8,53.8,M,39.2,M,,*7D +$GPGLL,2734.39347,S,15305.46609,E,222443.000,A,A*42 +$GPGSA,A,3,16,25,20,27,11,,,,,,,,2.8,1.8,2.1*35 +$GPGST,222443.000,11.3,6.5,14.6,14.5,6.6,13.0,18.4*5A +$GPGSV,3,1,10,16,49,115,40,25,39,269,38,23,58,175,22,20,72,335,36*72 +$GPGSV,3,2,10,19,02,028,,04,06,241,20,13,30,223,26,27,19,284,31*79 +$GPGSV,3,3,10,11,06,337,28,03,14,055,25*72 +$GPRMC,222443.000,A,2734.39347,S,15305.46609,E,36.2,159.4,030308,11.2,W,A*08 +$GPVTG,159.4,T,170.6,M,36.2,N,67.0,K,A*2C +$GPGGA,222444.000,2734.40297,S,15305.47000,E,1,06,1.3,54.1,M,39.2,M,,*70 +$GPGLL,2734.40297,S,15305.47000,E,222444.000,A,A*49 +$GPGSA,A,3,16,25,20,13,27,11,,,,,,,2.3,1.3,1.9*3C +$GPGST,222444.000,17.6,6.3,12.7,14.4,6.3,11.4,16.2*55 +$GPGSV,3,1,10,16,49,115,38,25,39,269,38,23,58,175,22,20,72,335,35*7E +$GPGSV,3,2,10,19,02,028,,04,06,241,20,13,30,223,25,27,19,284,29*73 +$GPGSV,3,3,10,11,06,337,25,03,14,055,23*79 +$GPRMC,222444.000,A,2734.40297,S,15305.47000,E,36.5,159.5,030308,11.2,W,A*05 +$GPVTG,159.5,T,170.8,M,36.5,N,67.5,K,A*21 +$GPGGA,222445.000,2734.41247,S,15305.47390,E,1,07,1.3,54.2,M,39.2,M,,*75 +$GPGLL,2734.41247,S,15305.47390,E,222445.000,A,A*4E +$GPGSA,A,3,16,25,23,20,13,27,11,,,,,,2.3,1.3,1.9*3D +$GPGST,222445.000,16.0,7.0,14.4,10.4,6.7,13.0,20.7*52 +$GPGSV,3,1,10,16,49,115,36,25,39,269,36,23,58,175,22,20,72,335,34*7F +$GPGSV,3,2,10,19,02,028,,04,06,241,20,13,30,223,26,27,19,284,31*79 +$GPGSV,3,3,10,11,06,337,26,03,14,055,23*7A +$GPRMC,222445.000,A,2734.41247,S,15305.47390,E,36.6,159.7,030308,11.2,W,A*03 +$GPVTG,159.7,T,170.9,M,36.6,N,67.8,K,A*2C +$GPGGA,222446.000,2734.42201,S,15305.47790,E,1,07,1.3,54.4,M,39.2,M,,*75 +$GPGLL,2734.42201,S,15305.47790,E,222446.000,A,A*48 +$GPGSA,A,3,16,25,23,20,13,27,11,,,,,,2.3,1.3,1.9*3D +$GPGST,222446.000,13.0,7.4,12.3,6.6,6.9,11.2,17.9*60 +$GPGSV,3,1,10,16,49,115,36,25,39,269,37,23,58,175,27,20,72,335,35*7A +$GPGSV,3,2,10,19,02,028,,04,06,241,23,13,30,223,30,27,19,284,32*7E +$GPGSV,3,3,10,11,06,337,27,03,14,055,23*7B +$GPRMC,222446.000,A,2734.42201,S,15305.47790,E,36.6,159.3,030308,11.2,W,A*01 +$GPVTG,159.3,T,170.5,M,36.6,N,67.7,K,A*2B +$GPGGA,222447.000,2734.43157,S,15305.48195,E,1,07,1.3,54.3,M,39.2,M,,*7E +$GPGLL,2734.43157,S,15305.48195,E,222447.000,A,A*44 +$GPGSA,A,3,16,25,23,20,13,27,11,,,,,,2.3,1.3,1.9*3D +$GPGST,222447.000,10.7,6.7,10.5,6.6,6.2,9.6,15.5*5B +$GPGSV,3,1,11,16,49,115,32,25,39,269,37,23,58,175,28,20,72,335,33*76 +$GPGSV,3,2,11,19,02,028,,04,06,241,23,13,30,223,30,27,19,284,32*7F +$GPGSV,3,3,11,11,06,337,29,01,,,19,03,14,055,23*7D +$GPRMC,222447.000,A,2734.43157,S,15305.48195,E,36.7,159.1,030308,11.2,W,A*0E +$GPVTG,159.1,T,170.3,M,36.7,N,67.9,K,A*20 +$GPGGA,222448.000,2734.44111,S,15305.48610,E,1,08,1.1,54.1,M,39.2,M,,*71 +$GPGLL,2734.44111,S,15305.48610,E,222448.000,A,A*44 +$GPGSA,A,3,16,25,23,20,13,27,11,03,,,,,2.0,1.1,1.6*30 +$GPGST,222448.000,20.4,10.5,8.8,52.5,8.7,9.1,15.2*6C +$GPGSV,3,1,11,16,49,115,27,25,39,269,38,23,58,175,26,20,72,335,31*71 +$GPGSV,3,2,11,19,02,028,,04,06,241,23,13,30,223,37,27,19,284,27*7C +$GPGSV,3,3,11,11,06,337,27,01,,,19,03,14,055,23*73 +$GPRMC,222448.000,A,2734.44111,S,15305.48610,E,36.8,158.7,030308,11.2,W,A*06 +$GPVTG,158.7,T,169.9,M,36.8,N,68.2,K,A*2E +$GPGGA,222449.000,2734.45068,S,15305.49044,E,1,08,1.1,53.6,M,39.2,M,,*78 +$GPGLL,2734.45068,S,15305.49044,E,222449.000,A,A*4D +$GPGSA,A,3,16,25,23,20,13,27,11,03,,,,,2.0,1.1,1.6*30 +$GPGST,222449.000,17.1,8.8,10.2,14.2,8.2,9.3,17.4*6D +$GPGSV,3,1,11,16,49,115,28,25,39,269,37,23,58,175,25,20,72,335,28*7A +$GPGSV,3,2,11,19,02,028,,04,06,241,23,13,30,223,37,27,19,284,32*78 +$GPGSV,3,3,11,11,06,337,27,01,,,19,03,14,055,24*74 +$GPRMC,222449.000,A,2734.45068,S,15305.49044,E,37.2,157.8,030308,11.2,W,A*04 +$GPVTG,157.8,T,169.0,M,37.2,N,68.9,K,A*27 +$GPGGA,222450.000,2734.46041,S,15305.49485,E,1,08,1.1,53.3,M,39.2,M,,*74 +$GPGLL,2734.46041,S,15305.49485,E,222450.000,A,A*44 +$GPGSA,A,3,16,25,23,20,13,27,11,03,,,,,2.0,1.1,1.6*30 +$GPGST,222450.000,17.4,8.9,12.7,10.1,11.5,8.2,16.5*5E +$GPGSV,3,1,11,16,49,115,25,25,39,269,36,23,58,175,30,20,72,336,28*71 +$GPGSV,3,2,11,19,02,028,,04,06,241,21,13,30,223,38,27,19,284,34*73 +$GPGSV,3,3,11,11,06,337,27,01,,,19,03,14,055,22*72 +$GPRMC,222450.000,A,2734.46041,S,15305.49485,E,37.7,157.9,030308,11.2,W,A*09 +$GPVTG,157.9,T,169.1,M,37.7,N,69.8,K,A*22 +$GPGGA,222451.000,2734.47033,S,15305.49924,E,1,08,1.1,53.1,M,39.2,M,,*75 +$GPGLL,2734.47033,S,15305.49924,E,222451.000,A,A*47 +$GPGSA,A,3,16,25,23,20,13,27,11,03,,,,,2.0,1.1,1.6*30 +$GPGST,222451.000,14.1,8.0,10.5,14.3,9.5,7.5,15.0*61 +$GPGSV,3,1,11,16,49,115,27,25,39,269,38,23,58,175,28,20,72,336,25*79 +$GPGSV,3,2,11,19,02,028,,04,06,241,21,13,30,223,38,27,19,284,34*73 +$GPGSV,3,3,11,11,06,337,24,01,,,19,03,14,055,25*76 +$GPRMC,222451.000,A,2734.47033,S,15305.49924,E,38.1,158.1,030308,11.2,W,A*04 +$GPVTG,158.1,T,169.3,M,38.1,N,70.5,K,A*2B +$GPGGA,222452.000,2734.48022,S,15305.50375,E,1,08,1.1,52.5,M,39.2,M,,*7A +$GPGLL,2734.48022,S,15305.50375,E,222452.000,A,A*4D +$GPGSA,A,3,16,25,23,20,13,27,11,03,,,,,2.0,1.1,1.6*30 +$GPGST,222452.000,24.1,13.9,9.7,80.6,12.7,9.0,21.0*54 +$GPGSV,3,1,11,16,49,115,29,25,39,269,38,23,58,175,27,20,72,336,30*7C +$GPGSV,3,2,11,19,02,028,,04,06,241,21,13,30,223,35,27,19,284,34*7E +$GPGSV,3,3,11,11,06,337,22,01,,,19,03,14,055,24*71 +$GPRMC,222452.000,A,2734.48022,S,15305.50375,E,38.3,157.9,030308,11.2,W,A*0B +$GPVTG,157.9,T,169.1,M,38.3,N,70.9,K,A*20 +$GPGGA,222453.000,2734.49019,S,15305.50802,E,1,06,1.7,52.1,M,39.2,M,,*75 +$GPGLL,2734.49019,S,15305.50802,E,222453.000,A,A*4E +$GPGSA,A,3,16,25,23,20,13,27,,,,,,,3.3,1.7,2.8*3A +$GPGST,222453.000,10.4,15.4,9.3,66.3,13.4,9.6,24.6*52 +$GPGSV,3,1,11,16,49,115,31,25,39,269,36,23,58,175,28,20,71,336,25*73 +$GPGSV,3,2,11,19,02,028,,04,06,241,21,13,30,223,33,27,19,284,31*7D +$GPGSV,3,3,11,11,06,337,22,01,,,19,03,14,055,24*71 +$GPRMC,222453.000,A,2734.49019,S,15305.50802,E,38.3,159.1,030308,11.2,W,A*0E +$GPVTG,159.1,T,170.3,M,38.3,N,70.9,K,A*2C +$GPGGA,222454.000,2734.50008,S,15305.51221,E,1,07,1.3,52.1,M,39.2,M,,*75 +$GPGLL,2734.50008,S,15305.51221,E,222454.000,A,A*4B +$GPGSA,A,3,16,25,23,20,13,27,11,,,,,,2.3,1.3,1.9*3D +$GPGST,222454.000,12.5,11.7,8.3,70.6,10.4,8.0,19.0*5E +$GPGSV,3,1,11,16,49,115,30,25,39,269,36,23,58,175,26,20,71,336,28*71 +$GPGSV,3,2,11,19,02,028,,04,06,241,21,13,30,223,32,27,19,284,30*7D +$GPGSV,3,3,11,11,06,337,24,01,,,18,03,14,055,24*76 +$GPRMC,222454.000,A,2734.50008,S,15305.51221,E,38.1,159.4,030308,11.2,W,A*0C +$GPVTG,159.4,T,170.6,M,38.1,N,70.5,K,A*22 +$GPGGA,222455.000,2734.50992,S,15305.51642,E,1,07,1.3,52.2,M,39.2,M,,*7C +$GPGLL,2734.50992,S,15305.51642,E,222455.000,A,A*41 +$GPGSA,A,3,16,25,23,20,13,27,11,,,,,,2.3,1.3,1.9*3D +$GPGST,222455.000,11.5,10.8,9.3,83.5,9.9,8.6,23.3*65 +$GPGSV,3,1,11,16,49,115,33,25,39,269,36,23,58,175,32,20,71,336,31*7F +$GPGSV,3,2,11,19,02,028,,04,06,241,21,13,30,223,29,27,19,284,29*7F +$GPGSV,3,3,11,11,06,337,28,01,,,18,03,14,055,24*7A +$GPRMC,222455.000,A,2734.50992,S,15305.51642,E,37.8,159.0,030308,11.2,W,A*04 +$GPVTG,159.0,T,170.2,M,37.8,N,70.0,K,A*21 +$GPGGA,222456.000,2734.51963,S,15305.52059,E,1,07,1.3,52.5,M,39.2,M,,*78 +$GPGLL,2734.51963,S,15305.52059,E,222456.000,A,A*42 +$GPGSA,A,3,16,25,23,20,13,27,11,,,,,,2.3,1.3,1.9*3D +$GPGST,222456.000,11.3,9.0,13.1,11.0,8.4,11.9,20.9*55 +$GPGSV,3,1,11,16,49,115,31,25,39,269,37,23,58,175,27,20,71,336,33*7A +$GPGSV,3,2,11,19,02,028,,04,06,241,19,13,30,223,29,27,19,284,32*7E +$GPGSV,3,3,11,11,06,337,30,01,,,18,03,14,055,24*73 +$GPRMC,222456.000,A,2734.51963,S,15305.52059,E,37.3,158.8,030308,11.2,W,A*05 +$GPVTG,158.8,T,170.0,M,37.3,N,69.1,K,A*28 +$GPGGA,222457.000,2734.52908,S,15305.52467,E,1,06,1.3,53.2,M,39.2,M,,*79 +$GPGLL,2734.52908,S,15305.52467,E,222457.000,A,A*44 +$GPGSA,A,3,16,25,20,13,27,11,,,,,,,2.3,1.3,1.9*3C +$GPGST,222457.000,20.4,7.8,12.0,8.1,7.3,10.9,17.9*63 +$GPGSV,3,1,11,16,49,115,37,25,39,269,37,23,58,175,24,20,71,336,35*79 +$GPGSV,3,2,11,19,02,028,,04,06,241,19,13,30,223,29,27,19,284,32*7E +$GPGSV,3,3,11,11,06,337,28,01,,,18,03,14,055,23*7D +$GPRMC,222457.000,A,2734.52908,S,15305.52467,E,36.2,158.7,030308,11.2,W,A*0C +$GPVTG,158.7,T,169.9,M,36.2,N,67.1,K,A*28 +$GPGGA,222458.000,2734.53845,S,15305.52866,E,1,06,1.6,54.2,M,39.2,M,,*70 +$GPGLL,2734.53845,S,15305.52866,E,222458.000,A,A*4F +$GPGSA,A,3,16,25,23,20,27,11,,,,,,,2.6,1.6,2.1*34 +$GPGST,222458.000,16.7,7.3,13.9,11.0,7.0,12.5,17.9*5D +$GPGSV,3,1,11,16,49,115,36,25,39,269,37,23,58,175,24,20,71,336,35*78 +$GPGSV,3,2,11,19,02,028,19,04,06,241,19,13,30,223,26,27,19,284,31*7A +$GPGSV,3,3,11,11,06,337,23,01,,,18,03,14,055,23*76 +$GPRMC,222458.000,A,2734.53845,S,15305.52866,E,35.9,159.1,030308,11.2,W,A*08 +$GPVTG,159.1,T,170.3,M,35.9,N,66.5,K,A*20 +$GPGGA,222459.000,2734.54772,S,15305.53309,E,1,08,1.1,55.6,M,39.2,M,,*72 +$GPGLL,2734.54772,S,15305.53309,E,222459.000,A,A*41 +$GPGSA,A,3,16,25,23,20,13,27,11,03,,,,,2.0,1.1,1.6*30 +$GPGST,222459.000,17.5,6.5,9.3,15.5,6.1,8.3,15.2*5C +$GPGSV,3,1,11,16,49,115,38,25,39,268,36,23,58,175,35,20,71,336,35*76 +$GPGSV,3,2,11,19,02,028,19,04,06,241,19,13,30,223,33,27,19,284,34*7B +$GPGSV,3,3,11,11,06,337,29,01,,,18,03,14,055,22*7D +$GPRMC,222459.000,A,2734.54772,S,15305.53309,E,35.9,156.8,030308,11.2,W,A*00 +$GPVTG,156.8,T,168.0,M,35.9,N,66.4,K,A*2D +$GPGGA,222500.000,2734.55655,S,15305.53845,E,1,08,1.1,56.1,M,39.2,M,,*7D +$GPGLL,2734.55655,S,15305.53845,E,222500.000,A,A*4A +$GPGSA,A,3,16,25,23,20,13,27,11,03,,,,,2.0,1.1,1.6*30 +$GPGST,222500.000,14.5,9.8,7.9,83.3,7.3,9.0,14.3*5C +$GPGSV,3,1,11,16,49,115,36,25,39,268,31,23,58,175,39,20,71,336,33*75 +$GPGSV,3,2,11,19,02,028,21,04,06,241,19,13,30,223,30,27,19,284,29*7F +$GPGSV,3,3,11,11,06,337,25,01,,,18,03,14,055,28*7B +$GPRMC,222500.000,A,2734.55655,S,15305.53845,E,35.9,151.6,030308,11.2,W,A*02 +$GPVTG,151.6,T,162.8,M,35.9,N,66.5,K,A*27 +$GPGGA,222501.000,2734.56495,S,15305.54489,E,1,08,1.1,57.0,M,39.2,M,,*7A +$GPGLL,2734.56495,S,15305.54489,E,222501.000,A,A*4D +$GPGSA,A,3,16,25,23,20,13,27,11,03,,,,,2.0,1.1,1.6*30 +$GPGST,222501.000,14.3,8.0,10.9,27.0,8.0,9.5,15.6*64 +$GPGSV,3,1,11,16,49,115,41,25,39,268,31,23,58,175,36,20,71,336,31*78 +$GPGSV,3,2,11,19,02,028,21,04,06,241,19,13,30,223,27,27,19,284,29*79 +$GPGSV,3,3,11,11,06,337,22,01,,,18,03,14,055,31*74 +$GPRMC,222501.000,A,2734.56495,S,15305.54489,E,36.5,145.7,030308,11.2,W,A*0E +$GPVTG,145.7,T,156.9,M,36.5,N,67.5,K,A*2B +$GPGGA,222502.000,2734.57337,S,15305.55181,E,1,06,1.5,57.9,M,39.2,M,,*78 +$GPGLL,2734.57337,S,15305.55181,E,222502.000,A,A*4C +$GPGSA,A,3,16,25,23,20,27,03,,,,,,,2.5,1.5,2.0*36 +$GPGST,222502.000,14.5,7.0,11.9,20.7,7.1,10.5,15.0*5F +$GPGSV,3,1,11,16,49,115,43,25,39,268,35,23,58,175,37,20,71,336,34*7A +$GPGSV,3,2,11,19,02,028,21,04,06,241,19,13,30,223,23,27,19,284,33*76 +$GPGSV,3,3,11,11,06,337,22,01,,,18,03,14,055,34*71 +$GPRMC,222502.000,A,2734.57337,S,15305.55181,E,37.4,143.8,030308,11.2,W,A*06 +$GPVTG,143.8,T,155.0,M,37.4,N,69.3,K,A*20 +$GPGGA,222503.000,2734.58184,S,15305.55887,E,1,08,1.1,58.5,M,39.2,M,,*7A +$GPGLL,2734.58184,S,15305.55887,E,222503.000,A,A*47 +$GPGSA,A,3,16,25,23,20,13,27,11,03,,,,,2.0,1.1,1.6*30 +$GPGST,222503.000,13.4,6.4,14.1,0.3,5.9,12.9,21.5*60 +$GPGSV,3,1,11,16,49,115,43,25,39,268,35,23,58,175,38,20,71,336,35*74 +$GPGSV,3,2,11,19,02,028,19,04,06,241,19,13,30,223,23,27,19,284,32*7C +$GPGSV,3,3,11,11,06,337,26,01,,,17,03,14,055,34*7A +$GPRMC,222503.000,A,2734.58184,S,15305.55887,E,37.8,143.4,030308,11.2,W,A*0D +$GPVTG,143.4,T,154.6,M,37.8,N,70.0,K,A*2C +$GPGGA,222504.000,2734.59032,S,15305.56580,E,1,07,1.2,58.9,M,39.2,M,,*79 +$GPGLL,2734.59032,S,15305.56580,E,222504.000,A,A*44 +$GPGSA,A,3,16,25,23,20,13,27,03,,,,,,2.1,1.2,1.7*33 +$GPGST,222504.000,24.6,6.2,13.3,3.6,5.7,12.2,20.2*67 +$GPGSV,3,1,11,16,49,115,43,25,39,268,35,23,58,175,39,20,71,336,35*75 +$GPGSV,3,2,11,19,02,028,19,04,06,241,19,13,30,223,22,27,19,284,31*7E +$GPGSV,3,3,11,11,06,337,25,01,,,17,03,14,055,30*7D +$GPRMC,222504.000,A,2734.59032,S,15305.56580,E,37.6,143.6,030308,11.2,W,A*02 +$GPVTG,143.6,T,154.8,M,37.6,N,69.7,K,A*21 +$GPGGA,222505.000,2734.59874,S,15305.57271,E,1,06,1.5,59.4,M,39.2,M,,*70 +$GPGLL,2734.59874,S,15305.57271,E,222505.000,A,A*47 +$GPGSA,A,3,16,25,23,20,27,03,,,,,,,2.5,1.5,2.0*36 +$GPGST,222505.000,17.4,5.5,11.8,3.4,5.0,10.8,17.3*61 +$GPGSV,3,1,11,16,49,115,44,25,39,268,35,23,58,175,39,20,71,336,36*71 +$GPGSV,3,2,11,19,02,028,21,04,06,241,19,13,30,223,24,27,19,284,31*73 +$GPGSV,3,3,11,11,06,337,,01,,,17,03,14,055,29*72 +$GPRMC,222505.000,A,2734.59874,S,15305.57271,E,37.3,143.7,030308,11.2,W,A*05 +$GPVTG,143.7,T,154.9,M,37.3,N,69.1,K,A*22 +$GPGGA,222506.000,2734.60703,S,15305.57943,E,1,07,1.2,60.1,M,39.2,M,,*75 +$GPGLL,2734.60703,S,15305.57943,E,222506.000,A,A*4B +$GPGSA,A,3,16,25,23,20,13,27,03,,,,,,2.1,1.2,1.7*33 +$GPGST,222506.000,16.1,6.2,11.7,15.3,6.1,10.4,17.4*54 +$GPGSV,3,1,11,16,49,115,43,25,39,268,34,23,58,175,37,20,71,336,36*79 +$GPGSV,3,2,11,19,02,028,21,04,06,241,,13,30,223,24,27,19,284,31*7B +$GPGSV,3,3,11,11,06,337,,01,,,17,03,14,055,28*73 +$GPRMC,222506.000,A,2734.60703,S,15305.57943,E,36.5,143.9,030308,11.2,W,A*00 +$GPVTG,143.9,T,155.1,M,36.5,N,67.6,K,A*2B +$GPGGA,222507.000,2734.61507,S,15305.58593,E,1,07,1.2,60.9,M,39.2,M,,*75 +$GPGLL,2734.61507,S,15305.58593,E,222507.000,A,A*43 +$GPGSA,A,3,16,25,23,20,13,27,03,,,,,,2.1,1.2,1.7*33 +$GPGST,222507.000,14.0,6.8,11.8,10.9,6.4,10.7,18.5*54 +$GPGSV,3,1,11,16,49,115,43,25,39,268,34,23,58,175,37,20,71,336,34*7B +$GPGSV,3,2,11,19,02,028,21,04,06,241,,13,30,223,29,27,19,284,34*73 +$GPGSV,3,3,11,11,06,337,,01,,,17,03,14,055,29*72 +$GPRMC,222507.000,A,2734.61507,S,15305.58593,E,35.4,143.9,030308,11.2,W,A*0A +$GPVTG,143.9,T,155.1,M,35.4,N,65.5,K,A*28 +$GPGGA,222508.000,2734.62275,S,15305.59221,E,1,06,1.7,61.8,M,39.2,M,,*70 +$GPGLL,2734.62275,S,15305.59221,E,222508.000,A,A*42 +$GPGSA,A,3,16,25,23,20,13,27,,,,,,,3.3,1.7,2.8*3A +$GPGST,222508.000,12.5,9.3,16.3,19.5,9.4,14.4,27.5*51 +$GPGSV,3,1,11,16,49,115,43,25,39,268,33,23,58,175,38,20,71,336,31*76 +$GPGSV,3,2,11,19,02,028,21,04,06,241,,13,30,223,30,27,19,284,35*7A +$GPGSV,3,3,11,11,06,337,,01,,,17,03,14,055,28*73 +$GPRMC,222508.000,A,2734.62275,S,15305.59221,E,33.9,143.9,030308,11.2,W,A*00 +$GPVTG,143.9,T,155.1,M,33.9,N,62.9,K,A*28 +$GPGGA,222509.000,2734.63006,S,15305.59817,E,1,06,1.7,62.7,M,39.2,M,,*75 +$GPGLL,2734.63006,S,15305.59817,E,222509.000,A,A*4B +$GPGSA,A,3,16,25,23,20,13,27,,,,,,,3.3,1.7,2.8*3A +$GPGST,222509.000,10.4,8.1,14.2,21.9,8.4,12.3,23.7*52 +$GPGSV,3,1,11,16,49,115,44,25,39,268,32,23,58,175,37,20,71,336,29*76 +$GPGSV,3,2,11,19,02,028,21,04,06,241,,13,30,223,28,27,19,284,35*73 +$GPGSV,3,3,11,11,06,337,,01,,,17,03,14,055,30*7A +$GPRMC,222509.000,A,2734.63006,S,15305.59817,E,32.2,143.9,030308,11.2,W,A*03 +$GPVTG,143.9,T,155.1,M,32.2,N,59.7,K,A*24 +$GPGGA,222510.000,2734.63706,S,15305.60376,E,1,06,1.7,63.5,M,39.2,M,,*7F +$GPGLL,2734.63706,S,15305.60376,E,222510.000,A,A*42 +$GPGSA,A,3,16,25,23,20,13,27,,,,,,,3.3,1.7,2.8*3A +$GPGST,222510.000,12.4,8.3,12.9,28.0,8.7,11.0,21.6*57 +$GPGSV,3,1,11,16,48,115,43,25,39,268,32,23,58,175,37,20,71,336,29*70 +$GPGSV,3,2,11,19,02,028,20,04,06,241,,13,30,223,31,27,19,284,35*7A +$GPGSV,3,3,11,11,06,337,,01,,,17,03,14,055,25*7E +$GPRMC,222510.000,A,2734.63706,S,15305.60376,E,30.6,144.3,030308,11.2,W,A*01 +$GPVTG,144.3,T,155.5,M,30.6,N,56.7,K,A*24 +$GPGGA,222511.000,2734.64376,S,15305.60904,E,1,07,1.2,64.4,M,39.2,M,,*77 +$GPGLL,2734.64376,S,15305.60904,E,222511.000,A,A*48 +$GPGSA,A,3,16,25,23,20,13,27,03,,,,,,2.1,1.2,1.7*33 +$GPGST,222511.000,14.6,5.7,10.5,2.7,5.2,9.6,15.0*5C +$GPGSV,3,1,11,16,48,115,44,25,39,268,32,23,58,175,37,20,71,336,28*76 +$GPGSV,3,2,11,19,02,028,20,04,06,241,23,13,30,223,29,27,19,284,36*71 +$GPGSV,3,3,11,11,06,337,,01,,,17,03,14,055,29*72 +$GPRMC,222511.000,A,2734.64376,S,15305.60904,E,29.1,144.2,030308,11.2,W,A*05 +$GPVTG,144.2,T,155.4,M,29.1,N,53.9,K,A*20 +$GPGGA,222512.000,2734.64992,S,15305.61405,E,1,07,1.2,65.4,M,39.2,M,,*78 +$GPGLL,2734.64992,S,15305.61405,E,222512.000,A,A*46 +$GPGSA,A,3,16,25,23,20,13,27,03,,,,,,2.1,1.2,1.7*33 +$GPGST,222512.000,13.4,17.0,5.7,85.6,5.3,15.5,23.6*5A +$GPGSV,3,1,11,16,48,115,45,25,39,268,33,23,58,175,38,20,71,336,28*79 +$GPGSV,3,2,11,19,02,028,20,04,06,241,23,13,30,223,26,27,19,284,33*7B +$GPGSV,3,3,11,11,06,337,24,01,,,17,03,14,055,27*7A +$GPRMC,222512.000,A,2734.64992,S,15305.61405,E,27.2,143.6,030308,11.2,W,A*05 +$GPVTG,143.6,T,154.8,M,27.2,N,50.5,K,A*2C +$GPGGA,222513.000,2734.65572,S,15305.61884,E,1,07,1.2,66.2,M,39.2,M,,*7A +$GPGLL,2734.65572,S,15305.61884,E,222513.000,A,A*41 +$GPGSA,A,3,16,25,23,20,13,27,03,,,,,,2.1,1.2,1.7*33 +$GPGST,222513.000,12.3,7.0,14.8,2.4,6.5,13.5,21.4*6D +$GPGSV,3,1,10,16,48,115,44,25,39,268,35,23,58,175,38,20,71,336,28*7F +$GPGSV,3,2,10,19,02,028,20,04,06,241,23,13,30,223,23,27,19,284,33*7F +$GPGSV,3,3,10,11,06,337,24,03,14,055,28*73 +$GPRMC,222513.000,A,2734.65572,S,15305.61884,E,25.8,143.6,030308,11.2,W,A*0A +$GPVTG,143.6,T,154.8,M,25.8,N,47.9,K,A*2E +$GPGGA,222514.000,2734.66155,S,15305.62364,E,1,06,1.5,67.0,M,39.2,M,,*7C +$GPGLL,2734.66155,S,15305.62364,E,222514.000,A,A*42 +$GPGSA,A,3,16,25,23,20,27,03,,,,,,,2.5,1.5,2.0*36 +$GPGST,222514.000,25.5,6.1,14.4,3.1,5.6,13.2,19.2*6A +$GPGSV,3,1,10,16,48,115,44,25,39,268,33,23,58,175,38,20,71,336,26*77 +$GPGSV,3,2,10,19,02,028,18,04,06,241,23,13,30,223,23,27,19,284,34*73 +$GPGSV,3,3,10,11,06,337,28,03,14,055,29*7E +$GPRMC,222514.000,A,2734.66155,S,15305.62364,E,25.9,143.6,030308,11.2,W,A*08 +$GPVTG,143.6,T,154.8,M,25.9,N,48.0,K,A*29 +$GPGGA,222515.000,2734.66761,S,15305.62860,E,1,06,1.5,67.5,M,39.2,M,,*76 +$GPGLL,2734.66761,S,15305.62860,E,222515.000,A,A*4D +$GPGSA,A,3,16,25,23,20,27,03,,,,,,,2.5,1.5,2.0*36 +$GPGST,222515.000,20.1,5.5,13.0,3.0,5.1,11.8,17.4*68 +$GPGSV,3,1,10,16,48,115,44,25,39,268,32,23,58,175,38,20,71,336,26*76 +$GPGSV,3,2,10,19,02,028,18,04,06,241,23,13,30,223,24,27,19,284,34*74 +$GPGSV,3,3,10,11,06,337,28,03,14,055,24*73 +$GPRMC,222515.000,A,2734.66761,S,15305.62860,E,26.9,143.7,030308,11.2,W,A*05 +$GPVTG,143.7,T,154.9,M,26.9,N,49.8,K,A*23 +$GPGGA,222516.000,2734.67384,S,15305.63376,E,1,06,1.5,68.2,M,39.2,M,,*7E +$GPGLL,2734.67384,S,15305.63376,E,222516.000,A,A*4D +$GPGSA,A,3,16,25,23,20,27,03,,,,,,,2.5,1.5,2.0*36 +$GPGST,222516.000,16.4,5.8,11.5,4.5,5.3,10.5,17.3*6A +$GPGSV,3,1,10,16,48,115,44,25,39,268,32,23,58,175,38,20,71,336,30*71 +$GPGSV,3,2,10,19,02,028,18,04,06,241,23,13,30,223,24,27,19,284,33*73 +$GPGSV,3,3,10,11,06,337,28,03,14,055,28*7F +$GPRMC,222516.000,A,2734.67384,S,15305.63376,E,27.7,143.8,030308,11.2,W,A*05 +$GPVTG,143.8,T,155.0,M,27.7,N,51.4,K,A*2E +$GPGGA,222517.000,2734.68035,S,15305.63901,E,1,06,1.5,68.8,M,39.2,M,,*79 +$GPGLL,2734.68035,S,15305.63901,E,222517.000,A,A*40 +$GPGSA,A,3,16,25,23,20,27,03,,,,,,,2.5,1.5,2.0*36 +$GPGST,222517.000,19.1,6.2,12.1,7.2,5.8,11.0,15.3*66 +$GPGSV,3,1,10,16,48,115,44,25,39,268,34,23,58,175,38,20,71,336,32*75 +$GPGSV,3,2,10,19,02,028,20,04,06,241,23,13,30,223,24,27,19,284,34*7F +$GPGSV,3,3,10,11,06,337,24,03,14,055,29*72 +$GPRMC,222517.000,A,2734.68035,S,15305.63901,E,28.6,144.1,030308,11.2,W,A*08 +$GPVTG,144.1,T,155.3,M,28.6,N,53.0,K,A*2B +$GPGGA,222518.000,2734.68718,S,15305.64446,E,1,07,1.4,69.1,M,39.2,M,,*7F +$GPGLL,2734.68718,S,15305.64446,E,222518.000,A,A*4E +$GPGSA,A,3,16,25,23,20,27,11,03,,,,,,2.4,1.4,1.9*3C +$GPGST,222518.000,13.8,5.5,10.6,5.8,5.1,9.6,13.4*54 +$GPGSV,3,1,10,16,48,115,43,25,39,268,33,23,58,175,37,20,71,336,35*7D +$GPGSV,3,2,10,19,02,028,20,04,06,241,18,13,30,223,24,27,19,284,33*70 +$GPGSV,3,3,10,11,06,337,22,03,14,055,33*7F +$GPRMC,222518.000,A,2734.68718,S,15305.64446,E,29.9,144.4,030308,11.2,W,A*0D +$GPVTG,144.4,T,155.6,M,29.9,N,55.3,K,A*20 +$GPGGA,222519.000,2734.69424,S,15305.65010,E,1,07,1.4,69.5,M,39.2,M,,*71 +$GPGLL,2734.69424,S,15305.65010,E,222519.000,A,A*44 +$GPGSA,A,3,16,25,23,20,27,11,03,,,,,,2.4,1.4,1.9*3C +$GPGST,222519.000,14.0,13.4,5.0,89.4,4.6,12.3,18.8*58 +$GPGSV,3,1,10,16,48,115,44,25,39,268,34,23,58,175,37,20,71,336,37*7F +$GPGSV,3,2,10,19,02,028,20,04,06,241,18,13,30,223,23,27,19,284,31*75 +$GPGSV,3,3,10,11,06,337,26,03,14,055,35*7D +$GPRMC,222519.000,A,2734.69424,S,15305.65010,E,31.0,144.4,030308,11.2,W,A*07 +$GPVTG,144.4,T,155.6,M,31.0,N,57.5,K,A*24 +$GPGGA,222520.000,2734.70163,S,15305.65604,E,1,07,1.4,69.6,M,39.2,M,,*75 +$GPGLL,2734.70163,S,15305.65604,E,222520.000,A,A*43 +$GPGSA,A,3,16,25,23,20,27,11,03,,,,,,2.4,1.4,1.9*3C +$GPGST,222520.000,9.8,11.6,4.7,89.0,4.3,10.6,15.9*6A +$GPGSV,3,1,10,16,48,115,44,25,39,268,35,23,58,175,39,20,71,336,36*71 +$GPGSV,3,2,10,19,02,028,20,04,06,241,19,13,30,223,23,27,19,284,31*74 +$GPGSV,3,3,10,11,06,337,31,03,14,055,37*79 +$GPRMC,222520.000,A,2734.70163,S,15305.65604,E,32.5,144.1,030308,11.2,W,A*03 +$GPVTG,144.1,T,155.3,M,32.5,N,60.2,K,A*21 +$GPGGA,222521.000,2734.70923,S,15305.66218,E,1,07,1.4,69.5,M,39.2,M,,*71 +$GPGLL,2734.70923,S,15305.66218,E,222521.000,A,A*44 +$GPGSA,A,3,16,25,23,20,27,11,03,,,,,,2.4,1.4,1.9*3C +$GPGST,222521.000,11.1,6.2,10.8,9.6,5.8,9.8,16.8*53 +$GPGSV,3,1,10,16,48,115,44,25,39,268,36,23,58,175,40,20,71,336,38*72 +$GPGSV,3,2,10,19,02,028,20,04,06,241,19,13,30,223,23,27,19,284,26*72 +$GPGSV,3,3,10,11,06,338,31,03,14,055,37*76 +$GPRMC,222521.000,A,2734.70923,S,15305.66218,E,33.5,144.0,030308,11.2,W,A*04 +$GPVTG,144.0,T,155.3,M,33.5,N,62.0,K,A*21 +$GPGGA,222522.000,2734.71700,S,15305.66845,E,1,06,1.5,69.1,M,39.2,M,,*7A +$GPGLL,2734.71700,S,15305.66845,E,222522.000,A,A*4B +$GPGSA,A,3,16,25,23,20,27,03,,,,,,,2.5,1.5,2.0*36 +$GPGST,222522.000,15.0,5.7,9.9,5.5,5.2,9.0,15.4*68 +$GPGSV,3,1,10,16,48,115,43,25,39,268,36,23,58,175,40,20,71,336,37*7A +$GPGSV,3,2,10,19,02,028,20,04,06,241,24,13,30,223,23,27,19,284,26*7C +$GPGSV,3,3,10,11,06,338,25,03,14,055,37*73 +$GPRMC,222522.000,A,2734.71700,S,15305.66845,E,34.2,144.1,030308,11.2,W,A*0A +$GPVTG,144.1,T,155.3,M,34.2,N,63.4,K,A*25 +$GPGGA,222523.000,2734.72487,S,15305.67483,E,1,07,1.4,68.6,M,39.2,M,,*75 +$GPGLL,2734.72487,S,15305.67483,E,222523.000,A,A*42 +$GPGSA,A,3,16,25,23,20,27,11,03,,,,,,2.4,1.4,1.9*3C +$GPGST,222523.000,13.8,5.2,10.1,3.9,4.8,9.2,13.8*5B +$GPGSV,3,1,10,16,48,115,44,25,39,268,37,23,58,175,41,20,71,336,35*7F +$GPGSV,3,2,10,19,02,028,20,04,06,241,24,13,30,223,23,27,19,284,26*7C +$GPGSV,3,3,10,11,06,338,23,03,14,055,31*73 +$GPRMC,222523.000,A,2734.72487,S,15305.67483,E,34.7,144.2,030308,11.2,W,A*05 +$GPVTG,144.2,T,155.4,M,34.7,N,64.3,K,A*24 +$GPGGA,222524.000,2734.73280,S,15305.68126,E,1,07,1.4,68.1,M,39.2,M,,*70 +$GPGLL,2734.73280,S,15305.68126,E,222524.000,A,A*40 +$GPGSA,A,3,16,25,23,20,27,11,03,,,,,,2.4,1.4,1.9*3C +$GPGST,222524.000,10.5,4.9,9.4,3.5,4.5,8.6,12.8*60 +$GPGSV,3,1,10,16,48,115,44,25,39,268,37,23,58,175,41,20,71,336,35*7F +$GPGSV,3,2,10,19,02,028,20,04,06,241,22,13,30,223,23,27,19,284,26*7A +$GPGSV,3,3,10,11,06,338,25,03,14,055,29*7C +$GPRMC,222524.000,A,2734.73280,S,15305.68126,E,35.0,144.2,030308,11.2,W,A*01 +$GPVTG,144.2,T,155.4,M,35.0,N,64.9,K,A*28 +$GPGGA,222525.000,2734.74083,S,15305.68778,E,1,07,1.4,67.7,M,39.2,M,,*73 +$GPGLL,2734.74083,S,15305.68778,E,222525.000,A,A*4A +$GPGSA,A,3,16,25,23,20,27,11,03,,,,,,2.4,1.4,1.9*3C +$GPGST,222525.000,10.3,5.2,13.4,3.6,4.8,12.3,20.4*6B +$GPGSV,3,1,10,16,48,115,43,25,39,268,38,23,58,175,40,20,71,336,36*75 +$GPGSV,3,2,10,19,02,028,20,04,06,241,22,13,30,223,23,27,19,284,23*7F +$GPGSV,3,3,10,11,06,338,27,03,14,055,36*70 +$GPRMC,222525.000,A,2734.74083,S,15305.68778,E,35.6,144.2,030308,11.2,W,A*0D +$GPVTG,144.2,T,155.4,M,35.6,N,65.9,K,A*2F +$GPGGA,222526.000,2734.74894,S,15305.69428,E,1,06,1.5,67.2,M,39.2,M,,*7C +$GPGLL,2734.74894,S,15305.69428,E,222526.000,A,A*40 +$GPGSA,A,3,16,25,23,20,27,03,,,,,,,2.5,1.5,2.0*36 +$GPGST,222526.000,8.0,5.7,12.0,2.6,5.2,10.9,17.4*54 +$GPGSV,3,1,10,16,48,115,43,25,39,268,37,23,58,175,40,20,71,336,35*79 +$GPGSV,3,2,10,19,02,028,20,04,06,241,22,13,30,223,23,27,19,284,24*78 +$GPGSV,3,3,10,11,06,338,27,03,14,055,39*7F +$GPRMC,222526.000,A,2734.74894,S,15305.69428,E,35.8,144.5,030308,11.2,W,A*0E +$GPVTG,144.5,T,155.7,M,35.8,N,66.3,K,A*2C +$GPGGA,222527.000,2734.75707,S,15305.70075,E,1,05,1.7,66.8,M,39.2,M,,*77 +$GPGLL,2734.75707,S,15305.70075,E,222527.000,A,A*41 +$GPGSA,A,3,16,25,23,20,03,,,,,,,,2.9,1.7,2.4*39 +$GPGST,222527.000,13.9,6.3,10.9,6.3,5.9,10.0,18.2*60 +$GPGSV,3,1,10,16,48,115,44,25,39,268,38,23,58,175,40,20,71,336,33*77 +$GPGSV,3,2,10,19,02,028,,04,06,241,25,13,30,223,23,27,19,284,26*7F +$GPGSV,3,3,10,11,06,338,,03,14,055,36*75 +$GPRMC,222527.000,A,2734.75707,S,15305.70075,E,35.8,144.6,030308,11.2,W,A*0C +$GPVTG,144.6,T,155.8,M,35.8,N,66.2,K,A*21 +$GPGGA,222528.000,2734.76518,S,15305.70724,E,1,06,1.5,66.1,M,39.2,M,,*7C +$GPGLL,2734.76518,S,15305.70724,E,222528.000,A,A*42 +$GPGSA,A,3,16,25,23,20,27,03,,,,,,,2.5,1.5,2.0*36 +$GPGST,222528.000,11.3,5.6,10.1,4.5,5.2,9.2,16.1*51 +$GPGSV,3,1,10,16,48,115,43,25,39,268,39,23,58,175,39,20,71,336,28*75 +$GPGSV,3,2,10,19,02,028,,04,06,241,25,13,30,223,23,27,19,284,26*7F +$GPGSV,3,3,10,11,06,338,,03,14,055,36*75 +$GPRMC,222528.000,A,2734.76518,S,15305.70724,E,35.7,144.4,030308,11.2,W,A*02 +$GPVTG,144.4,T,155.6,M,35.7,N,66.2,K,A*22 +$GPGGA,222529.000,2734.77313,S,15305.71385,E,1,06,1.5,66.1,M,39.2,M,,*7F +$GPGLL,2734.77313,S,15305.71385,E,222529.000,A,A*41 +$GPGSA,A,3,16,25,23,20,27,03,,,,,,,2.5,1.5,2.0*36 +$GPGST,222529.000,10.9,5.6,12.5,5.4,5.2,11.4,20.9*6F +$GPGSV,3,1,10,16,48,115,41,25,39,268,40,23,58,175,36,20,71,336,28*76 +$GPGSV,3,2,10,19,02,028,,04,06,241,25,13,30,223,23,27,19,284,24*7D +$GPGSV,3,3,10,11,06,338,27,03,14,055,30*76 +$GPRMC,222529.000,A,2734.77313,S,15305.71385,E,35.6,143.5,030308,11.2,W,A*06 +$GPVTG,143.5,T,154.7,M,35.6,N,65.8,K,A*2C +$GPGGA,222530.000,2734.78106,S,15305.72042,E,1,06,1.5,66.0,M,39.2,M,,*74 +$GPGLL,2734.78106,S,15305.72042,E,222530.000,A,A*4B +$GPGSA,A,3,16,25,23,20,27,03,,,,,,,2.5,1.5,2.0*36 +$GPGST,222530.000,9.4,5.4,18.9,2.4,4.9,17.3,30.6*54 +$GPGSV,3,1,10,16,48,115,40,25,39,268,40,23,58,175,36,20,71,336,28*77 +$GPGSV,3,2,10,19,02,028,,04,06,241,25,13,30,223,23,27,19,284,26*7F +$GPGSV,3,3,10,11,06,338,27,03,14,055,29*7E +$GPRMC,222530.000,A,2734.78106,S,15305.72042,E,35.5,143.7,030308,11.2,W,A*0D +$GPVTG,143.7,T,155.0,M,35.5,N,65.8,K,A*2B +$GPGGA,222531.000,2734.78918,S,15305.72691,E,1,05,4.4,66.0,M,39.2,M,,*7D +$GPGLL,2734.78918,S,15305.72691,E,222531.000,A,A*45 +$GPGSA,A,3,16,25,23,27,11,,,,,,,,9.3,4.4,8.2*36 +$GPGST,222531.000,9.1,8.5,53.9,3.2,8.2,49.2,81.3*56 +$GPGSV,3,1,10,16,48,115,40,25,39,268,39,23,58,175,37,20,71,336,28*78 +$GPGSV,3,2,10,19,02,028,,04,06,241,25,13,31,223,23,27,19,284,25*7D +$GPGSV,3,3,10,11,06,338,24,03,14,055,22*76 +$GPRMC,222531.000,A,2734.78918,S,15305.72691,E,35.9,144.5,030308,11.2,W,A*0A +$GPVTG,144.5,T,155.7,M,35.9,N,66.4,K,A*2A +$GPGGA,222532.000,2734.79737,S,15305.73347,E,1,06,1.5,66.0,M,39.2,M,,*74 +$GPGLL,2734.79737,S,15305.73347,E,222532.000,A,A*4B +$GPGSA,A,3,16,25,23,20,27,03,,,,,,,2.5,1.5,2.0*36 +$GPGST,222532.000,11.0,6.8,38.7,1.2,6.3,35.3,58.4*69 +$GPGSV,3,1,10,16,48,115,40,25,39,268,39,23,58,175,36,20,71,336,28*79 +$GPGSV,3,2,10,19,02,028,,04,06,241,25,13,31,223,24,27,19,284,23*7C +$GPGSV,3,3,10,11,06,338,24,03,14,055,30*75 +$GPRMC,222532.000,A,2734.79737,S,15305.73347,E,36.1,144.5,030308,11.2,W,A*0F +$GPVTG,144.5,T,155.7,M,36.1,N,66.9,K,A*2C +$GPGGA,222533.000,2734.80571,S,15305.74004,E,1,06,4.1,66.1,M,39.2,M,,*70 +$GPGLL,2734.80571,S,15305.74004,E,222533.000,A,A*4F +$GPGSA,A,3,16,25,23,27,11,03,,,,,,,8.3,4.1,7.3*3F +$GPGST,222533.000,9.4,6.1,45.5,0.4,5.6,41.6,69.5*50 +$GPGSV,3,1,10,16,48,115,40,25,39,268,39,23,58,175,37,20,71,336,28*78 +$GPGSV,3,2,10,19,02,028,,04,06,241,23,13,31,223,24,27,19,284,25*7C +$GPGSV,3,3,10,11,06,338,22,03,14,055,25*77 +$GPRMC,222533.000,A,2734.80571,S,15305.74004,E,36.6,145.0,030308,11.2,W,A*08 +$GPVTG,145.0,T,156.2,M,36.6,N,67.7,K,A*26 +$GPGGA,222534.000,2734.81441,S,15305.74656,E,1,06,1.8,65.2,M,39.2,M,,*79 +$GPGLL,2734.81441,S,15305.74656,E,222534.000,A,A*4A +$GPGSA,A,3,16,25,23,13,27,03,,,,,,,3.5,1.8,3.1*3A +$GPGST,222534.000,20.2,5.8,45.7,1.7,5.4,41.7,71.3*6C +$GPGSV,3,1,10,16,48,115,40,25,39,268,38,23,58,175,37,20,71,336,28*79 +$GPGSV,3,2,10,19,02,028,,04,06,241,23,13,31,223,25,27,19,284,25*7D +$GPGSV,3,3,10,11,06,338,22,03,14,055,31*72 +$GPRMC,222534.000,A,2734.81441,S,15305.74656,E,37.6,146.2,030308,11.2,W,A*0D +$GPVTG,146.2,T,157.5,M,37.6,N,69.7,K,A*2E +$GPGGA,222535.000,2734.82349,S,15305.75307,E,1,05,1.9,63.5,M,39.2,M,,*77 +$GPGLL,2734.82349,S,15305.75307,E,222535.000,A,A*47 +$GPGSA,A,3,16,25,23,13,03,,,,,,,,3.6,1.9,3.1*3D +$GPGST,222535.000,27.6,7.0,40.6,3.1,6.7,37.1,68.4*6C +$GPGSV,3,1,10,16,48,115,40,25,39,268,36,23,58,175,37,20,71,336,28*77 +$GPGSV,3,2,10,19,02,028,,04,06,241,20,13,31,223,25,27,19,284,23*78 +$GPGSV,3,3,10,11,06,338,22,03,14,055,26*74 +$GPRMC,222535.000,A,2734.82349,S,15305.75307,E,38.7,147.3,030308,11.2,W,A*0E +$GPVTG,147.3,T,158.6,M,38.7,N,71.7,K,A*25 +$GPGGA,222536.000,2734.83215,S,15305.75969,E,1,05,1.7,63.5,M,39.2,M,,*71 +$GPGLL,2734.83215,S,15305.75969,E,222536.000,A,A*4F +$GPGSA,A,3,16,25,23,20,03,,,,,,,,2.9,1.7,2.4*39 +$GPGST,222536.000,7.9,6.3,97.2,3.9,8.3,88.7,161.0*62 +$GPGSV,3,1,10,16,48,115,40,25,39,268,37,23,58,175,36,20,71,336,28*77 +$GPGSV,3,2,10,19,02,028,,04,06,241,20,13,31,223,25,27,19,284,23*78 +$GPGSV,3,3,10,11,06,338,22,03,14,055,26*74 +$GPRMC,222536.000,A,2734.83215,S,15305.75969,E,37.6,145.6,030308,11.2,W,A*0F +$GPVTG,145.6,T,156.8,M,37.6,N,69.7,K,A*25 +$GPGGA,222537.000,2734.84076,S,15305.76655,E,1,05,1.7,63.5,M,39.2,M,,*73 +$GPGLL,2734.84076,S,15305.76655,E,222537.000,A,A*4D +$GPGSA,A,3,16,25,23,20,03,,,,,,,,2.9,1.7,2.4*39 +$GPGST,222537.000,16.0,7.8,110.8,2.1,8.0,101.2,209.1*57 +$GPGSV,3,1,10,16,48,115,39,25,39,268,36,23,58,175,34,20,71,336,28*7A +$GPGSV,3,2,10,19,02,028,,04,06,241,22,13,31,223,25,27,19,284,23*7A +$GPGSV,3,3,10,11,06,338,22,03,14,055,25*77 +$GPRMC,222537.000,A,2734.84076,S,15305.76655,E,37.9,144.6,030308,11.2,W,A*03 +$GPVTG,144.6,T,155.8,M,37.9,N,70.3,K,A*24 +$GPGGA,222538.000,2734.84945,S,15305.77356,E,1,05,1.9,63.5,M,39.2,M,,*7C +$GPGLL,2734.84945,S,15305.77356,E,222538.000,A,A*4C +$GPGSA,A,3,16,25,23,13,03,,,,,,,,3.6,1.9,3.1*3D +$GPGST,222538.000,13.1,8.0,61.7,1.6,7.5,56.4,113.0*51 +$GPGSV,3,1,10,16,48,115,40,25,39,268,37,23,58,175,32,20,71,336,*79 +$GPGSV,3,2,10,19,02,028,,04,06,241,22,13,31,223,25,27,19,284,23*7A +$GPGSV,3,3,10,11,06,338,22,03,14,055,28*7A +$GPRMC,222538.000,A,2734.84945,S,15305.77356,E,38.4,144.2,030308,11.2,W,A*04 +$GPVTG,144.2,T,155.4,M,38.4,N,71.1,K,A*2D +$GPGGA,222539.000,2734.85792,S,15305.78022,E,1,05,1.9,63.5,M,39.2,M,,*77 +$GPGLL,2734.85792,S,15305.78022,E,222539.000,A,A*47 +$GPGSA,A,3,16,25,23,13,03,,,,,,,,3.6,1.9,3.1*3D +$GPGST,222539.000,6.4,7.5,72.7,1.5,7.1,66.5,137.2*68 +$GPGSV,3,1,10,16,48,115,40,25,39,268,38,23,58,175,32,20,71,336,*76 +$GPGSV,3,2,10,19,02,028,,04,06,241,22,13,31,223,25,27,19,284,23*7A +$GPGSV,3,3,10,11,06,338,22,03,14,055,28*7A +$GPRMC,222539.000,A,2734.85792,S,15305.78022,E,37.1,144.9,030308,11.2,W,A*0E +$GPVTG,144.9,T,156.1,M,37.1,N,68.7,K,A*24 +$GPGGA,222540.000,2734.86604,S,15305.78646,E,1,05,4.4,63.5,M,39.2,M,,*78 +$GPGLL,2734.86604,S,15305.78646,E,222540.000,A,A*40 +$GPGSA,A,3,16,25,23,27,11,,,,,,,,9.3,4.4,8.2*36 +$GPGST,222540.000,13.6,8.3,67.7,1.8,7.8,61.9,111.1*55 +$GPGSV,3,1,10,16,48,115,40,25,39,268,38,23,58,175,32,20,71,336,*76 +$GPGSV,3,2,10,19,02,028,,04,06,241,26,13,31,223,22,27,19,284,22*78 +$GPGSV,3,3,10,11,06,338,20,03,14,055,28*78 +$GPRMC,222540.000,A,2734.86604,S,15305.78646,E,35.3,145.6,030308,11.2,W,A*07 +$GPVTG,145.6,T,156.8,M,35.3,N,65.4,K,A*2D +$GPGGA,222541.000,2734.87421,S,15305.79222,E,1,06,1.8,63.5,M,39.2,M,,*70 +$GPGLL,2734.87421,S,15305.79222,E,222541.000,A,A*42 +$GPGSA,A,3,16,25,23,13,27,03,,,,,,,3.5,1.8,3.1*3A +$GPGST,222541.000,11.7,33.3,8.1,87.4,7.5,30.4,54.6*51 +$GPGSV,3,1,10,16,48,115,39,25,39,268,33,23,58,175,36,20,71,336,*77 +$GPGSV,3,2,10,19,02,028,,04,06,241,26,13,31,223,22,27,19,284,22*78 +$GPGSV,3,3,10,11,06,338,20,03,14,055,26*76 +$GPRMC,222541.000,A,2734.87421,S,15305.79222,E,34.6,147.7,030308,11.2,W,A*02 +$GPVTG,147.7,T,158.9,M,34.6,N,64.1,K,A*21 +$GPGGA,222542.000,2734.88135,S,15305.79765,E,1,06,1.8,63.5,M,39.2,M,,*7A +$GPGLL,2734.88135,S,15305.79765,E,222542.000,A,A*48 +$GPGSA,A,3,16,25,23,13,27,03,,,,,,,3.5,1.8,3.1*3A +$GPGST,222542.000,23.5,7.9,53.0,0.2,7.2,48.5,78.4*6F +$GPGSV,3,1,10,16,48,115,40,25,39,268,36,23,58,175,35,20,71,336,*7F +$GPGSV,3,2,10,19,02,028,,04,06,241,27,13,31,223,23,27,19,284,25*7F +$GPGSV,3,3,10,11,06,338,20,03,14,055,26*76 +$GPRMC,222542.000,A,2734.88135,S,15305.79765,E,31.0,145.8,030308,11.2,W,A*06 +$GPVTG,145.8,T,157.0,M,31.0,N,57.4,K,A*2C +$GPGGA,222543.000,2734.88798,S,15305.80287,E,1,07,1.2,63.0,M,39.2,M,,*7B +$GPGLL,2734.88798,S,15305.80287,E,222543.000,A,A*47 +$GPGSA,A,3,16,25,23,20,13,27,03,,,,,,2.1,1.2,1.7*33 +$GPGST,222543.000,18.8,6.7,28.4,0.5,6.1,26.0,41.8*62 +$GPGSV,3,1,10,16,48,115,40,25,39,268,39,23,58,175,35,20,71,336,21*73 +$GPGSV,3,2,10,19,02,028,,04,06,241,37,13,31,223,22,27,19,284,24*7E +$GPGSV,3,3,10,11,06,338,20,03,14,055,32*73 +$GPRMC,222543.000,A,2734.88798,S,15305.80287,E,29.0,144.8,030308,11.2,W,A*01 +$GPVTG,144.8,T,156.0,M,29.0,N,53.8,K,A*2D +$GPGGA,222544.000,2734.89328,S,15305.80767,E,1,06,1.8,62.9,M,39.2,M,,*7A +$GPGLL,2734.89328,S,15305.80767,E,222544.000,A,A*45 +$GPGSA,A,3,16,25,23,13,27,03,,,,,,,3.5,1.8,3.1*3A +$GPGST,222544.000,14.9,35.2,5.8,89.5,5.4,32.2,52.6*52 +$GPGSV,3,1,10,16,48,115,43,25,39,268,40,23,58,175,25,20,71,336,21*7F +$GPGSV,3,2,10,19,02,028,,04,06,241,28,13,31,223,30,27,19,284,29*7E +$GPGSV,3,3,10,11,06,338,20,03,14,055,33*72 +$GPRMC,222544.000,A,2734.89328,S,15305.80767,E,24.5,140.9,030308,11.2,W,A*0E +$GPVTG,140.9,T,152.1,M,24.5,N,45.3,K,A*29 +$GPGGA,222545.000,2734.89633,S,15305.81084,E,1,05,1.9,62.9,M,39.2,M,,*7D +$GPGLL,2734.89633,S,15305.81084,E,222545.000,A,A*40 +$GPGSA,A,3,16,25,23,13,03,,,,,,,,3.6,1.9,3.1*3D +$GPGST,222545.000,19.5,6.0,33.0,1.0,5.5,30.2,52.4*69 +$GPGSV,3,1,10,16,48,115,41,25,39,268,34,23,58,175,29,20,71,336,30*72 +$GPGSV,3,2,10,19,02,028,,04,06,241,25,13,31,223,29,27,19,284,30*73 +$GPGSV,3,3,10,11,06,338,20,03,14,055,30*71 +$GPRMC,222545.000,A,2734.89633,S,15305.81084,E,14.6,136.6,030308,11.2,W,A*05 +$GPVTG,136.6,T,147.8,M,14.6,N,27.0,K,A*2D +$GPGGA,222546.000,2734.89236,S,15305.81130,E,1,06,1.3,62.6,M,39.2,M,,*77 +$GPGLL,2734.89236,S,15305.81130,E,222546.000,A,A*4C +$GPGSA,A,3,16,25,23,20,13,03,,,,,,,2.3,1.3,1.9*3B +$GPGST,222546.000,11.5,5.6,15.6,0.9,5.2,14.3,26.4*6E +$GPGSV,3,1,10,16,48,115,35,25,39,268,40,23,58,175,41,20,71,336,38*74 +$GPGSV,3,2,10,19,02,028,,04,06,241,26,13,31,223,33,27,19,284,26*7C +$GPGSV,3,3,10,11,06,338,20,03,14,055,28*78 +$GPRMC,222546.000,A,2734.89236,S,15305.81130,E,16.9,2.1,030308,11.2,W,A*05 +$GPVTG,2.1,T,13.3,M,16.9,N,31.2,K,A*1F +$GPGGA,222547.000,2734.89429,S,15305.81239,E,1,05,2.3,62.5,M,39.2,M,,*77 +$GPGLL,2734.89429,S,15305.81239,E,222547.000,A,A*4F +$GPGSA,A,3,16,23,13,27,03,,,,,,,,4.6,2.3,3.9*39 +$GPGST,222547.000,11.4,38.3,9.7,69.8,14.7,33.0,49.2*6B +$GPGSV,3,1,10,16,48,115,32,25,39,268,37,23,58,175,42,20,71,336,37*7F +$GPGSV,3,2,10,19,02,028,,04,06,241,26,13,31,223,36,27,19,284,29*76 +$GPGSV,3,3,10,11,06,338,20,03,14,055,34*75 +$GPRMC,222547.000,A,2734.89429,S,15305.81239,E,8.4,154.5,030308,11.2,W,A*32 +$GPVTG,154.5,T,165.7,M,8.4,N,15.6,K,A*1D +$GPGGA,222548.000,2734.89474,S,15305.81253,E,1,07,1.2,62.0,M,39.2,M,,*79 +$GPGLL,2734.89474,S,15305.81253,E,222548.000,A,A*44 +$GPGSA,A,3,16,25,23,20,13,27,03,,,,,,2.1,1.2,1.7*33 +$GPGST,222548.000,11.0,12.3,7.9,86.0,7.3,11.3,20.6*5F +$GPGSV,3,1,10,16,48,115,34,25,39,268,36,23,58,175,42,20,71,336,38*77 +$GPGSV,3,2,10,19,02,028,,04,06,241,25,13,31,223,36,27,19,284,29*75 +$GPGSV,3,3,10,11,06,338,20,03,14,055,33*72 +$GPRMC,222548.000,A,2734.89474,S,15305.81253,E,0.3,353.0,030308,11.2,W,A*36 +$GPVTG,353.0,T,4.3,M,0.3,N,0.5,K,A*27 +$GPGGA,222549.000,2734.89490,S,15305.81265,E,1,04,2.0,61.8,M,39.2,M,,*7E +$GPGLL,2734.89490,S,15305.81265,E,222549.000,A,A*4A +$GPGSA,A,3,25,23,13,03,,,,,,,,,3.9,2.0,3.3*3D +$GPGST,222549.000,17.0,16.1,8.8,81.3,8.3,14.6,29.3*57 +$GPGSV,3,1,11,16,48,115,33,25,39,268,37,23,58,175,42,20,71,336,36*7E +$GPGSV,3,2,11,19,02,028,,04,06,241,25,13,31,223,35,27,19,284,30*7F +$GPGSV,3,3,11,11,06,338,20,01,,,21,03,14,055,33*71 +$GPRMC,222549.000,A,2734.89490,S,15305.81265,E,0.2,330.7,030308,11.2,W,A*3B +$GPVTG,330.7,T,341.9,M,0.2,N,0.3,K,A*2A +$GPGGA,222550.000,2734.89526,S,15305.81278,E,1,04,2.6,61.7,M,39.2,M,,*7F +$GPGLL,2734.89526,S,15305.81278,E,222550.000,A,A*42 +$GPGSA,A,3,16,25,23,13,,,,,,,,,6.1,2.6,5.6*31 +$GPGST,222550.000,13.4,12.4,27.3,43.1,18.9,19.8,52.9*5A +$GPGSV,3,1,11,16,48,115,30,25,39,268,38,23,58,175,42,20,71,336,37*73 +$GPGSV,3,2,11,19,02,028,,04,06,241,25,13,31,223,36,27,19,284,31*7D +$GPGSV,3,3,11,11,06,338,,01,,,21,03,14,055,32*72 +$GPRMC,222550.000,A,2734.89526,S,15305.81278,E,0.1,350.7,030308,11.2,W,A*36 +$GPVTG,350.7,T,1.9,M,0.1,N,0.2,K,A*29 +$GPGGA,222551.000,2734.89528,S,15305.81279,E,1,05,2.3,61.7,M,39.2,M,,*75 +$GPGLL,2734.89528,S,15305.81279,E,222551.000,A,A*4C +$GPGSA,A,3,16,23,13,27,03,,,,,,,,4.6,2.3,3.9*39 +$GPGST,222551.000,13.7,31.0,11.1,60.5,16.5,25.2,39.3*5F +$GPGSV,3,1,11,16,48,115,30,25,39,268,39,23,58,175,41,20,71,336,35*73 +$GPGSV,3,2,11,19,02,028,,04,06,241,23,13,31,223,36,27,19,284,31*7B +$GPGSV,3,3,11,11,06,338,,01,,,20,03,14,055,30*71 +$GPRMC,222551.000,A,2734.89528,S,15305.81279,E,0.1,345.0,030308,11.2,W,A*3B +$GPVTG,345.0,T,356.2,M,0.1,N,0.2,K,A*20 +$GPGGA,222552.000,2734.89550,S,15305.81288,E,1,05,2.1,61.7,M,39.2,M,,*75 +$GPGLL,2734.89550,S,15305.81288,E,222552.000,A,A*4E +$GPGSA,A,3,16,25,23,13,27,,,,,,,,4.7,2.1,4.2*32 +$GPGST,222552.000,11.7,11.5,20.8,20.0,11.8,18.2,39.1*55 +$GPGSV,3,1,11,16,48,115,31,25,39,268,40,23,58,175,42,20,71,336,35*7F +$GPGSV,3,2,11,19,02,028,,04,06,241,23,13,31,223,38,27,19,284,31*75 +$GPGSV,3,3,11,11,06,338,,01,,,20,03,14,055,30*71 +$GPRMC,222552.000,A,2734.89550,S,15305.81288,E,0.1,11.2,030308,11.2,W,A*09 +$GPVTG,11.2,T,22.5,M,0.1,N,0.2,K,A*27 +$GPGGA,222553.000,2734.89573,S,15305.81294,E,1,05,2.1,61.5,M,39.2,M,,*7A +$GPGLL,2734.89573,S,15305.81294,E,222553.000,A,A*43 +$GPGSA,A,3,16,25,23,13,27,,,,,,,,4.7,2.1,4.2*32 +$GPGST,222553.000,9.8,10.3,17.6,19.1,10.4,15.6,33.7*6C +$GPGSV,3,1,10,16,48,115,29,25,39,268,38,23,58,175,41,20,71,336,37*79 +$GPGSV,3,2,10,19,02,028,,04,06,241,23,13,31,223,39,27,19,284,30*74 +$GPGSV,3,3,10,11,06,338,,03,14,055,29*7B +$GPRMC,222553.000,A,2734.89573,S,15305.81294,E,0.1,351.8,030308,11.2,W,A*39 +$GPVTG,351.8,T,3.0,M,0.1,N,0.2,K,A*2C +$GPGGA,222554.000,2734.89591,S,15305.81298,E,1,04,2.6,61.4,M,39.2,M,,*7A +$GPGLL,2734.89591,S,15305.81298,E,222554.000,A,A*44 +$GPGSA,A,3,16,25,23,13,,,,,,,,,6.1,2.6,5.6*31 +$GPGST,222554.000,16.9,10.4,17.8,12.8,10.0,16.1,37.3*5F +$GPGSV,3,1,10,16,48,115,32,25,39,268,38,23,58,175,41,20,71,336,36*72 +$GPGSV,3,2,10,19,02,028,,04,06,241,23,13,31,223,38,27,19,284,31*74 +$GPGSV,3,3,10,11,06,338,,03,14,055,26*74 +$GPRMC,222554.000,A,2734.89591,S,15305.81298,E,0.1,334.9,030308,11.2,W,A*3C +$GPVTG,334.9,T,346.1,M,0.1,N,0.2,K,A*2D +$GPGGA,222555.000,2734.89607,S,15305.81301,E,1,04,2.6,61.2,M,39.2,M,,*70 +$GPGLL,2734.89607,S,15305.81301,E,222555.000,A,A*48 +$GPGSA,A,3,16,25,23,13,,,,,,,,,6.1,2.6,5.6*31 +$GPGST,222555.000,14.4,11.9,23.3,40.8,16.2,17.6,44.5*56 +$GPGSV,3,1,11,16,48,115,32,25,39,268,37,23,58,175,40,20,71,336,38*73 +$GPGSV,3,2,11,19,02,028,,04,06,241,23,13,31,223,37,27,19,284,30*7B +$GPGSV,3,3,11,11,06,338,,01,,,20,03,14,055,25*75 +$GPRMC,222555.000,A,2734.89607,S,15305.81301,E,0.1,6.2,030308,11.2,W,A*39 +$GPVTG,6.2,T,17.4,M,0.1,N,0.2,K,A*16 +$GPGGA,222556.000,2734.89612,S,15305.81301,E,1,04,2.6,61.1,M,39.2,M,,*74 +$GPGLL,2734.89612,S,15305.81301,E,222556.000,A,A*4F +$GPGSA,A,3,16,25,23,13,,,,,,,,,6.1,2.6,5.6*31 +$GPGST,222556.000,12.4,15.8,24.1,4.1,14.5,22.0,39.9*69 +$GPGSV,3,1,11,16,48,115,33,25,39,268,38,23,58,174,41,20,71,336,38*7D +$GPGSV,3,2,11,19,02,028,,04,06,242,23,13,31,223,38,27,19,284,32*75 +$GPGSV,3,3,11,11,06,338,,01,,,20,03,14,055,28*78 +$GPRMC,222556.000,A,2734.89612,S,15305.81301,E,0.1,21.8,030308,11.2,W,A*01 +$GPVTG,21.8,T,33.0,M,0.1,N,0.2,K,A*2B +$GPGGA,222557.000,2734.89635,S,15305.81337,E,1,05,2.1,61.0,M,39.2,M,,*72 +$GPGLL,2734.89635,S,15305.81337,E,222557.000,A,A*4E +$GPGSA,A,3,16,25,23,13,27,,,,,,,,4.7,2.1,4.2*32 +$GPGST,222557.000,10.3,13.0,15.0,5.2,11.9,13.7,32.7*6B +$GPGSV,3,1,10,16,48,115,33,25,39,268,38,23,58,174,41,20,71,336,36*72 +$GPGSV,3,2,10,19,02,028,,04,06,242,23,13,31,223,39,27,19,284,28*7E +$GPGSV,3,3,10,11,06,338,,03,14,055,31*72 +$GPRMC,222557.000,A,2734.89635,S,15305.81337,E,1.2,96.1,030308,11.2,W,A*07 +$GPVTG,96.1,T,107.3,M,1.2,N,2.2,K,A*1B +$GPGGA,222558.000,2734.89638,S,15305.81517,E,1,06,1.8,60.6,M,39.2,M,,*7A +$GPGLL,2734.89638,S,15305.81517,E,222558.000,A,A*48 +$GPGSA,A,3,16,25,23,13,27,03,,,,,,,3.5,1.8,3.1*3A +$GPGST,222558.000,18.6,12.9,7.5,72.4,7.5,11.4,21.9*57 +$GPGSV,3,1,10,16,48,115,39,25,39,268,38,23,58,174,37,20,71,336,26*78 +$GPGSV,3,2,10,19,02,028,,04,06,242,23,13,31,223,34,27,19,284,29*72 +$GPGSV,3,3,10,11,06,338,,03,14,055,30*73 +$GPRMC,222558.000,A,2734.89638,S,15305.81517,E,5.6,82.0,030308,11.2,W,A*05 +$GPVTG,82.0,T,93.2,M,5.6,N,10.3,K,A*10 +$GPGGA,222559.000,2734.89631,S,15305.81911,E,1,05,2.2,60.5,M,39.2,M,,*71 +$GPGLL,2734.89631,S,15305.81911,E,222559.000,A,A*4A +$GPGSA,A,3,16,25,23,20,27,,,,,,,,3.6,2.2,2.9*3A +$GPGST,222559.000,17.0,15.1,33.1,15.1,15.5,29.4,59.0*59 +$GPGSV,3,1,10,16,48,115,34,25,39,268,35,23,58,174,30,20,71,336,29*70 +$GPGSV,3,2,10,19,02,028,,04,06,242,23,13,31,223,35,27,19,284,28*72 +$GPGSV,3,3,10,11,06,338,,03,14,055,27*75 +$GPRMC,222559.000,A,2734.89631,S,15305.81911,E,12.5,87.6,030308,11.2,W,A*31 +$GPVTG,87.6,T,98.8,M,12.5,N,23.2,K,A*26 +$GPGGA,222600.000,2734.89436,S,15305.82359,E,1,06,1.8,61.2,M,39.2,M,,*72 +$GPGLL,2734.89436,S,15305.82359,E,222600.000,A,A*45 +$GPGSA,A,3,16,25,23,13,27,03,,,,,,,3.5,1.8,3.1*3A +$GPGST,222600.000,14.4,14.9,6.9,79.1,6.7,13.4,28.4*57 +$GPGSV,3,1,10,16,48,115,37,25,39,268,36,23,58,174,29,20,71,336,33*73 +$GPGSV,3,2,10,19,02,028,,04,06,242,23,13,31,223,39,27,19,284,28*7E +$GPGSV,3,3,10,11,06,338,,03,14,055,28*7A +$GPRMC,222600.000,A,2734.89436,S,15305.82359,E,15.9,62.5,030308,11.2,W,A*3D +$GPVTG,62.5,T,73.7,M,15.9,N,29.5,K,A*22 +$GPGGA,222601.000,2734.89190,S,15305.82850,E,1,06,1.8,60.5,M,39.2,M,,*7E +$GPGLL,2734.89190,S,15305.82850,E,222601.000,A,A*4F +$GPGSA,A,3,16,25,23,13,27,03,,,,,,,3.6,1.8,3.1*39 +$GPGST,222601.000,11.5,13.4,6.1,78.5,6.0,12.0,24.9*56 +$GPGSV,3,1,10,16,48,115,40,25,39,268,27,23,58,174,35,20,71,336,28*74 +$GPGSV,3,2,10,19,02,028,,04,06,242,,13,31,223,39,27,19,284,27*70 +$GPGSV,3,3,10,11,06,338,,03,14,055,23*71 +$GPRMC,222601.000,A,2734.89190,S,15305.82850,E,18.0,58.9,030308,11.2,W,A*36 +$GPVTG,58.9,T,70.1,M,18.0,N,33.4,K,A*2C +$GPGGA,222602.000,2734.88904,S,15305.83361,E,1,05,1.6,60.0,M,39.2,M,,*79 +$GPGLL,2734.88904,S,15305.83361,E,222602.000,A,A*40 +$GPGSA,A,3,16,23,20,13,03,,,,,,,,2.5,1.6,1.9*3F +$GPGST,222602.000,11.3,17.1,6.5,54.9,10.2,13.2,18.6*62 +$GPGSV,3,1,10,16,48,115,27,25,39,268,29,23,58,174,33,20,71,336,33*77 +$GPGSV,3,2,10,19,02,028,,04,06,242,,13,31,223,35,27,19,284,32*78 +$GPGSV,3,3,10,11,06,338,,03,14,055,24*76 +$GPRMC,222602.000,A,2734.88904,S,15305.83361,E,19.8,55.1,030308,11.2,W,A*35 +$GPVTG,55.1,T,66.3,M,19.8,N,36.7,K,A*23 +$GPGGA,222603.000,2734.88556,S,15305.83944,E,1,04,3.8,58.8,M,39.2,M,,*70 +$GPGLL,2734.88556,S,15305.83944,E,222603.000,A,A*47 +$GPGSA,A,3,25,23,20,27,,,,,,,,,6.5,3.8,5.2*3C +$GPGST,222603.000,12.6,48.6,15.6,66.9,41.3,21.9,62.5*59 +$GPGSV,3,1,10,16,48,115,23,25,39,268,29,23,58,174,31,20,71,337,37*74 +$GPGSV,3,2,10,19,02,028,,04,06,242,,13,31,223,34,27,19,284,26*7C +$GPGSV,3,3,10,11,06,338,,03,14,055,28*7A +$GPRMC,222603.000,A,2734.88556,S,15305.83944,E,22.7,54.4,030308,11.2,W,A*31 +$GPVTG,54.4,T,65.6,M,22.7,N,42.1,K,A*23 +$GPGGA,222604.000,2734.88238,S,15305.84546,E,1,04,4.4,57.8,M,39.2,M,,*75 +$GPGLL,2734.88238,S,15305.84546,E,222604.000,A,A*46 +$GPGSA,A,3,25,20,13,27,,,,,,,,,7.2,4.4,5.7*37 +$GPGST,222604.000,10.4,46.8,10.9,81.3,42.4,11.8,57.5*57 +$GPGSV,3,1,10,16,48,115,27,25,39,268,32,23,58,174,32,20,71,337,37*79 +$GPGSV,3,2,10,19,02,028,,04,06,242,,13,31,223,34,27,19,284,34*7F +$GPGSV,3,3,10,11,06,338,,03,14,055,29*7B +$GPRMC,222604.000,A,2734.88238,S,15305.84546,E,23.3,54.5,030308,11.2,W,A*34 +$GPVTG,54.5,T,65.7,M,23.3,N,43.2,K,A*24 +$GPGGA,222605.000,2734.87917,S,15305.85182,E,1,04,4.4,56.6,M,39.2,M,,*7F +$GPGLL,2734.87917,S,15305.85182,E,222605.000,A,A*43 +$GPGSA,A,3,25,20,13,27,,,,,,,,,7.2,4.4,5.7*37 +$GPGST,222605.000,14.3,40.3,10.1,81.5,36.5,10.7,49.8*58 +$GPGSV,3,1,10,16,48,115,24,25,39,268,32,23,58,174,33,20,71,337,37*7B +$GPGSV,3,2,10,19,02,028,,04,06,242,20,13,31,223,35,27,19,284,32*7A +$GPGSV,3,3,10,11,06,338,,03,14,055,26*74 +$GPRMC,222605.000,A,2734.87917,S,15305.85182,E,24.5,55.0,030308,11.2,W,A*34 +$GPVTG,55.0,T,66.2,M,24.5,N,45.3,K,A*20 +$GPGGA,222606.000,2734.87588,S,15305.85846,E,1,05,3.6,55.8,M,39.2,M,,*7E +$GPGLL,2734.87588,S,15305.85846,E,222606.000,A,A*4B +$GPGSA,A,3,25,23,20,13,27,,,,,,,,6.3,3.6,5.2*36 +$GPGST,222606.000,11.7,30.4,8.7,77.7,27.2,9.8,40.6*59 +$GPGSV,3,1,10,16,48,115,24,25,39,268,31,23,58,174,32,20,71,337,34*7A +$GPGSV,3,2,10,19,02,029,,04,06,242,20,13,31,223,35,27,19,284,34*7D +$GPGSV,3,3,10,11,06,338,,03,14,055,24*76 +$GPRMC,222606.000,A,2734.87588,S,15305.85846,E,25.3,55.9,030308,11.2,W,A*32 +$GPVTG,55.9,T,67.1,M,25.3,N,46.9,K,A*25 +$GPGGA,222607.000,2734.87218,S,15305.86543,E,1,06,1.8,55.5,M,39.2,M,,*78 +$GPGLL,2734.87218,S,15305.86543,E,222607.000,A,A*4F +$GPGSA,A,3,16,25,23,13,27,03,,,,,,,3.6,1.8,3.1*39 +$GPGST,222607.000,11.2,13.8,8.5,86.1,7.8,12.6,27.3*52 +$GPGSV,3,1,10,16,48,115,29,25,39,268,26,23,58,174,34,20,71,337,32*71 +$GPGSV,3,2,10,19,02,029,,04,06,242,27,13,31,223,36,27,19,284,30*7D +$GPGSV,3,3,10,11,06,338,,03,14,055,24*76 +$GPRMC,222607.000,A,2734.87218,S,15305.86543,E,26.0,57.6,030308,11.2,W,A*3B +$GPVTG,57.6,T,68.8,M,26.0,N,48.1,K,A*28 +$GPGGA,222608.000,2734.86867,S,15305.87251,E,1,06,1.8,55.1,M,39.2,M,,*75 +$GPGLL,2734.86867,S,15305.87251,E,222608.000,A,A*46 +$GPGSA,A,3,16,25,23,13,27,03,,,,,,,3.6,1.8,3.1*39 +$GPGST,222608.000,15.1,15.8,7.1,68.8,8.0,13.6,36.7*5C +$GPGSV,3,1,10,16,48,115,39,25,39,268,28,23,58,174,35,20,71,337,30*7D +$GPGSV,3,2,10,19,02,029,,04,06,242,27,13,31,223,40,27,19,284,28*75 +$GPGSV,3,3,10,11,06,338,,03,14,055,28*7A +$GPRMC,222608.000,A,2734.86867,S,15305.87251,E,25.9,60.7,030308,11.2,W,A*3D +$GPVTG,60.7,T,71.9,M,25.9,N,47.9,K,A*29 +$GPGGA,222609.000,2734.86555,S,15305.87973,E,1,06,1.8,54.7,M,39.2,M,,*74 +$GPGLL,2734.86555,S,15305.87973,E,222609.000,A,A*40 +$GPGSA,A,3,16,25,23,13,27,03,,,,,,,3.6,1.8,3.1*39 +$GPGST,222609.000,10.9,10.9,5.1,85.4,4.7,10.0,22.0*55 +$GPGSV,3,1,10,16,48,116,34,25,39,268,39,23,58,174,29,20,71,337,33*7D +$GPGSV,3,2,10,19,02,029,,04,06,242,24,13,31,223,42,27,19,284,23*7F +$GPGSV,3,3,10,11,06,338,,03,14,055,26*74 +$GPRMC,222609.000,A,2734.86555,S,15305.87973,E,25.7,64.3,030308,11.2,W,A*35 +$GPVTG,64.3,T,75.6,M,25.7,N,47.5,K,A*20 +$GPGGA,222610.000,2734.86253,S,15305.88695,E,1,05,1.9,54.1,M,39.2,M,,*71 +$GPGLL,2734.86253,S,15305.88695,E,222610.000,A,A*41 +$GPGSA,A,3,16,25,23,13,03,,,,,,,,3.7,1.9,3.1*3C +$GPGST,222610.000,11.1,14.6,7.4,64.7,8.3,12.4,28.7*57 +$GPGSV,3,1,10,16,48,116,29,25,39,268,42,23,58,174,28,20,71,337,32*7D +$GPGSV,3,2,10,19,02,029,,04,06,242,24,13,31,223,42,27,19,284,23*7F +$GPGSV,3,3,10,11,06,338,,03,14,055,24*76 +$GPRMC,222610.000,A,2734.86253,S,15305.88695,E,25.3,65.0,030308,11.2,W,A*32 +$GPVTG,65.0,T,76.3,M,25.3,N,46.8,K,A*2C +$GPGGA,222611.000,2734.85924,S,15305.89387,E,1,05,2.2,53.4,M,39.2,M,,*75 +$GPGLL,2734.85924,S,15305.89387,E,222611.000,A,A*4F +$GPGSA,A,3,16,25,23,20,13,,,,,,,,5.3,2.2,4.8*39 +$GPGST,222611.000,17.7,8.4,21.7,17.4,9.4,19.0,57.8*57 +$GPGSV,3,1,10,16,48,116,39,25,39,268,32,23,58,174,35,20,71,337,26*72 +$GPGSV,3,2,10,19,02,029,,04,06,242,31,13,31,223,39,27,19,284,24*70 +$GPGSV,3,3,10,11,06,338,,03,14,055,26*74 +$GPRMC,222611.000,A,2734.85924,S,15305.89387,E,24.9,61.4,030308,11.2,W,A*37 +$GPVTG,61.4,T,72.6,M,24.9,N,46.1,K,A*2F +$GPGGA,222612.000,2734.85516,S,15305.90007,E,1,07,1.2,53.3,M,39.2,M,,*7E +$GPGLL,2734.85516,S,15305.90007,E,222612.000,A,A*42 +$GPGSA,A,3,16,25,23,20,13,27,03,,,,,,2.1,1.2,1.7*33 +$GPGST,222612.000,15.5,16.3,8.2,77.8,8.0,14.7,27.8*50 +$GPGSV,3,1,10,16,48,116,29,25,39,268,29,23,58,174,30,20,71,337,34*7F +$GPGSV,3,2,10,19,02,029,,04,06,242,27,13,31,223,35,27,19,284,28*77 +$GPGSV,3,3,10,11,06,338,,03,14,055,25*77 +$GPRMC,222612.000,A,2734.85516,S,15305.90007,E,24.5,53.1,030308,11.2,W,A*32 +$GPVTG,53.1,T,64.3,M,24.5,N,45.4,K,A*23 +$GPGGA,222613.000,2734.85043,S,15305.90565,E,1,05,1.9,53.2,M,39.2,M,,*73 +$GPGLL,2734.85043,S,15305.90565,E,222613.000,A,A*47 +$GPGSA,A,3,16,25,20,13,27,,,,,,,,3.7,1.9,3.2*3A +$GPGST,222613.000,21.1,11.0,20.9,21.8,11.7,18.1,48.5*55 +$GPGSV,3,1,10,16,48,116,30,25,39,268,32,23,58,174,24,20,71,337,36*7A +$GPGSV,3,2,10,19,02,029,,04,06,242,22,13,31,223,35,27,19,284,29*73 +$GPGSV,3,3,10,11,06,338,,03,14,055,29*7B +$GPRMC,222613.000,A,2734.85043,S,15305.90565,E,24.9,45.4,030308,11.2,W,A*39 +$GPVTG,45.4,T,56.6,M,24.9,N,46.1,K,A*2F +$GPGGA,222614.000,2734.84523,S,15305.91064,E,1,05,1.9,53.2,M,39.2,M,,*73 +$GPGLL,2734.84523,S,15305.91064,E,222614.000,A,A*47 +$GPGSA,A,3,16,25,20,13,27,,,,,,,,3.7,1.9,3.2*3A +$GPGST,222614.000,18.8,16.8,28.3,28.1,18.2,24.0,43.4*54 +$GPGSV,3,1,10,16,48,116,27,25,39,268,30,23,58,174,32,20,71,337,35*7A +$GPGSV,3,2,10,19,02,029,,04,06,242,28,13,31,223,26,27,19,284,32*71 +$GPGSV,3,3,10,11,06,338,,03,14,055,30*73 +$GPRMC,222614.000,A,2734.84523,S,15305.91064,E,24.7,40.2,030308,11.2,W,A*34 +$GPVTG,40.2,T,51.4,M,24.7,N,45.7,K,A*22 +$GPGGA,222615.000,2734.84002,S,15305.91547,E,1,07,1.2,53.0,M,39.2,M,,*7B +$GPGLL,2734.84002,S,15305.91547,E,222615.000,A,A*44 +$GPGSA,A,3,16,25,23,20,13,27,03,,,,,,2.1,1.2,1.7*33 +$GPGST,222615.000,19.7,18.9,7.9,71.0,8.8,16.5,18.9*52 +$GPGSV,3,1,10,16,48,116,25,25,39,268,26,23,58,174,35,20,71,337,34*79 +$GPGSV,3,2,10,19,02,029,,04,06,242,24,13,31,223,25,27,19,284,30*7C +$GPGSV,3,3,10,11,06,338,,03,14,055,29*7B +$GPRMC,222615.000,A,2734.84002,S,15305.91547,E,24.1,38.7,030308,11.2,W,A*3B +$GPVTG,38.7,T,49.9,M,24.1,N,44.7,K,A*2B +$GPGGA,222616.000,2734.83488,S,15305.92024,E,1,07,1.2,53.1,M,39.2,M,,*7B +$GPGLL,2734.83488,S,15305.92024,E,222616.000,A,A*45 +$GPGSA,A,3,16,25,23,20,13,27,03,,,,,,2.1,1.2,1.7*33 +$GPGST,222616.000,18.1,15.8,11.2,70.8,10.8,14.1,19.9*51 +$GPGSV,3,1,10,16,48,116,27,25,39,268,29,23,58,174,34,20,71,337,30*71 +$GPGSV,3,2,10,19,02,029,,04,06,242,27,13,31,223,24,27,19,284,28*77 +$GPGSV,3,3,10,11,06,338,,03,14,055,32*71 +$GPRMC,222616.000,A,2734.83488,S,15305.92024,E,24.0,39.3,030308,11.2,W,A*3E +$GPVTG,39.3,T,50.5,M,24.0,N,44.5,K,A*29 +$GPGGA,222617.000,2734.82955,S,15305.92505,E,1,07,1.2,53.2,M,39.2,M,,*73 +$GPGLL,2734.82955,S,15305.92505,E,222617.000,A,A*4E +$GPGSA,A,3,16,25,23,20,13,27,03,,,,,,2.1,1.2,1.7*33 +$GPGST,222617.000,14.7,13.3,9.2,70.7,8.9,11.8,16.8*5B +$GPGSV,3,1,10,16,48,116,23,25,39,268,30,23,58,174,35,20,71,337,33*7F +$GPGSV,3,2,10,19,02,029,,04,06,242,25,13,31,223,25,27,19,284,26*7A +$GPGSV,3,3,10,11,06,338,,03,14,055,32*71 +$GPRMC,222617.000,A,2734.82955,S,15305.92505,E,24.7,38.8,030308,11.2,W,A*38 +$GPVTG,38.8,T,50.0,M,24.7,N,45.7,K,A*22 +$GPGGA,222618.000,2734.82405,S,15305.92991,E,1,07,1.2,53.5,M,39.2,M,,*72 +$GPGLL,2734.82405,S,15305.92991,E,222618.000,A,A*48 +$GPGSA,A,3,16,25,23,20,13,27,03,,,,,,2.1,1.2,1.7*33 +$GPGST,222618.000,13.7,14.7,7.8,77.2,7.6,13.2,24.3*54 +$GPGSV,3,1,10,16,48,116,27,25,39,268,30,23,58,174,36,20,71,337,32*79 +$GPGSV,3,2,10,19,02,029,,04,06,242,31,13,31,223,25,27,19,283,23*7D +$GPGSV,3,3,10,11,06,338,,03,14,056,32*72 +$GPRMC,222618.000,A,2734.82405,S,15305.92991,E,25.3,38.3,030308,11.2,W,A*30 +$GPVTG,38.3,T,49.5,M,25.3,N,46.8,K,A*2D +$GPGGA,222619.000,2734.81867,S,15305.93485,E,1,07,1.2,53.8,M,39.2,M,,*7C +$GPGLL,2734.81867,S,15305.93485,E,222619.000,A,A*4B +$GPGSA,A,3,16,25,23,20,13,27,03,,,,,,2.1,1.2,1.7*33 +$GPGST,222619.000,20.5,18.3,9.9,85.5,9.1,16.7,27.9*5A +$GPGSV,3,1,10,16,48,116,27,25,39,268,30,23,58,174,35,20,71,337,33*7B +$GPGSV,3,2,10,19,02,029,,04,06,242,29,13,31,223,23,27,19,283,23*72 +$GPGSV,3,3,10,11,06,338,,03,14,056,32*72 +$GPRMC,222619.000,A,2734.81867,S,15305.93485,E,25.3,39.2,030308,11.2,W,A*33 +$GPVTG,39.2,T,50.4,M,25.3,N,46.8,K,A*24 +$GPGGA,222620.000,2734.81344,S,15305.93979,E,1,05,1.6,53.8,M,39.2,M,,*74 +$GPGLL,2734.81344,S,15305.93979,E,222620.000,A,A*45 +$GPGSA,A,3,16,23,20,13,03,,,,,,,,2.5,1.6,1.9*3F +$GPGST,222620.000,18.2,14.7,21.1,9.8,19.1,13.7,29.8*64 +$GPGSV,3,1,10,16,48,116,26,25,39,268,30,23,58,174,33,20,71,337,34*7B +$GPGSV,3,2,10,19,02,029,,04,06,242,24,13,31,223,25,27,19,283,29*73 +$GPGSV,3,3,10,11,06,338,,03,14,056,33*73 +$GPRMC,222620.000,A,2734.81344,S,15305.93979,E,24.7,39.5,030308,11.2,W,A*3F +$GPVTG,39.5,T,50.7,M,24.7,N,45.8,K,A*26 +$GPGGA,222621.000,2734.80838,S,15305.94469,E,1,06,1.3,53.5,M,39.2,M,,*74 +$GPGLL,2734.80838,S,15305.94469,E,222621.000,A,A*4E +$GPGSA,A,3,16,25,23,20,13,03,,,,,,,2.3,1.3,1.9*3B +$GPGST,222621.000,14.6,11.8,13.4,39.2,11.7,11.4,21.8*5D +$GPGSV,3,1,10,16,48,116,25,25,39,268,31,23,58,174,33,20,71,337,37*7A +$GPGSV,3,2,10,19,03,029,,04,06,242,24,13,31,223,24,27,19,283,36*7D +$GPGSV,3,3,10,11,06,338,,03,14,056,32*72 +$GPRMC,222621.000,A,2734.80838,S,15305.94469,E,24.1,40.1,030308,11.2,W,A*38 +$GPVTG,40.1,T,51.3,M,24.1,N,44.7,K,A*21 +$GPGGA,222622.000,2734.80354,S,15305.94956,E,1,06,1.7,53.3,M,39.2,M,,*75 +$GPGLL,2734.80354,S,15305.94956,E,222622.000,A,A*4D +$GPGSA,A,3,16,25,23,20,13,27,,,,,,,3.3,1.7,2.9*3B +$GPGST,222622.000,13.2,10.2,17.1,41.6,12.5,13.2,30.8*59 +$GPGSV,3,1,10,16,48,116,26,25,39,268,31,23,58,174,26,20,71,337,39*73 +$GPGSV,3,2,10,19,03,029,,04,06,242,24,13,31,223,28,27,19,283,36*71 +$GPGSV,3,3,10,11,06,338,,03,14,056,35*75 +$GPRMC,222622.000,A,2734.80354,S,15305.94956,E,23.6,41.3,030308,11.2,W,A*38 +$GPVTG,41.3,T,52.5,M,23.6,N,43.7,K,A*20 +$GPGGA,222623.000,2734.79878,S,15305.95470,E,1,05,1.9,52.8,M,39.2,M,,*78 +$GPGLL,2734.79878,S,15305.95470,E,222623.000,A,A*47 +$GPGSA,A,3,16,25,20,13,27,,,,,,,,3.7,1.9,3.2*3A +$GPGST,222623.000,14.7,24.8,16.6,50.3,19.9,18.6,39.3*5E +$GPGSV,3,1,11,16,48,116,24,25,39,268,32,23,58,174,24,20,71,337,38*70 +$GPGSV,3,2,11,19,03,029,,04,06,242,24,13,31,223,32,27,19,283,34*79 +$GPGSV,3,3,11,11,06,338,,01,,,18,03,14,056,34*7D +$GPRMC,222623.000,A,2734.79878,S,15305.95470,E,24.0,43.4,030308,11.2,W,A*36 +$GPVTG,43.4,T,54.6,M,24.0,N,44.4,K,A*25 +$GPGGA,222624.000,2734.79400,S,15305.96019,E,1,05,1.9,52.3,M,39.2,M,,*7F +$GPGLL,2734.79400,S,15305.96019,E,222624.000,A,A*4B +$GPGSA,A,3,16,25,20,27,03,,,,,,,,2.7,1.9,2.0*39 +$GPGST,222624.000,12.3,24.0,7.9,80.2,8.0,21.7,15.3*5C +$GPGSV,3,1,11,16,48,116,23,25,39,268,32,23,58,174,26,20,71,337,37*7A +$GPGSV,3,2,11,19,03,029,,04,06,242,24,13,31,223,35,27,19,283,25*7E +$GPGSV,3,3,11,11,06,338,,01,,,18,03,14,056,31*78 +$GPRMC,222624.000,A,2734.79400,S,15305.96019,E,24.7,45.3,030308,11.2,W,A*3C +$GPVTG,45.3,T,56.6,M,24.7,N,45.7,K,A*23 +$GPGGA,222625.000,2734.78953,S,15305.96595,E,1,05,1.9,51.8,M,39.2,M,,*7D +$GPGLL,2734.78953,S,15305.96595,E,222625.000,A,A*41 +$GPGSA,A,3,16,25,20,13,27,,,,,,,,3.7,1.9,3.2*3A +$GPGST,222625.000,24.0,12.2,19.9,37.5,14.2,16.0,36.1*57 +$GPGSV,3,1,11,16,48,116,30,25,39,268,32,23,58,174,23,20,71,337,37*7D +$GPGSV,3,2,11,19,03,029,,04,06,242,25,13,31,223,36,27,19,283,25*7C +$GPGSV,3,3,11,11,06,338,,01,,,18,03,14,056,24*7C +$GPRMC,222625.000,A,2734.78953,S,15305.96595,E,24.8,47.9,030308,11.2,W,A*31 +$GPVTG,47.9,T,59.1,M,24.8,N,46.0,K,A*28 +$GPGGA,222626.000,2734.78516,S,15305.97172,E,1,05,2.5,51.1,M,39.2,M,,*79 +$GPGLL,2734.78516,S,15305.97172,E,222626.000,A,A*43 +$GPGSA,A,3,16,25,20,04,13,,,,,,,,4.2,2.5,3.3*37 +$GPGST,222626.000,20.2,12.6,23.1,19.8,13.0,20.2,38.4*5F +$GPGSV,3,1,11,16,48,116,31,25,39,268,32,23,58,174,25,20,71,337,38*75 +$GPGSV,3,2,11,19,03,029,,04,06,242,25,13,31,223,36,27,19,283,23*7A +$GPGSV,3,3,11,11,06,338,,01,,,18,03,14,056,24*7C +$GPRMC,222626.000,A,2734.78516,S,15305.97172,E,24.7,48.3,030308,11.2,W,A*39 +$GPVTG,48.3,T,59.5,M,24.7,N,45.7,K,A*22 +$GPGGA,222627.000,2734.78079,S,15305.97737,E,1,04,2.5,50.5,M,39.2,M,,*77 +$GPGLL,2734.78079,S,15305.97737,E,222627.000,A,A*49 +$GPGSA,A,3,16,23,20,13,,,,,,,,,5.8,2.5,5.2*39 +$GPGST,222627.000,16.3,12.4,42.2,11.3,13.5,37.9,90.0*51 +$GPGSV,3,1,11,16,48,116,28,25,39,268,32,23,58,174,25,20,71,337,37*72 +$GPGSV,3,2,11,19,03,029,,04,06,242,29,13,31,223,37,27,19,283,30*75 +$GPGSV,3,3,11,11,06,338,,01,,,18,03,14,056,24*7C +$GPRMC,222627.000,A,2734.78079,S,15305.97737,E,24.3,48.1,030308,11.2,W,A*35 +$GPVTG,48.1,T,59.3,M,24.3,N,45.1,K,A*24 +$GPGGA,222628.000,2734.77637,S,15305.98293,E,1,07,1.3,50.2,M,39.2,M,,*7E +$GPGLL,2734.77637,S,15305.98293,E,222628.000,A,A*41 +$GPGSA,A,3,16,25,23,04,13,27,03,,,,,,2.2,1.3,1.8*38 +$GPGST,222628.000,13.2,14.5,8.8,76.9,8.4,13.0,22.0*5F +$GPGSV,3,1,11,16,48,116,30,25,39,268,32,23,58,174,27,20,71,337,37*79 +$GPGSV,3,2,11,19,03,029,,04,06,242,32,13,31,223,37,27,19,283,28*76 +$GPGSV,3,3,11,11,06,338,,01,,,18,03,14,056,25*7D +$GPRMC,222628.000,A,2734.77637,S,15305.98293,E,23.9,48.5,030308,11.2,W,A*34 +$GPVTG,48.5,T,59.7,M,23.9,N,44.3,K,A*2A +$GPGGA,222629.000,2734.77226,S,15305.98850,E,1,08,1.1,49.5,M,39.2,M,,*7C +$GPGLL,2734.77226,S,15305.98850,E,222629.000,A,A*41 +$GPGSA,A,3,16,25,23,20,04,13,27,03,,,,,1.7,1.1,1.3*35 +$GPGST,222629.000,11.0,9.5,7.3,89.6,6.7,8.6,14.3*5E +$GPGSV,3,1,11,16,48,116,31,25,39,268,32,23,58,174,25,20,71,337,36*7B +$GPGSV,3,2,11,19,03,029,,04,06,242,30,13,31,223,37,27,19,283,28*74 +$GPGSV,3,3,11,11,06,338,,01,,,18,03,14,056,27*7F +$GPRMC,222629.000,A,2734.77226,S,15305.98850,E,23.5,49.4,030308,11.2,W,A*38 +$GPVTG,49.4,T,60.6,M,23.5,N,43.5,K,A*2C +$GPGGA,222630.000,2734.76859,S,15305.99361,E,1,04,3.5,49.4,M,39.2,M,,*74 +$GPGLL,2734.76859,S,15305.99361,E,222630.000,A,A*42 +$GPGSA,A,3,16,25,20,27,,,,,,,,,4.9,3.5,3.4*39 +$GPGST,222630.000,13.4,7.9,50.0,19.9,17.0,43.1,69.5*66 +$GPGSV,3,1,11,16,48,116,31,25,39,268,30,23,58,174,22,20,71,337,36*7E +$GPGSV,3,2,11,19,03,029,,04,06,242,32,13,31,223,35,27,19,283,24*78 +$GPGSV,3,3,11,11,06,338,18,01,,,18,03,14,056,29*78 +$GPRMC,222630.000,A,2734.76859,S,15305.99361,E,21.1,50.3,030308,11.2,W,A*32 +$GPVTG,50.3,T,61.5,M,21.1,N,39.1,K,A*2E +$GPGGA,222631.000,2734.76498,S,15305.99809,E,1,08,1.1,48.2,M,39.2,M,,*7C +$GPGLL,2734.76498,S,15305.99809,E,222631.000,A,A*47 +$GPGSA,A,3,16,25,23,20,04,13,27,03,,,,,1.7,1.1,1.3*35 +$GPGST,222631.000,18.4,10.8,5.8,77.6,5.6,9.7,13.2*63 +$GPGSV,3,1,11,16,48,116,32,25,39,268,31,23,58,174,22,20,71,337,35*7F +$GPGSV,3,2,11,19,03,029,,04,06,242,30,13,31,223,36,27,19,283,25*78 +$GPGSV,3,3,11,11,06,338,18,01,,,18,03,14,056,33*73 +$GPRMC,222631.000,A,2734.76498,S,15305.99809,E,19.4,47.4,030308,11.2,W,A*38 +$GPVTG,47.4,T,58.6,M,19.4,N,35.9,K,A*2C +$GPGGA,222632.000,2734.76359,S,15306.00162,E,1,08,1.1,49.6,M,39.2,M,,*77 +$GPGLL,2734.76359,S,15306.00162,E,222632.000,A,A*49 +$GPGSA,A,3,16,25,23,20,04,13,27,03,,,,,1.7,1.1,1.3*35 +$GPGST,222632.000,18.1,14.9,6.7,53.4,9.5,11.5,16.1*5A +$GPGSV,3,1,11,16,48,116,30,25,39,268,31,23,58,174,31,20,71,337,31*7B +$GPGSV,3,2,11,19,03,029,,04,06,242,22,13,31,223,37,27,19,283,29*76 +$GPGSV,3,3,11,11,06,338,24,01,,,18,03,14,056,25*7B +$GPRMC,222632.000,A,2734.76359,S,15306.00162,E,12.4,65.5,030308,11.2,W,A*3C +$GPVTG,65.5,T,76.7,M,12.4,N,22.9,K,A*2D +$GPGGA,222633.000,2734.76254,S,15306.00553,E,1,08,1.1,49.0,M,39.2,M,,*7A +$GPGLL,2734.76254,S,15306.00553,E,222633.000,A,A*42 +$GPGSA,A,3,16,25,23,20,04,13,27,03,,,,,1.7,1.1,1.3*35 +$GPGST,222633.000,13.9,12.3,5.8,55.3,7.8,9.7,13.7*62 +$GPGSV,3,1,10,16,48,116,35,25,39,268,35,23,58,174,30,20,71,337,35*7E +$GPGSV,3,2,10,19,03,029,,04,06,242,26,13,31,223,39,27,19,283,26*72 +$GPGSV,3,3,10,11,06,338,24,03,14,056,30*76 +$GPRMC,222633.000,A,2734.76254,S,15306.00553,E,12.9,72.5,030308,11.2,W,A*3C +$GPVTG,72.5,T,83.7,M,12.9,N,23.9,K,A*2D +$GPGGA,222634.000,2734.76305,S,15306.00850,E,1,08,1.1,48.4,M,39.2,M,,*73 +$GPGLL,2734.76305,S,15306.00850,E,222634.000,A,A*4E +$GPGSA,A,3,16,25,23,20,04,13,27,03,,,,,1.7,1.1,1.3*35 +$GPGST,222634.000,11.3,10.3,5.3,58.0,6.5,8.4,12.0*62 +$GPGSV,3,1,10,16,48,116,33,25,39,268,38,23,58,174,30,20,71,337,30*70 +$GPGSV,3,2,10,19,03,029,,04,06,242,29,13,31,223,34,27,19,283,30*77 +$GPGSV,3,3,10,11,06,338,23,03,14,056,25*75 +$GPRMC,222634.000,A,2734.76305,S,15306.00850,E,9.4,99.3,030308,11.2,W,A*04 +$GPVTG,99.3,T,110.5,M,9.4,N,17.3,K,A*2D +$GPGGA,222635.000,2734.76418,S,15306.01089,E,1,08,1.1,47.9,M,39.2,M,,*76 +$GPGLL,2734.76418,S,15306.01089,E,222635.000,A,A*49 +$GPGSA,A,3,16,25,23,20,04,13,27,03,,,,,1.7,1.1,1.3*35 +$GPGST,222635.000,13.4,9.3,7.7,66.3,7.3,8.3,14.0*50 +$GPGSV,3,1,10,16,48,116,36,25,39,268,31,23,58,174,37,20,71,337,36*7D +$GPGSV,3,2,10,19,03,029,,04,06,242,31,13,31,223,34,27,19,283,31*7F +$GPGSV,3,3,10,11,06,338,23,03,14,056,23*73 +$GPRMC,222635.000,A,2734.76418,S,15306.01089,E,8.3,116.7,030308,11.2,W,A*37 +$GPVTG,116.7,T,127.9,M,8.3,N,15.4,K,A*14 +$GPGGA,222636.000,2734.76577,S,15306.01258,E,1,07,1.7,47.9,M,39.2,M,,*7A +$GPGLL,2734.76577,S,15306.01258,E,222636.000,A,A*4C +$GPGSA,A,3,16,25,23,20,04,13,27,,,,,,2.8,1.7,2.3*3F +$GPGST,222636.000,10.6,11.9,8.1,45.4,9.3,9.3,18.8*65 +$GPGSV,3,1,10,16,48,116,41,25,39,268,35,23,58,174,40,20,71,337,33*7C +$GPGSV,3,2,10,19,03,029,,04,06,242,32,13,31,223,28,27,19,283,34*74 +$GPGSV,3,3,10,11,06,338,25,03,14,056,23*75 +$GPRMC,222636.000,A,2734.76577,S,15306.01258,E,7.6,135.7,030308,11.2,W,A*39 +$GPVTG,135.7,T,146.9,M,7.6,N,14.1,K,A*1C +$GPGGA,222637.000,2734.76759,S,15306.01422,E,1,07,1.7,47.8,M,39.2,M,,*7F +$GPGLL,2734.76759,S,15306.01422,E,222637.000,A,A*48 +$GPGSA,A,3,16,25,23,20,04,13,27,,,,,,2.8,1.7,2.3*3F +$GPGST,222637.000,8.9,7.2,10.9,44.4,8.4,8.5,17.1*59 +$GPGSV,3,1,10,16,48,116,44,25,39,268,36,23,58,174,33,20,71,337,33*7E +$GPGSV,3,2,10,19,03,029,,04,06,242,24,13,31,223,29,27,19,283,36*70 +$GPGSV,3,3,10,11,06,338,25,03,14,056,23*75 +$GPRMC,222637.000,A,2734.76759,S,15306.01422,E,8.0,140.6,030308,11.2,W,A*37 +$GPVTG,140.6,T,151.8,M,8.0,N,14.8,K,A*18 +$GPGGA,222638.000,2734.76957,S,15306.01592,E,1,06,2.0,47.6,M,39.2,M,,*71 +$GPGLL,2734.76957,S,15306.01592,E,222638.000,A,A*4D +$GPGSA,A,3,16,25,23,20,04,13,,,,,,,3.2,2.0,2.6*30 +$GPGST,222638.000,10.4,8.9,16.3,14.1,8.7,14.6,19.9*51 +$GPGSV,3,1,10,16,48,116,38,25,39,268,30,23,58,174,29,20,71,337,29*73 +$GPGSV,3,2,10,19,03,029,,04,06,242,28,13,31,223,31,27,19,283,29*7B +$GPGSV,3,3,10,11,06,338,21,03,14,056,23*71 +$GPRMC,222638.000,A,2734.76957,S,15306.01592,E,8.8,142.8,030308,11.2,W,A*36 +$GPVTG,142.8,T,154.0,M,8.8,N,16.2,K,A*19 +$GPGGA,222639.000,2734.77109,S,15306.01748,E,1,07,1.7,47.8,M,39.2,M,,*7C +$GPGLL,2734.77109,S,15306.01748,E,222639.000,A,A*4B +$GPGSA,A,3,16,25,23,20,04,13,27,,,,,,2.8,1.7,2.3*3F +$GPGST,222639.000,9.5,9.6,14.7,43.8,11.3,11.5,19.8*51 +$GPGSV,3,1,10,16,48,116,37,25,39,268,32,23,58,174,37,20,71,337,29*71 +$GPGSV,3,2,10,19,03,029,,04,06,242,28,13,31,223,31,27,19,283,27*75 +$GPGSV,3,3,10,11,06,338,21,03,14,056,23*71 +$GPRMC,222639.000,A,2734.77109,S,15306.01748,E,7.1,137.2,030308,11.2,W,A*3E +$GPVTG,137.2,T,148.4,M,7.1,N,13.1,K,A*18 +$GPGGA,222640.000,2734.77216,S,15306.02018,E,1,04,2.6,47.8,M,39.2,M,,*7F +$GPGLL,2734.77216,S,15306.02018,E,222640.000,A,A*49 +$GPGSA,A,3,16,25,23,13,,,,,,,,,6.2,2.6,5.6*32 +$GPGST,222640.000,20.0,11.7,22.3,7.0,10.9,20.3,46.8*65 +$GPGSV,3,1,10,16,48,116,32,25,39,268,29,23,58,174,24,20,71,337,25*70 +$GPGSV,3,2,10,19,03,029,,04,06,242,28,13,31,223,31,27,19,283,25*77 +$GPGSV,3,3,10,11,06,338,21,03,14,056,23*71 +$GPRMC,222640.000,A,2734.77216,S,15306.02018,E,9.4,114.2,030308,11.2,W,A*36 +$GPVTG,114.2,T,125.4,M,9.4,N,17.4,K,A*18 +$GPGGA,222641.000,2734.77543,S,15306.02149,E,1,04,2.6,47.7,M,39.2,M,,*73 +$GPGLL,2734.77543,S,15306.02149,E,222641.000,A,A*4A +$GPGSA,A,3,16,25,23,13,,,,,,,,,6.2,2.6,5.6*32 +$GPGST,222641.000,18.3,40.3,13.2,79.5,13.7,36.3,59.1*5E +$GPGSV,3,1,10,16,48,116,34,25,39,268,23,23,58,174,26,20,71,337,27*7C +$GPGSV,3,2,10,19,03,029,,04,06,242,28,13,31,223,31,27,19,283,23*71 +$GPGSV,3,3,10,11,06,338,21,03,14,056,23*71 +$GPRMC,222641.000,A,2734.77543,S,15306.02149,E,12.5,160.9,030308,11.2,W,A*06 +$GPVTG,160.9,T,172.1,M,12.5,N,23.1,K,A*2E +$GPGGA,222642.000,2734.77709,S,15306.02300,E,1,04,2.6,47.7,M,39.2,M,,*73 +$GPGLL,2734.77709,S,15306.02300,E,222642.000,A,A*4A +$GPGSA,A,3,16,20,04,13,,,,,,,,,4.3,2.6,3.4*35 +$GPGST,222642.000,15.8,14.5,71.8,20.7,26.3,61.6,97.2*58 +$GPGSV,3,1,10,16,48,116,41,25,40,268,23,23,58,174,27,20,71,337,34*73 +$GPGSV,3,2,10,19,03,029,,04,06,242,28,13,31,223,31,27,19,283,23*71 +$GPGSV,3,3,10,11,06,338,21,03,14,056,23*71 +$GPRMC,222642.000,A,2734.77709,S,15306.02300,E,7.5,140.7,030308,11.2,W,A*3E +$GPVTG,140.7,T,151.9,M,7.5,N,13.9,K,A*14 +$GPGGA,222643.000,2734.77831,S,15306.02427,E,1,04,2.6,47.5,M,39.2,M,,*76 +$GPGLL,2734.77831,S,15306.02427,E,222643.000,A,A*4D +$GPGSA,A,3,16,20,04,13,,,,,,,,,4.3,2.6,3.4*35 +$GPGST,222643.000,12.9,15.5,112.8,21.4,39.9,96.1,154.3*5C +$GPGSV,3,1,10,16,48,116,41,25,40,268,23,23,58,174,26,20,71,337,35*73 +$GPGSV,3,2,10,19,03,029,,04,06,242,28,13,31,223,31,27,19,283,23*71 +$GPGSV,3,3,10,11,06,338,21,03,14,056,23*71 +$GPRMC,222643.000,A,2734.77831,S,15306.02427,E,5.6,136.2,030308,11.2,W,A*3C +$GPVTG,136.2,T,147.4,M,5.6,N,10.4,K,A*15 +$GPGGA,222644.000,2734.77900,S,15306.02522,E,1,04,2.5,47.4,M,39.2,M,,*74 +$GPGLL,2734.77900,S,15306.02522,E,222644.000,A,A*4D +$GPGSA,A,3,16,23,20,13,,,,,,,,,5.8,2.5,5.2*39 +$GPGST,222644.000,11.9,32.3,39.9,23.1,35.5,30.7,165.7*69 +$GPGSV,3,1,10,16,48,116,38,25,40,268,23,23,58,174,25,20,71,337,37*7C +$GPGSV,3,2,10,19,03,029,,04,06,242,28,13,31,223,31,27,19,283,23*71 +$GPGSV,3,3,10,11,06,338,21,03,14,056,26*74 +$GPRMC,222644.000,A,2734.77900,S,15306.02522,E,3.7,127.8,030308,11.2,W,A*31 +$GPVTG,127.8,T,139.0,M,3.7,N,6.9,K,A*2F +$GPGGA,222645.000,2734.77991,S,15306.02594,E,1,04,3.4,47.4,M,39.2,M,,*70 +$GPGLL,2734.77991,S,15306.02594,E,222645.000,A,A*49 +$GPGSA,A,3,16,23,20,03,,,,,,,,,6.1,3.4,5.0*30 +$GPGST,222645.000,15.3,40.1,15.0,66.6,34.1,19.2,69.1*50 +$GPGSV,3,1,10,16,48,116,33,25,40,268,23,23,58,174,23,20,71,337,35*73 +$GPGSV,3,2,10,19,03,029,,04,06,242,28,13,31,223,31,27,19,283,23*71 +$GPGSV,3,3,10,11,06,338,21,03,14,056,30*73 +$GPRMC,222645.000,A,2734.77991,S,15306.02594,E,3.9,145.4,030308,11.2,W,A*33 +$GPVTG,145.4,T,156.6,M,3.9,N,7.2,K,A*2C +$GPGGA,222646.000,2734.78074,S,15306.02652,E,1,04,3.4,47.4,M,39.2,M,,*77 +$GPGLL,2734.78074,S,15306.02652,E,222646.000,A,A*4E +$GPGSA,A,3,16,23,20,03,,,,,,,,,6.1,3.4,5.0*30 +$GPGST,222646.000,14.8,53.5,15.6,78.9,48.1,16.9,76.9*50 +$GPGSV,3,1,11,16,48,116,32,25,40,268,23,23,58,174,26,20,71,337,32*71 +$GPGSV,3,2,11,19,03,029,,04,06,242,28,13,31,223,31,27,19,283,23*70 +$GPGSV,3,3,11,11,06,338,21,08,00,298,,03,14,056,34*4D +$GPRMC,222646.000,A,2734.78074,S,15306.02652,E,3.5,149.5,030308,11.2,W,A*35 +$GPVTG,149.5,T,160.7,M,3.5,N,6.6,K,A*2C +$GPGGA,222647.000,2734.78140,S,15306.02704,E,1,04,3.4,47.3,M,39.2,M,,*75 +$GPGLL,2734.78140,S,15306.02704,E,222647.000,A,A*4B +$GPGSA,A,3,16,23,20,03,,,,,,,,,6.1,3.4,5.0*30 +$GPGST,222647.000,11.7,42.4,13.1,77.7,38.0,14.3,60.9*53 +$GPGSV,3,1,11,16,48,116,37,25,40,268,23,23,58,174,31,20,71,337,36*76 +$GPGSV,3,2,11,19,03,029,,04,06,242,28,13,31,223,31,27,19,283,23*70 +$GPGSV,3,3,11,11,06,338,21,08,00,298,,03,14,056,34*4D +$GPRMC,222647.000,A,2734.78140,S,15306.02704,E,2.8,145.4,030308,11.2,W,A*31 +$GPVTG,145.4,T,156.6,M,2.8,N,5.1,K,A*2D +$GPGGA,222648.000,2734.78183,S,15306.02753,E,1,04,3.5,47.2,M,39.2,M,,*77 +$GPGLL,2734.78183,S,15306.02753,E,222648.000,A,A*49 +$GPGSA,A,3,16,23,20,03,,,,,,,,,6.1,3.5,5.0*31 +$GPGST,222648.000,11.3,35.2,16.9,76.3,31.5,16.9,53.8*53 +$GPGSV,3,1,11,16,48,116,35,25,40,267,23,23,58,174,37,20,71,337,35*7E +$GPGSV,3,2,11,19,03,029,,04,06,242,28,13,31,223,31,27,19,283,23*70 +$GPGSV,3,3,11,11,06,338,21,08,00,298,,03,14,056,35*4C +$GPRMC,222648.000,A,2734.78183,S,15306.02753,E,2.1,135.8,030308,11.2,W,A*31 +$GPVTG,135.8,T,147.1,M,2.1,N,3.9,K,A*26 +$GPGGA,222649.000,2734.78197,S,15306.02773,E,1,04,3.5,46.8,M,39.2,M,,*7A +$GPGLL,2734.78197,S,15306.02773,E,222649.000,A,A*4F +$GPGSA,A,3,16,23,20,03,,,,,,,,,6.1,3.5,5.0*31 +$GPGST,222649.000,13.9,60.8,14.8,84.0,55.3,14.7,79.7*52 +$GPGSV,3,1,11,16,48,116,31,25,40,267,23,23,58,174,36,20,71,337,31*7F +$GPGSV,3,2,11,19,03,029,,04,06,242,,13,31,223,,27,19,283,23*78 +$GPGSV,3,3,11,11,06,338,21,08,00,298,,03,14,056,29*41 +$GPRMC,222649.000,A,2734.78197,S,15306.02773,E,0.6,148.6,030308,11.2,W,A*36 +$GPVTG,148.6,T,159.8,M,0.6,N,1.2,K,A*28 +$GPGGA,222650.000,2734.78195,S,15306.02785,E,1,04,3.5,46.4,M,39.2,M,,*75 +$GPGLL,2734.78195,S,15306.02785,E,222650.000,A,A*4C +$GPGSA,A,3,16,23,20,03,,,,,,,,,6.1,3.5,5.0*31 +$GPGST,222650.000,11.4,48.0,12.9,83.3,43.6,12.8,63.8*5B +$GPGSV,3,1,11,16,48,116,30,25,40,267,23,23,58,174,33,20,71,337,30*7A +$GPGSV,3,2,11,19,03,029,,04,06,242,,13,31,223,,27,19,283,23*78 +$GPGSV,3,3,11,11,06,338,21,08,00,298,,03,14,056,26*4E +$GPRMC,222650.000,A,2734.78195,S,15306.02785,E,0.2,6.4,030308,11.2,W,A*38 +$GPVTG,6.4,T,17.6,M,0.2,N,0.3,K,A*10 +$GPGGA,222651.000,2734.78191,S,15306.02798,E,1,04,3.5,45.9,M,39.2,M,,*72 +$GPGLL,2734.78191,S,15306.02798,E,222651.000,A,A*45 +$GPGSA,A,3,16,23,20,03,,,,,,,,,6.1,3.5,5.0*31 +$GPGST,222651.000,9.8,40.0,12.0,82.4,36.3,11.9,53.8*6E +$GPGSV,3,1,11,16,48,116,28,25,40,267,,23,58,174,35,20,71,337,26*73 +$GPGSV,3,2,11,19,03,029,,04,06,242,,13,31,223,,27,19,283,*79 +$GPGSV,3,3,11,11,06,338,21,08,00,298,,03,14,056,28*40 +$GPRMC,222651.000,A,2734.78191,S,15306.02798,E,0.1,352.6,030308,11.2,W,A*32 +$GPVTG,352.6,T,3.8,M,0.1,N,0.3,K,A*28 +$GPGGA,222652.000,2734.78198,S,15306.02797,E,1,04,3.5,45.9,M,39.2,M,,*77 +$GPGLL,2734.78198,S,15306.02797,E,222652.000,A,A*40 +$GPGSA,A,3,16,23,20,03,,,,,,,,,6.1,3.5,5.0*31 +$GPGST,222652.000,21.7,41.2,15.0,83.8,37.5,14.2,91.6*58 +$GPGSV,3,1,11,16,48,116,24,25,40,267,,23,58,174,23,20,71,337,26*78 +$GPGSV,3,2,11,19,03,029,,04,06,242,,13,31,223,,27,19,283,*79 +$GPGSV,3,3,11,11,06,338,21,08,00,298,,03,14,056,24*4C +$GPRMC,222652.000,A,2734.78198,S,15306.02797,E,0.2,263.5,030308,11.2,W,A*34 +$GPVTG,263.5,T,274.7,M,0.2,N,0.3,K,A*26 +$GPGGA,222653.000,2734.78226,S,15306.02793,E,1,04,3.5,45.9,M,39.2,M,,*74 +$GPGLL,2734.78226,S,15306.02793,E,222653.000,A,A*43 +$GPGSA,A,3,16,23,20,03,,,,,,,,,6.1,3.5,5.0*31 +$GPGST,222653.000,18.8,36.4,20.7,81.4,33.0,19.3,78.6*5F +$GPGSV,3,1,11,16,48,116,24,25,40,267,,23,58,174,25,20,71,337,25*7D +$GPGSV,3,2,11,19,03,029,,04,06,242,,13,31,223,,27,20,283,*73 +$GPGSV,3,3,11,11,06,338,21,08,00,298,,03,14,056,24*4C +$GPRMC,222653.000,A,2734.78226,S,15306.02793,E,0.8,188.1,030308,11.2,W,A*3F +$GPVTG,188.1,T,199.3,M,0.8,N,1.5,K,A*2D +$GPGGA,222654.000,2734.78231,S,15306.02789,E,1,04,3.5,45.9,M,39.2,M,,*7E +$GPGLL,2734.78231,S,15306.02789,E,222654.000,A,A*49 +$GPGSA,A,3,16,23,20,03,,,,,,,,,6.1,3.5,5.0*31 +$GPGST,222654.000,14.4,23.3,16.5,69.8,20.7,16.0,57.9*5D +$GPGSV,3,1,11,16,48,116,34,25,40,267,,23,58,174,34,20,71,337,31*79 +$GPGSV,3,2,11,19,03,029,,04,06,242,,13,31,223,,27,20,283,*73 +$GPGSV,3,3,11,11,06,338,21,08,00,298,,03,14,056,31*48 +$GPRMC,222654.000,A,2734.78231,S,15306.02789,E,0.1,145.6,030308,11.2,W,A*3A +$GPVTG,145.6,T,156.8,M,0.1,N,0.2,K,A*2C +$GPGGA,222655.000,2734.78251,S,15306.02806,E,1,04,3.5,45.8,M,39.2,M,,*70 +$GPGLL,2734.78251,S,15306.02806,E,222655.000,A,A*46 +$GPGSA,A,3,16,23,20,03,,,,,,,,,6.1,3.5,5.0*31 +$GPGST,222655.000,12.0,28.1,14.0,78.7,25.3,13.6,52.5*54 +$GPGSV,3,1,11,16,48,116,40,25,40,267,,23,58,174,38,20,71,337,35*72 +$GPGSV,3,2,11,19,03,029,,04,06,242,,13,31,223,,27,20,283,*73 +$GPGSV,3,3,11,11,06,338,21,08,00,298,,03,14,056,36*4F +$GPRMC,222655.000,A,2734.78251,S,15306.02806,E,0.7,135.5,030308,11.2,W,A*37 +$GPVTG,135.5,T,146.8,M,0.7,N,1.2,K,A*2E +$GPGGA,222656.000,2734.78273,S,15306.02823,E,1,04,3.5,45.7,M,39.2,M,,*7B +$GPGLL,2734.78273,S,15306.02823,E,222656.000,A,A*42 +$GPGSA,A,3,16,23,20,03,,,,,,,,,6.1,3.5,5.0*31 +$GPGST,222656.000,9.9,24.8,12.2,76.6,22.2,12.0,44.0*69 +$GPGSV,3,1,11,16,48,116,38,25,40,267,,23,58,174,36,20,71,337,30*76 +$GPGSV,3,2,11,19,03,029,,04,06,242,,13,31,223,,27,20,283,*73 +$GPGSV,3,3,11,11,06,338,21,08,00,298,,03,14,056,35*4C +$GPRMC,222656.000,A,2734.78273,S,15306.02823,E,0.5,135.5,030308,11.2,W,A*31 +$GPVTG,135.5,T,146.7,M,0.5,N,1.0,K,A*21 +$GPGGA,222657.000,2734.78312,S,15306.02858,E,1,04,3.5,45.5,M,39.2,M,,*72 +$GPGLL,2734.78312,S,15306.02858,E,222657.000,A,A*49 +$GPGSA,A,3,16,23,20,03,,,,,,,,,6.1,3.5,5.0*31 +$GPGST,222657.000,8.4,22.4,10.9,74.9,19.9,11.0,38.1*60 +$GPGSV,3,1,11,16,48,116,37,25,40,267,,23,58,174,36,20,71,337,30*79 +$GPGSV,3,2,11,19,03,029,,04,06,242,,13,31,223,,27,20,283,*73 +$GPGSV,3,3,11,11,06,338,21,08,00,298,,03,14,056,34*4D +$GPRMC,222657.000,A,2734.78312,S,15306.02858,E,1.3,137.6,030308,11.2,W,A*3C +$GPVTG,137.6,T,148.8,M,1.3,N,2.4,K,A*21 +$GPGGA,222658.000,2734.78370,S,15306.02910,E,1,04,3.5,45.4,M,39.2,M,,*75 +$GPGLL,2734.78370,S,15306.02910,E,222658.000,A,A*4F +$GPGSA,A,3,16,23,20,03,,,,,,,,,6.1,3.5,5.0*31 +$GPGST,222658.000,11.5,25.4,19.7,45.8,20.9,20.7,46.1*53 +$GPGSV,3,1,11,16,48,116,34,25,40,267,18,23,58,174,36,20,71,337,32*71 +$GPGSV,3,2,11,19,03,029,,04,06,242,,13,31,223,,27,20,283,*73 +$GPGSV,3,3,11,11,06,338,,08,00,298,,03,14,056,32*48 +$GPRMC,222658.000,A,2734.78370,S,15306.02910,E,2.7,141.8,030308,11.2,W,A*32 +$GPVTG,141.8,T,153.0,M,2.7,N,5.0,K,A*28 +$GPGGA,222659.000,2734.78463,S,15306.02956,E,1,04,3.5,45.4,M,39.2,M,,*73 +$GPGLL,2734.78463,S,15306.02956,E,222659.000,A,A*49 +$GPGSA,A,3,16,23,20,03,,,,,,,,,6.1,3.5,5.0*31 +$GPGST,222659.000,10.9,34.8,17.8,79.2,31.4,17.1,52.2*5E +$GPGSV,3,1,11,16,48,116,32,25,40,267,18,23,58,174,37,20,71,337,32*76 +$GPGSV,3,2,11,19,03,029,,04,06,242,,13,31,223,,27,20,283,*73 +$GPGSV,3,3,11,11,06,338,,08,00,298,,03,14,056,26*4D +$GPRMC,222659.000,A,2734.78463,S,15306.02956,E,3.6,157.2,030308,11.2,W,A*39 +$GPVTG,157.2,T,168.4,M,3.6,N,6.7,K,A*2D +$GPGGA,222700.000,2734.78553,S,15306.02974,E,1,04,3.5,45.3,M,39.2,M,,*7B +$GPGLL,2734.78553,S,15306.02974,E,222700.000,A,A*46 +$GPGSA,A,3,16,23,20,03,,,,,,,,,6.1,3.5,5.0*31 +$GPGST,222700.000,13.4,30.5,15.4,80.9,27.6,14.6,58.2*5C +$GPGSV,3,1,11,16,48,116,38,25,40,267,18,23,58,174,42,20,71,337,34*78 +$GPGSV,3,2,11,19,03,029,,04,06,242,,13,31,223,,27,20,283,*73 +$GPGSV,3,3,11,11,06,338,,08,00,298,,03,14,056,30*4A +$GPRMC,222700.000,A,2734.78553,S,15306.02974,E,3.1,171.1,030308,11.2,W,A*36 +$GPVTG,171.1,T,182.3,M,3.1,N,5.7,K,A*2D +$GPGGA,222701.000,2734.78678,S,15306.02887,E,1,05,1.6,45.4,M,39.2,M,,*7A +$GPGLL,2734.78678,S,15306.02887,E,222701.000,A,A*40 +$GPGSA,A,3,16,23,20,13,03,,,,,,,,2.5,1.6,1.9*3F +$GPGST,222701.000,18.6,22.3,33.4,25.2,29.0,22.6,46.2*53 +$GPGSV,3,1,11,16,48,116,30,25,40,267,18,23,58,174,33,20,71,337,27*74 +$GPGSV,3,2,11,19,03,029,,04,06,242,,13,31,223,20,27,20,283,*71 +$GPGSV,3,3,11,11,06,338,,08,00,298,,03,14,056,27*4C +$GPRMC,222701.000,A,2734.78678,S,15306.02887,E,5.1,212.6,030308,11.2,W,A*37 +$GPVTG,212.6,T,223.8,M,5.1,N,9.5,K,A*27 +$GPGGA,222702.000,2734.78726,S,15306.02769,E,1,04,3.5,45.3,M,39.2,M,,*7B +$GPGLL,2734.78726,S,15306.02769,E,222702.000,A,A*46 +$GPGSA,A,3,16,23,20,03,,,,,,,,,6.1,3.5,5.0*31 +$GPGST,222702.000,14.7,49.5,20.8,84.3,45.1,19.5,72.8*5F +$GPGSV,3,1,11,16,48,116,36,25,40,267,18,23,58,174,40,20,71,337,31*71 +$GPGSV,3,2,11,19,03,029,,04,06,242,,13,31,223,20,27,20,283,*71 +$GPGSV,3,3,11,11,06,338,,08,00,298,,03,14,056,28*43 +$GPRMC,222702.000,A,2734.78726,S,15306.02769,E,4.2,246.4,030308,11.2,W,A*30 +$GPVTG,246.4,T,257.6,M,4.2,N,7.7,K,A*27 +$GPGGA,222703.000,2734.78745,S,15306.02617,E,1,05,1.6,45.3,M,39.2,M,,*77 +$GPGLL,2734.78745,S,15306.02617,E,222703.000,A,A*4A +$GPGSA,A,3,16,23,20,13,03,,,,,,,,2.5,1.6,1.9*3F +$GPGST,222703.000,12.3,16.0,23.0,21.5,20.3,15.6,33.1*53 +$GPGSV,3,1,11,16,48,116,31,25,40,267,18,23,58,174,29,20,70,337,23*7B +$GPGSV,3,2,11,19,03,029,,04,06,242,,13,31,223,22,27,20,283,*73 +$GPGSV,3,3,11,11,06,338,,08,00,298,,03,14,056,27*4C +$GPRMC,222703.000,A,2734.78745,S,15306.02617,E,4.9,265.5,030308,11.2,W,A*37 +$GPVTG,265.5,T,276.7,M,4.9,N,9.1,K,A*26 +$GPGGA,222704.000,2734.78730,S,15306.02555,E,1,04,3.5,45.3,M,39.2,M,,*77 +$GPGLL,2734.78730,S,15306.02555,E,222704.000,A,A*4A +$GPGSA,A,3,16,23,20,03,,,,,,,,,6.1,3.5,5.1*30 +$GPGST,222704.000,9.5,34.0,22.1,80.5,30.8,20.6,55.7*69 +$GPGSV,3,1,11,16,48,116,31,25,40,267,18,23,58,174,29,20,70,337,23*7B +$GPGSV,3,2,11,19,03,029,,04,06,242,,13,31,223,22,27,20,283,*73 +$GPGSV,3,3,11,11,06,338,,08,00,298,,03,14,056,31*4B +$GPRMC,222704.000,A,2734.78730,S,15306.02555,E,2.1,286.5,030308,11.2,W,A*34 +$GPVTG,286.5,T,297.7,M,2.1,N,3.9,K,A*28 +$GPGGA,222705.000,2734.78698,S,15306.02452,E,1,04,3.5,45.3,M,39.2,M,,*73 +$GPGLL,2734.78698,S,15306.02452,E,222705.000,A,A*4E +$GPGSA,A,3,16,23,20,03,,,,,,,,,6.1,3.5,5.1*30 +$GPGST,222705.000,93.8,65.1,31.9,84.0,59.3,29.7,94.1*5F +$GPGSV,3,1,11,16,48,116,29,25,40,267,18,23,58,174,29,20,70,337,23*72 +$GPGSV,3,2,11,19,03,029,,04,06,242,,13,31,223,22,27,20,283,*73 +$GPGSV,3,3,11,11,06,338,,08,00,298,,03,14,056,30*4A +$GPRMC,222705.000,A,2734.78698,S,15306.02452,E,3.6,290.3,030308,11.2,W,A*37 +$GPVTG,290.3,T,301.5,M,3.6,N,6.8,K,A*27 +$GPGGA,222706.000,2734.78686,S,15306.02339,E,1,04,3.5,45.3,M,39.2,M,,*75 +$GPGLL,2734.78686,S,15306.02339,E,222706.000,A,A*48 +$GPGSA,A,3,16,23,20,03,,,,,,,,,6.1,3.5,5.1*30 +$GPGST,222706.000,114.3,62.0,48.3,70.3,55.4,45.7,116.3*5B +$GPGSV,3,1,11,16,48,116,24,25,40,267,18,23,58,174,29,20,70,337,23*7F +$GPGSV,3,2,11,19,03,029,,04,06,242,,13,31,223,22,27,20,283,*73 +$GPGSV,3,3,11,11,06,338,,08,00,298,,03,14,056,24*4F +$GPRMC,222706.000,A,2734.78686,S,15306.02339,E,3.4,277.7,030308,11.2,W,A*3E +$GPVTG,277.7,T,288.9,M,3.4,N,6.3,K,A*2F +$GPGGA,222707.000,2734.78679,S,15306.02251,E,1,04,3.5,45.3,M,39.2,M,,*7B +$GPGLL,2734.78679,S,15306.02251,E,222707.000,A,A*46 +$GPGSA,A,3,16,23,20,03,,,,,,,,,6.1,3.5,5.1*30 +$GPGST,222707.000,128.0,90.0,67.0,53.0,75.4,69.6,158.6*55 +$GPGSV,3,1,11,16,48,116,24,25,40,267,18,23,58,174,29,20,70,337,23*7F +$GPGSV,3,2,11,19,03,029,,04,06,242,,13,31,223,22,27,20,283,*73 +$GPGSV,3,3,11,11,06,338,,08,00,298,,03,14,056,24*4F +$GPRMC,222707.000,A,2734.78679,S,15306.02251,E,,,030308,,,A*79 +$GPVTG,,T,,M,,N,,K,N*2C +$GPGGA,222708.000,2734.78673,S,15306.02181,E,1,05,1.6,45.3,M,39.2,M,,*70 +$GPGLL,2734.78673,S,15306.02181,E,222708.000,A,A*4D +$GPGSA,A,3,16,23,20,13,03,,,,,,,,2.5,1.6,1.9*3F +$GPGST,222708.000,66.8,93.0,70.5,62.6,69.3,81.1,141.7*6F +$GPGSV,3,1,11,16,48,116,24,25,40,267,,23,58,174,29,20,70,337,23*76 +$GPGSV,3,2,11,19,03,029,,04,06,242,,13,31,222,22,27,20,283,*72 +$GPGSV,3,3,11,11,06,338,,08,00,298,,03,14,056,24*4F +$GPRMC,222708.000,A,2734.78673,S,15306.02181,E,,,030308,,,A*72 +$GPVTG,,T,,M,,N,,K,N*2C +$GPGGA,222709.000,2734.78668,S,15306.02124,E,1,05,1.6,45.3,M,39.2,M,,*74 +$GPGLL,2734.78668,S,15306.02124,E,222709.000,A,A*49 +$GPGSA,A,2,16,23,20,13,03,,,,,,,,1.8,1.6,0.9*31 +$GPGST,222709.000,89.5,61.2,117.7,37.9,91.7,79.5,4.3*54 +$GPGSV,3,1,11,16,48,116,24,25,40,267,,23,58,174,29,20,70,337,23*76 +$GPGSV,3,2,11,19,03,029,,04,06,242,,13,31,222,22,27,20,283,*72 +$GPGSV,3,3,11,11,06,338,,08,00,298,,03,14,056,24*4F +$GPRMC,222709.000,A,2734.78668,S,15306.02124,E,,,030308,,,A*76 +$GPVTG,,T,,M,,N,,K,N*2C +$GPGGA,222710.000,2734.78664,S,15306.02080,E,1,05,1.6,45.3,M,39.2,M,,*7F +$GPGLL,2734.78664,S,15306.02080,E,222710.000,A,A*42 +$GPGSA,A,2,16,23,20,13,03,,,,,,,,1.8,1.6,0.9*31 +$GPGST,222710.000,117.0,82.3,157.6,39.0,121.7,107.9,3.9*62 +$GPGSV,3,1,11,16,48,116,24,25,40,267,,23,58,174,29,20,70,337,23*76 +$GPGSV,3,2,11,19,03,029,,04,06,242,,13,31,222,22,27,20,283,*72 +$GPGSV,3,3,11,11,06,338,,08,00,298,,03,14,056,24*4F +$GPRMC,222710.000,A,2734.78664,S,15306.02080,E,,,030308,,,A*7D +$GPVTG,,T,,M,,N,,K,N*2C +$GPGGA,222711.000,2734.78660,S,15306.02044,E,1,05,1.6,45.3,M,39.2,M,,*72 +$GPGLL,2734.78660,S,15306.02044,E,222711.000,A,A*4F +$GPGSA,A,2,16,23,20,13,03,,,,,,,,1.8,1.6,0.9*31 +$GPGST,222711.000,128.0,107.6,205.2,40.2,156.7,142.6,3.5*58 +$GPGSV,3,1,11,16,48,116,24,25,40,267,,23,58,174,29,20,70,337,23*76 +$GPGSV,3,2,11,19,03,029,,04,06,242,,13,31,222,22,27,20,283,*72 +$GPGSV,3,3,11,11,06,338,,08,00,298,,03,14,056,24*4F +$GPRMC,222711.000,A,2734.78660,S,15306.02044,E,,,030308,,,A*70 +$GPVTG,,T,,M,,N,,K,N*2C +$GPGGA,222712.000,2734.78658,S,15306.02015,E,1,05,1.6,45.3,M,39.2,M,,*7E +$GPGLL,2734.78658,S,15306.02015,E,222712.000,A,A*43 +$GPGSA,A,2,16,23,20,13,03,,,,,,,,1.8,1.6,0.9*31 +$GPGST,222712.000,128.0,137.2,261.1,41.4,197.4,183.9,3.2*51 +$GPGSV,3,1,11,16,48,116,24,25,40,267,,23,58,173,29,20,70,337,23*71 +$GPGSV,3,2,11,19,03,029,,04,06,242,,13,31,222,22,27,20,283,*72 +$GPGSV,3,3,11,11,06,338,,08,00,298,,03,14,056,24*4F +$GPRMC,222712.000,A,2734.78658,S,15306.02015,E,,,030308,,,A*7C
\ No newline at end of file diff --git a/examples/declarative/landmarkmap/qmllandmarkmap.cpp b/examples/declarative/landmarkmap/qmllandmarkmap.cpp new file mode 100644 index 00000000..5dd2d900 --- /dev/null +++ b/examples/declarative/landmarkmap/qmllandmarkmap.cpp @@ -0,0 +1,64 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Mobility Components. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include <QtGui/QApplication> +#include <QtDeclarative/QDeclarativeView> +#include <QtDeclarative/QDeclarativeEngine> +#include <QDir> + +int main(int argc, char *argv[]) +{ + QApplication application(argc, argv); + QDir::setCurrent(QApplication::applicationDirPath()); + const QString mainQmlApp = QLatin1String("qrc:///landmarkmap.qml"); + QDeclarativeView view; + view.setSource(QUrl(mainQmlApp)); + view.setResizeMode(QDeclarativeView::SizeRootObjectToView); + // Qt.quit() called in embedded .qml by default only emits + // quit() signal, so do this (optionally use Qt.exit()). + QObject::connect(view.engine(), SIGNAL(quit()), qApp, SLOT(quit())); +#if defined(Q_OS_SYMBIAN) || defined(Q_WS_MAEMO_6) + view.showFullScreen(); +#else + view.setGeometry(QRect(100, 100, 360, 640)); + view.show(); +#endif + return application.exec(); +} diff --git a/examples/declarative/mapviewer/TitleBar.qml b/examples/declarative/mapviewer/TitleBar.qml new file mode 100755 index 00000000..0490393d --- /dev/null +++ b/examples/declarative/mapviewer/TitleBar.qml @@ -0,0 +1,76 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Mobility Components. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import Qt 4.7 + +Item { + id: titleBar + BorderImage { source: "titlebar.sci"; width: parent.width; height: parent.height + 14; y: -7 } + + Item { + id: container + width: (parent.width * 2) - 55 ; height: parent.height + + Image { + id: quitButton + anchors.left: parent.left//; anchors.leftMargin: 0 + anchors.verticalCenter: parent.verticalCenter + source: "quit.png" + MouseArea { + anchors.fill: parent + onClicked: Qt.quit() + } + } + + Text { + id: categoryText + anchors { + left: quitButton.right; leftMargin: 10; rightMargin: 10 + verticalCenter: parent.verticalCenter + } + elide: Text.ElideLeft + text: "Mapviewer example" + font.bold: true; color: "White"; style: Text.Raised; styleColor: "Black" + } + } + transitions: Transition { + NumberAnimation { properties: "x"; easing.type: Easing.InOutQuad } + } +} diff --git a/examples/declarative/mapviewer/mapviewer.pro b/examples/declarative/mapviewer/mapviewer.pro new file mode 100644 index 00000000..5a787021 --- /dev/null +++ b/examples/declarative/mapviewer/mapviewer.pro @@ -0,0 +1,19 @@ +TARGET = qml_location_mapviewer +TEMPLATE=app + +QT += declarative network +SOURCES += qmlmapviewer.cpp + +symbian { + TARGET.CAPABILITY = NetworkServices Location ReadUserData WriteUserData + TARGET.EPOCHEAPSIZE = 0x20000 0x2000000 +} + +RESOURCES += \ + mapviewer.qrc + +target.path = $$[QT_INSTALL_DEMOS]/qtlocation/declarative/mapviewer +sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS *.pro *.qml *.png *.sci +sources.path = $$[QT_INSTALL_DEMOS]/qtlocation/declarative/mapviewer + +INSTALLS += target sources diff --git a/examples/declarative/mapviewer/mapviewer.qml b/examples/declarative/mapviewer/mapviewer.qml new file mode 100644 index 00000000..b5eee068 --- /dev/null +++ b/examples/declarative/mapviewer/mapviewer.qml @@ -0,0 +1,128 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Mobility Components. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import Qt 4.7 +import QtMobility.location 1.2 + +Item { + width: 500 + height: 500 + + focus : true + TitleBar { id: titleBar; z: 5; width: parent.width; height: 40; opacity: 0.9 } + + Map { + id: map + z : 1 + plugin : Plugin { + name : "nokia" + } + size.width: parent.width + size.height: parent.height + zoomLevel: 7 + center: Coordinate { + latitude: 51.5 + longitude: -0.11 + } + + MapCircle { + id : circle + center : Coordinate { + latitude : 51.5 + longitude : -0.11 + } + color : "#80FF0000" + radius : 1000.0 + MapMouseArea { + onPositionChanged: { + if (mouse.button == Qt.LeftButton) + circle.center = mouse.coordinate + if (mouse.button == Qt.RightButton) + circle.radius = circle.center.distanceTo(mouse.coordinate) + } + } + } + + MapMouseArea { + property int lastX : -1 + property int lastY : -1 + + onPressed : { + lastX = mouse.x + lastY = mouse.y + } + onReleased : { + lastX = -1 + lastY = -1 + } + onPositionChanged: { + if (mouse.button == Qt.LeftButton) { + if ((lastX != -1) && (lastY != -1)) { + var dx = mouse.x - lastX + var dy = mouse.y - lastY + map.pan(-dx, -dy) + } + lastX = mouse.x + lastY = mouse.y + } + } + onDoubleClicked: { + map.center = mouse.coordinate + map.zoomLevel += 1 + lastX = -1 + lastY = -1 + } + } + } + + Keys.onPressed: { + if (event.key == Qt.Key_Plus) { + map.zoomLevel += 1 + } else if (event.key == Qt.Key_Minus) { + map.zoomLevel -= 1 + } else if (event.key == Qt.Key_T) { + if (map.mapType == Map.StreetMap) { + map.mapType = Map.SatelliteMapDay + } else if (map.mapType == Map.SatelliteMapDay) { + map.mapType = Map.StreetMap + } + } + } +} diff --git a/examples/declarative/mapviewer/mapviewer.qrc b/examples/declarative/mapviewer/mapviewer.qrc new file mode 100644 index 00000000..5cb155c4 --- /dev/null +++ b/examples/declarative/mapviewer/mapviewer.qrc @@ -0,0 +1,9 @@ +<RCC version="1.0"> + <qresource prefix="/"> + <file>mapviewer.qml</file> + <file>TitleBar.qml</file> + <file>quit.png</file> + <file>titlebar.png</file> + <file>titlebar.sci</file> + </qresource> +</RCC> diff --git a/examples/declarative/mapviewer/qmlmapviewer.cpp b/examples/declarative/mapviewer/qmlmapviewer.cpp new file mode 100644 index 00000000..f68cf1a0 --- /dev/null +++ b/examples/declarative/mapviewer/qmlmapviewer.cpp @@ -0,0 +1,62 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Mobility Components. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include <QtGui/QApplication> +#include <QtDeclarative/QDeclarativeView> +#include <QtDeclarative/QDeclarativeEngine> + +int main(int argc, char *argv[]) +{ + QApplication application(argc, argv); + const QString mainQmlApp = QLatin1String("qrc:///mapviewer.qml"); + QDeclarativeView view; + view.setSource(QUrl(mainQmlApp)); + view.setResizeMode(QDeclarativeView::SizeRootObjectToView); + // Qt.quit() called in embedded .qml by default only emits + // quit() signal, so do this (optionally use Qt.exit()). + QObject::connect(view.engine(), SIGNAL(quit()), qApp, SLOT(quit())); +#if defined(Q_OS_SYMBIAN) || defined(Q_WS_MAEMO_6) + view.showFullScreen(); +#else + view.setGeometry(QRect(100, 100, 360, 640)); + view.show(); +#endif + return application.exec(); +} diff --git a/examples/declarative/mapviewer/quit.png b/examples/declarative/mapviewer/quit.png Binary files differnew file mode 100755 index 00000000..5bda1b6e --- /dev/null +++ b/examples/declarative/mapviewer/quit.png diff --git a/examples/declarative/mapviewer/titlebar.png b/examples/declarative/mapviewer/titlebar.png Binary files differnew file mode 100755 index 00000000..51c90082 --- /dev/null +++ b/examples/declarative/mapviewer/titlebar.png diff --git a/examples/declarative/mapviewer/titlebar.sci b/examples/declarative/mapviewer/titlebar.sci new file mode 100755 index 00000000..0418d94c --- /dev/null +++ b/examples/declarative/mapviewer/titlebar.sci @@ -0,0 +1,5 @@ +border.left: 10 +border.top: 12 +border.bottom: 12 +border.right: 10 +source: titlebar.png diff --git a/examples/examples.pro b/examples/examples.pro new file mode 100644 index 00000000..09881f1a --- /dev/null +++ b/examples/examples.pro @@ -0,0 +1,2 @@ +TEMPLATE = subdirs +SUBDIRS += declarative diff --git a/qtlocation.pro b/qtlocation.pro index cbdefdf6..a5d63662 100644 --- a/qtlocation.pro +++ b/qtlocation.pro @@ -3,10 +3,6 @@ TEMPLATE = subdirs module_qtlocation_src.subdir = src module_qtlocation_src.target = module-qtlocation-src -module_qtlocation_tools.subdir = tools -module_qtlocation_tools.target = module-qtlocation-tools -module_qtlocation_tools.depends = module_qtlocation_src - module_qtlocation_demos.subdir = demos module_qtlocation_demos.target = module-qtlocation-demos module_qtlocation_demos.depends = module_qtlocation_src @@ -22,7 +18,6 @@ module_qtlocation_tests.CONFIG = no_default_target no_default_install SUBDIRS += module_qtlocation_src \ -# module_qtlocation_tools \ -# module_qtlocation_demos \ -# module_qtlocation_examples \ + module_qtlocation_demos \ + module_qtlocation_examples \ # module_qtlocation_tests \ |