Скачать карты osmdroid
Я разрабатываю приложение, в котором мне нужно использовать карты в автономном режиме. Я использую osmdroid и osmbonuspack
чтобы загрузить карты, которые я пробовал:
- MobileAtlasCreator но карты Mapnik заблокированы.
- osmdroid-упаковщик. Он работает, но только скачать 9 me для увеличения
для меня идеальным было бы загрузить карты из самого приложения, и я просто хочу загрузить карты, которые вы на трассе, не полный раздел.
Как я мог это исправить?
есть ли способ загрузить карты с телефона через мое приложение?
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 конкретные.