Не загружаются оффлайн карты OSMDroid - PullRequest
0 голосов
/ 05 февраля 2020

Использование osmdroid Я пытаюсь создать автономное картографическое приложение.

Я использую листы карты, сгенерированные на файловом сервере в формате PNG. Они организованы в стандартной структуре файла / каталога /x/y/z.png и сжаты в файл .zip с внутренней структурой: /mapnik/x/y/z.png

Имя Файл .zip - mapnik.zip (я понимаю, имя этого файла не имеет значения).

Я установил .apk, установив его в Android Studio.

Я попытался поместить файл .zip в / storage / emulated / 0 / osmdroid и / storage / emulated / 0 / osmdroid / tile, где находятся файлы cache.db и cache.db-journal ( эта структура каталогов уже существовала).

Когда я запускаю приложение, оно запускается, но вместо карты отображается пустая сетка.

Если я изменю map.setUseDataConnection (false); в (true) он загружает карту через inte rnet и отображает ее.

К сожалению, мне нужно это для уникального запуска в автономном режиме.

Код для этого я получил от https://github.com/TizioFittizio/OsmDroidOfflineMap

Моя основная активность заключается в следующем:

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        MapView map = (MapView) findViewById(R.id.map);
        map.setUseDataConnection(false);

        map.setTileSource(TileSourceFactory.MAPNIK);

        IMapController controller = map.getController();
        GeoPoint startPoint = new GeoPoint(37.370925, -5.972684);
        controller.setCenter(startPoint);
        Marker startMarker = new Marker(map);
        startMarker.setPosition(startPoint);
        startMarker.setAnchor(Marker.ANCHOR_CENTER, Marker.ANCHOR_BOTTOM);
        map.getOverlays().add(startMarker);

        controller.setZoom(8);
        map.setMinZoomLevel(6);
        map.setMaxZoomLevel(15);

Кто-нибудь знает, что я делаю неправильно?

В качестве альтернативы, кто-нибудь еще сделал это и ты использовал osmdroid? А если нет, что ты использовал?

Ответы [ 2 ]

0 голосов
/ 10 февраля 2020

Спасибо всем, кто внес свой вклад. Я абсолютно новичок в Android dev, поэтому я благодарен за терпение людей.

Это работает сейчас.

My MainActivity. java выглядит следующим образом:

@Override public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    map = (MapView) findViewById(R.id.map);
    map.setTileSource(TileSourceFactory.MAPNIK);
    map.setUseDataConnection(false);
    map.getZoomController().setVisibility(CustomZoomButtonsController.Visibility.ALWAYS);
    map.setMultiTouchControls(true);

    IMapController mapController = map.getController();
    mapController.setZoom(13.0);
    map.setMinZoomLevel(7.0);
    map.setMaxZoomLevel(19.0);

    map.setClickable(true);

    GeoPoint startPoint = new GeoPoint(37.3691, -5.97907);
    mapController.setCenter(startPoint);

Мой файл .zip находится в / storage / emulated / 0 / osmdroid со структурой, как описано, ЗА ИСКЛЮЧЕНИЕМ, что root файла .zip - / Mapnik / ie. с учетом регистра.

Теперь я перехожу к наложению файлов фигур на мою карту. Wi sh мне удачи!

0 голосов
/ 06 февраля 2020

внутри вашего почтового индекса, он должен иметь следующую структуру

/
/tileSource
/tileSource/0/0/0.png

, где источник плитки, в вашем случае, должен быть точно Mapnik. то есть map.setTileSource(TileSourceFactory.MAPNIK); должно совпадать с именем источника тайла. Проверьте источник TileSourceFactory , чтобы получить представление о том, как создать свой собственный ITileSource . Чтобы получить представление о том, как создается путь, нужно указать здесь .

, а также образец набора данных здесь , в котором будет использоваться источник плиток с именем cb-wac

если у вас все еще есть проблемы, Configuration.getInstance().setDebugMode(true)); Configuration.getInstance().setDebugTileProviders(true)); может помочь с отладкой

...