这个工具很功能简单, 就是从OpenStreetMap获取OSM路网/节点数据, 然后可以选择是否合并预先做好的地形等高线(NASA DEM数据), 生成可以用于支持MapsForge地图格式的手机地图应用的矢量地图. 优点是地图文件比较小, 数据可以自己在OpenStreetMap上更新, 然后立刻反映到地图上.缺点么是因为是OpenStreetMap的源, POI的数量不足, 以及矢量渲染的没有瓦片地图好看, 放大后折线明显.
整个工具其实就是一个批处理调用过程,现在只是满足最基本的能没什么大错误工作的程度.因为本人编码水平比较业余,中间调用外部命令的输出重定向做的很不理想, 只能等待命令结束后一次获取, 准实时获取显示未实现.
要使用此工具, 需要先安装如下软件:
- Python 2.7
- PyQT4
- OSMOSIS 0.40+Mapsforge writer
- OSMConvert
- wget
- phyghtmap-1.47
- affinity-0.1.0
- SRTMFill Free
- JRE8
版本升级:
========
201501:现已支持制作GARMIN格式地图, 以及制作完成后自动调用Mapsforge自带的简易看图工具查看地图, 除了中文字体显示有点问题不支持显示风格变换看不到等高线. 其他都挺好的. 或者采用新版的RouteConverter Offline支持查看等高线风格.
代码更新地址
https://bitbucket.org/netcharm/mapsforgemapmaker/overview
打包好的工具包: 包含上述软件中的 3, 4, 5, 8. 6, 7也包含但需要自行 setup.py install
https://bitbucket.org/netcharm/mapsforgemapmaker/downloads/MapMaker.7z
界面参考图:
使用步骤:
- 先给定地图区域和地图名称. 注意OSM的数据下载一次请求是有限制的, Overpass XAPI大约10平方度以内, OSM API大约0.25平方度, 不建议一次制作过大的. 本程序对较大的区域采取按1度x1度分片下载后合成的模式.
- 预先准备好地图区域的范围多边形, 可以用GoogleEarth自己画,然后用附带的kml2polygon.py转换为所需的poly文件, 也可以去搜索下载现成的, 或者自己按照格式写一个
- 生成地形等高线数据, 参考上图点击左下角的’Contour’按钮, 所需的DEM数据如果不存在, 那么会下载.下载完成后, 会生成和地图有同前缀的等高线数据
- 没有下载过路网数据, 或需要更新就勾选’Download’
- 一般’Tag Transform’, 都是勾选的. 可以为路网和节点添加一些必要的标签映射
- ‘Cut Boundary’ 和 ‘Sort’ 一般无需勾选, 强迫症患者可以选择
- ‘Merge’ 勾选则可以生成 附带等高线的地图, 否则就是普通地图.
- ‘Convert Binary’ 勾选后, 可以大幅度降低生成最终地图前的OSM地图数据文件大小, 以及提升一部分生成地图时的读取效率.
- ‘Harddisk’ 勾选时使用磁盘作为数据载入缓存, 否则使用内容读入所有地图数据. 大点的地图处理时非常吃内存.
- 设定好后, 按 ‘OK’ 即可开始制作地图, 数据比较多时, 比较慢. 可以休息5~10分钟左右, 为了不过于占用CPU, 使用了affinity设定为1/3左右的CPU资源.
PS: 本人i7-2600, 16G的机器, 生成附带等高线的地图, 使用3个CPU逻辑核心时, 海南全岛地图大约需时4s~6分钟, 任务管理器中, 工作内存数据占用1.2G,提交大小占用2G左右. 使用Harddisk大约减少2/3占用. 地图制作的时候比较消耗CPU资源, 尤其是内存. 内存不够时请选择Using Harddisk. 并且尽量制作小区域地图, 如果全国地图还要加等高线的话, 估计绝大部分的机子都吃不消, 时间估计也长的无法忍受, 最终甚至未必可以完成. 至少我的机子没做成功过, 基本最后都是堆内存溢出. 没有等高线的中国地图大约需要1小时或更多.
生成的地图可以用于OruxMaps等支持mapsforge地图的应用.实际地图渲染效果如下(需要从OpenAndroidMap站点下载渲染主题)
参考来源:
[1]http://forum.locusmap.eu/index.php?topic=1839
[2]http://www.openandromaps.org/en/legend
[3]http://wiki.openstreetmap.org
[4]http://download.mapsforge.org/maps/asia/
[5]https://github.com/mapsforge/mapsforge
有个更简单的方法,如果手机是IOS8以上的,下载一个行图,然后把mapsforge地图导入行图,直接开启行图自带的等高线地图图层,就可以获得mapsforge等高线地图。
步骤1:按楼主的方法先下载Mapsforge地图,然后通过QQ、微信或Airdrop传到手机,用行图打开
步骤2:在行图的离线地图中选择启用导入的mapsforge
步骤3:点击主界面的等高线图层按钮,即可自动叠加等高线到mapsforge地图中。
生成的地图理没包含等高线比较通用一点, 因为支持Mapsforge的软件很多, 各个平台都有, 但是可以叠加等高线很少.
在行图中使用mapsforge地图叠加等高线,其实也只是在地图中看到等高线的效果,这个只是省去了等高线地图的制作,在日常出行中非常方便。但是如果要保存成一张mapsforge的等高线地图,确实还是得自己制作。
各位加油!
福利:送上中国区的mapsforge
http://ftp-stud.hs-esslingen.de/pub/Mirrors/download.mapsforge.org/maps/asia/china.map
马克