# map_tile_downloader **Repository Path**: echohye/map_tile_downloader ## Basic Information - **Project Name**: map_tile_downloader - **Description**: 一个使用 Python 和 Tkinter 构建的图形界面应用程序,用于从在线服务或本地目录下载地图瓦片 (XYZ/ZYX 格式),支持并发下载、全球/区域范围选择、多种存储格式和离线预览。 - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-07-27 - **Last Updated**: 2025-08-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 地图瓦片下载器 (Map Tile Downloader) 一个使用 Python 和 Tkinter 构建的图形界面应用程序,用于从在线服务或本地目录下载地图瓦片 (XYZ/ZYX 格式),支持并发下载、全球/区域范围选择、多种存储格式和离线预览。
地图瓦片下载器示例
## 功能特性 * **图形用户界面 (GUI)**: 基于 Tkinter,操作直观方便。 * **多种瓦片源**: * 支持在线瓦片服务 URL (如 ArcGIS, OSM)。 * 支持从本地目录复制瓦片。 * **灵活的下载范围**: * 指定经纬度范围下载区域瓦片。 * 设置“全球下载级别”作为基础,下载低级别全球瓦片,高级别则下载指定区域瓦片。 * **可配置参数**: * 下载层级范围 (最小/最大级别)。 * 瓦片存储格式 (PNG, JPG)。 * 本地存储路径格式 (ZXY, ZYX)。 * 并发线程数 (1-8,默认5)。 * 裁切超出范围的瓦片。 * **智能处理**: * 下载前检查保存目录,非空时提示用户确认。 * 自动创建不存在的目录结构。 * 下载/复制过程中显示详细日志和每级瓦片统计。 * **离线预览**: 下载完成后,可一键生成 HTML 文件,使用 Leaflet.js 在浏览器中离线查看下载的瓦片。 * **现代化包管理**: 使用 `uv` 进行项目初始化和依赖管理。 ## 快速开始 ### 先决条件 * **Python 3.8 或更高版本** * **`uv` 包管理器**: 请先安装 [uv](https://github.com/astral-sh/uv)。 ### 安装 1. **克隆或下载此仓库**: ```bash git clone # 或者下载 ZIP 包并解压 cd map_tile_downloader ``` 2. **安装依赖**: `uv` 会根据 `pyproject.toml` 文件自动解析和安装依赖。 ```bash # 在项目根目录下 uv sync ``` ### 运行 使用 `uv` 运行项目: ```bash # 在项目根目录下 uv run python main.py ``` 程序启动后,默认保存路径为项目目录下的 `data` 文件夹。 ### 打包为可执行文件 (Windows .exe) 您可以使用 `PyInstaller` 将项目打包成独立的 `.exe` 文件。 1. **安装 PyInstaller** (如果尚未安装): ```bash uv add pyinstaller ``` 2. **打包**: ```bash # 在项目根目录下执行 # --onefile: 打包成单个 exe # --windowed: 隐藏控制台窗口 (GUI 应用) # --name: 指定 exe 文件名 # --add-data: 添加图标等数据文件 (Windows 使用分号分隔) uv run "src/build_version.py";uv run pyinstaller -F -w -i 'src/logo/logo.ico' --add-data="src/logo/logo.ico;logo" --name "MapTileDownloader" main.py ``` 3. **运行**: 打包完成后,可在 `dist` 目录下找到 `MapTileDownloader.exe` 文件并运行。 ## 使用说明 1. **配置参数**: * **瓦片源**: 输入在线服务 URL 模板 (如 `https://example.com/{z}/{y}/{x}.png`) 或本地路径模板 (如 `C:\tiles\{z}\{y}\{x}.png`)。 * **检测源**: 点击此按钮判断源是网络 URL 还是本地路径,以决定是下载还是复制。 * **保存路径**: 选择瓦片保存的本地目录。默认为项目下的 `data` 文件夹。 * **下载级别**: 设置要下载的最小和最大缩放级别。 * **全球下载级别**: (可选) 勾选并设置级别 N,程序会先下载 1-N 级的全球瓦片,然后下载 N-max_level 的指定区域瓦片。 * **下载范围**: 输入需要下载区域的左上角和右下角经纬度坐标,支持裁切超出范围的瓦片。 * **存储选项**: 选择图片保存格式 (PNG/JPG) 和本地路径格式 (ZXY/ZYX)。 * **性能设置**: 调整并发下载线程数 (1-8)。 2. **开始下载**: 点击“开始下载”按钮启动任务。日志窗口会显示进度和结果。 3. **预览**: 下载完成后,点击“预览”按钮生成 `preview.html` 并在浏览器中打开,以查看下载的瓦片。 ## 项目结构 ``` map_tile_downloader/ ├── pyproject.toml # 项目配置和依赖 (uv) ├── README.md # 本说明文件 ├── app_icon.png # 应用图标 (用于 GUI 和打包) ├── main.py # 程序入口点 ├── src/ │ ├── __init__.py │ ├── __main__.py │ ├── gui.py # Tkinter 图形界面 │ ├── downloader.py # 核心下载/复制逻辑 │ ├── utils.py # 辅助函数 (坐标转换等) │ └── build_version.py # 版本信息文件生成 └── dist/ # (打包后生成) PyInstaller 输出目录 ``` ## 依赖 * `requests`: 用于网络请求。 * `Pillow`: 用于图像处理 (格式转换)。 * `tkinter`: Python 内置 GUI 库。 * `pathlib`: Python 内置,用于现代路径操作。 * `concurrent.futures`: Python 内置,用于线程池并发。 * `webbrowser`: Python 内置,用于打开预览网页。 * `urllib.parse`: Python 内置,用于 URL 编码。 * `logging`: Python 内置,用于日志记录。 * `typing`: Python 内置,用于类型提示。 * `shutil`: Python 内置,用于文件复制。 * `io`: Python 内置,用于处理字节流。 * `math`: Python 内置,用于数学计算。 (开发/打包时) * `pyinstaller`: 用于将 Python 应用打包成独立可执行文件。