基于python的百度离线地图下载器

 

import os,stat

import urllib.request

import math

import json

 

def downloadPicture(img_url,file_path,file_name,file_suffix):

    try:

        #是否有这个路径

        if not os.path.exists(file_path):

        #创建路径

            os.makedirs(file_path)

            #获得图片后缀

        # file_suffix = '.png' #os.path.splitext(img_url)[1]

        # file_name = time.clock()

        # print(file_suffix)

            #拼接图片名(包含路径)

        filename = '{}/{}{}'.format(file_path,file_name,file_suffix)

        print(filename)

        #下载图片,并保存到文件夹中

        urllib.request.urlretrieve(img_url,filename)

    

    except IOError :

        print("IOError")

    except Exception :

        print("Error")

 

# # 百度地图瓦片下载

def downloadBDtiles():

#坐标转换接口

# http://api.map.baidu.com/geoconv/v1/?coords=114.21892734521,29.575429778924&from=1&to=5&ak=

    zList=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17]

    token="A4jr7kTCADiD4q6Iphl7zza1BEyYFAo8"

    file_path_sl='D:/sl'

    file_path_sl_label='D:/label_sl'

    file_path_yx='D:/yx'

    file_path_yx_label='D:/label_yx'

    lefttop_point1=[118.12,33.8]#[118.12,33.8]           #左上角 

    rightbottom_point1=[119.4,33.019]       #右下角 

    lefttop_point_response = urllib.request.urlopen('{}{}{}{}{}{}'.format("http://api.map.baidu.com/geoconv/v1/?coords=",lefttop_point1[0],",",lefttop_point1[1],"&from=1&to=6&ak=",token))

    rightbottom_point_response = urllib.request.urlopen('{}{}{}{}{}{}'.format("http://api.map.baidu.com/geoconv/v1/?coords=",rightbottom_point1[0],",",rightbottom_point1[1],"&from=1&to=6&ak=",token))

    lefttop_point_json = json.loads(lefttop_point_response.read())["result"]

    rightbottom_point_json = json.loads(rightbottom_point_response.read())["result"]

    lefttop_point = [lefttop_point_json[0]["x"],lefttop_point_json[0]["y"]]

    rightbottom_point = [rightbottom_point_json[0]["x"],rightbottom_point_json[0]["y"]]

    zindex=0

    for z in zList:

        tile_x_min = int(lefttop_point[0] * math.pow(2,z-18)/256)

        tile_x_max = int(rightbottom_point[0] * math.pow(2,z-18)/256)

        while tile_x_min <= tile_x_max:

            tile_y_max = int(lefttop_point[1] * math.pow(2,z-18)/256)

            tile_y_min = int(rightbottom_point[1] * math.pow(2,z-18)/256)

            while tile_y_min <= tile_y_max:                

                print(z)

                print(tile_x_min)

                print(tile_y_min)                

                img_url_sl='{}{}{}{}{}{}{}'.format("http://online1.map.bdimg.com/onlinelabel/?qt=tile&x=",tile_x_min,"&y=",tile_y_min,"&z=",z,"")

                img_url_sl_label='{}{}{}{}{}{}{}'.format("http://online0.map.bdimg.com/tile/?qt=tile&x=",tile_x_min,"&y=",tile_y_min,"&z=",z,"&styles=sl&v=017")

                img_url_yx ='{}{}{}{}{}{}{}'.format(" http://shangetu1.map.bdimg.com/it/u=x=",tile_x_min,";y=",tile_y_min,";z=",z,";v=009;type=sate&fm=46")

                # img_url_yx_label='{}{}{}{}{}{}{}'.format("http://online1.map.bdimg.com/onlinelabel/?qt=tile&x=",tile_x_min,"&y=",tile_y_min,"&z=",z,"")

                filepathsl ='{}/{}/{}'.format(file_path_sl,z,tile_x_min)

                filepathsllabel ='{}/{}/{}'.format(file_path_sl_label,z,tile_x_min)

                filepathyx ='{}/{}/{}'.format(file_path_yx,z,tile_x_min)

                filepathyxlabel ='{}/{}/{}'.format(file_path_yx_label,z,tile_x_min)

                filename = tile_y_min

                file_suffix=".png"

                downloadPicture(img_url_sl,filepathsl,filename,file_suffix)

                downloadPicture(img_url_sl_label,filepathsllabel,filename,file_suffix)

                downloadPicture(img_url_yx,filepathyx,filename,file_suffix)

                # downloadPicture(img_url_yx_label,filepathyxlabel,filename,file_suffix)

                tile_y_min +=1

            tile_x_min +=1

        zindex+=1

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值