根据范围爬TMS规则瓦片

因为需要简单写了一个下载地图的爬虫,代码如下:

#coding=utf-8
import urllib.request
import os
import socket
import zlib
import math

# python版本3.7
# 设置超时
socket.setdefaulttimeout(60)

def mkdir(path):
    
    # 去除首位空格
    path=path.strip()
    # 去除尾部 \ 符号
    path=path.rstrip("\\")
 
    # 判断路径是否存在
    # 存在     True
    # 不存在   False
    isExists=os.path.exists(path)
 
    # 判断结果
    if not isExists:
        # 如果不存在则创建目录
        # 创建目录操作函数
        os.makedirs(path) 
 
        print('path create success!')
        return True
    else:
        # 如果目录存在则不创建,并提示目录已存在
        print('path already exist!')
        return False
 
# 定义要创建的目录
mkpath="F:\\python\\TMS\\"
# 调用函数
#mkdir(mkpath)

def callbackfunc(blocknum, blocksize, totalsize):
    '''回调函数
    @blocknum: 已经下载的数据块
    @blocksize: 数据块的大小
    @totalsize: 远程文件的大小
    '''
    # percent = 100.0 * blocknum * blocksize / totalsize
    # if percent > 100:
        # percent = 100
    print("--")

def long2tile(lon, zoom) :
    return (math.floor((lon + 180) / 360 * math.pow(2, zoom)))

def lat2tile(lat, zoom):
    return (math.floor((1 - math.log(math.tan(lat * math.pi / 180) + 1 / math.cos(lat * math.pi / 180)) / math.pi) / 2 * math.pow(2, zoom)))

 #范围
zmin = 9
zmax = 14
south_edge = 25.2526
north_edge = 26.6384
west_edge = 118.376
east_edge = 120.512

#便利URL,获取数据
def getDataByUrl():
    for z in range(zmin,zmax):
        top_tile = lat2tile(north_edge, z)
        left_tile = long2tile(west_edge, z)
        bottom_tile = lat2tile(south_edge, z)
        right_tile = long2tile(east_edge, z)
        minLong = min(left_tile, right_tile)
        maxLong = max(left_tile, right_tile)
        minLat = min(bottom_tile, top_tile)
        maxLat = max(bottom_tile, top_tile)
        for x in range(minLong,maxLong):
                path=str(z)+"\\"+str(x)
                temppath=mkpath+path
                mkdir(temppath)
                for y in range(minLat,maxLat):
                    url=str(z) + '/' + str(x) + '/' + str(y)
                    str3='https://cartodb-basemaps-a.global.ssl.fastly.net/dark_nolabels/'+ url + '.png'
                    path2=temppath+'\\'+str(y)+'.png'
                    try:
                        urllib.request.urlretrieve(str3,path2)
                    except Exception as e:
                        print(e)

getDataByUrl()

 

posted @ 2018-03-08 11:44  Hxxxxxxyyyyyy  阅读(1186)  评论(0编辑  收藏  举报