QGIS C++加载Google底图仅显示上半部分、纬度无效问题求助
问题原因
- 谷歌瓦片服务采用TMS瓦片坐标系,Y轴计数规则与QGIS默认XYZ坐标系相反:标准XYZ瓦片Y轴从北极向南极递增,TMS规则下Y轴从南极向北极递增。未做Y轴适配时,南半球区域的瓦片Y值会被判定为无效,所以只能显示赤道以北的上半部分底图。
- 代码存在变量名笔误:你定义的数据源实例名称是
ds,但构造图层时调用了未定义的uri.encode(),参数传递异常也会干扰图层加载逻辑。
修复后的代码
QgsDataSourceUri ds; ds.setParam("type", "xyz"); // 将URL中的{y}替换为{-y},自动适配TMS的Y轴翻转规则 ds.setParam("url", QString("https://mt1.google.com/vt/lyrs=m&x={x}&y={-y}&z={z}")); ds.setParam("zmax", "18"); ds.setParam("zmin", "0"); // 修复变量名错误,传入正确的编码后的数据源 layer = new QgsRasterLayer(ds.encode(), "basemap", "wms");
修改后即可加载完整的谷歌底图,效果和QGIS图形界面手动添加的图层一致。
内容的提问来源于stack exchange,提问作者phamtien
相关产品推荐
相关产品推荐

