Google地图瓦片爬虫

server/2025/1/18 0:11:28/

地图地址说明

1、谷歌矢量(中文标注)

http://mt{0-3}.google.cn/vt/v=m@416115521&hl=zh-CN&gl=cn&x={x}&y={y}&z={z}&s=Galileo

2、谷歌矢量(英文标注)

http://mt{0-3}.google.cn/vt/v=m@416115521&hl=en&gl=cn&x={x}&y={y}&z={z}&s=Galileo

3、谷歌矢量(大字标注)

http://mt{0-3}.google.cn/vt/imgtp=png32&v=m@416115521&hl=zh-CN&gl=cn&x={x}&y={y}&z={z}&s=Galileo&scale=2

4、谷歌影像

http://mt{0-3}.google.cn/maps/vt?lyrs=s&hl=zh-CN&gl=CN&x={x}&y={y}&z={z}

5、谷歌影像(中文标注)

http://mt{0-3}.google.cn/maps/vt?lyrs=y&hl=zh-CN&gl=CN&x={x}&y={y}&z={z}

6、谷歌影像(英文标注)

http://mt{0-3}.google.cn/maps/vt?lyrs=y&hl=zh-en&gl=CN&x={x}&y={y}&z={z}

7、谷歌地形(中文标注)

http://mt{0-3}.google.cn/maps/vt?lyrs=p&hl=zh-CN&gl=CN&x={x}&y={y}&z={z}

8、谷歌地形(英文标注)

http://mt{0-3}.google.cn/maps/vt?lyrs=p&hl=zh-en&gl=CN&x={x}&y={y}&z={z}

9、谷歌路网

http://mt{0-3}.google.cn/vt/lyrs=h@167000000&hl=zh-CN&gl=cn&x={x}&y={y}&z={z}&s=Galil

10、谷歌影像(大字标注)

http://mt{0-3}.google.cn/vt/imgtp=png32&v=h@416115521&hl=zh-CN&gl=cn&x={x}&y={y}&z={z}&s=Galile&scale=2

python程序

关键点说明:

  • 使用sqlite3存储瓦片,定义数据库结构
    CREATE TABLE {db_name} (tileX integer, tileY integer, tileZ integer, image blob,UNIQUE(tileZ, tileX, tileY));
    
  • 按照经纬度范围和级别计算瓦片列表:tile_list = list(mercantile.tiles(west, south, east, north, zoom_range, truncate=True))
import random
import sqlite3
import timeimport mercantile
import requestsextent = [-180, -90, 180, 90]
zoom_range = list(range(5, 12))db_name = "satellite"url_dict = {"satellite": "http://www.google.com/maps/vt?lyrs=s@189&gl=cn&x={x}&y={y}&z={z}","road": "http://www.google.cn/maps/vt?lyrs=h@189&gl=cn&x={x}&y={y}&z={z}","street": "http://www.google.com/maps/vt?lyrs=p@189&gl=cn&x={x}&y={y}&z={z}"
}headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) ""Chrome/125.0.0.0 Safari/537.36 Edg/125.0.0.0"
}proxies = {"http": "http://127.0.0.1:7890","https": "http://127.0.0.1:7890"
}db = fr"D:\数据\谷歌影像\{db_name}.db"west, south, east, north = extenttile_list = list(mercantile.tiles(west, south, east, north, zoom_range, truncate=True))
print(len(tile_list))
# 打乱顺序
random.shuffle(tile_list)con = sqlite3.connect(db)
cursor = con.cursor()cursor.execute(f"""SELECT name FROM sqlite_master WHERE type='table' AND name='{db_name}';""")
table_exists = cursor.fetchone()if not table_exists:cursor.execute(f"""CREATE TABLE {db_name} (tileX integer, tileY integer, tileZ integer, image blob,UNIQUE(tileZ, tileX, tileY));""")for tile in tile_list:url = url_dict[db_name].format(x=tile.x, y=tile.y, z=tile.z)print(url)cursor.execute(f"""SELECT 1 FROM {db_name} WHERE tileZ=? AND tileX=? AND tileY=?;""", (tile.z, tile.x, tile.y))if cursor.fetchone():print(f"Data for tile ({tile.z}, {tile.x}, {tile.y}) already exists. Skipping...")continuecount = 0content = b""while count < 10:r = requests.get(url, headers=headers, proxies=proxies)content = r.contentif content:breakcount += 1print(f"Retry tile {tile.z}, {tile.x}, {tile.y}")time.sleep(1)if not content:raise Exception(f"No data from {tile.z}, {tile.x}, {tile.y}")time.sleep(0.1)sql = f"INSERT INTO {db_name} (tileZ, tileX, tileY, image) VALUES (?, ?, ?, ?);"cursor.execute(sql, (tile.z, tile.x, tile.y, sqlite3.Binary(content)))con.commit()con.close()

