搜索
单车技术

共享 原创 离线地图制作以及导航——基于安卓系统——史上最齐(4月20日更新)

[复制链接] 查看:287428 | 回复:556
发表于 2013-5-24 11:05 111 只看该作者
qsccsqwar 发表于 2013-5-24 10:27 那你下载安装个adobeReader就行了,完全能看懂,我是每一步都截图了,需要的软件全部提供下载。 ...

好的,有空试试看,希望成功。
发表于 2013-5-24 22:11 112 只看该作者
一、什么是MOBAC图源

MOBAC软件前文已经讲过了,一个非常强大的地图下载程序。不过,是不是只能使用我提供给的那些图源进行下载呢?是不是如果服务器地址更新了,我提供的图源文件不能用了,那么就不能用MOBAC下载了呢?

当然不是了,MOBAC作为一个地图下载器,开发者给我们留足了接口,让我们去自己DIY

图源是什么?就是这个地图数据的来源。图源文件就是包含了这个地图服务器地址的一个文档,里面记载了地图的相关信息。通过这些信息,MOBAC程序可以构建出一个模拟的浏览器环境,根据你的浏览和下载,一片片的把瓦片(地图的每一个最小图像单位)下载下来,然后重组成一幅完整的离线地图。

接下来,见识一下图源文件的真面目,打开MOBAC主目录下的mapsources文件夹,里面的所有文件都是图源。如果你观察仔细的话,实际有两种,一种是XML格式的,另一种是BSH格式。XML是一种超文本语言,就是我们平时看的网页使用的语言,而BSH格式则是一种脚本语言。

共享 原创 离线地图制作以及导航——基于安卓系统——史上最齐(4月20日更新)

好了,我们随便找一个XML文件右击,点击编辑。即可用文本编辑器打开该文件。

共享 原创 离线地图制作以及导航——基于安卓系统——史上最齐(4月20日更新)

复杂么?不复杂,就是些固定格式的代码而已。

首先解释下这些代码,每一对“<>”里面包含的就是对应的参数,而每一个“<>”里面则是在描述这个参数的名称。

比如<name></name>就是一对,表示中间的信息是名称,也就是地图名称。同理,<minZoom></minZoom>也是一对,中间写的是最小缩放级别。

好了,一个一个分解下:

第一行,是说这个这是个XML文件,版本是1.0,编码方式是UTF-8,这里还得强调一下,如果保存的时候不是保存成UTF-8格式,那么不能显示中文。

第二行的<customMapSource>表明了图源信息的开始,直到</customMapSource>结束。

<name>是地图名称,也就是最终在MOBAC图源列表里显示的图源名称。

<minZoom>是地图缩放最小级别,对应的<maxZoom>则是最大缩放等级。

<tileType>是地图瓦片的格式,也就是图片类型,可以是PNGJPG等,下文会分析怎么知道这个是什么。

<url>是网址,也就是地图数据所在的服务器信息。

<serverParts>是如果网址有多个服务器,比如google1google2等,这个12就可以通过使用这样一个标记参数替代。

发表于 2013-5-24 22:13 113 只看该作者
本帖最后由 qsccsqwar 于 2013-5-24 22:29 编辑

二、制作图源-XML

在了解了XML文件的基础上。我们开始讲解怎么制作XML图源文件。恩?你想听BSH?这个最后说,不过不会详细讲解,因为这个作为一种脚本语言,需要你有一定的编程能力了,而如果你有编程能力,应该就不用我在这里叽歪,直接看,大概就能理解。

2.1 分析URL

做图源的第一步,就是要知道你的目标下载地图的网址,也就是URL。只有知道了这个,我们才能解析出地图所在的服务器,才能构建出语句,让程序去模拟浏览器打开,并按照顺序组织成地图。

说白了,MOBAC就相当于一个浏览器,不过它可以帮你检索你需要的每一个瓦片并下载。同时可以按照你需要的格式重新组织地图数据。

好了,我这里以360浏览器为例,讲解怎么获得URL

第一步,把冰箱门打开,呃,错了,把浏览器打开,恩,是浏览器。不是大杀器。接着转到谷歌地图。转到了么?没有?怎么会没有呢?没有点击这个位置的前4句话中的谷歌地图四个字。

共享 原创 离线地图制作以及导航——基于安卓系统——史上最齐(4月20日更新)

什么?你的360不长这样?没关系,这个和长相无关。在浏览器地图窗口随便找一个地方。

如果你想下载道路数据,这边浏览的时候就浏览道路数据,如果你想下载卫星图,则这里浏览卫星图,右上角那个卫星两个字切换。

再非地图区域右击>审查元素:

共享 原创 离线地图制作以及导航——基于安卓系统——史上最齐(4月20日更新)

