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...