http://www.ppmy.cn/server/159211.html

相关文章

【MyDB】3-DataManager数据管理 之 0-DataManager数据管理框架

【MyDB】3-DataManager数据管理 之 0.DataManager数据管理框架 DataManagerAbstractCache 引用计数缓存框架DataItemDataManagerPageCacheLogger 日志记录 代码结构参考资料 DataManager 继事务管理后&#xff0c;来到了myDB的核心。数据管理DataManager DataManager 继承了一…

滚动字幕视频怎么制作

在当今的视频创作领域&#xff0c;滚动字幕被广泛应用于各种场景&#xff0c;为视频增添丰富的信息展示和独特的视觉效果。无论是影视剧中的片尾字幕、新闻节目中的资讯滚动&#xff0c;还是综艺节目中的人员与鸣谢信息展示&#xff0c;滚动字幕都发挥着不可或缺的作用。接下来…

Python剪辑视频小妙招(moivepy库)

起因 最近一直在b站上投稿喜羊羊与灰太狼的视频&#xff0c;但是苦于需要手动裁剪视频的片头和片尾&#xff0c;裁剪的多了就发现喜羊羊与灰太狼的视频片头几乎都是1分25秒结束&#xff0c;也就是持续85秒&#xff0c;片尾也差不多是持续1分02秒差不多也就是62秒&#xff0c;于…

effective-Objective-C 第二章阅读笔记

对象&#xff0c;消息&#xff0c;运行期 文章目录 对象&#xff0c;消息&#xff0c;运行期前言理解“属性”这一概念属性修饰符原子性nonatimicatomic 读/写权限内存管理语义方法名 自定义初始化方法小结 在对象内部尽量直接访问实例变量小结 对象等同性特定类的isEqual执行深…

【Vue3 入门到实战】5. Watch 监视

目录 1. 监听ref定义的数据 1.1 监视ref定义的基本类型数据 1.2 监视ref定义的引用类型 1.2.1 修改属性 1.2.2 修改整个对象 2. 监视reactive定义的数据 3. 监视ref 和 reactive定义的对象类型中的某个属性 3.1 属性值为基本类型 3.2 属性值为引用类型 4. 监视上述…

MySQL的索引

一、索引概述&#xff1a; 索引&#xff08;index&#xff09;是帮助MySQL高效获取数据的数据结构&#xff08;有序&#xff09; 优缺点&#xff1a; 优点&#xff1a;提高数据检索&#xff0c;降低数据库的IO成本&#xff0c;通过索引列对数据库进行排序&#xff0c;降低数据排…

分类统计字符个数(PTA)C语言

本题要求实现一个函数&#xff0c;统计给定字符串中英文字母、空格或回车、数字字符和其他字符的个数。 函数接口定义&#xff1a; void StringCount( char s[] ); 其中 char s[] 是用户传入的字符串。函数StringCount须在一行内按照 letter 英文字母个数, blank 空格或回…

隧道IP广播与紧急电话系统:提升隧道安全的关键技术

隧道IP广播与紧急电话系统&#xff1a;提升隧道安全的关键技术 随着现代城市交通的迅猛发展&#xff0c;隧道作为重要的交通基础设施&#xff0c;其安全性与应急处理能力显得尤为重要。隧道IP广播与紧急电话系统作为保障隧道安全的关键技术&#xff0c;正发挥着越来越重要的作…