点击ResourcesFrames(https://....)images,往下拉,随便找一个图,点击,看看上面是不是显示的是某个区域的地图块?

共享 原创 离线地图制作以及导航——基于安卓系统——史上最齐(4月20日更新)


发表于 2013-5-24 22:14 114 只看该作者
本帖最后由 qsccsqwar 于 2013-5-24 22:29 编辑

好了,恭喜你,这样就找到了瓦片的URL了。在哪?就是下面URL冒号后面的。点击后可以打开,然后在地址栏把那个网址复制出来:

https://mt3.google.cn/vt/lyrs=m@216000000&hl=zh-CN&gl=CN&src=app&x=103&y=52&z=7&s=G

我们看,首先前半部分,mt3,这个3很可能就有几个替换选项。多看几个URL,这个3可以换成什么,大概应该是0-4.

@后面是版本号,往后看看到hl=zh-CN,表示的是这个图是对应中国大陆,如果是zh-TW,就是中国台湾,如果是zh-EN,就是英文显示了。再后面x=y=z=,这表示了这幅图的三个参数,X/Y值,也就是标准坐标值,以及缩放参数。

这种URL是标准的WMS格式。但是不是所有的网络地图都是这种定位模式,如果不是,我们一般就得采用更高级的BSH脚本来进行URL生成。

这里还有个信息:

共享 原创 离线地图制作以及导航——基于安卓系统——史上最齐(4月20日更新)

注意到MIME type后面的image/png么?这个就表明了瓦片是PNG格式的图片。

2.2 修改成MOBAC接受的URL代码

获得了URL,我们需要将这个URL修改成自己的代码。怎么改,简单,这句话:

https://mt3.google.cn/vt/lyrs=m@216000000&hl=zh-CN&gl=CN&src=app&x=103&y=52&z=7&s=G

需要修改成:

https://mt{$serverpart}.google.cn/vt/lyrs=m@216000000&hl=zh-CN&gl=CN&src=app&x={$x}&y={$y}&z={$z}&s=G

这里注意,如果你的URL外面的代码,也就是网址外面没有:

![CDATA[]]>的话,则需要把所有的&替换成&否则MOBAC不认。

2.3 构建自己的XML文件

将下面代码复制到一个新建的空白记事本文档里面:

?xml version="1.0" encoding="UTF-8"?


customMapSource


name你自己的地图名/name


minZoom0/minZoom


maxZoom18/maxZoom


tileTypePNG/tileType


tileUpdateNone/tileUpdate


url><![CDATA[改好的网址]]></url


serverParts0 1 2 3/serverParts

/customMapSource

将我所有标明红色的部分按照你的地图进行修改。

全部做好后,点击记事本>文件>另存为,设置如下:

共享 原创 离线地图制作以及导航——基于安卓系统——史上最齐(4月20日更新)

文件名,随便起一个,注意加上.xml,否则保存出来是.txt,这个程序是不认识的。

保存类型选择所有类型,才能更好的保存xml,下面这个编码,记着一定要选UTF-8,否则,你的图源名字就不能使用汉语。

全部做好后,把保存好的xml文件复制到MOBACmapsources文件夹下面,重启MOBAC,你便看见你新制作的图源,即可使用你自己的图源浏览和下载。

2.4 其他

不是所有的网络地图都是这种WMS编码格式的,比如百度地图,我们解析URL

随手找了一个:

https://shangetu4.map.bdimg.com/it/u=x=773;y=251;z=12;v=015;type=web&fm=44&udt=20130506

这个呢,仔细看,多了一个参数。实际上除了百度,搜狗地图的URL更为复杂。他们不是采用标准的WMS编码,而是采用了某条纬线为横轴,然后确定XY的位置,同时这些地图供应商更狠,为了方式别人抓取地图,还在标准国家加偏的基础上,按照自己的算法进行了二次加偏。这样,我们即便下载了百度地图,用于导航,那估计都不仅仅是火星坐标了,可能都该出太阳系了。

XML文件还有一个更高级的用法,就是叠层。最好的示例,在MOBAC图源文件夹下面找到:TianDitu 2.0这个,右键编辑查看。

应该会注意到,名称出现了3次,第一个是图源名称,第二个和第三个分别是这个图层保存的文件夹名称,这个对应文件夹在MOBAC对应的tilestore文件夹下面。

第二个名称对应的URL是底图,也就是显示在下面的不透明图层。而第三个名称对应的URL是地标层,也就是一个透明图层,叠加在不透明的底图上的图层。

利用这个,我们可以把自己的路径做成透明的图层直接叠加到不透明的底图上完成下载。同样可以把一些好的透明地标叠加到不同的底图上,做成更好的地图资源。

这里需要注意,就是偏移的透明地标层只能叠加偏移的底图,非偏移的底图只能使用非偏移的地标层。

好了,这一讲关于MOBAC的使用就这些了。至于BSH,脚本代码,其实不难,难的是如何解析出你想下载的地图的编码算法。

2人 评分 查看全部评分
  • 实名认证
  • Magical茏
2人点评 收起
发表于 2013-5-24 22:23 115 只看该作者
本帖最后由 qsccsqwar 于 2013-5-24 22:32 编辑

本楼本来是因为之前发的带有代码的必须审核,不知到能否通过,上传了图片文档,结果通过了,所以本楼图片删除。
发表于 2013-5-27 00:16 116 只看该作者
很强大,顶啊!
发表于 2013-5-30 13:31 117 只看该作者
支持楼主
发表于 2013-5-30 21:04 118 只看该作者
强帖,先顶再看
发表于 2013-5-31 14:25 119 只看该作者
强大,顶楼主,感谢分享
发表于 2013-7-15 23:03 120 只看该作者
牛人,学习,再学习,还刚入门呢
你需要登录后才可以回帖 登录 | 注册 |