Загрузка определенных maptiles в кеш в OSMDroid

В настоящее время я работаю над школьным проектом, и я пытаюсь изучить методы загрузки фрагментов карты OSM в локальную память / кеш телефона, чтобы пользователи могли просматривать карты в автономном режиме.

Это нужно сделать, указав конкретное местоположение, и плитки карты, находящиеся в пределах определенного радиуса / расстояния от места, будут загружены в память телефона (когда есть онлайн-соединение) для автономного отображения.

Тем не менее, я немного затрудняюсь в понимании API OSMDroid. По моему мнению, кажется, что участвующие классы:

  • MapTileBase
  • MapDownloader
  • IFilesystemCache

Пожалуйста, поправьте меня, если я ошибаюсь.

Кроме того, в MapTileBase (который, я считаю, является поставщиком), getMapTile возвращает android.graphics.drawable.Drawable .

Этот класс Drawable даже связан с концепцией отображения офлайн-карты?

Надеюсь, кто-то может просветить меня, где именно отображаются карты для загрузки в память телефона, и как мы можем редактировать карты для отображения элементов интерфейса, таких как маршруты, контакты и т. Д.

Я точно не отвечаю, поскольку вы ищете метод кэширования в автономном режиме вне области, к которой MapView еще не перешел. Встроенная поддержка кеширования есть, но не совсем так, как вы хотите это сделать.

Вам понадобятся возможности онлайн-загрузки, если вы планируете кешировать, а не просто предоставлять свои собственные кеды офлайн-карты. Я бы посмотрел на MapTileDownloader и, возможно, попытаюсь реализовать свою собственную версию. Метод MapTileDownloader.TileLoader.loadTile () принимает объект MapTileRequestState, который, как я считаю, вызывает MapTileProviderArray, когда требуется плитка карты.

Если вы можете реплицировать существующую функциональность TileLoader MapTileDownloader, вы, вероятно, можете добавить свой собственный относительный MapTileRequestState или прямо к MapTile к запрашиваемому. Например, возьмите TileLoader под названием MapTileRequestState, проверьте его, выясните, как создать новый MapTileRequestState / MapTile, представляющий фрагменты за пределами текущего представления. Это будет непросто, поскольку вам придется иметь дело с различными уровнями масштабирования и в зависимости от уровня масштабирования, радиус должен быть меньше и т. Д.. Более низкий масштаб изображения 18 будет иметь больший радиус плитки, чем Более высокий 10.

Лично я недавно работал над попыткой работать на 100% офлайн, поэтому мне не нужен какой-либо пример кода. Удачи, хотя это было пару месяцев.

Сначала перейдите к источнику https://github.com/osmdroid/osmdroid

Есть несколько статей в вики, которые помогут, особенно статья офлайн-карточек. Короче говоря, используйте MOBAC или инструмент osmdroid. OSMBonuspack также имеет инструмент для выполнения одной и той же задачи на устройстве.

Карточные плитки фактически загружаются с использованием этого класса https://github.com/osmdroid/osmdroid/blob/master/osmdroid-android/src/main/java/org/osmdroid/tileprovider/modules/MapTileDownloader.java