部分结果

bing地图瓦片使用QuadKey作为命名方式。

QuadKey简介

如何计算quadkey

在给定level下,把行号tileY和列号tileX转换为2进制,然后行列交叉存储,再转换为4进制,即得到了相应的quadkey。

quadkey的优点

四键具有几个有趣的属性。首先,四键的长度(位数)等于相应图块的详细程度。其次,任何图块的四键以其父图块(上一级包含的图块)的四键开头。如下例所示,图块2是图块20到23的父级,图块13是图块130到133的父级:

思路

根据选择的区域计算四键,构建下载链接,使用python requests下载影像瓦片。

# -*- coding: utf-8 -*-

"""下载区域影像

从第一层到指定层

"""

import requests

import os.path

import QuadKey.quadkey as quadkey

import shutil

import secrets as secrets

# 下载的最细层

tileZoom = 5

rootTileDir = "tiles_cache"

lat_min = -90

lat_max = 90

lon_min = -180

lon_max = 180

# MS doesn't want you hardcoding the URLs to the tile server. This request asks for the Aerial

# url template. Replace {quadkey}

response = requests.get("https://dev.virtualearth.net/REST/V1/Imagery/Metadata/Aerial?key=%s" % (secrets.bingKey))

# 返回结果

data = response.json()

print(data)

# grabs the data we need from the response.

# 例如:http://ecn.{subdomain}.tiles.virtualearth.net/tiles/a{quadkey}.jpeg?g=7786

tileUrlTemplate = data['resourceSets'][0]['resources'][0]['imageUrl']

# 例如:['t0', 't1', 't2', 't3']

imageDomains = data['resourceSets'][0]['resources'][0]['imageUrlSubdomains']

if (os.path.exists(rootTileDir) == False):

os.mkdir(rootTileDir)

bingTilesDir = os.path.join(rootTileDir, "bing")

if (os.path.exists(bingTilesDir) == False):

os.mkdir(bingTilesDir)

def get_tiles_by_pixel(tilePixel):

"""

下载该点之上的瓦片

:param lat:

:param lon:

:return:

"""

"""get pixel coordinates"""

# tilePixel = quadkey.TileSystem.geo_to_pixel((lat, lon), tileZoom)

# print(tilePixel)

pixel = tilePixel

geo = quadkey.TileSystem.pixel_to_geo(pixel, tileZoom)

# 计算四键

qk = quadkey.from_geo(geo, tileZoom)

# 四键

qkStr = str(qk)

#

qkArray = []

for index in range(tileZoom):

qkArray.append(qkStr[0:index + 1])

print(qkArray)

# 存放路径

for qk in qkArray:

# 下载影像

tileFileName = "%s/%s.jpg" % (bingTilesDir, qk)

if (os.path.exists(tileFileName)):

# already downloaded

ok = 1

else:

print("下载中", end='')

url = tileUrlTemplate.replace("{subdomain}", imageDomains[0])

url = url.replace("{quadkey}", qk)

url = "%s&key=%s" % (url, secrets.bingKey)

response = requests.get(url, stream=True)

print(response)

with open(tileFileName, 'wb') as out_file:

shutil.copyfileobj(response.raw, out_file)

del response

neededTile = True

# 左上为原点

tilePixelMax = quadkey.TileSystem.geo_to_pixel((lat_max, lon_max), tileZoom)

tilePixelMin = quadkey.TileSystem.geo_to_pixel((lat_min, lon_min), tileZoom)

print(tilePixelMax)

print(tilePixelMin)

for x in range(tilePixelMin[0], tilePixelMax[0], 256):

for y in range(tilePixelMax[1], tilePixelMin[1], 246):

get_tiles_by_pixel((x, y))

# get_tiles(lat_max, lon_max)

# get_tiles(lat_max, lon_min)

# get_tiles(lat_min, lon_max)

# get_tiles(lat_min, lon_min)

print('下载完毕')

接下来要做的事大量瓦片的有效管理(因为数据量巨大,查询移动很不方便。有兴趣可以计算一下这个量有多大)

python发布tms服务

瓦片拼接成tif等格式

更多详情见下面链接:python获取bing地图发布自己的TMS服务(一)下载瓦片 - 小专栏​xiaozhuanlan.com

文章尾部提供源码下载,对本专栏感兴趣的话,可以关注一波

