我需要在python脚本中从OpenStreepMap-Tileserver下载许多Tiles。每个Tile都有自己的URL。 URL("http://otile4.mqcdn.com/tiles/1.0.0/osm/..."
)的常量部分和由zoomlevel和x-& amp;描述的动态部分。 y-tile的坐标(".../zoomlevel/x/y.png"
)。 Here就是一个例子。
目前,我使用urllib2下载Tiles。为了提高效率,我将平铺下载并行化。无论如何,下载10.000平铺(相当于40兆字节)平均需要12分钟。我发现,函数urllib2.urlopen(url)有时需要很多秒(10到20秒)来建立与OSM-Server的连接。还有另一种方法,从HTTP服务器下载文件或加速连接建立吗?
答案 0 :(得分:0)
您只能通过设置Range标题
来下载部件req = urllib2.Request(url)
req.headers['Range'] = 'bytes=%s-%s' % (start, end)
file = urllib2.urlopen(req)
下载上半部分并开始另一部分下载其他部分
示例:
import urllib, urllib2
from thread import start_new_thread
def dwl1():
url = "http://otile2.mqcdn.com/tiles/1.0.0/osm/18/136933/86273.png" #url
req = urllib2.Request(url) #http request.
req.headers['Range'] = 'bytes=%s-%s' % (0, 4836)
img_part1 = urllib2.urlopen(req)
def dwl2():
url = "http://otile2.mqcdn.com/tiles/1.0.0/osm/18/136933/86273.png" #url
req = urllib2.Request(url) #http request.
req.headers['Range'] = 'bytes=%s-%s' % (4836, 10000)
img_part2 = urllib2.urlopen(req)
start_new_thread(dwl1)
start_new_thread(dwl2)
现在将第1部分和第2部分放在一起...... 我很确定它不会起作用,但你正在寻找像这样的东西