下载OpenStreetMap离线地图数据并搭载瓦片服务器

一、下载OpenStreetMap离线地图数据

OpenStreetMap可以在Geofabrik Download Server进行下载。

下载OpenStreetMap离线地图数据并搭载瓦片服务器_第1张图片

红框部位可直接下载洲区域地图。

也可以点击洲名称,进入下载国家区域的地图。

该网址似乎没有提供省市级别的地图,至少本人没有找到。

确定要下载的地图之后,建议下载.bz2格式的地图(因为目前只知道如何处理这样的地图)。

下载如果是linux系统,建议tmux+axel。(本人下载数据用的Ubuntu,处理数据的软件是在win7上)

下载完成后是bz2格式的压缩文件,需要解压一下(linux系统可直接用bunzip2解压,如果是win的话,好像还不能直接解压,搜了下据说有bzip2 for windows,还有7z可以解决)。

解压会得到一种osm格式的数据。

二、处理osm数据

处理osm数据用到一个软件:maperitive。

下载下来之后,在安装目录下有个 Maperitive.exe 直接双击运行就好。

提示内容叉掉,左上角 file -> open map sources

找到刚刚下载的osm格式数据。打开。

然后右下角 Map Source,里面就有两个地图数据源,一个是刚刚加载的,另一个是原生的,原生的地图数据比较简单,不详细。

Web map(OSM Mapnik)前边的黄色五角星点一下,原生的地图就取消了,剩下的就是下载下来的地图了。

在,左边,有个Commander,是个命令行工具。

Command prompt:这里可以输入指令。

把地图拉到自己想要的范围,

然后输入指令:

generate-tiles minzoom=1 maxzoom=3

这里将zoom范围设置的1~3,根据自己实际需求进行设置。

(minzoom是显示的图最小,即整个区域地图的缩略图,maxzoom是显示图最大, 可以看到很多细节)。

运行过后,在Maperitive的安装目录下就会多一个Tiles文件夹。

这就是地图瓦片。

三、搭建瓦片服务器

瓦片服务器其实就是打一个web服务,请求url,将对应的图片进行返回。

这里采用的python-flask(因为搭建起来很简单,几行代码就OK,具体操作的时候也可以换成其他方式)。

搭建python-flask的瓦片服务器,只需要有python环境,然后安装flask库就行。

具体细节就不多说,直接看完整代码。

from flask import Flask, Response

app = Flask(__name__)

@app.route("/")
def index():
	return "

map source

" @app.route("/tiles///", methods=['GET']) def getTiles(x, y, z): # return str(x)+"_"+str(y)+"_"+str(z) imgPath = "Tiles/{}/{}/{}.png".format(x, y, z) resp = None with open(imgPath, 'rb') as f: img = f.read() resp = Response(img, mimetype="image/png") return resp if __name__ == '__main__': app.run(debug=True)

很简洁,20行代码就搞定了。

然后在浏览器"localhost:5000/tiles/1/2/3"就可以看到浏览器页面中显示了相应的地图了。

 

 

 

你可能感兴趣的:(Linux,python,OSM)