1.使用详情
- 准备离线瓦片地图数据:首先,需要获取离线瓦片地图数据。可以从一些开源地图提供商(如OpenStreetMap)下载地图切片数据,或者使用一些工具(如MapTiler)将自己的地图数据切片成瓦片格式。确保将切片数据保存在本地目录中。
- 添加QGIS功能:在Qt项目中,可以使用QGIS的功能来加载和显示地图数据。在代码中导入必要的QGIS模块,如
qgis_core
和qgis_gui
。然后,可以创建一个QgsApplication对象,并设置QGIS的环境变量。 - 加载离线瓦片地图:使用QGIS的
QgsRasterLayer
类来加载瓦片地图。首先,创建一个QgsRasterLayer
对象,并将地图数据的路径作为参数传递给它。然后,可以使用QgsMapCanvas
类创建一个地图画布,并设置其范围和分辨率。最后,将QgsRasterLayer
对象添加到地图画布中。 - 显示地图:将地图画布添加到Qt窗口中,并在窗口中显示地图。可以使用Qt的布局管理器来管理窗口中的控件。
方法1:使用TMS.xml来加载本地瓦片地图
内容如下:
<GDAL_WMS>
<Service name="TMS">
<ServerUrl>file:///F:GisCtrl/x64/out/huairou/{z}/{x}/{y}.png</ServerUrl>
</Service>
<DataWindow>
<UpperLeftX>-180</UpperLeftX>
<UpperLeftY>90</UpperLeftY>
<LowerRightX>180</LowerRightX>
<LowerRightY>-90</LowerRightY>
<TileLevel>15</TileLevel>
<TileCountX>2</TileCountX>
<TileCountY>1</TileCountY>
<YOrigin>bottom</YOrigin>
</DataWindow>
<Projection>EPSG:3568</Projection>
<BlockSizeX>256</BlockSizeX>
<BlockSizeY>256</BlockSizeY>
<BandsCount>3</BandsCount>
<Cache />
</GDAL_WMS>
具体的xml文件解析如下:
WMS -- Web Map Services — GDAL documentation
然后将xml文件放到地图的目录下:
代码实现:
QgsRasterLayer *layer = new QgsRasterLayer("F:/GisCtrl/x64/out/huairou/TMS.xml");
此方法不好用,我使用这个方法之后,对于高德下载的瓦片地图使用起来会存在问题,高德的地图层级从1开始,这个方法对于从0层开始的可能效果要好一些。
方法2:搭建一个nginx的gis本地服务(推荐这种)
修改nginx的nginx.conf文件,添加如下的路径,我监听的本地9090端口。
server {
listen 9090;
server_name abc.com;
location / {
root 'D:\APP\nginx-1.15.8\file';
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
charset utf-8;
try_files $uri $uri/ /index.html;
}
location /download {
alias F:\GisCtrl\x64\out\huairou;
allow all;
autoindex on;
}
}
启动服务,成功之后,看起来就像这样。
代码实现:我使用的是高德的瓦片地图。
QgsXyzConnection xyz;
xyz.url = QStringLiteral("http://localhost:9090/download/{z}/{x}/{y}.png");
xyz.zMin = 0;
xyz.zMax = 16;
xyz.tilePixelRatio = 1.0;
QgsXyzConnectionUtils::addConnection(xyz);
QString url2 = xyz.encodedUri();
QgsRasterLayer *layer = addRasterLayerPrivate(url2, "OMG","wms");
具体的QgsXyzConnection类定义:看如下文章。
Qgis二次开发-加载高德在线地图失败报错Raster layer Cannot instantiate the ‘wms‘ data provider_Mr.codeee的博客-CSDN博客
同样,这样方法也适用于加载高德在线地图。