强制MapKit仅使用缓存的地图图块/以编程方式禁用网络

时间:2009-12-24 18:02:56

标签: iphone google-maps mapkit mkmapview

我们偶然发现了这样的问题。

我们正在开发旅行应用程序。为了确保用户不会在我们的应用程序中花费太多钱来漫游费用,我们决定为用户实现一个设置选项,仅用于查看缓存的地图。因此,我们让用户决定是否要从互联网加载地图,或者他想省钱并查看缓存地图(存储在Library / Caches / MapTiles / MapTiles.sqlitedb中)。

我们找不到实现此方法的方法。在这种情况下,有没有办法以编程方式禁用网络?或者强制MapKit仅使用缓存切片?我们考虑过以编程方式为此选项更改APN以强制MapKit脱机。是否可以通过编程方式更改APN?

谢谢!

4 个答案:

答案 0 :(得分:4)

iPhone SDK应用程序无法访问网络适配器设置,我在MapKit API中一无所知,可以控制其Internet使用情况。在这种情况下,您最好的选择可能是提示用户启用飞行模式或关闭数据漫游的警报。

答案 1 :(得分:2)

使用openstreetmap 认为它的商业方面Cloud-made允许离线地图

http://developers.cloudmade.com/projects/show/iphone-sdk

帮助iPhone开发人员使用OSM地图的库 route-me是一个开源库,用于许多iPhone应用程序以显示OSM地图。 CloudMade iPhone Maps Library是一个开源库,提供对CloudMade基于OSM的地图图块的高级访问,这些图块具有不同的大小和不同的样式。 John McKerrell已经将路由算法从gosmore移植到iPhone上运行并成功生成了基本路由。目前更复杂的路线让iPhone崩溃

答案 2 :(得分:0)

有一些方法。一种是使用自己的tile overlay并在URLForTilePath:或loadTileAtPath中实现缓存算法:result:

它适用于开放域和一些私有域。不缓存标准Apple Maps。

另一种能够缓存所有内容的方法是子类NSURLProtocol。有一些教程,你可能会检测到什么时候是地图图像并采取相应的行动

答案 3 :(得分:-1)

谷歌地图应用程序执行缓存功能... MapKit似乎没有,我认为Apple会在下一版SDK中添加此功能......