2009-12-24 7 views
11

Ci siamo imbattuti in un problema del genere.Forza MapKit usa solo le tessere della mappa memorizzate nella cache/disabilita la rete a livello di programmazione

Stiamo sviluppando un'applicazione per il viaggio. Per assicurarci che l'utente non spenda molti soldi per i costi di roaming nella nostra app, abbiamo deciso di implementare un'opzione di impostazioni per consentire all'utente di visualizzare solo le mappe memorizzate nella cache. Quindi permettiamo all'utente di decidere se caricare le mappe da internet o se vuole risparmiare denaro e visualizzare le mappe memorizzate nella cache (memorizzate in Libreria/Cache/MapTiles/MapTiles.sqlitedb).

Non riusciamo a trovare un modo per implementarlo. C'è un modo per disabilitare la rete in modo programmatico in questo caso? O forza che MapKit usi solo le tessere memorizzate nella cache? Abbiamo pensato di modificare APN in modo programmatico per questa opzione per forzare MapKit ad andare offline. È possibile modificare APN al livello di programmazione?

Grazie!

risposta

4

Le app di iPhone SDK non hanno accesso alle impostazioni della scheda di rete e non conosco nulla dell'API MapKit che ti dà il controllo sull'utilizzo di Internet. L'opzione migliore in questo caso è probabilmente quella di presentare un avviso che suggerisca all'utente di abilitare la modalità aereo o disattivare il roaming dati.

+0

In realtà iphone sdk ha api raggiungibilità che è utile quando è necessario sapere se la rete è accessibile. – asdf

-1

mappa app Google fa la funzionalità di cache ... MapKit sembra no, penso che Apple aggiungerà questa funzione in prossima versione SDK ...

+0

In realtà siamo in grado di visualizzare i riquadri della mappa memorizzati nella cache nella nostra app senza connessione di rete. Il problema è che non possiamo implementare una situazione in cui un utente imposta "modalità offline". Quando questa opzione è selezionata, è necessario visualizzare i riquadri della mappa memorizzati nella cache, anche se esiste una connessione di rete. Quindi dobbiamo forzare MapKit ad usare le tessere memorizzate nella cache e NON andare online. Thx –

+0

Forse è in qualche modo possibile modificare le impostazioni APN quando proviamo a caricare la mappa quando non ci è permesso. In questo modo l'app non sarà in grado di andare online e sarà costretta a utilizzare il DB locale. –

+0

Penso che Google ti proibisca di utilizzare la sua mappa offline – CiNN

2

uso OpenStreetMap credo che il lato commerciale di esso Cloud-fatto permette mappe offline

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

biblioteche che aiutano gli sviluppatori di iPhone utilizzano le mappe OSM route-me è una libreria open-source utilizzato in una serie di applicazioni per iPhone per visualizzare le mappe OSM. La Libreria mappe di CloudMade per iPhone è una libreria open source che fornisce accesso ad alto livello alle tessere mappa basate su OSM di CloudMade con diverse dimensioni e stili diversi. John McKerrell ha eseguito il porting dell'algoritmo di routing da gosmore per l'esecuzione su iPhone e ha generato correttamente percorsi di base. Percorsi più complicati si bloccano l'iPhone al momento

+0

Cloudmade ti permetterà di mettere in cache le tessere nell'applicazione (usando il sistema di tessere mercator), tuttavia questo non è ancora supportato dall'API e devi scrivi la funzionalità per farlo da solo (per ora). – Willster

+0

non so se andrei con Cloud-made .. controlla perché http://stackoverflow.com/questions/7928199/cloudmade-status#comment11002846_7928199 – HurkNburkS

0

Ci sono alcuni modi. Uno è quello di utilizzare la propria sovrapposizione di tile e implementare l'algoritmo di caching in URLForTilePath: o in loadTileAtPath: risultato:

Funziona molto bene con dominio aperto e alcuni privati. Non memorizza nella cache le mappe standard di Apple.

Un altro modo per memorizzare tutto è la sottoclasse NSURLProtocol. Ci sono alcuni tutorial e probabilmente puoi scoprire quando è un'immagine della mappa e agire di conseguenza