Скачать карты для osmdroid

Я разрабатываю приложение, в котором мне нужно использовать карты в автономном режиме. Я использую osmdroid и osmbonuspack

Чтобы загрузить карты, которые я пробовал:

  • Карты MobileAtlasCreator, но карты Mapnik заблокированы .
  • osmdroid-packager . Он работает, но загружает только 9 меня для увеличения

Для меня идеальным было бы загрузить карты из самого приложения, и я просто хочу загрузить карты, которые вы на трек, а не полный раздел.

Как я могу это исправить?

Есть ли способ загрузить карты с телефона через мое приложение?

Рабочее решение с MobileAtlasCreator / MOBAC :

Существует документация osmdroid , но она очень слабая, а иногда и устаревшая.

Некоторое время я боролся за последовательные вопросы. Ниже приведены подробные сведения о рабочем решении с osmdroid v4.1.

1) При создании своей автономной карты с помощью MOBAC:

  • Поскольку карты Mapnik эффективно заблокированы, выберите «OpenStreetMap MapQuest» в качестве источника.
  • Формат Atlas: выберите «Osmdroid ZIP»
  • Позаботьтесь, чтобы пометить все уровни масштабирования, которые вам понадобятся. По умолчанию ни один не выбран.

Выберите свою область, создайте свой «атлас». Это создает zip-файл.

Загрузите zip-файл на устройство, в / sdcard / osmdroid / (точный путь может отличаться в зависимости от устройства. Если вы уже использовали osmdroid, этот каталог ДОЛЖЕН уже существовать)

Имя файла не имеет значения. Расширение ДОЛЖНО быть «.zip»

2) Теперь, в вашем приложении osmdroid, ваш метод onCreate должен выглядеть примерно так:

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); map = (MapView) findViewById(R.id.map); map.setTileSource(new XYTileSource("MapQuest", ResourceProxy.string.mapquest_osm, 0, 18, 256, ".jpg", new String[] { "http://otile1.mqcdn.com/tiles/1.0.0/map/", "http://otile2.mqcdn.com/tiles/1.0.0/map/", "http://otile3.mqcdn.com/tiles/1.0.0/map/", "http://otile4.mqcdn.com/tiles/1.0.0/map/"})); map.setBuiltInZoomControls(true); map.setMultiTouchControls(true); map.setUseDataConnection(false); //optional, but a good way to prevent loading from the network and test your zip loading. IMapController mapController = map.getController(); mapController.setZoom(_A ZOOM LEVEL YOU HAVE IN YOUR ZIP_); GeoPoint startPoint = new GeoPoint(_POSITION SOMEWHERE INSIDE YOUR MAP_); mapController.setCenter(startPoint); } 

В этом коде значения 2 параметра ОЧЕНЬ важны:

Имя «MapQuest» (с этим правилом EXACT) является MANDATORY => это используется как внутренний путь внутри zip-файла. Если вы откроете свой zip-файл, вы увидите, что MOBAC создал этот каталог «MapQuest».

Расширение «.jpg» также является ОБЯЗАТЕЛЬНЫМ =>, поскольку MOBAC создает плитки MapQuest в zip с расширением .jpg (важно отметить, что стандартные источники плитки в osmdroid все используют расширение «.png»).

На этом этапе все должно быть в порядке – пока вы действительно позиционируете mapview на области, которая является частью вашего атласа (уровень и положение масштабирования).

3) Вернуться к MOBAC … Вы также можете выбрать следующие форматы Atlas: «Osmdroid SQLite» или «MBTiles SQLite». Перенесите файл (Layer.sqlite или Layer.mbtiles) на устройство в / sdcard / osmdroid /

Опять же, в вашем конструкторе XYTileSource расширение ДОЛЖНО быть «.jpg». Имя не имеет значения.

Оба работали нормально.

4) Выбор формата «Osmdroid GEMF» не будет работать: это известная ошибка в GEMF при обработке jpg-плит. EDIT> В MOBAC вы можете использовать функцию «выборочной обработки черепицы» для преобразования плит JPG в формат PNG. Тогда «Osmdroid GEMF» будет в порядке.

О втором – предпочтительном – подход, заданный в вопросе: «Есть ли способ загрузить карты с телефона через мое приложение?»

=> Ответ сейчас: Да!

Из OSMBonusPack v4.6 существует class CacheManager, позволяющий загружать fragmentы (прямоугольной) области непосредственно из приложения Android. Плитки загружаются в стандартный кеш тайлов osmdroid.

Его можно протестировать с помощью OSMNavigator .

Прежде всего, спасибо MKer и Tom Kincaid из другого поста, поставив их вместе. Для меня работает следующее:

Это было то, что мне нужно было сделать, это отличается от MKer:

  String[] urls = {"http://127.0.0.1"}; mapView.setTileSource(new XYTileSource("MapQuest", // name of the main file that has been zipped ResourceProxy.string.mapquest_osm, 2, // min map zoom level 14, // max map zoom level 256, // tile size pixels ".jpg", // extension of the tiles (can be ".png" as well) urls)); 

После создания карт с помощью Mobile Atlas Creator

Сегодня только OSM Map Tile Packager работает для map tile mapnik, и он делает карты в PNG, поэтому

  if(ConexaoInternet.verificaConexao(getActivity())) { //<-- here i am Checking if has conection with internet mapView.setTileSource(TileSourceFactory.DEFAULT_TILE_SOURCE); }else{ String[] urls = {"http://127.0.0.1"}; mapView.setTileSource(new XYTileSource("Mapnik", // name of the main file that has been zipped ResourceProxy.string.mapquest_osm, 9, // min map zoom level 15, // max map zoom level 256, // tile size pixels ".png", new String[]{"http://a.tile.openstreetmap.org/", "http://b.tile.openstreetmap.org/", "http://c.tile.openstreetmap.org/"})); } 

Я предпочитаю использовать некоторые URL-адреса.

Давайте будем гением компьютера.