当前位置: 首页 > news >正文

地图下载工具

开发地图工具

  • Mobile Atlas Creator (MOBAC)
  • ArcGIS(商用)
  • QGIS(开源,过于庞大)
  • Global Mapper(商用)
  • tile-generator (Mapbox 官方工具)
  • gdal2tiles.py (GDAL 库的一部分)
  • Pillow(python脚本)

数据源

  • 影像数据(没有高度信息)、地形数据(osm格式或者png影像图和灰度图)
  • 数据格式,png(xyz坐标地址请求)、geojson(静态地址)

openstreetmap(简称osm),https://www.openstreetmap.org/
openstreetmap的额外数据,https://download.geofabrik.de/

影像图下载

import os
import math
import requests
from tqdm import tqdm# --- 1. 配置区域 ---
# 你可以修改这里的参数来定义下载范围# 下载的缩放层级 (z)。层级越高,细节越丰富,文件也越多。
# 建议先从较小的层级(如 10-12)开始测试。
ZOOM_LEVELS = [12,13,14,15,16,17,18,19] # 定义下载区域的经纬度边界框 (Bounding Box)
# 格式: [min_lng, min_lat, max_lng, max_lat]
# 下面是北京市中心的一个示例范围
BBOX = [114, 30, 115, 31] # 瓦片服务器 URL 模板 (OpenStreetMap)
# {s} 是子域名,用于负载均衡 (a, b, c)
# {z} 是层级, {x} 是x坐标, {y} 是y坐标
#TILE_URL_TEMPLATE = "https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png"
TILE_URL_TEMPLATE ="https://wprd01.is.autonavi.com/appmaptile?lang=zh_cn&size=1&style=7&x={x}&y={y}&z={z}"# 保存瓦片的根目录
OUTPUT_DIR = "offline_tiles"
# --- 配置结束 ---def deg2num(lat_deg, lon_deg, zoom):"""将经纬度转换为瓦片坐标 (x, y)"""lat_rad = math.radians(lat_deg)n = 2.0 ** zoomx_tile = int((lon_deg + 180.0) / 360.0 * n)y_tile = int((1.0 - math.asinh(math.tan(lat_rad)) / math.pi) / 2.0 * n)return x_tile, y_tiledef download_tiles():"""根据配置下载并保存瓦片"""min_lng, min_lat, max_lng, max_lat = BBOXfor zoom in ZOOM_LEVELS:print(f"\n--- 开始下载层级 {zoom} ---")# 计算边界框四个角点对应的瓦片坐标x_min, y_min = deg2num(max_lat, min_lng, zoom)x_max, y_max = deg2num(min_lat, max_lng, zoom)total_tiles = (x_max - x_min + 1) * (y_max - y_min + 1)print(f"层级 {zoom} 需要下载 {total_tiles} 张瓦片...")# 使用 tqdm 创建进度条pbar = tqdm(total=total_tiles, unit="tile")for x in range(x_min, x_max + 1):for y in range(y_min, y_max + 1):# 构造瓦片的保存路径tile_dir = os.path.join(OUTPUT_DIR, str(zoom), str(x))os.makedirs(tile_dir, exist_ok=True)tile_path = os.path.join(tile_dir, f"{y}.png")# 如果文件已存在,则跳过下载if os.path.exists(tile_path):pbar.update(1)continue# 构造下载 URL# 使用随机子域名 {s},这里我们循环使用 a, b, csubdomain = "abc"[(x + y) % 3]url = TILE_URL_TEMPLATE.format(s=subdomain, z=zoom, x=x, y=y)try:# 下载瓦片response = requests.get(url, timeout=10)response.raise_for_status()  # 如果请求失败则抛出异常# 保存瓦片with open(tile_path, 'wb') as f:f.write(response.content)except requests.exceptions.RequestException as e:print(f"\n下载失败: {url} -> {e}")# 如果下载失败,可以选择删除空文件或记录日志if os.path.exists(tile_path):os.remove(tile_path)pbar.update(1)pbar.close()print(f"--- 层级 {zoom} 下载完成 ---")print("\n所有指定层级的瓦片下载完毕!")print(f"瓦片已保存至: {os.path.abspath(OUTPUT_DIR)}")if __name__ == "__main__":download_tiles()
http://www.dtcms.com/a/470733.html

相关文章:

  • FileOptimizerSetup_Win中文_格式压缩_安装教程
  • katelyaTV多源聚合影视资源站
  • 从嵌入式到云端:基于 Pegasus 智能家居套件的端–边–云一体化实践综述
  • python网站开发优缺点网站的建设宗旨
  • 【论文阅读】Segment Any 3D Gaussians
  • 异步数据库基本代码实现
  • 网站开发制作报价wordpress 创建数据表
  • php网站建设参考文献网站做很多关键词
  • 【Go】--数据类型
  • 偃师网站建设wordpress排版教程
  • 有好点的网站建设公司吗酒店网络营销方式有哪些
  • Java String类中的lastIndexOf方法的应用场景
  • open-webui版本更新
  • 【远程桌面】在ubuntu中安装远程桌面
  • 卫生设计真空搅拌机:全球市场格局与未来增长路径
  • 信用网站一体化建设方案网站建设好后有些什么资料
  • 站长工具seo综合查询可以访问wordpress点击弹窗插件
  • INI文件相比于json文件,有什么优势?
  • DAY 34 GPU训练及类的call方法-
  • 建设高端网站公司安徽省工程造价信息网
  • 狮岭做网站网站建设与运营
  • TDengine 数学函数 ATAN() 用户手册
  • 网站页面设计欣赏如何实现一个响应式网页
  • C# 中的回调函数
  • 海南网站公司苏州吴中区住房和城乡建设局网站
  • SwiftUI 的状态管理包装器(Property Wrapper)
  • MATLAB基于WOA(鲸鱼优化算法)优化LSTM神经网络的分类模型实现。主要功能是通过智能算法自动寻找LSTM的最佳超参数,构建分类模型并对数据进行分类预测
  • Ethernet II 帧头部
  • 【完整源码+数据集+部署教程】 植物组织分割系统源码&数据集分享 [yolov8-seg-LSKNet等50+全套改进创新点发刊_一键训练教程_Web前端展示
  • 网站链接怎么做二维码诸暨网站制作有哪些公司