IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> Python 获取谷歌切片数据,在cesium上加载 -> 正文阅读

[Python知识库]Python 获取谷歌切片数据,在cesium上加载

最近一直在做 “python 从入门到精通” 的学习,经过断断续续的学习,想着如何跟专业范围内的东西结合起来。现在分享一下如何从谷歌地图上下载切片数据,然后在cesium上加载。

1 切片结构

首先要搞清楚谷歌地图的切片结构。谷歌地图的整个范围是:南纬85.05到北纬85.05,东经180到西经180。切片的起点是北纬85.05°,东经180°。X轴与北纬85.05°重合,向右为正向。Y轴与东经180°重合,向下为正向。切片级别从0级开始,0级是一张图片,为全球的平面图。1级是有4张图片,也就是将0级的图沿中心“横竖”切一刀。顺着这个分发,每一级都是上一级的每一个图片沿中心“横竖”切一刀。如下图:
0级
1级
2级

从上图也可以看出,切片的每一级,都是由上一级的每一个切片一分为四形成的。那么就可以知道:
每一级的切片数量:
tile_count = 22*level
其中 level为当前级别
X方向每一行切片数量:
tile_count_x = 2level
Y方向每一列切片数量:
tile_count_x = 2level

2 地图地址

谷歌地图的切片地址一般为:http://www.google.com/maps/vt?lyrs=s@815&gl=cn&x=&y=&z=
其中x和y分别为切片坐标,z为切片的级别,例如 http://www.google.com/maps/vt?lyrs=s@815&gl=cn&x=0&y=0&z=0 表示0级下的第一张切片

3 cesium 切片格式

cesium中有一种自定义的地图provider,UrlTemplateImageryProvider,对应的url格式为url: ‘{z}/{x}/{y}’,其中z是缩放级别,x、y为坐标。那么根据这个结构,就可以在下载切片的时候创建对应的文件夹。

4 python 下载

1)循环每一个级别,分别下载

def run(self, level):
        for i in range(level+1):
            # 创建当前级别的文件夹
            self.createLevelDir(self.level)
            # 下载切片
            self.levelDownPre(i)
            print(self.level)
            self.level+=1

2)创建文件夹

def createLevelDir(self, rpath):
        """
        创建文件夹
        :return: null
        """
        # TODO: 判断文件夹是否存在
        if not os.path.exists(str(rpath)):
            print(f'{str(rpath)} 文件夹不存在')
            os.mkdir(str(rpath))
            print(f'{str(rpath)} 文件夹创建成功')
            return True
        else:
            print(f'{str(rpath)} 文件夹已存在')
            return False

3)准备下载所需地址,文件

def levelDownPre(self, level):
    """
    当前层级下,下载所有瓦片数据准备
    :param level: 当前层级
    :return
    """
    self.tile_count = 2**(2*level)
    # print(f'当前层级为:{level}, 瓦片总数为:{self.tile_count}')
    self.lines = 2**level
    self.tile_index = 0
    for i in range(self.lines):
        if self.createLevelDir(f'{self.level}/{i}'):
            for j in range(self.lines):
                url = f'{self.base_url}{i}&y={j}&z={self.level}'
                # print(f'瓦片坐标:({i},{j}), 瓦片地址:{url}')
                self.rd.down(f'{self.level}/{i}/{j}.png', i, j, self.level)
                print(f'第 {self.level} 级,({i},{j})个坐标,第{self.tile_index}/{self.tile_count}个瓦片')
                self.tile_index+=1
                time.sleep(0.5)
        else:
            print('当前瓦片已下载')

4)下载切片

def down(self, path, x, y, z):
    self.url = self.base_url + f'{x}&y={y}&z={z}'
    try:
        urllib.request.urlretrieve(url=self.url, filename=path)
    except:
        print('请求被拒绝。。。重新开始')

5 切片数据

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6 cesium加载

下载完数据,就是在cesium中加载。这里做测试,把下载的数据放在项目本地。
let xyzProvider = new Cesium.UrlTemplateImageryProvider({
url: ‘data/xyz/{z}/{x}/{y}.png’,
tilingScheme: new Cesium.WebMercatorTilingScheme(),
maximumLevel: 5
});
this.viewer.imageryLayers.addImageryProvider(xyzProvider);
在这里插入图片描述

完整加载

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-09-13 11:10:10  更:2022-09-13 11:11:00 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/26 13:47:43-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计