多线程下载OpenStreetMap地图数据

数据是一切应用的基础。最近为了折腾一些好看的地图,想下载中国区域的OpenStreetMap(简称OSM)的地图数据。找了一些资料,在CentOS Linux服务器上搞起,作为技术小白,得记录下以备后面不时之需。

OpenStreetMap

OpenStreetMap是一个世界地图,由全世界的人们所构筑,可依据开放许可协议自由使用。直白的讲,就是一个开放街道数据(不仅仅是街道数据,还包括行政区划、自然要素等数据)的众包平台,所有人都可以免费得到这份全球的数据。其目标是创造一个内容自由且所有人可编辑的世界地图。

去哪里下载?

这么好的免费资源,直接访问OpenStreetMap官网可查看详细信息。

  • 区域地图,可以从这里下载:http://download.geofabrik.de/
  • 全球地图,可以从这里下载:http://ftp.heanet.ie/mirrors/openstreetmap.org/planet/planet-latest.osm.bz2
多线程下载OpenStreetMap地图数据_第1张图片
OpenStreetMap Data Extracts

由于全球数据太大,只下载Asia区域的数据,获取pbf文件下载地址。(由于pbf格式较小,约5GB)直接在CentOS服务器上用WGET下载,发现速度巨慢,只有几十KB的速度。这样得吓倒猴年马月去啊,搞个多线程下载提速吧。发现Axel比WGET采用多线程下载可以提升80%的效率。

Axel is an awesome command line download manager with many futures. It's very light and smooth and easy to install. Axel tries to accelerate HTTP/FTP downloading process by using multiple connections for one file. It can use multiple mirrors for a download.

我菜,这么牛逼的工具,必须用之。

安装Axel

由于俺们服务器是CentOS 7.2,对于CenOS 6/7 需要添加EPEL repository:

#   yum install epel-release
#   yum install axel

或者可以直接通过RPM包进行安装:

#   rpm -ivh ftp://fr2.rpmfind.net/linux/dag/redhat/el6/en/x86_64/dag/RPMS/axel-2.4-1.el6.rf.x86_64.rpm

对于采用Debian或者Ubuntu Linux的童鞋,可以通过以下命令直接安装:

#   apt-get install axel

使用Axel多线下载

直接使用Axel命令下载:

#   axel -n 10 http://download.geofabrik.de/asia-latest.osm.pbf

其中:-n 10指定下载线程数,-o x可以指定另存目录,-q静默模式,无任何输出信息。
还可根据需要,添加更多选项:

#   axel --help
Usage: axel [options] url1 [url2] [url...]

--max-speed=x       -s x    Specify maximum speed (bytes per second)
--num-connections=x -n x    Specify maximum number of connections
--output=f      -o f    Specify local output file
--search[=x]        -S [x]  Search for mirrors and download from x servers
--header=x      -H x    Add header string
--user-agent=x      -U x    Set user agent
--no-proxy      -N  Just don't use any proxy server
--quiet         -q  Leave stdout alone
--verbose       -v  More status information
--alternate     -a  Alternate progress indicator
--help          -h  This information
--version       -V  Version information

当然,下载过程中如果中断,或者通过Ctrl+C认为中断下载后,在原来的目录重新执行相同命令,则可以恢复下载进度,而不会从头开始下载。

下载速度真心不错,刚开始一度达到1Mb/s.

多线程下载OpenStreetMap地图数据_第2张图片
Alex多线程下载OSM Asia区数据

最后花了4个小时,下完了这份数据。

[ 99%]  .......... .......... .......... .......... ..........  [ 353.7KB/s]
[ 99%]  .......... .......... .......... .......... ..........  [ 353.6KB/s]
[ 99%]  .......... .......... .......... .......... ..........  [ 353.6KB/s]
[ 99%]  .......... .......... .......... .......... ..........  [ 353.5KB/s]
[100%]  .......... .......... .......... .......... ..........  [ 353.5KB/s]
[100%]  ..

Downloaded 5621.5 megabytes in 4:31:23 seconds. (353.52 KB/s)

可选配置

既然axel用着顺手,考虑到之前wget命令用习惯了,可以给其指定别名为wget。

你可能感兴趣的:(多线程下载OpenStreetMap地图数据)