如何在QGIS的Python代码中获取谷歌底图?

问题描述 投票:0回答:2

我正在为不同的用户创建一个Python插件,其中包含每个人需要在QGIS中使用和使用的图层。

使用以下代码从 Geoserver 添加栅格没有任何问题:

        wmsTicketDSM= QgsRasterLayer('contextualWMSLegend=0&crs=EPSG:27700&dpiMode=7&featureCount=10&format=image/png&layers=Ticket_DSM&password=XXXXXXXXXXXX&styles=&url=http://63.12.21.231:8080/geoserver/exchange_maps/wms&username=admin', 'Ticket_DSM', 'wms')
        if not wmsTicketDSM.isValid():
            print "Layer wmsTicketDSM failed to load!"
        else:
            print "Raster Layer wmsTicketDSM loaded!"
        QgsMapLayerRegistry.instance().addMapLayer(wmsTicketDSM,False)

现在我需要添加底图。如何在Python上添加谷歌卫星地图?

python google-maps qgis
2个回答
1
投票

Google 地图可用作 Qgis 中的底图,将其加载为 TMS(平铺地图服务)。从 QGIS 2.18 开始,Lutra在 Qgis 中添加了对 TMS 的原生支持。

import requests
service_url = "https://mt1.google.com/vt/lyrs=y&x={x}&y={y}&z={z}"
service_uri = "type=xyz&zmin=0&zmax=21&url="+requests.utils.quote(service_url)
tms_layer = core.QgsRasterLayer(service_uri, "Google Hybrid", "wms")

其中

lyrs=y
用于混合地图,
lyrs=s
用于卫星地图,
lyrs=m
用于路线图。

请注意,uri 的 url 参数必须采用百分比代码编码

QGIS 以前的版本可以通过使用 Minoru AkagiTileLayerPlugin 来支持,它公开了所需的方法:

plugin = qgis.utils.plugins.get("TileLayerPlugin")
if plugin:
  from TileLayerPlugin.tiles import BoundingBox, TileLayerDefinition
  bbox = None    # BoundingBox(-180, -85.05, 180, 85.05)
  layerdef = TileLayerDefinition(u"title",
                                 u"attribution",
                                 "http://example.com/xyz/{z}/{x}/{y}.png",
                                 zmin=1,
                                 zmax=18,
                                 bbox=bbox)
  plugin.addTileLayer(layerdef)
else:
  from PyQt4.QtGui import QMessageBox
  QMessageBox.warning(None,
                      u"TileLayerPlugin not installed",
                      u"Please install it and try again.")

对于 Google 底图,请将正确的“属性”行和 url 行替换为以下内容:

"https://mt1.google.com/vt/lyrs=y&x={x}&y={y}&z={z}"

0
投票

在 YouTube 上查看此视频以添加所有可用底图 https://youtu.be/jPsf_BFCV3E?si=dp8Vfnc_Re3bGssY

© www.soinside.com 2019 - 2024. All rights reserved.