| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- from qgis.PyQt.QtWidgets import QMenu
- from .utils import add_raster_layer, get_map_uri
- from ..icons import icons, get_extra_map_icon
- from ...utils import PluginDir, load_yaml, PluginConfig
- conf = PluginConfig()
- def add_extra_map(mapdata):
- name = mapdata["name"]
- uri = get_map_uri(
- mapdata["url"], mapdata["zmin"], mapdata["zmax"], mapdata.get("referer", "")
- )
- add_raster_layer(uri, name)
- def add_tianditu_province_menu(parent_menu: QMenu):
- tianditu_province_path = PluginDir.joinpath("maps/tianditu_province.yml")
- tianditu_province = load_yaml(tianditu_province_path)["maps"]
- maps = tianditu_province.keys()
- extra_maps_status = conf.get_extra_maps_status()
- for map_name in maps:
- # 一级菜单 省份名称
- if map_name in extra_maps_status["tianditu_province"]:
- add_map_action = parent_menu.addAction(icons["map"], map_name)
- map_data = tianditu_province[map_name]
- sub_menu = QMenu()
- for m in map_data:
- sub_menu.addAction(
- icons["map"],
- m["name"],
- lambda m_=m: add_raster_layer(
- m_["uri"], m_["name"], m_.get("type", "wms")
- ),
- )
- add_map_action.setMenu(sub_menu)
- parent_menu.addSeparator()
- def add_extra_map_menu(parent_menu: QMenu):
- extra = load_yaml(PluginDir.joinpath("maps/extra.yml"))
- extra_maps = extra["maps"]
- extra_root = parent_menu.addAction(icons["other"], "其他地图")
- extra_root_menu = QMenu()
- maps = extra_maps.keys()
- extra_maps_status = conf.get_extra_maps_status()
- for map_name in maps:
- if (
- map_name in extra_maps_status["tianditu_province"]
- or map_name in extra_maps_status["extra"]
- ):
- map_data = extra_maps[map_name]
- sub_menu = extra_root_menu.addAction(icons["other"], map_name)
- sub_sub_menu = QMenu()
- for sub_map in map_data:
- sub_sub_menu.addAction(
- get_extra_map_icon(sub_map.get("icon", "default.svg")),
- sub_map["name"],
- lambda m_=sub_map: add_extra_map(m_),
- )
- sub_menu.setMenu(sub_sub_menu)
- extra_root.setMenu(extra_root_menu)
|