mapbox / mapbox/mapbox-maps-flutter

[iOS/Android] Mapbox Standard sea/ocean labels are missing while Standard Satellite works

Open
#1,144 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
Dart
Stars
380
Forks
204
PR merge metrics
No merged PRs in 30d

Description

Summary

Sea and ocean labels are missing from a custom Mapbox Standard-based style in the same Flutter app on both iOS and Android. Country and city labels still render, but labels such as “Balearic Sea” and “Mediterranean Sea” do not. The labels are visible in Mapbox Studio at the same camera.

Switching to Standard Satellite makes the sea labels appear. I also isolated the problem on Android with an official-style minimal reproduction: mapbox://styles/mapbox/standard renders no text labels, while changing only the style URI to mapbox://styles/mapbox/standard-satellite renders place labels and the two sea labels at the exact same camera.

Environment
  • Affected platforms in the Flutter app: iOS and Android
  • mapbox_maps_flutter: 2.29.1
  • Mapbox Maps Core Android: 11.29.1
  • Mapbox Common Android: 24.29.1
  • Flutter: 3.41.5 (stable)
  • Dart: 3.11.3
  • Android minimal repro: Android 16 / API 36
  • Android device: Emulator sdk_gphone64_x86_64
  • Android ABI: x86_64
  • Android rendering backend: Impeller OpenGLES
  • The iOS symptom has been reproduced in the app, but the exact iOS device/OS details and official-style minimal repro have not yet been collected.
Minimal reproduction

The following minimal reproduction was run on Android:

import 'package:flutter/material.dart';
import 'package:mapbox_maps_flutter/mapbox_maps_flutter.dart';

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  MapboxOptions.setAccessToken(
    const String.fromEnvironment('MAPBOX_ACCESS_TOKEN'),
  );
  runApp(const App());
}

class App extends StatelessWidget {
  const App({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: MapWidget(
          styleUri: 'mapbox://styles/mapbox/standard',
          cameraOptions: CameraOptions(
            center: Point(coordinates: Position(3.04309, 38.36985)),
            zoom: 5.5,
          ),
        ),
      ),
    );
  }
}

Run with a valid public access token, then change only styleUri to:

styleUri: 'mapbox://styles/mapbox/standard-satellite',

No custom sources, layers, annotations, localization calls, overlays, or camera changes are involved in the Android minimal reproduction.

Observed behavior
  • iOS and Android app, custom Standard-based style: country and city labels render, but sea/ocean labels are missing.
  • Android minimal repro, official Standard: no text labels render.
  • Android minimal repro, official Standard Satellite: place labels, “Balearic Sea”, and “Mediterranean Sea” render at the same camera.
Expected behavior

Standard should render its water labels consistently with Mapbox Studio and Standard Satellite on both iOS and Android.

Screenshots

Both screenshots were captured from the same Android emulator, with the same SDK version, camera center, zoom, and minimal widget.

Android — Standard (labels missing)

Mapbox Standard on Android with labels missing

Android — Standard Satellite (labels visible)

Mapbox Standard Satellite on Android with Balearic Sea and Mediterranean Sea labels visible
Additional investigation

The published Standard and Standard Satellite style JSONs both contain water-line-label and water-point-label layers using the same natural_label source, filters, font, placement, and text field.

A notable difference is their paint expression:

  • Standard uses a text-color expression based on measure-light and the colorWater config.
  • Standard Satellite uses a simple HSL color.

As an Android diagnostic only, cloning the same natural_label water-label layers into the minimal app with a fixed text-color makes the missing sea labels appear immediately. This suggests the Standard label paint expression may be involved, but I have not proven that as the root cause on either platform.

I could not find an existing open or closed issue matching Standard water labels on iOS or Android.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with the Android minimal reproduction in the issue and compare the official Standard and Standard Satellite styles at the stated camera. Inspect the water-label layers, especially the Standard text-color expression based on measure-light and colorWater, and verify the behavior on iOS as well. Done means Standard renders the expected place and sea labels consistently with Mapbox Studio and Standard Satellite.

Written by the indexing model from the issue text.

Assessment

Tech stack
dart, flutter
Domain
mobile
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
45/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.