qt location demo for 地图显示
时间: 2023-11-24 14:06:41 浏览: 99
以下是一个简单的Qt Location示例程序,用于在窗口中显示地图:
```
#include <QtGui/QGuiApplication>
#include <QtLocation/QGeoServiceProvider>
#include <QtLocation/QGeoPositionInfo>
#include <QtLocation/QGeoPositionInfoSource>
#include <QtLocation/QGeoCoordinate>
#include <QtLocation/QGeoMapData>
#include <QtLocation/QGeoMapPixmapObject>
#include <QtLocation/QGeoMapPolygonObject>
#include <QtLocation/QGeoMapCircleObject>
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
// 创建位置服务提供者
QGeoServiceProvider *serviceProvider = new QGeoServiceProvider("osm");
// 创建位置信息源
QGeoPositionInfoSource *positionSource = serviceProvider->positioningSource();
// 连接位置信息源的位置更新信号
QObject::connect(positionSource, &QGeoPositionInfoSource::positionUpdated,
[=](const QGeoPositionInfo &info) {
// 获取当前位置坐标
QGeoCoordinate coordinate = info.coordinate();
// 创建地图数据
QGeoMapData mapData;
mapData.setSceneRect(QRectF(-200, -200, 400, 400));
mapData.setZoomLevel(16);
mapData.setCenter(coordinate);
// 创建地图元素
QGeoMapPixmapObject *pixmapObject = new QGeoMapPixmapObject(QPixmap(":/map_marker.png"));
pixmapObject->setCoordinate(coordinate);
QGeoMapPolygonObject *polygonObject = new QGeoMapPolygonObject();
polygonObject->setPath(QVector<QGeoCoordinate>() << coordinate
<< QGeoCoordinate(coordinate.latitude() + 0.001, coordinate.longitude())
<< QGeoCoordinate(coordinate.latitude(), coordinate.longitude() + 0.001));
QGeoMapCircleObject *circleObject = new QGeoMapCircleObject();
circleObject->setCenter(coordinate);
circleObject->setRadius(50);
// 将地图元素添加到地图数据中
mapData.addMapObject(pixmapObject);
mapData.addMapObject(polygonObject);
mapData.addMapObject(circleObject);
// 显示地图
QGeoMapDataProxy *mapProxy = new QGeoMapDataProxy();
mapProxy->setMapData(mapData);
QQuickView view;
view.engine()->rootContext()->setContextProperty("mapProxy", mapProxy);
view.setResizeMode(QQuickView::SizeRootObjectToView);
view.setSource(QUrl("qrc:/main.qml"));
view.show();
});
// 启动位置信息源
positionSource->startUpdates();
return app.exec();
}
```
该程序使用OpenStreetMap作为地图服务提供者,在窗口中显示当前位置的标记、三角形和圆形。需要将一个名为map_marker.png的图像文件放在工程文件夹中,并将其添加到.qrc文件中。
以下是main.qml文件的内容:
```
import QtQuick 2.0
import QtLocation 5.0
Rectangle {
width: 800
height: 600
Map {
id: map
anchors.fill: parent
plugin: Plugin {
name: "osm"
}
dataProxy: mapProxy
}
}
```
在运行该程序时,需要在Qt Creator中设置好项目的运行配置,包括环境变量和插件路径等。
阅读全文