Скачать карты osmdroid

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

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

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

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

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

4 ответов


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

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

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

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

  • поскольку карты Mapnik эффективно заблокированы, выберите" OpenStreetMap MapQuest " в качестве источника.
  • формат Атласа: выберите "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" (с этим точным написанием) обязательно => это используется как внутренний путь внутри zip-файла. Если вы откроете свой zip-файл, вы увидите, что MOBAC создал этот каталог "MapQuest".

".jpg " расширение также является обязательным => как MOBAC создает MapQuest плитка в zip с .расширение jpg (важно отметить, что стандартные источники плитки в osmdroid все используют ".расширение ПНГ").

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

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

опять же, в вашем конструкторе XYTileSource расширение должно быть ".формат JPG." Имя не имеет значения.

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

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


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

=> ответ: да!

из OSMBonusPack v4.6, существует класс CacheManager, позволяющий загружать плитки (прямоугольной) области непосредственно из приложения 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/"}));
    }

Я предпочитаю поставить некоторые urls конкретные.