如何在 QGIS 的 python 代码中获取 google 底图?
How to get a google basemap in a python code for QGIS?
我正在为不同的用户创建一个 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 上添加 Google 卫星地图?
Google 地图可以用作 Qgis 中的底图,将它们加载为 TMS(平铺地图服务)。从 QGIS 2.18 开始,Lutra.
已将对 TMS 的原生支持添加到 Qgis
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 以前的版本可以支持使用 TileLayerPlugin by Minoru Akagi 公开所需的方法:
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 底图,将正确的 "attribution" 行和 url 行替换为以下内容:
"https://mt1.google.com/vt/lyrs=y&x={x}&y={y}&z={z}"
我正在为不同的用户创建一个 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 上添加 Google 卫星地图?
Google 地图可以用作 Qgis 中的底图,将它们加载为 TMS(平铺地图服务)。从 QGIS 2.18 开始,Lutra.
已将对 TMS 的原生支持添加到 Qgisimport 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 以前的版本可以支持使用 TileLayerPlugin by Minoru Akagi 公开所需的方法:
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 底图,将正确的 "attribution" 行和 url 行替换为以下内容:
"https://mt1.google.com/vt/lyrs=y&x={x}&y={y}&z={z}"