iPhone4离线地图制作

 

 

最近自己制作了几个iphone4使用的离线地图,总结一下经验:

 

1. 原始地图下载

使用Global Map Download Tool 下载,网上教程很多。

 

2. 转为iPhone格式

使用GMDL的‘->iPhone' 功能,选择firmware2.2 & 3,生成MapTiles.sqlitedb。

 

3. 转为iPhone4格式

使用Mapv4v5Converter转为iPhone4格式,生成新的MapTiles.sqlitedb。

对于iPhone4,iOS4.2.1,此时生成的MapTiles.sqlitedb的version信息是不对的(郁闷)。

由iPhone4地图应用自身产生的MapTiles.sqlitedb的version表是这样的:

$sqlite3 MapTiles.sqlitedb

 

SQLite version 3.6.23.2
Enter ".help" for instructions
sqlite> select * from version;
11|zh_CN
-32519|

sqlite>

 

而由Mapv4v5Converter生成的MapTiles.sqlitedb是这样的:

$sqlite3 MapTiles.sqlitedb

 

SQLite version 3.6.23.2
Enter ".help" for instructions
sqlite> select * from version;
10|zh_CN
0|

sqlite>

 

其中的locale,即zh_CN也有可能是其他的值。因此,需要将这个表改为与原来一样

sqlite> update version set version=-32519 where version=0;
sqlite> update version set locale='zh_CN' where version=10;

sqlite> update version set version='11' where version=10;

 

sqlite3可以在iPhone上装,也可以在PC上装。

 

4. 地图初始点

需要用com.apple.Maps.plist确定初始视点。使用经纬度查询工具确定地图中心点即可。

从iPhone4的/var/mobile/Library/Preferences目录下下载com.apple.Maps.plist,使用

plist文件编辑工具,改为下面内容即可(其中的Latitude和Longitude是北京的经纬度,应替换为

地图城市中心的经纬度):

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>LastViewMode</key>
    <integer>0</integer>
    <key>LastViewedLatitude</key>
    <real>39.908711</real>
    <key>LastViewedLongitude</key>
    <real>116.397506</real>
    <key>LastViewedZoomScale</key>
    <real>11</real>
</dict>
</plist>

 

5. 地图安装

与每个地图相关的文件只有MapTiles.sqlitedb和com.apple.Maps.plist,它们的分别在:

/var/mobile/Library/Caches/Maps/MapTiles 和 /var/mobile/Library/Preferences 路径下。

因此,只要将制作好的文件上传到以上路径下即可。注意这两个文件的权限应为644,用户/组为mobile/mobile

(chmod 644 FILE; chown mobile:mobile FILE)。

 

6. 多地图管理

由于iPhone只能使用一个地图文件,因此管理多个离线地图比较麻烦。

offlinemaps采用的方式是将地图文件放在/var/mobile/Media/Maps目录下,切换地图是复制到目标目录。

当然最直接的想法是创建符号链接到目标目录下,但经过实验发现不好使(原因不明)。

但是,如果在/var/mobile/Library/Caches/Maps/MapTiles目录下创建目录放置地图文件,

然后创建符号链接到该目录下,则不会有问题。因此,可以在/var/mobile/Library/Caches/Maps/MapTiles目录下

创建不同的目录,如Beijing,Harbin,放置MapTiles.sqlitedb和com.apple.Maps.plist。

需要使用离线地图时,使用iFile为MapTiles.sqlitedb创建符号链接到/var/mobile/Library/Caches/Maps/MapTiles目录下,

并将com.apple.Maps.plist复制到/var/mobile/Library/Preferences 目录下即可。

 

7. 在线 - 离线切换

如果在在线状态下使用离线地图,地图应用会修改MapTiles.sqlitedb,

产生sqlitedb的journal文件(原因不明),导致反应迟缓,甚至崩溃(Shame!)。

因此尽量不要在在线状态使用离线地图。只需删掉指向MapTiles.sqlitedb的符号链接即可。

此时地图应用会产生新的MapTiles.sqlitedb。

 

8. 自动化

我不会iPhone应用开发,希望能有高人将上述方法实现为应用就最好了。

既然offlinemaps是python脚本程序,搞搞这些应该很简单啊,

不明白老大们为啥非得copy地图,期待能搞个好用的东西出来造福群众啊。


注:

1. Map Enhancer在iPhone4上不好使。

2. iphoneofflinemaps只能copy(orz),多占一倍空间,不爽。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值