根据范围爬TMS规则瓦片

Posted DullFish

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了根据范围爬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()

 

以上是关于根据范围爬TMS规则瓦片的主要内容,如果未能解决你的问题,请参考以下文章

【GIS】矢量瓦片,GeoServer+Mapbox

JAVA代码根据经纬度范围计算WGS84与谷歌全球墨卡托包含的切片数目与拼接图像像素尺寸

SuperMap系列——GIS数据之地图瓦片

GISMapboxGeoServer矢量瓦片

百度地图瓦片层级范围对照表

瓦片切图工具gdal2tiles.py改写为纯c++版本