1.加载在线的高德地图
以下是在线高德地图地址。
http://webrd01.is.autonavi.com/appmaptile?x={x}&y={y}&z={z}&lang=zh_cn&size=1&scale=1&style=8
以下是代码示例:
#include <QApplication>
#include <QMainWindow>
#include "qgisinterface.h"
#include "qgsproviderregistry.h"
#include "qgsrasterlayer.h"
#include "qgsproject.h"
#include "qgsmapcanvas.h"
int main(int argc, char *argv[])
{
// 初始化QGIS
QgsApplication app(argc, argv, true);
app.initQgis();
// 创建主窗口
QMainWindow mainWindow;
mainWindow.setWindowTitle("QGIS with Amap");
// 创建地图Canvas
QgsMapCanvas* mapCanvas = new QgsMapCanvas(&mainWindow);
mapCanvas->setCanvasColor(Qt::white);
mapCanvas->setVisible(true);
mapCanvas->setFrameStyle(0);
mainWindow.setCentralWidget(mapCanvas);
// 创建栅格图层
QgsRasterLayer* amapLayer = new QgsRasterLayer("http://webrd01.is.autonavi.com/appmaptile?x={x}&y={y}&z={z}&lang=zh_cn&size=1&scale=1&style=8", "Amap", "wms");
if (amapLayer->isValid())
{
QgsProject::instance()->addMapLayer(amapLayer);
QgsRectangle extent = amapLayer->extent();
mapCanvas->setExtent(extent);
}
else
{
QMessageBox::critical(&mainWindow, "Error", "Could not load Amap layer.");
return -1;
}
// 设置地图范围和投影
QgsCoordinateReferenceSystem crs("EPSG:3857");
mapCanvas->setDestinationCrs(crs);
mapCanvas->enableAntiAliasing(true);
// 显示主窗口
mainWindow.show();
// 执行QGIS事件循环
return app.exec();
}
结果运行结果无效并报错:
Raster layer Cannot instantiate the 'wms' data provider
大概的意思就是说不能初始化wms的东西,就是wms的相关驱动没有加载好。
解决办法:
1.设置路径
//设置前缀路径
QgsApplication app(argc, argv, true);
app.setPrefixPath("E:/OSGeo4W/apps/qgis-ltr-dev", true);
app.initQgis();
2.将驱动文件拷贝到运行目录下
不需要设置setPrefixPath()。
将E:/OSGeo4W/apps/qgis-ltr-dev/plugins目录拷贝到生成程序的运行目录下,因为程序启动起来加载的是本地的plugins下的插件。
注意不要拷贝错了,我下载的目录下有两个qgis目录,你使用的哪个路径下的库来编译的程序,就拷贝哪个路径下的plugins目录,否则有可能导致程序起不来。
2.如果url填入不能进行正常加载
提供一个编码url的类
#ifndef QGSXYZCONNECTION_H
#define QGSXYZCONNECTION_H
#include <QStringList>
struct QgsXyzConnection
{
QString name;
QS