2012-10-19 13 views
9

Obecnie pracuję nad projektem szkolnym i staram się poznać techniki pobierania kafelków mapy OSM do pamięci lokalnej/pamięci podręcznej telefonu, aby użytkownicy mogli wyświetlać mapy w trybie offline .Pobieranie określonych map do pamięci podręcznej w OSMDroid

Dokonuje się tego, podając konkretną lokalizację, a kafelki mapy, które znajdują się w określonym promieniu/odległości od miejsca zostaną pobrane do pamięci telefonu (gdy jest połączenie internetowe) do wyświetlania w trybie offline.

Mam jednak niewielkie problemy ze zrozumieniem interfejsów API OSMDroid. Z mojego zrozumienia, wydaje się, że klasy zaangażowane są:

Proszę mnie poprawić jeśli się mylę.

Ponadto, w MapTileBase (co moim zdaniem jest dostawcą), getMapTile zwraca android.graphics.drawable.Drawable.

Czy ta klasa Drawable jest powiązana z koncepcją wyświetlania mapy offline?

nadzieję, że ktoś może mnie oświecić, gdzie dokładnie mapy są powołani, aby być pobierane do pamięci telefonu, i jak możemy edytować mapy do wyświetlania elementów interfejsu, takich jak szlaki, szpilki itp

+1

możliwe duplikat [mapach pobrać za osmdroid] (http://stackoverflow.com/questions/22862534/download-maps-for-osmdroid) – yochannah

Odpowiedz

1

I don” t ma dokładną odpowiedź, ponieważ szukasz metody buforowania w trybie offline poza obszarem, do którego MapView jeszcze nie nawigował. Wbudowana obsługa buforowania istnieje, ale nie dokładnie, jak chcesz to zrobić.

Będziesz potrzebował możliwości pobierania online, jeśli planujesz buforowanie, a nie tylko dostarczasz własne kafelki mapy offline. Chciałbym rzucić okiem na MapTileDownloader i być może spróbować zaimplementować swoją własną wersję. Metoda MapTileDownloader.TileLoader.loadTile() pobiera MapTileRequestState, która moim zdaniem wywołuje MapTileProviderArray, gdy potrzebny jest kafel mapy.

Jeśli możesz replikować istniejącą funkcję TileLoader MapTileDownloader, prawdopodobnie możesz wstrzyknąć swój własny względny MapTileRequestState lub prosto do góry MapTile do tego, którego zażądałeś. na przykład Pobierz TileLoader o nazwie MapTileRequestState, sprawdź go, wymyśl, jak zbudować nowy MapTileRequestState/MapTile reprezentujący kafelki poza bieżącym widokiem. Nie będzie to łatwe, ponieważ będziesz musiał radzić sobie z różnymi poziomami powiększenia, a w zależności od poziomu powiększenia, promień powinien być mniejszy, itp. ... Niższy poziom powiększenia 18 będzie miał większy promień płytki niż wyższy 10.

Osobiście pracowałem ostatnio nad próbą pracy w 100% w trybie offline, więc nie mam żadnego przykładowego kodu, który mógłby pomóc. Powodzenia, mimo że minęło kilka miesięcy.

+2

Dzięki za wejście mimo to =) Rozwiązałem ten problem, pobierając pliki MapTiles i zapakowałem je w telefonie do wyświetlania w trybie offline. Udało mi się pobrać pliki działające na jeden poziom powiększenia, ale mam problemy z wieloma poziomami powiększenia [tutaj] (http://stackoverflow.com/questions/13930364/asynctask-not-executing-properly-according- to-logic) – lyk

+0

To źle. Niedawno otrzymałem kafle offline z OSMDroid MapView skonstruowanym z pliku activity_main.xml zamiast zwykłego konstruktora onCreate(): http://stackoverflow.com/questions/13894267/how-to-add--sliding -suser-a-widok-widok-to-stworzony-programowo – garlicman

0

Najpierw przejdź prawo source https://github.com/osmdroid/osmdroid

Istnieje kilka artykułów Wiki, które pomogą, zwłaszcza nieaktywny mapa płytki artykuł. W skrócie, użyj MOBAC lub narzędzia osmdroid zapewnia. OSMBonuspack ma również narzędzie do wykonania tego samego zadania na urządzeniu.

Mapa płytki są faktycznie pobranych przy użyciu tej klasy https://github.com/osmdroid/osmdroid/blob/master/osmdroid-android/src/main/java/org/osmdroid/tileprovider/modules/MapTileDownloader.java

Powiązane problemy