2009-12-24 12 views
11

Hemos tropezado con un problema de este tipo.Force MapKit utiliza solo mosaicos de mapas almacenados en caché/deshabilita la red mediante programación

Estamos desarrollando una aplicación para viajar. Para asegurarnos de que el usuario no gaste mucho dinero en tarifas de itinerancia en nuestra aplicación, decidimos implementar una opción de configuración para que el usuario solo vea los mapas en caché. Entonces, dejamos que el usuario decida si quiere cargar los mapas desde Internet o si quiere ahorrar dinero y ver mapas en caché (almacenados en Library/Caches/MapTiles/MapTiles.sqlitedb).

No podemos encontrar una manera de implementar esto. ¿Hay alguna manera de deshabilitar la red mediante programación en este caso? ¿O obligar a MapKit a usar solo los mosaicos almacenados en caché? Pensamos en cambiar APN programáticamente para esta opción para forzar a MapKit a desconectarse. ¿Es posible cambiar APN programáticamente?

¡Gracias!

Respuesta

4

Las aplicaciones de iPhone SDK no tienen acceso a la configuración del adaptador de red, y no conozco nada en la API de MapKit que le dé control sobre su uso de Internet. Su mejor opción en este caso es probablemente presentar una alerta sugiriendo que el usuario habilite el modo avión o desactivar el roaming de datos.

+0

En realidad, iPhone sdk tiene una API de accesibilidad que es útil cuando necesita saber si se puede acceder a la red. – asdf

-1

el mapa aplicación Google hace la función de caché ... MapKit parece no, creo que Apple va a añadir esta característica en la próxima versión del SDK ...

+0

En realidad, podemos ver los mosaicos del mapa en caché en nuestra aplicación sin conexión a la red. El problema es que no podemos implementar una situación en la que un usuario configure el "modo fuera de línea". Cuando se selecciona esta opción, necesitamos mostrar mosaicos de mapas en caché, incluso si hay una conexión de red. Por lo tanto, debemos forzar a MapKit a utilizar los mosaicos almacenados en caché y NO a estar en línea. Thx –

+0

Quizás de alguna manera es posible cambiar la configuración de APN cuando intentamos cargar el mapa cuando no tenemos permiso. De esta forma, la aplicación no podrá conectarse en línea y se verá obligada a usar DB local. –

+0

Creo que Google le prohíbe usar su mapa sin conexión – CiNN

2

uso openstreetmap creo que el lado comercial de la que hizo en la nube permite mapas fuera de línea

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

bibliotecas que ayudan a los desarrolladores de iPhone usan mapas de OSM ruta-me es una biblioteca de código abierto utilizado en una serie de aplicaciones de iPhone para mostrar mapas de OSM. La biblioteca de mapas de iPhone de CloudMade es una biblioteca de código abierto que proporciona acceso de alto nivel a los mosaicos de mapas basados ​​en OSM de CloudMade con diferentes tamaños y estilos diferentes. John McKerrell ha portado el algoritmo de enrutamiento de gosmore para ejecutar en el iPhone y ha generado rutas básicas con éxito. Las rutas más complicadas bloquean el iPhone en el momento

+0

Cloudmade te permitirá guardar sus teselas en la aplicación (usando el sistema de mosaico Mercator), sin embargo, esto todavía no es compatible con la API y tienes que escriba la funcionalidad para hacerlo usted mismo (por ahora). – Willster

+0

no sé si me gustaría ir con Cloud-made ... echa un vistazo a por qué http://stackoverflow.com/questions/7928199/cloudmade-status#comment11002846_7928199 – HurkNburkS

0

Hay algunas formas. Una es usar su propia superposición de teselas e implementar el algoritmo de almacenamiento en caché en URLForTilePath: o en loadTileAtPath: resultado:

Funciona muy bien con dominio abierto y algunos privados. No almacena en caché los mapas estándar de Apple.

Otra forma en que se puede almacenar todo en caché es la subclase NSURLProtocol. Hay algunos tutoriales y probablemente pueda detectar cuándo es una imagen de mapa y actuar en consecuencia.

Cuestiones relacionadas