python下载谷歌地图瓦片_python获取bing地图发布自己的TMS服务(一)下载瓦片相关推荐

  1. 【MAPBOX基础功能】29、mapbox地图基础工具 - 获取当前地图层级

    前言 官网指引,生成accesstoken,下载相关依赖请翻阅[https://blog.csdn.net/weixin_44402694/article/details/125414381?spm= ...

  2. 【MAPBOX基础功能】28、mapbox地图基础工具 -获取当前地图中心点

    前言 官网指引,生成accesstoken,下载相关依赖请翻阅[https://blog.csdn.net/weixin_44402694/article/details/125414381?spm= ...

  3. python编程完整教程视频_Python Web开发视频(全50集)视频教程下载

    python web开发-01-Python简介(简介.特色)_1.mp4 python web开发-02-安装Python(Windows安装)_1.mp4 python web开发-03-使用带提 ...

  4. selenium【自动下载谷歌驱动】自动获取谷歌版本,并自动下载对应版本的chromedriver.exe

    自动获取谷歌版本,并自动下载对应版本的chromedriver.exe 前言 获取谷歌版本(获取google版本) 定义下载驱动方法 下载逻辑判断 最后送个小福利 前言 因为电脑google浏览器自动 ...

  5. python高德 查询县_Python获取高德地图省市区县列表

    项目中需要用省市区来进行检索,原想高德地图肯定会有API来获得这些数据,结果没有找到,有一个接口好像可以用,但是会附带大量的边界坐标点. 所以就不如自己把高德的省市区列表扒下来,自己写接口来完成这个功 ...

  6. python 下载qq群文件_python获取所有qq好友、全部群所有成员部分信息,并保存列表至电子表格文件...

    序 发现上半年压了一堆实用代码,想了一下,还是开源吧.这个就先发布了. 警告 请合理使用此代码,严禁用于广告.信息售卖等反人类用途 使用时请注意不要超负荷访问腾讯服务器 (欢迎各位改良并Pull Re ...

  7. python地图标点_python绘图 | 空间地图上散点气泡绘制

    今天的推文教程使用geopandas进行空间图表的绘制(geopandas空间绘图很方便,省去了很多的数据处理过程,而且也完美衔接matplotlib,学习python 空间绘图的小伙伴可以看下啊), ...

  8. python编程免费教程电子书_python编程从入门到实践PDF电子书教程免费下载

    本书是一本针对所有层次的 Python 读者而作的 Python 入门书.全书分两部分 :第一部分介绍用 Python 编程所必须了解的基本概念,包括 matplotlib.NumPy 和 Pygal ...

  9. python查看图片的源代码_python获取图片元数据的代码

    exif-py是一个纯python实现的获取图片元数据的python库,官方下载地址: http://exif-py.svn.sourceforge.net/viewvc/exif-py/source ...

最新文章

  1. php学习之道:WSDL具体解释(三)
  2. 《OpenCV 4开发详解》图像的读取与显示
  3. numpy 数组与矩阵的乘法理解
  4. 又摊上事了!刹车门还没完,特斯拉或将面临10亿元巨额索赔
  5. 综合布线系统计算机网络,综合布线 计算机网络系统
  6. Python 获取 Flash SWF 文件宽度和高度(Width, Height)
  7. mdx 医学词典_Mdict的mdx词典文件如何解析,有相关的开源代码可以参考吗?
  8. 浅谈CFD(constant fraction discriminator恒比鉴相器)
  9. Java内存马-Instrument
  10. 双碑零基础意大利语学习 小白也能看懂的意大利语入门知识
  11. 小程序前端获取手机号码
  12. 阿里云 CDN 问题排查
  13. L1-040 最佳情侣身高差 (10分)(C语言)
  14. Windows更新失败,错误代码0x80240037解决办法
  15. 基于Stm32f103针对TM1640驱动数码管
  16. android 语音发送功能,Android仿微信、录制音频并发送功能
  17. matlab验证费根鲍姆常数,费根鲍姆常数
  18. 高端LED显示屏为何青睐黑灯?
  19. 2014年多项审计公告发布 央企高管买房不交全款
  20. 高性能MySQL(3th)(第六章 sql优化) —— 06 查询优化器的工作

热门文章

  1. 基于JAVA+SpringBoot+Mybatis+MYSQL的校园新闻管理系统
  2. linux界面唤醒,Linux计算机实现自动唤醒和关闭的方法步骤详解
  3. 限制文本框中只能输入数字(+,-)的正则表达式写法
  4. jmail 收件(转)
  5. Python之数据分析(figure图形对象、Numpy连线特殊点、图像多元布局)
  6. JavaScript之实例练习(模态对话框详解)
  7. 仓储rfid文件_RFID技术在智能制造模具管理中的应用
  8. java hiveconf_Java学习路线分享hive的运行方式
  9. 微信多开软件苹果版_微信PC版 v3.0.0.57 多开amp;消息防撤回
  10. 微课|中学生可以这样学Python(3.4节):选择结构的嵌套