具有自定义Tileset或样式的Mapbox NavigationView

问题描述 投票:0回答:1

如何将一个磁贴集添加到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.startNavigation(NavigationView.java:394)

[我的第二种方法是仅添加在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

---------崩溃开始2020-02-28 15:49:32.835 A / libc:致命信号11(SIGSEGV),代码1(SEGV_MAPERR),故障加法器0x681713e80325b4在tid 29828(oid.med ....),pid 29828(oid.med ....)]

有什么想法吗?

android mapbox navigationview
1个回答
0
投票
  1. 我看到mapboxMap.setStyle("mySecretStyle",。您只是通过样式ID而不是那里的mySecretStyle?如果是这样,则应改用new Style.Builder().fromUri()
mapboxMap.setStyle(new Style.Builder().fromUri("styleIdHere"), new Style.OnStyleLoaded() {
          @Override
          public void onStyleLoaded(@NonNull Style style) {


          }
        });
  1. 您的图块集是否来自Mapbox Tilesets API?如果是这样:

  2. 如果您使用的是RasterSource,请参阅演示应用程序中https://github.com/mapbox/mapbox-android-demo/search?q=RasterSource&unscoped_q=RasterSource用法中的RasterSource。可能是您未正确初始化各种源对象。

[通常,如果您可以解释要添加的数据类型,我可能会为您提供进一步的帮助。您也可以将所需的数据添加到Mapbox Studio中的样式中,而不是在设备上的运行时中。然后,您要做的就是加载样式。

© www.soinside.com 2019 - 2024. All rights reserved.