utils.py 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. import requests
  2. from qgis.core import Qgis
  3. from qgis.core import QgsProject, QgsRasterLayer
  4. def add_raster_layer(uri: str, name: str, provider_type: str = "wms") -> None:
  5. """QGIS 添加栅格图层
  6. Args:
  7. uri (str): 栅格图层uri
  8. name (str): 栅格图层名称
  9. provider_type(str): 栅格图层类型(wms,arcgismapserver)
  10. Reference: https://qgis.org/pyqgis/3.32/core/QgsRasterLayer.html
  11. """
  12. raster_layer = QgsRasterLayer(uri, name, provider_type)
  13. QgsProject.instance().addMapLayer(raster_layer)
  14. def get_map_uri(url: str, zmin: int = 0, zmax: int = 18, referer: str = "") -> str:
  15. """返回瓦片地图uri
  16. Args:
  17. url (str): 瓦片地图url
  18. zmin (int, optional): z 最小值. Defaults to 0.
  19. zmax (int, optional): z 最大值 Defaults to 18.
  20. referer (str, optional): Referer. Defaults to "".
  21. Returns:
  22. str: 瓦片地图uri
  23. """
  24. # "?" 进行 URL 编码后, 在 3.34 版本上无法加载地图
  25. # "&"是必须要进行 url 编码的
  26. current_qgis_version = Qgis.QGIS_VERSION_INT
  27. url_quote = requests.utils.quote(url, safe=":/?=")
  28. uri = f"type=xyz&url={url_quote}&zmin={zmin}&zmax={zmax}"
  29. if referer != "":
  30. if current_qgis_version >= 32600:
  31. uri += f"&http-header:referer={referer}"
  32. else:
  33. uri += f"&referer={referer}"
  34. return uri