11
votes

Forcer mapkit Utiliser des carreaux de carte mis en cache seulement / désactiver le réseau par programme

Nous avons trébuché sur un tel problème.

Nous développons une demande de voyage. Pour vous assurer que l'utilisateur ne dépense pas beaucoup d'argent sur des frais d'itinérance dans notre application, nous avons décidé de mettre en œuvre une option de paramètres pour l'utilisateur de visualiser uniquement des cartes en cache. Nous avons donc laissé l'utilisateur décider s'il souhaite charger les cartes d'Internet ou souhaiter économiser de l'argent et afficher des cartes en cache (stockées dans la bibliothèque / caches / maptiles / maptiles.sqlittedb).

Nous ne pouvons pas trouver un moyen de mettre en œuvre cela. Y a-t-il un moyen de désactiver le réseau par programme dans ce cas? Ou forcer mapkit utiliser des carreaux mis en cache seulement? Nous avons réfléchi à la modification de l'APN de manière programmatique pour cette option pour obliger MapKit Go Offline. Est-il possible de changer APN Programmatiquement?

Merci!


0 commentaires

4 Réponses :


4
votes

Les applications SDK iPhone n'a pas accès aux paramètres de l'adaptateur réseau et je ne connais rien dans l'API Mapkit qui vous permet de contrôler son utilisation d'Internet. Votre meilleure option dans ce cas est probablement de présenter une alerte suggérant que l'utilisateur active le mode avion ou désactiver les données d'itinérance des données.


1 commentaires

En fait, iPhone SDK dispose d'une API d'accessibilité qui est utile lorsque vous devez savoir si la mise en réseau est accessible.



-1
votes

L'application Google Map indique la fonctionnalité de cache ... Cartekit semble non, je pense que Apple ajoutera cette fonctionnalité dans la version suivante SDK ...


3 commentaires

En fait, nous sommes en mesure de visualiser les tuiles de carte mis en cache dans notre application sans connexion réseau. Le problème est que nous ne pouvons pas mettre en œuvre une situation dans laquelle un utilisateur définit "mode hors ligne". Lorsque cette option est sélectionnée, nous devons afficher des carrelages de carte mis en cache, même s'il existe une connexion réseau. Nous devons donc forcer mapkit utiliser des carreaux mis en cache et ne pas aller en ligne. THX


Peut-être est-il possible de modifier les paramètres APN lorsque nous essayons de charger la carte lorsque nous ne sommes pas autorisés. De cette façon, l'application ne pourra pas aller en ligne et sera forcée d'utiliser la DB locale.


Lorsque l'application n'a aucune connexion réseau, elle apportera des carreaux de carte mis en cache du dossier local. Donc, pas besoin de modifier le code - suivez la documentation d'Apple :)



2
votes

utiliser openstreetmap Pensez que le côté commercial de celui-ci nuageux permet aux cartes hors ligne

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

bibliothèques qui aident les développeurs iPhone utilisent des cartes OSM Route-Me est une bibliothèque open source utilisée dans plusieurs applications iPhone pour afficher des cartes OSM. La bibliothèque de cartes iPhone CloudMade est une bibliothèque open-source qui offre un accès de haut niveau aux tuiles de carte à base d'OSM de Cloudmade avec des tailles différentes et des styles différents. John McKerrell a porté l'algorithme de routage de Gosmore pour exécuter sur l'iPhone et a généré avec succès des itinéraires de base. Des itinéraires plus compliqués écrasent l'iPhone au moment où


2 commentaires

CloudMade vous permettra de cacher leurs tuiles dans l'application (à l'aide du système de tuiles Mercator), mais cela n'est pas encore pris en charge par l'API et vous devez écrire la fonctionnalité pour le faire vous-même (pour l'instant).


Dunno Si je voudrais aller avec des nuages ​​.. Découvrez pourquoi Stackoverflow.com/ Questions / 7928199 / ...



0
votes

Il y a des moyens. L'une est d'utiliser votre propre superposition de carreaux et de mettre en œuvre l'algorithme de mise en cache dans l'urlfortilepath: ou dans LoadTileatPath: Résultat:

Cela fonctionne très bien avec le domaine ouvert et certains privés. Ne cache pas les cartes Apple standard.

Une autre façon qui sera capable de mettre en cache tout est la sous-classe Nsurlprotocol. Il y a des tutoriels et vous pouvez probablement détecter quand une image de carte et agir en conséquence


0 commentaires