Python 笔记八:简单瓦片下载工具pyMap

Python笔记八:简单瓦片下载工具pyMap

这是一个简单的实例,去实现地图下载工具。如今又很多瓦片的下载工具,但是都是收费的,感觉奇怪的是既然是盗版还要收费。我决心用python写一个简单瓦片地图下载器,将瓦片下载拼接成对应的图片。

经供参考,不要从事商业用途,后果自负。

依赖

  • python3.5
  • requests 负责下载功能
  • pillow 负责图片拼接
  • tqdm 负责进度条

安装

  1. 安装python3.5

  2. 安装对应的第三方库

pip install -r requirement.txt

原理

两个主要函数分别是process_latlngprocess_tilenum。前者使用经纬度进行处理,如osm,mapbox,天地图等。其中将经纬度转换成为瓦片编号,然后使用后者的方法。后者采用瓦片编号去下载瓦片。
由于有些地图系统的瓦片编号,经加密后十分怪异,如百度地图。

下载瓦片则是采用request获取下载到指定的文件夹。

最后将瓦片地图进行拼接,运用pillow的在指定位置粘贴的方法,得到最后的成果。

output_im = Image.new("RGB", (size_x, size_y))

for x in trange(left, right + 1):
        for y in trange(top, bottom + 1):
            path = './tiles/%i/%i/%i' % (zoom, x, y)
            target_im = Image.open(path)
            output_im.paste(target_im, (256 * (x - left), 256 * (y - top)))

用法

使用前,将对应的经纬度查看对应左上和右下的坐标。

运用命令行

python pyMap.py 22.456671 113.889962 22.345576 114.212686 13 output/sample.png
  • 参数1: 西北角纬度
  • 参数2: 西北角经度
  • 参数3: 东南角纬度
  • 参数4: 东南角经度
  • 参数5: 比例尺级别
  • 参数6: 输出路径(默认'output/mosaic.png')

hard code test function

请自修修改,下面是通过经纬度下载数据。

def test():
    process_latlng(22.4566710000, 113.8899620000, 22.3455760000, 114.2126860000, 13)

或者通过瓦片编号下载数据。

def test():
    process_tilenum(1566, 1788, 1976, 2149, 9, "output/overlay.png")

考虑到谷歌地图

由于谷歌地图的数据最清晰,我想爬谷歌的数据,但是谷歌地图需要翻墙,而requests不能直接翻墙。所以我参考了lantern访问中文维基百科及selenium爬取维基百科语料

源码github地址在此,记得点星:
https://github.com/brandonxiang/pyMap_GFW

通过selenium控制浏览器截图,但是网速的限制导致成功率下降,给后期处理带来巨大麻烦。该项目已弃用,如果有更好方法请评论留言。

最后

结合所有的内容,网页版本为Python 笔记八(续):瓦片下载器网页版pyMap-webapp

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容