Force MapKit использует кеш-карту только для кэширования/отключает сеть программно

Мы столкнулись с такой проблемой.

Мы разрабатываем приложение для путешествий. Чтобы убедиться, что пользователь не тратит много денег на оплату роуминга в нашем приложении, мы решили реализовать параметр настроек, позволяющий пользователю просматривать только кешированные карты. Поэтому мы разрешаем пользователю решить, хочет ли он загружать карты из Интернета, или он хочет сэкономить деньги и просматривать кэшированные карты (хранятся в библиотеке/кэшах/MapTiles/MapTiles.sqlitedb).

Мы не можем найти способ реализовать это. Есть ли способ отключить сеть программно в этом случае? Или заставить MapKit использовать только кешированные плитки? Мы думали об изменении APN программно для этого параметра, чтобы заставить MapKit выйти в автономный режим. Можно ли программно изменить APN?

Спасибо!

Ответ 1

Приложения iPhone SDK не имеют доступа к настройкам сетевого адаптера, и я ничего не знаю в API MapKit, который дает вам контроль над его использованием в Интернете. Ваш лучший вариант в этом случае, вероятно, представляет предупреждение о том, что пользователь активирует режим полета или отключает роуминг данных.

Ответ 2

использовать openstreetmap думаю, коммерческая сторона этого Cloud-made позволяет офлайн-карты

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

Библиотеки, которые помогают разработчикам iPhone использовать карты OSM route-me - это библиотека с открытым исходным кодом, используемая в ряде приложений iPhone для отображения карт OSM. Библиотека карт iPhone CloudMade представляет собой библиотеку с открытым исходным кодом, которая обеспечивает высокоуровневый доступ к плитам на основе CloudMade OSM с различными размерами и разными стилями. Джон МакКеррелл портировал алгоритм маршрутизации из gosmore для запуска на iPhone и успешно сгенерировал основные маршруты. Более сложные маршруты разбивают iPhone на данный момент

Ответ 3

Есть несколько способов. Один из них заключается в использовании собственного наложения на плитки и реализации алгоритма кэширования либо в URLForTilePath: либо в loadTileAtPath: result:

Он отлично работает с открытым доменом и некоторыми частными. Не кэширует стандартные карты Apple.

Другим способом, который сможет кэшировать все, является подкласс NSURLProtocol. Есть несколько руководств и, вероятно, вы можете обнаружить, когда изображение карты и действовать соответственно.

Ответ 4

приложение google map использует функцию кеша... MapKit кажется нет, я думаю, что Apple добавит эту функцию в следующую версию SDK...