Код для отображения mbtiles Tilemills в проекте Android

Я работаю над проектом Android, в котором я должен показать автономную карту с помощью mbtiles. Есть ли какой-нибудь учебник, который показывает, как установить mbtiles в проекте Android.


person Hitesh    schedule 29.08.2014    source источник


Ответы (1)


извините за г-на Очевидность, но похоже, что www.google.com не ваш лучший друг...

В любом случае, давайте будем конструктивны:

1.) Вы можете использовать MapBox SDK. Вот ссылка, где приведен пример как пользоваться онлайн-картой. Теперь это не очень полезно для офлайн-карт, но там вы можете найти SDK. Просто скачайте его, и там же вы найдете тестовое приложение, где вы сможете узнать, как ребята это сделали.

Я считаю, что должен быть более простой способ установить библиотеку, но мне пришлось импортировать много нового, чтобы это заработало. Кроме того, будьте осторожны, чтобы получить последние библиотеки jar, так как у меня был okhttp-urlconnection-2.0.0.jar, и приложение вылетало при отображении представления. И тут я узнал, что мне нужен jar версии 2.1.0.

2.) Для импорта офлайн-карт я нашел это ссылка полезна, так как предлагает фрагменты кода, которые облегчили мои страдания при правильном отображении карты. В случае, если ссылка умирает, код гласит:

Для начала создайте, например, метод setupMaboxOffline() в вашей активности WearActivity:

public void setupMaboxOffline() {
    MapView mapView = (MapView) findViewById(R.id.mapview);
    mapView.setZoom(5);
    mapView.setCenter(new LatLng(38.8977, -77.0365));
    mapView.setTileSource(new MBTilesLayer(this, "control-room-0.2.0.mbtiles"));
}

Затем вызовите его в WatchViewStub в onCreate(). Эта заглушка используется Android Wear для выбора правильного макета (круглого или квадратного) в зависимости от формы часов пользователя.

Упомянутый выше MapView выглядит следующим образом (в обоих макетах):

<com.mapbox.mapboxsdk.views.MapView
    android:id="@+id/mapview
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" />

Если вам понадобится свойство идентификатора mapbox в xml это SO вопрос получает ответ.

По сути, поскольку я только отобразил карту, это довольно просто... Вам нужен файл .mbtiles в папке с ресурсами. Библиотека не должна показывать ошибок ;). В вашем xml-файле вы поместили настраиваемый вид MapView.

Затем в вашей деятельности:

MapView mapView = (MapView) findViewById(R.id.mapview);
mapView.setTileSource(new MBTilesLayer(this, "map.mbtiles"));

Затем вы можете добавить свои пользовательские настройки, такие как масштабирование и прочее.

Удачи с вашей офлайн-картой. :)

person zed    schedule 25.11.2014
comment
Работая над этим дальше, я нашел кое-что, что может быть полезно для других: Когда вы настраиваете mapView, вы также должны добавить: mapView.setMinZoomLevel(1); что является одним из требований для отображения карты.. А также, один парень, который исследовал работу mbtiles предположил, что у вас должно быть более одного размера изображения, чтобы ваша карта отображалась правильно. Для меня, когда я создавал офлайн-карту в помещении, в некоторых точках она была размытой. Это потому, что я использовал только одно изображение. Вот ссылка. - person zed; 27.11.2014
comment
Я успешно реализовал этот код и отлично работает. Но проблема в том, что когда я собираю APK, он становится огромным файлом, так как мой файл MBTiles слишком велик. Вот почему это занимает много времени, чтобы открыть приложения. Есть ли способ получить доступ к файлу MBTiles из онлайн-хранилища сервера, такого как example.com/mymap.mbtiles< /а>? - person Devil's Dream; 20.10.2015