我基于MOBAC 1.9.16 源代码创建了一个扩展版开源项目,目前扩展的功能为:
1、支持国内的GCJ-02偏移坐标系图源,可通过修正图源瓦片坐标或重新生成标准墨卡托瓦片两种方式纠偏;
2、支持坐标原点为左下角的图源,比如腾讯地图;
3、支持多层图源包含不同坐标系的图源。
具体参见以下界面贴图及开源项目说明,目前是我自己简单测试了一下,现邀请感兴趣的朋友试用并帮忙测试,下载地址见后,发现问题或有建议可跟帖或到群里反馈,同时欢迎有编程基础的同学加入开发。
开源项目地址:https://github.com/rilyu/mobac-ext
二进制版下载地址:http://pan.baidu.com/s/1dDiYZBj
交流Q群:209602056
注:这几天百度云盘经常出问题,下载不了的也可以到QQ群文件里下载。
示例截图:
GE国内图源,速度奇快,可惜有偏移(GPX轨迹用于鉴别地图是否有偏移,不会在下载地图文件中出现)
使用msMercatorGCJ02,修正图源瓦片经纬度
强制转换为标准墨卡托瓦片,图源切换完全重合
加上天地图框架
还缺少点什么?等高线(使用本地瓦片模拟,矢量图层计划开发中)
还有更多的图源,比如微软地图
腾讯地图
不够新奇?以下两个没见过了吧
腾讯地形地图
腾讯卫星地图
MOBAC-Ext
Mobile Atlas Creator (MOBAC) extended version based on v1.9.16
扩展版新增/修改内容
2014-10-30
MapSpace增加对GCJ-02坐标系支持;
多层图源支持不同类型的MapSpace,且允许强制统一为标准墨卡托坐标系;
本地瓦片图源支持空瓦片。
图源文件元素详述
BeanShell图源
增加mapSpaceType变量,地图空间类型,取值范围如下
msMercatorSpherical:球形墨卡托投影(默认)
msMercatorEllipsoidal:椭球墨卡托投影
msMercatorGCJ02:球形墨卡托投影叠加GCJ-02坐标偏移
示例
mapSpaceType = MapSpaceType.msMercatorGCJ02;
XML图源
增加mapSpaceType元素,地图空间类型;
增加httpHeadReferer元素,HTTP请求头Referer属性;
增加httpHeadUserAgent元素,HTTP请求头UserAgent属性;
url元素模版增加{$-y}、{$sx}、{$sy}占位符,分别为坐标在左下角的y轴瓦片编号、x轴子编号、y轴子编号。
示例
<mapSpaceType>msMercatorGCJ02</mapSpaceType>
<url><![CDATA[http://p{$part}.map.gtimg.com/maptilesv3/{$z}/{$sx}/{$sy}/{$x}_{$-y}.png]]></url>
<httpHeadReferer><![CDATA[http://map.qq.com/]]></httpHeadReferer>
<httpHeadUserAgent><![CDATA[Mozilla/5.0 (Windows NT 6.1; WOW64; rv:2.0) Gecko/20100101 Firefox/4.0 Opera 12.16]]></httpHeadUserAgent>
本地瓦片图源
增加emptyTileFile元素,空瓦片图片文件,当请求的瓦片不存在时返回此元素配置的图片文件。
示例
<emptyTileFile><![CDATA[D:\map\empty.png]]></emptyTileFile>
多层图源
增加forceMercator元素,是否强制转换为msMercatorSpherical,转换需要耗费更多的CPU时间,默认为false。
示例
<forceMercator>true</forceMercator>









好奇水哥的工作,怎么能把这轨迹图研究得这么深,赞一个!
想下来试用一下,看是否能比奥维好用,我认为最主要的是可以离线下载目的地的地形图及等高线图
工作和gis没什么关系,只是有时间就喜欢折腾一下而已,呵呵
赞一个,下来试试
大侠名声在外,久仰大名
水哥的干货含金量极高,行外人只有好评支持了~~~
谢谢军子哥
技术流
...小白看不懂...还得好好学习一下
帅哥收山很久了,前几天才知道原来做大事去了^_^
好东西,积极测试
有问题或建议多多交流呵
积极点赞
谢谢游游
好帖
OCM、Landscape叠加天地图道路层也不错
我试了一下,确实不错,不过我不太喜欢那个等高线,使用贝塞尔曲线画得很光滑,很多细节都丢失了
下来耍耍,地图是个伤颈椎的货
我也是被global mapper弄烦了才想到做这个扩展版的,gm做多层地图非常繁琐,准备在后面再加上等高线和轨迹图层,基本就不需要用gm就能制作出合用的地图了
十分期待!!!
技术帖,支持~
谢谢支持
赞一个,MOBAC有更多版本出来了。
我主要考虑功能扩展,更多的图源可以选择
MOBAC 1.9.16 可以输出 OruxMaps Sqlite.
1.9.16 Ext Beta1: "Error - SQLIte not available", Unable to find the SQLite lib.
运行环境: Windows Vista, Java SE version 7, update 55 (1.7.0_55-b14)
我试试,真没测过输出SQLlite地图
Sqlite问题解决了,文件已经更新
最好有天地图经纬直投 (Geo, Lat/Long) 的 mapSpace, 延续工兵pro的工作.
OpenCycleMap 的等高线有很多考量: 计算量 (全球范围), 美观 (曲线代替折线)
范围太大, 计算等高线时的 simplification factor 便不能太小. 细节给抹掉了.
MOBAC 2.0.0 alpha1 已可支持 Mapsforge 地图. (个人觉得用处不大)
工兵原来那个图源访问不了了,你有新的图源么?发一个给我看看能不能增加支持
mobac官方的2.0版还在内部测试,所以我才选择基于发行版里最新的1.9.16分支
这个如果能加的话真应该添加,另外建议可以和crazyq沟通下,他修改的版本在下载优化上的确不错,能够把他修改的也加进去
天地图 经纬度投影
原点: 180E(180W), 90N
瓦片四边坐标
numTiles(z){
return abs(pow(2,z));
}
latEdges_N(y,z){
n = numTiles(z);
unit = 360 / n;
lat1 = 90 - y * unit;
return lat1;
}
latEdges_S(y,z){
n = numTiles(z);
unit = 360 / n;
lat1 = 90 - y * unit;
lat2 = lat1 - unit;
return lat2;
}
lonEdges_W(x,z){
n = numTiles(z);
unit = 360 / n;
lon1 = -180 + x * unit;
return lon1;
}
lonEdges_E(x,z){
n = numTiles(z);
unit = 360 / n;
lon1 = -180 + x * unit;
lon2 = lon1 + unit;
return lon2;
}
增加了经纬度等间隔投影 msGeoLatlong,这种投影方式同级别比墨卡托的瓦片少一半,低级别时可以看出来,使用多级图源方式转为墨卡托投影会有一些变形
谢谢LZ的努力. 分省天地图现在可以显示.
问题:
1. MapSpaceType=msGeoLalong (bsh / xml 图源) 不能输出地图册.
Error: Map incompatible with atlas format. The selected atlas output format "OziExplorer (PNG & MAP)" does not support the map source "...".
试过不同的地图册格式: MBTiles Sqlite. OruxMaps Sqlite, OziExplorer PNG, Paper Map PNG
2. 地图册类型=MBTiles / OruxMaps Sqlite, 图片转换 (Layer settings: custom tile processing): PNG 256 / 16 colors
Error: This image format is requires addition lib to be installed: JAI Lib (jai_core.jar & jai_codec.jar)
jai_core.jar & jai_codec.jar 以经装妥. 标准mobac没有问题.
3. 相同的瓦片坐标, 不同的投影下的经纬坐标会相距很远. 在转换不同投影的图源时 (MapSpace, Geo <-> web mercator),
mobac 会显示相同瓦片坐标的地图. 所以会出现下列情况:
web mercator -> Geo 深圳 -> 南极
Geo -> web mercator 深圳 -> 北冰洋
不知在转换不同投影的图源时能否显示相同经纬坐标的地图 (而不是相同的瓦片坐标).
4. 这是标准 mobac 的问题. mobac 不能输出透明的 Oziexplorer PNG 地图. 例如地名标注图层 (通常是 PNG+alpha).
mobac 可以输出透明的 Paper map PNG, 但 Paper map PNG 没有坐标资料.
1、目前暂时是这样,要输出的话创建一个多层图源,在多层图源设置<forceMercator>true</forceMercator>,后续再考虑直接输出;
2、原版都没带有jai_*.jar文件,我就去掉了classpath定义,原来是有用的,临时解决可以使用WinRar打开原版的Mobile_Atlas_Creator.jar文件,解压缩里面的META-INF\MANIFEST.MF文件,再用WinRar打开ext版的jar文件,把MANIFEST.MF拖进去替换掉,后面发布新的包就会包含这些内容了;
3、投影转换使用瓦片线性缩放方式,具体步骤是:确定目标投影瓦片编号 - 取目标投影对应的四边经纬度 - 根据经纬度获取在源投影上的瓦片(一般为4片) - 抽取经纬度矩形内的图像 - 线性缩放到目标图源的瓦片上。由于采用简单线性缩放方式,理论上这种投影变换是有畸变的,在低分辨率时尤为明显,可以按第1点的方式做一个全国天地图,看看第2级就会发现,但在高分辨率下瓦片纬度差很小,畸变小于一个像素就相等于没有畸变了;
4、这个问题我也发现了,mobac使用字节流输出ozi文件,不支持alpha通道,这种方式可以输出超大的文件,而Paper map PNG是直接输出图片的,因此可以包含alpha通道的数据,目前暂时没有好办法解决,折衷方案倒还有,比如在Paper map同时输出一个map文件。
水浸街,塞翁都是膜拜的大神,原本以为归隐山林了,现在水出来了,我等技术白痴习惯用大神们辛勤劳动成果的终于可以有机会跟上学习和提高了。。。。
原来是塞翁,难怪
好东西,积极测试
试用看看,做地图越来越方便了,感谢大神们
高手!
等待成果!
值得一试,尤其是后期的支持矢量图能把速度大幅提高,值得期待
这个得试试,谢谢奉献
水仙能做个安卓版本的MOBAC不?:woot:
安卓版没什么意义吧,而且OruxMaps也能下地图
主要是能下各种格式,图源也多,没电脑在身边的就方便了。