最近在使用Qml地图中发现,osm地图在线加载地图失败,通过查看osm插件源代码,找到了osm瓦片地图的源地址为:http://c.tile.openstreetmap.org/%z/%x/%y.png,其中z,x,y分别代表了瓦片地图的缩放倍数,瓦片坐标序号,详细介绍可搜索相关内容,此处不多赘述,直接用浏览器访问地址,如:https://a.tile.openstreetmap.org/2/3/3.png,瓦片地图正常加载,通过查看Qt中osm插件的源码后发现,当osm地图类型为StreetMap时,瓦片获取地址被重定向为:"https://maps.wikimedia.org/osm-intl/%z/%x/%y.png",不知何故该地址是无法访问的,因此需要重新写重定向地址。
具体方法为:找到并打开osm插件源码工程位置:C:\Qt\Qt5.15.2\5.15.2\Src\qtlocation\src\plugins\geoservices\osm\osm.pro,在"qgeotileproviderosm.cpp"文件的 TileProvider::onNetworkReplyFinished()函数中,将地址重定向行修改如下:
// m_urlTemplate = urlTemplate.toString();//之前代码
if(urlTemplate.toString() =="https://maps.wikimedia.org/osm-intl/%z/%x/%y.png")
m_urlTemplate = "http://c.tile.openstreetmap.org/%z/%x/%y.png";
else
m_urlTemplate = urlTemplate.toString();
重新编译该插件,编译好的插件位于Qt安装盘符根目录下,比如我Qt安装在C盘,路径就是:C:\plugins\geoservices\文件中,将qtgeoservices_osm.dll和qtgeoservices_osm.dll.debug复制替换至Qt安装插件文件夹C:\Qt\Qt5.15.2\5.15.2\mingw81_64\plugins\geoservices\,此时osm的StreetMap就可以在线加载了,上图: