大家都知道Mobile Atlas Creator可以非常方便抓取各种地图,但是在1.9版后改版了,官方取消了很多地图资源(包括Google Maps和Google Ditu),以前也玩过一段离线地图(当时为了川藏还制作了一份G318离线地图,上路才知道,这条道哪要得着图啊...呵呵~)
说正题,1.9版后虽然取消很多地图,但是提供了自定义,也就是你只要能提供各个地图图源的地址(貌似都是通用标准的),就可以“挂”上去,可以任意抓取后制作离线地图(虽然OruxMaps手机版也可以抓离线了,但是速度很慢,而且会丢失瓦片残缺好像..)
最开始我也不知道,是Google到对岸的帖子发现,原帖地址http://tomliu888.blogspot.com/2012/09/mobile-atlas-creator.html感谢原作者(需要fan-qiang),这里分享一下。
原理其实就是利用工具检测浏览器缓存,去拿到你正在浏览的在线地图的url,然后“拼装”成符合Mobile Atlas Creator的配置文件,这样就可以抓取你添加的离线地图了...
我用的是chrome浏览器
然后用chromecacheview查看图源地址
看到Google Ditu的地址为
http://mt0.google.cn/vt/lyrs=m@207000000&hl=zh-CN&gl=CN&src=app&x=416&y=222&z=9&s=Galile
"封装"成Mobile Atlas Creator的格式
http://mt0.google.cn/vt/lyrs=m@207000000&hl=zh-CN&gl=CN&src=app&x={$x}&y={$y}&z={$z}&s=Galile
所有的"&"替换成"&",x、y、z的坐标数据部分替换成{$x}、{$y}、{$z}
其他地图图源照此类推
按照官方格式保存成xxx.xml放到Mobile Atlas Creator的mapsources下就可以
官方格式
<?xml version="1.0" encoding="UTF-8"?>
<customMapSource>
<name>google maps cn</name>
<minZoom>0</minZoom>
<maxZoom>19</maxZoom>
<tileType>png</tileType>
<tileUpdate>None</tileUpdate>
<backgroundColor>#000000</backgroundColor>
</customMapSource>
昨晚试着抓取了MapABC的离线,非常的快,深圳宝安-肇庆市0-16级地图,满速抓取!
截图上速度统计错了,没那么快,大概是100~300K的速度抓取,也没有一个瓦片错误!
Mobile Atlas Creator的用法不熟悉的可以Google,这个方法完全可以抓取Google 地形、Google 卫星...等地图的离线。
如果需要其他地图地址,可发上来一起讨论,分享一下;
Google卫星
Google地形






附上弄好的地图配置文件,分别保存成xml文件,放到mapsources下就行
Google卫星可以到20级,但Google地形只有14级的图源,可惜了...
(如果在卫星和地形间连续抓取的话,记得清除一下浏览器缓存,不然会读取浏览器缓存里的同位置图源,也就是可能你选了卫星,但抓出来的是地形..)
Google地图
<?xml version="1.0" encoding="UTF-8"?>
<customMapSource>
<name>Google Ditu</name>
<minZoom>0</minZoom>
<maxZoom>18</maxZoom>
<tileType>png</tileType>
<tileUpdate>None</tileUpdate>
<url>http://mt0.google.cn/vt/lyrs=m@207000000&hl=zh-CN&gl=CN&src=app&x={$x}&y={$y}&z={$z}&s=Galile</url>
<backgroundColor>#000000</backgroundColor>
</customMapSource>
Google卫星+地名
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<customMultiLayerMapSource>
<name>Google 卫星</name>
<tileType>PNG</tileType>
<layers>
<customMapSource>
<name>Google 卫星图</name>
<minZoom>0</minZoom>
<maxZoom>20</maxZoom>
<tileType>PNG</tileType>
<tileUpdate>None</tileUpdate>
<url>http://mt0.google.cn/vt/lyrs=s@124&hl=zh-CN&gl=CN&src=app&x={$x}&s=&y={$y}&z={$z}&s=Galileo</url>
<backgroundColor>#000000</backgroundColor>
</customMapSource>
<customMapSource>
<name>Google 地名图</name>
<minZoom>0</minZoom>
<maxZoom>20</maxZoom>
<tileType>PNG</tileType>
<tileUpdate>None</tileUpdate>
<url>http://mt0.google.cn/vt/imgtp=png32&lyrs=h@207000000&hl=zh-CN&gl=CN&src=app&x={$x}&y={$y}&z={$z}&s=Galil</url>
</customMapSource>
</layers>
</customMultiLayerMapSource>
Google地形+地名
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<customMultiLayerMapSource>
<name>Google 地形</name>
<tileType>PNG</tileType>
<layers>
<customMapSource>
<name>Google 地形图</name>
<minZoom>0</minZoom>
<maxZoom>14</maxZoom>
<tileType>PNG</tileType>
<tileUpdate>None</tileUpdate>
<url>http://mt3.google.cn/vt/lyrs=t@130,r@207000000&hl=zh-CN&gl=CN&src=app&expIds=201363&x={$x}&s=&y={$y}&z={$z}&s=Galil</url>
<backgroundColor>#000000</backgroundColor>
</customMapSource>
<customMapSource>
<name>Google 地名图</name>
<minZoom>0</minZoom>
<maxZoom>20</maxZoom>
<tileType>PNG</tileType>
<tileUpdate>None</tileUpdate>
<url>http://mt0.google.cn/vt/imgtp=png32&lyrs=h@207000000&hl=zh-CN&gl=CN&src=app&x={$x}&y={$y}&z={$z}&s=Galil</url>
</customMapSource>
</layers>
</customMultiLayerMapSource>
这个卫星图有偏移,而且这两个图层合并之后的文件非常大,比1+1远远的大多了,不推荐。用Oruxmaps自带的Google Hybrid图源非常好,非常快!而且大小就是一个图层。设置如下:
<?xml version="1.0" encoding="UTF-8"?>
<customMapSource>
<name>Google Hybrid</name>
<minZoom>0</minZoom>
<maxZoom>20</maxZoom>
<tileType>png</tileType>
<tileUpdate>None</tileUpdate>
<url>http://mt0.google.com/vt/lyrs=s,m&hl=iw&x={$x}&y={$y}&z={$z}</url>
<backgroundColor>#000000</backgroundColor>
</customMapSource>
这个速度飞快,很好用!~
可惜就是国内没有POI信息啊—对面香港的就有。
楼主你好,我是个新手,请指教一下,我把你弄好的地图配置文件保存成了一个文件叫abcd.xml,放到了mapsources下,但是打开mobile ac后,从图原选项中却找不到abcd的图啊,请问楼主是什么原因啊。文件名有特殊的要求吗?
MapABC
<?xml version="1.0" encoding="UTF-8"?>
<customMapSource>
<name>MAPABC</name>
<minZoom>0</minZoom>
<maxZoom>18</maxZoom>
<tileType>png</tileType>
<tileUpdate>None</tileUpdate>
<url>http://webrd03.is.autonavi.com/appmaptile?x={$x}&y={$y}&z={$z}&lang=zh_cn&size=1&scale=1&style=7</url>
<backgroundColor>#000000</backgroundColor>
</customMapSource>
原帖作者抓的Nokia地图图源
<?xml version="1.0" encoding="UTF-8"?>
<customMapSource>
<name>Nokia Here Map</name>
<minZoom>0</minZoom>
<maxZoom>20</maxZoom>
<tileType>png</tileType>
<tileUpdate>IfNoneMatch</tileUpdate>
<url>http://1.maps.nlp.nokia.com/maptile/2.1/maptile/b9e8949142/normal.day/{$z}/{$x}/{$y}/256/png8?app_id=SqE1xcSngCd3m4a1zEGb&token=r0sR1DzqDkS6sDnh902FWQ&lg=CHI</url>
<backgroundColor>#000000</backgroundColor>
</customMapSource>
很不错啊,谢谢无私分享!
根据楼主的指引,添加了几个图源。
有几个问题:
1、我的win7系统不支持中文的地图名,可能是系统的设置总;
2、图源的脚本有几处小的错误,参考楼主的指引修改后才正常;
3、想加天地图,还没整明白,加不上;
4、其他不知道还有没有可用?
xml文件名必须英文名,里面的</name>标签随便
汗,全都错的,已修正..
你说的天地图的我刚才试了下,很奇怪,地址分别是
(地名)
http://tile0.tianditu.com/DataServer?T=tdt_vec_anno_dong_11_18_dyd&X=3344&Y=765&L=12&INDATE=9999-01-01%2000%3A00%3A00
(地图)
http://tile0.tianditu.com/DataServer?T=tdt_vec_dong_11_18_dyd&X=3344&Y=765&L=12&INDATE=9999-01-01%2000%3A00%3A00
但
填到MOBAC后就是不行,不管是用XML方式,还是官方另一种方式Bean Shell的脚本去加载,都是空白,不知道天地图是什么原因...
做了几个图确实不错,可惜有个图我做不了,能帮忙搞定吗http://map.enclive.cn/
这个海图很有趣. 可惜所用的投影不是web mercator, 而是跟天地图一样的经纬坐标.
感谢楼主无私分享。
菜鸟想问一下如何打开、编辑和保存为官方的xml文件,还请不吝指教。
用 notepad 儲成文字便可.
有點點小問題, Nokia 是 ok 的.
修正後便可以了 ...

