2009-12-24 6 views
11

Natknęliśmy się na taki problem.Wymuś MapKit użyj tylko buforowanych kafelków mapy/wyłącz programowo programowo

Opracowujemy aplikację do podróży. Aby upewnić się, że użytkownik nie wydaje dużo pieniędzy na opłaty roamingowe w naszej aplikacji, zdecydowaliśmy się zaimplementować opcję ustawień dla użytkownika, aby wyświetlić tylko mapy w pamięci podręcznej. Pozwalamy więc użytkownikowi zdecydować, czy chce on załadować mapy z Internetu, czy też chce zaoszczędzić pieniądze i przeglądać zapisane w pamięci podręcznej mapy (przechowywane w Library/Caches/MapTiles/MapTiles.sqlitedb).

Nie możemy znaleźć sposobu na wdrożenie tego. Czy jest jakiś sposób, aby wyłączyć programowo programowo w tym przypadku? Lub wymusić użycie MapKit tylko w zbuforowanych kaflach? Pomyśleliśmy o programowej zmianie APN dla tej opcji, aby wymusić MapKit w trybie offline. Czy programowo można zmieniać APN?

Dziękujemy!

Odpowiedz

4

Aplikacje iPhone SDK nie mają dostępu do ustawień karty sieciowej i nic nie wiem w interfejsie API MapKit, który zapewnia kontrolę nad wykorzystaniem Internetu. Najlepszym rozwiązaniem w tym przypadku jest prawdopodobnie wysłanie alertu sugerującego, że użytkownik włącza tryb samolotowy lub wyłącza roaming danych.

+0

W rzeczywistości iphone sdk ma interfejs osiągalności, który jest przydatny, gdy musisz wiedzieć, czy dostęp do sieci jest możliwy. – asdf

-1

mapa google app ma funkcja cache ... MapKit wydawać nie, myślę, że Apple będzie dodanie tej funkcji w kolejnej wersji SDK ...

+0

W rzeczywistości jesteśmy w stanie wyświetlić buforowane kafelki mapy w naszej aplikacji bez połączenia sieciowego. Problem polega na tym, że nie możemy zaimplementować sytuacji, w której użytkownik ustawia "tryb offline". Po wybraniu tej opcji musimy wyświetlić buforowane kafelki mapy, nawet jeśli istnieje połączenie sieciowe. Musimy więc zmusić MapKit do użycia buforowanych kafli i NIE przejść do trybu online. Thx –

+0

Może w jakiś sposób można zmienić ustawienia APN, gdy próbujemy załadować mapę, gdy nie wolno nam. W ten sposób aplikacja nie będzie mogła przejść do trybu online i będzie zmuszona do korzystania z lokalnej bazy danych. –

+0

Myślę, że Google zabrania korzystania z mapy offline – CiNN

2

użycie OpenStreetMap myśleć strona komercyjna nim Chmura robione pozwala mapy offline

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

bibliotek, które pomagają deweloperom iPhone użyć OSM Maps trasa-me jest biblioteka open-source wykorzystywane w szeregu aplikacji iPhone do wyświetlania mapy OSM. Biblioteka map chmurowych CloudMade jest biblioteką o otwartym kodzie źródłowym, która zapewnia wysoki poziom dostępu do płytek map opartych na OSM CloudMade o różnych rozmiarach i różnych stylach. John McKerrell zaimplementował algorytm routingu z gosmore do uruchomienia na iPhonie i pomyślnie wygenerował podstawowe trasy. Bardziej skomplikowane trasy powodują awarię iPhone'a w tej chwili:

+0

Cloudmade pozwoli Ci na buforowanie ich kafelków w aplikacji (przy użyciu systemu kafelków mercator), jednak nie jest to jeszcze obsługiwane przez API i musisz napisz funkcjonalność, aby zrobić to samemu (na razie). – Willster

+0

Nie wiem, czy bym z Cloud-made. Sprawdź, dlaczego http://stackoverflow.com/questions/7928199/cloudmade-status#comment11002846_7928199 – HurkNburkS

0

Istnieje kilka sposobów. Jedną z nich jest użycie własnej nakładki i implementacja algorytmu buforowania w URLForTilePath: lub w loadTileAtPath: wynik:

Działa bardzo dobrze z otwartą domeną i niektórymi prywatnymi. Nie buforuje standardowych map Apple.

Innym sposobem, który będzie w stanie buforować wszystko, jest podklasa NSURLProtocol. Istnieje kilka samouczków i prawdopodobnie możesz wykryć, kiedy jest obraz mapy i odpowiednio działać