extra_map.py 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. from qgis.PyQt.QtWidgets import QMenu
  2. from .utils import add_raster_layer, get_map_uri
  3. from ..icons import icons, get_extra_map_icon
  4. from ...utils import PluginDir, load_yaml, PluginConfig
  5. conf = PluginConfig()
  6. def add_extra_map(mapdata):
  7. name = mapdata["name"]
  8. uri = get_map_uri(
  9. mapdata["url"], mapdata["zmin"], mapdata["zmax"], mapdata.get("referer", "")
  10. )
  11. add_raster_layer(uri, name)
  12. def add_tianditu_province_menu(parent_menu: QMenu):
  13. tianditu_province_path = PluginDir.joinpath("maps/tianditu_province.yml")
  14. tianditu_province = load_yaml(tianditu_province_path)["maps"]
  15. maps = tianditu_province.keys()
  16. extra_maps_status = conf.get_extra_maps_status()
  17. for map_name in maps:
  18. # 一级菜单 省份名称
  19. if map_name in extra_maps_status["tianditu_province"]:
  20. add_map_action = parent_menu.addAction(icons["map"], map_name)
  21. map_data = tianditu_province[map_name]
  22. sub_menu = QMenu()
  23. for m in map_data:
  24. sub_menu.addAction(
  25. icons["map"],
  26. m["name"],
  27. lambda m_=m: add_raster_layer(
  28. m_["uri"], m_["name"], m_.get("type", "wms")
  29. ),
  30. )
  31. add_map_action.setMenu(sub_menu)
  32. parent_menu.addSeparator()
  33. def add_extra_map_menu(parent_menu: QMenu):
  34. extra = load_yaml(PluginDir.joinpath("maps/extra.yml"))
  35. extra_maps = extra["maps"]
  36. extra_root = parent_menu.addAction(icons["other"], "其他地图")
  37. extra_root_menu = QMenu()
  38. maps = extra_maps.keys()
  39. extra_maps_status = conf.get_extra_maps_status()
  40. for map_name in maps:
  41. if (
  42. map_name in extra_maps_status["tianditu_province"]
  43. or map_name in extra_maps_status["extra"]
  44. ):
  45. map_data = extra_maps[map_name]
  46. sub_menu = extra_root_menu.addAction(icons["other"], map_name)
  47. sub_sub_menu = QMenu()
  48. for sub_map in map_data:
  49. sub_sub_menu.addAction(
  50. get_extra_map_icon(sub_map.get("icon", "default.svg")),
  51. sub_map["name"],
  52. lambda m_=sub_map: add_extra_map(m_),
  53. )
  54. sub_menu.setMenu(sub_sub_menu)
  55. extra_root.setMenu(extra_root_menu)