Mapbox NavigationView с пользовательским набором или стилем - PullRequest
0 голосов
/ 28 февраля 2020

как я могу добавить один набор плиток в NavigationView?

Моей первой попыткой было создание целого стиля в Mapbox Studio и привязка к нему набора плиток. Затем я добавил стиль в NavigationView внутри фрагмента

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    [...]

    // Mapbox
    navigationView = view.findViewById(R.id.mapboxNavigationView);
    navigationView.onCreate(null);

    [...]

    navigationView.initialize(this, initialPosition);

    return view;
}



@SuppressLint("MissingPermission")
@Override
public void onNavigationReady(boolean isRunning) {
    mapboxMap = navigationView.retrieveNavigationMapboxMap().retrieveMap();

    mapboxMap.setStyle("mySecretStyle", new Style.OnStyleLoaded() {
        @Override
        public void onStyleLoaded(@NonNull Style style) {
            // Never called ...
        }
    });
}

Стиль успешно добавлен, как вы можете видеть здесь.

Custom style

Но возникает следующая ошибка, и навигация не запускается

java .lang.NullPointerException: попытка вызвать виртуальный метод 'java .util.List com.mapbox.mapboxsdk.maps. Style.getSources () 'для ссылки на пустой объект в com.mapbox.services. android .navigation.ui.v5.map.NavigationMapboxMap.initializeWayName (NavigationMapboxMap. java: 668) в com.mapbox.services. android .navigation.ui.v5.map.NavigationMapboxMap.addProgressChangeListener (NavigationMapboxMap. java: 277) в com.mapbox.services. android .navigation.ui.v5.NavigationView.initializeNavigationListeners (NavigationView. java: 691) на com.mapbox.services. android .navigation.ui.v5.NavigationView.initializeNavigation (NavigationView. java: 632) на com.mapbox.services. android .navigation.ui.v5.NavigationView. (. NavigationView java: 394) startNavigation * 10 16 *

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

@Override
public void onNavigationReady(boolean isRunning) {
    mapboxMap = navigationView.retrieveNavigationMapboxMap().retrieveMap();

    mapboxMap.getStyle(new Style.OnStyleLoaded() {
        @Override
        public void onStyleLoaded(@NonNull Style style) {   
            String sourceId = "indoor-source";
            style.addSource(new RasterSource(sourceId, "mytileid"));
            String layerId = "indoor-layer";
            RasterLayer rasterLayer = new RasterLayer(layerId, sourceId);
            style.addLayer(rasterLayer);
        }
    });
}

Но это тоже не работает - но, по крайней мере, навигация работает по умолчанию стиль навигации.

Моя третья попытка (с допустимым стилем)

@Override
public void onNavigationRunning() {
    navigationView.retrieveNavigationMapboxMap().retrieveMap().setStyle("mySecretStyle");
}

... приводит к SIGSEGV

------- - начало cra sh 2020-02-28 15: 49: 32.835 A / lib c: фатальный сигнал 11 (SIGSEGV), код 1 (SEGV_MAPERR), адрес ошибки 0x681713e80325b4 в tid 29828 (oid.med .. ..), pid 29828 (oid.med ....)

Есть идеи?

1 Ответ

1 голос
/ 28 февраля 2020
  1. Я вижу mapboxMap.setStyle("mySecretStyle",. Вы просто проходите через свой идентификатор стиля вместо mySecretStyle? Если это так, вы должны использовать new Style.Builder().fromUri() вместо.
mapboxMap.setStyle(new Style.Builder().fromUri("styleIdHere"), new Style.OnStyleLoaded() {
          @Override
          public void onStyleLoaded(@NonNull Style style) {


          }
        });

Ваш набор плиток поступает из API наборов карт Mapbox? Если это так:

Если вы используете RasterSource, см. https://github.com/mapbox/mapbox-android-demo/search?q=RasterSource&unscoped_q=RasterSource из RasterSource использования в демонстрационном приложении. Возможно, вы неправильно инициализируете различные исходные объекты.

В общем, если бы вы могли объяснить, какой тип данных вы пытаетесь добавить, я мог бы вам помочь дальше. Вы также можете добавить нужные данные в стиль в Mapbox Studio, а не во время выполнения на устройстве. Затем все, что вам нужно сделать, это загрузить стиль.

...