main.py 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. import random
  2. from qgis.PyQt.QtWidgets import QToolButton, QMenu, QMessageBox
  3. from .extra_map import add_tianditu_province_menu, add_extra_map_menu
  4. from .utils import add_raster_layer
  5. from .utils import get_map_uri
  6. from ..icons import icons
  7. from ...utils import TIANDITU_HOME_URL, PluginConfig, tianditu_map_url
  8. tianditu_map_info = {
  9. "vec": "天地图-矢量地图",
  10. "cva": "天地图-矢量注记",
  11. "img": "天地图-影像地图",
  12. "cia": "天地图-影像注记",
  13. "ter": "天地图-地形晕染",
  14. "cta": "天地图-地形注记",
  15. "ibo": "天地图-全球境界",
  16. }
  17. conf = PluginConfig()
  18. class AddMapBtn(QToolButton):
  19. def __init__(self, parent=None):
  20. super().__init__(parent)
  21. self.icons = icons
  22. self.setToolTip("添加地图")
  23. self.setup_action()
  24. def setup_action(self):
  25. menu = QMenu(self)
  26. menu.setObjectName("TianDiTuAddMap")
  27. for map_type, map_name in tianditu_map_info.items():
  28. menu.addAction(
  29. self.icons["map"],
  30. map_name,
  31. lambda maptype_=map_type: self.add_tianditu_basemap(maptype_),
  32. )
  33. menu.addSeparator()
  34. # 天地图省级节点
  35. add_tianditu_province_menu(menu)
  36. # 其他图源
  37. add_extra_map_menu(menu)
  38. self.setMenu(menu)
  39. self.setPopupMode(QToolButton.MenuButtonPopup)
  40. self.setIcon(self.icons["add"])
  41. def add_tianditu_basemap(self, maptype):
  42. key = conf.get_key()
  43. if key == "":
  44. QMessageBox.warning(
  45. self, "错误", "天地图Key未设置或Key无效", QMessageBox.Yes, QMessageBox.Yes
  46. )
  47. else:
  48. random_enabled = conf.get_bool_value("Tianditu/random")
  49. key_random_enabled = conf.get_bool_value("Tianditu/random_key")
  50. if random_enabled:
  51. subdomain = f"t{random.randint(0, 7)}"
  52. else:
  53. subdomain = conf.get_value("Tianditu/subdomain")
  54. if key_random_enabled:
  55. key = conf.get_random_key()
  56. map_url = tianditu_map_url(maptype, key, subdomain)
  57. uri = get_map_uri(map_url, 1, 18, TIANDITU_HOME_URL)
  58. add_raster_layer(uri, tianditu_map_info[maptype])