Автономная навигация с помощью Mapbox Sdk в приложении для Android из Kml

Я пытаюсь разработать приложение для навигации в формате офлайн для треккинга.

Приложение показывает пользователю список ближайших треков / маршрутов, по которым он может пойти. Примеры:
-Прогулка на вулкан Этна
-Прогулка по лесу.

У меня есть несколько файлов KML, предоставленных мне местными гидами, каждый для отдельного трека.

Итак, если я выберу «Прогулка до вулкана Этна», у меня будет карта с маршрутом, по которому я должен идти, чтобы пройти к вулкану Этна, с некоторыми маркерами интересных точек (примеры: убежища, памятники). Эти данные фактически готовы в формате KML.

Итак: пользователь выбирает трек из списка, который я предоставляю, затем телефон показывает трек на карте (из kml или аналога) с текущим положением пользователя.

Я делаю это с помощью MapBox sdk (но я открыт для альтернатив).

На самом деле, я успешно загрузил офлайн-карту зоны (Сицилия), но я знаю, как написать свой kml на карте.

Я также импортировал kml в Mapbox Studio, но я не знаю, как загрузить MapBox Studio Map в свое приложение.

Спасибо за уделенное время!


person Pasquale    schedule 14.04.2016    source источник
comment
Не могли бы вы объяснить немного больше?   -  person Dieter Meemken    schedule 14.04.2016


Ответы (1)


Если Mapbox кажется хорошей альтернативой, вам просто нужно изучить их Android SDK, чтобы узнать, поддерживаются ли и как маркеры рисования и координаты треков.

Для треков см. https://www.mapbox.com/android-sdk/geojson/

Соответствующая (для вас) часть находится прямо в конце их примера кода:

LatLng[] pointsArray = points.toArray(new LatLng[points.size()]);

// Draw Points on MapView
mapboxMap.addPolyline(new PolylineOptions()
                    .add(pointsArray)
                    .color(Color.parseColor("#3bb2d0"))
                    .width(2));

Здесь у них есть точки координат в точках ArrayList. Они были извлечены из данных GeoJSON, но вам просто нужно извлечь точки координат из данных KML, а затем нарисовать дорожку на основе этого примера.

Маркеры см. На странице https://www.mapbox.com/android-sdk/marker/

У них есть этот пример кода:

mapboxMap.addMarker(new MarkerOptions()
                    .position(new LatLng(48.13863, 11.57603))
                    .title("Hello World!")
                    .snippet("Welcome to my marker."));

Маркер с настраиваемым значком см. На странице https://www.mapbox.com/android-sdk/custom-marker-icon/

У них есть этот пример кода:

// Create an Icon object for the marker to use
IconFactory iconFactory = IconFactory.getInstance(MainActivity.this);
Drawable iconDrawable = ContextCompat.getDrawable(MainActivity.this, drawable.ic_directions_boat_black_18dp);
Icon icon = iconFactory.fromDrawable(iconDrawable);

// Add the custom icon marker to the map
mapboxMap.addMarker(new MarkerOptions()
                    .position(new LatLng(-33.8500000, 18.4158234))
                    .title("Cape Town Harbour")
                    .icon(icon));

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

Смотрится довольно удобно. Я сам не использовал Mapbox SDK.

person Markus Kauppinen    schedule 14.04.2016
comment
Спасибо за ваше предложение. Знаете ли вы лучшее решение (чем mapbox?) - person Pasquale; 14.04.2016
comment
Вот предложения для офлайн-поставщиков карт. У меня нет никаких рекомендаций, кроме проверки, предлагают ли они простой способ рисования маркеров и дорожек. Услуги на основе векторных данных (как таковые), вероятно, являются правильным решением. Данные компактны и хорошо масштабируются для различных уровней масштабирования. Например, Mapbox использует очень компактный формат данных, где, например, Плитки Mapzen - это удобочитаемый формат GeoJSON, который занимает немного больше места. Это также могло быть решающим фактором. И стили визуальных карт, которые они предлагают, могут быть другими. - person Markus Kauppinen; 14.04.2016