×
Namespaces

Variants
Actions

使用Qt Mobility Map and Navigation API显示地图

From Nokia Developer Wiki
Jump to: navigation, search
Article Metadata

代码示例
测试基于
设备:: Nokia 5800 and N8.

兼容于
平台: S60 3rd Edition, FP1, FP2
S60 5th Edition Symbian^3
Symbian

文章
关键词: QGraphicsGeoMap
flycarl 在 18 Nov 2010 创建
最后由 hamishwillee 在 24 Apr 2013 编辑


Contents

简介

这里的代码演示如何使用Qt Mobility的地图导航API调用 Nokia Ovi 地图的在线地图插件 来显示地图,这个例子是Qt Mobility中 Map Viewer 例子的精简版,只是显示一定区域一定大小的地图,以方便大家熟悉 QGraphicsGeoMap 的使用。 同时结合Location API获取实时的位置并显示地图。


准备条件

编辑pro文件

由于我们使用的Ovi地图的在线版本所以需要加入网络支持 (network),Mobility bear 和location需要的能力参见Qt Mobility API 需要的能力

QT       += core gui network
 
CONFIG += mobility
MOBILITY = location bearer
 
symbian {
TARGET.CAPABILITY += Location \
NetworkServices \
ReadUserData \
WriteUserData \
ReadDeviceData \
WriteDeviceData
}

代码

类QGraphicsGeoMap是显示地图和与地图交互的主要的类。这个类设计为使用 Graphics View 框架。 这里我们也用QGraphicsView来存放地图显示。

QGraphicsView* m_qgv;
QGraphicsScene* scene = new QGraphicsScene(this);
m_qgv = new QGraphicsView(scene, this);
this->setCentralWidget(m_qgv);

设置网络连接并不把Map and Navigation相关的初始化放在 连接打开后来做

m_session = new QNetworkSession(cfg, this);
connect(m_session, SIGNAL(opened()), this, SLOT(networkSessionOpened()));

在networkSessionOpened()中继续初始化测操作。

void MainWindow::networkSessionOpened()
{
//设置QGeoServiceProvider,设置为Mobiliy自带的Ovi地图插件
setProvider("nokia");
 
//设置QGraphicsGeoMap的界面
setupUi();
}

类QGeoMappingManager 提供QGraphicsGeoMap需要的绝大多数方法, QGeoMappingManager 由QGeoServiceProvider提供,这里我们使用Qt Mobility自带的Ovi在线地图插件,因此最终显示在QGraphicsGeoMap中的地图,都是来自Ovi在线地图插件。插件的关键字'nokia'。

void MainWindow::setProvider(QString providerId)
{
m_serviceProvider = new QGeoServiceProvider(providerId);
m_mapManager = m_serviceProvider->mappingManager();
}

有了QGeoMappingManager ,可以开始设置QGraphicsGeoMap

void MainWindow::setupUi()
{
//通过QGeoMappingManager 初始化
m_mapWidget = new QGraphicsGeoMap(m_mapManager);
 
//放到m_qgv中来显示
m_qgv->scene()->addItem(m_mapWidget);
 
//设置图像中心的地理坐标
m_mapWidget->setCenter(m_currentCoordinate);
 
//设置缩放比例
m_mapWidget->setZoomLevel(15);
 
//设置地图种类,街道图,卫星图等等
m_mapWidget->setMapType(QGraphicsGeoMap::SatelliteMapDay);
}

好这样地图就能显示出来了。



下载Demo

File:MapEmbeded.zip

参考链接

Location API 文档 Qt Mobility 开发 Qt 开发

This page was last modified on 24 April 2013, at 08:19.
306 page views in the last 30 days.