把所有 "&" 修正為 "&"
謝謝樓主
嘿,我也是借花献佛的..
其实只是想简单的做个离线,然后放到OruxMaps,就非常完美了。。(就这样而已)
但我们的郭嘉...唉~
兄弟有什么最简单的方式,将MOBAC抓到的地图(任意格式),简单的一步纠偏吗?
实在非常喜欢OruxMaps...(在折多山垭口第一次拿来测海拔,跟队友1千多块的海拔表一样显示4000多海拔,误差个位数...对这软件无以言表的爱啊...)
目前用RMaps Ext挂着...(感觉这个国人移植的也是超赞,自带纠偏秒杀一切了,还带搜索路线,几乎完美...)
但还是期待OruxMaps....
能帮忙做个香港地政署地图的图源吗?
http://www1.map.gov.hk/gih3/view/index.jsp
搜狗地图按此方法怎么写呢?
尝试写了搜狗、百度和天地图的脚本,都不行,也许是没整明白。
Open Cycle Map ,已测试,可用:
=================================
<?xml version="1.0" encoding="UTF-8"?>
<customMapSource>
<name>Open Cycle Map</name>
<minZoom>1</minZoom>
<maxZoom>18</maxZoom>
<tileType>png</tileType>
<tileUpdate>IfNoneMatch</tileUpdate>
<url>http://tile.opencyclemap.org/cycle/{$z}/{$x}/{$y}.png</url>
<backgroundColor>#000000</backgroundColor>
</customMapSource>
soso卫星图不错,楼主帮测试一下,谢谢
经测试,OpenCycle Map 和 Google hybrid 做成图源生成ozi 离线地图后无偏移,直接可用。
谷歌地形(Google Terrian)、谷歌卫星图和谷歌地图(Google Ditu)都有偏移,需要校准后才能使用。
兄弟给力啊!
这个OpenCycle好像是50米的等高线吧...
比谷歌地形强多了..
不得不说,好东西啊,楼主辛苦了

好资料
谢谢
加天地圖 "tianditu.bsh" 就可以了. (檔是某高人的)
/**
Tianditu
**/
name = "TianDiTu";
tileType = "png"; // required; valid values: "jpg" "png" or "gif"
// Default size of each tile is 256x256 pixel
tileSize = 256; // optional
minZoom = 3; // optional
maxZoom = 18; // optional
//tileUpdate = TileUpdate.IfNoneMatch; //
Linear = 1;
tileUpdate = TileUpdate.IfModifiedSince; // optional
backgroundColor = "#ffffff"; // optional - supported since MOBAC 1.9.1
/**
This method is called for each tile: input parameters for this script: "zoom", "x" and "y"
**/
String getTileUrl( int zoom, int x, int y ) {
String url = "http://tile1.tianditu.com/DataServer?T=";
if(zoom > 12)
url += "siwei0608";
else
{
if(zoom > 10)
url +="B0627_EMap1112";
else
url += "A0512_EMap";
}
return url+"&X=" + x + "&Y=" + y + "&L=" + zoom;
//return "http://tile4.tianditu.com/DataServer?T=A0512_EMap&X=92&Y=17&L=7";
}
/**
This method is called also for each tile (implementation optional)
It allows to set HTTP headers like "Referer" or cookies the server
wants to see.
**/
void addHeaders( java.net.HttpURLConnection conn) {
//conn.addRequestProperty("Cookie","test=12345"
;
//conn.addRequestProperty("Referer","http://www.openstreetmap.org"
;
}
脚本确实可用,可以在mobac中打开,但生成的 ozi 地图确实严重偏移的。
我开始也试着用bsh的脚本弄,可惜没参透天地图的“规律”
想问一下写这个脚本的朋友怎么找到规则的啊?
比如上面>12、>10级时,怎么知道url会是B0627_EMap1112、A0512_EMap?
要是能告知就好了
这个BSH的脚本是他写的,可以发悄悄问他
http://www.doyouhike.net/forum/comm_nav//585383,0,0,1.html#88965095
几个情况解释下:
1、MOBAC抓图的时候离线包的名字只能用英文,等离线包生成以后,你就可以随便改英文名了;
2、不知道你们用OruxMaps的哪个版本,反正5.02版的支持任意地图校准,所以纠偏不是问题,最新5.04的肯定也可以;
3、天地图的其实也可以用,但是必须得把MOBAC的启动JAR文件替换成工兵版的(改了投影模式的好像),在湖北省路测,完美无飘移。但是替换以后这个MOBAC就是天地图专用的了,生成其它mapabc、google的就会偏出地球了。所以我是准备两套MOBAC,一个天地图图源专用,一个其它地图用……
搜狗地图非常好,楼主能否编辑一个搜狗地图的xml文件。自己尝试着做了,可是搜狗地图的地址看起来有些怪异,让人摸不着头脑。
谢谢,强帖啊!!^_^
soso卫星图不错,楼主帮一下,谢谢
感谢分享,学习了
楼主,缘分啊!我也是看的你说的那个链接学会的抓谷歌图源,最近成功试了好几个软件,包括oruxmaps、rmaps ext、osmand等等等等,在我的三星9300机器上均成功!
不过有几个问题和楼主以及其他成功的朋友们交流一下:
1.由于google maps是加偏图源,因此除了rmaps ext(国内rmaps的纠偏改版)外,其他国外的读图器读自己做的sqlite图均有偏移,如何在制作原图的时候就预加偏?
2.用mobac制作的google maps图源离线图,和安卓上的正宗谷歌地图软件中的图显示不一样(感觉后者是矢量图),哪里有后者的图源?
3.该问题是从2中引申过来的新问题,就是这些sqlite数据库图都无法在读图器上搜索,我感觉是不是矢量图就可以?或者,sqlite数据库图文件再加一个什么辅助文件就可以解决搜索问题?