Добавленный маркер не виден - Mapbox 6.7.0 - PullRequest
0 голосов
/ 13 декабря 2018

При попытке добавить маркер в mapbox, используя слой символов, маркер не был виден.Попытка добавить маркер, как показано ниже,

mapView.getMapAsync(m -> {
        isMapReady = true;
        mapboxMap = m;
        mapboxMap.addOnMapClickListener(MapViewFragment.this);

 addMarkerToSymbolLayer(45);
 updateCameraPosition(location); });

private void updateCameraPosition(Location location){

  if (mapboxMap != null) {
        LatLng latLong = new LatLng();
        if (location != null) {
            latLong.setLatitude(location.getLatitude());
            latLong.setLongitude(location.getLongitude());
        }
        final CameraPosition cameraPosition = new CameraPosition.Builder()
                .target(latLong)
                .build();
        mapboxMap.moveCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));
        mapView.postDelayed(() -> mapboxMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition), AppConstants.MAP_CAMERA_ANIMATE_DURATION_MS_5000), 100);

private void addMarkerToSymbolLayer(float headDirection) {

    GeoJsonSource geoJsonSource = new GeoJsonSource("geojson-source",
    Feature.fromGeometry(Point.fromLngLat(77.6387, 12.9610)));
    mapboxMap.addSource(geoJsonSource);

    Bitmap compassNeedleSymbolLayerIcon = BitmapFactory.decodeResource(
            getResources(), R.drawable.compass_needle);

    mapboxMap.addImage("compass-needle-image-id", compassNeedleSymbolLayerIcon);


    SymbolLayer aircraftLayer = new SymbolLayer("aircraft-layer", "geojson-source")
            .withProperties(
                    PropertyFactory.iconImage("compass-needle-image-id"),
                    PropertyFactory.iconRotate(headDirection),
                    PropertyFactory.iconIgnorePlacement(true),
                    PropertyFactory.iconAllowOverlap(true)
            );
    mapboxMap.addLayer(aircraftLayer);

}

Если addMarkerToSymbolLayer () вызывается после перемещения камеры, тогда маркер виден.Почему это добавление маркера зависит от положения камеры?Мне приходится много раз перемещать камеру, чтобы удовлетворить мои требования.Как с этим справиться?

Также в Устаревших MarkerView и MarkerViewOptions у меня не было никаких проблем при добавлении маркера.

Я заметил, что при задержке в 100 мс при вызове функции addMarkerToSymbolLayer (45), маркер виден и все отлично работает!

1 Ответ

0 голосов
/ 18 декабря 2018

OnMapReady () вызывается еще до загрузки всех стилей.Необходимо добавить все стили перед добавлением слоя символов.Добавьте следующий слушатель и вызовите для добавления маркера в нем.

mapView.addOnDidFinishLoadingStyleListener(new MapView.OnDidFinishLoadingStyleListener() {
        @Override
        public void onDidFinishLoadingStyle() {

        }
    });
...