Interactive, thoroughly customizable maps in native Android, iOS, macOS, Node.js, and Qt applications, powered by vector tiles and OpenGL

Last update: Jun 23, 2022

Mapbox GL Native

Circle CI build status Coverage Status

A C++ library that powers customizable vector maps in native applications on multiple platforms by taking stylesheets that conform to the Mapbox Style Specification, applying them to vector tiles that conform to the Mapbox Vector Tile Specification, and rendering them using OpenGL or Metal.

To embed interactive maps into a native application using a platform-specific language, install the Mapbox Maps SDK:

Mapbox GL JS is the WebGL-based counterpart to Mapbox GL Native that is designed for use on the Web.

Developing

We use CMake to build Mapbox GL Native for various platforms, including Linux, Android, iOS, macOS and Windows. The following command, executed from the root of this repository tree, will build Mapbox GL Native targeting your host architecture given that you have all the dependencies installed and run the example app.

$ git submodule update --init --recursive
$ cmake . -B build
$ cmake --build build
$ MAPBOX_ACCESS_TOKEN=my_access_token_here ./build/platform/glfw/mbgl-glfw

License

Mapbox GL Native is licensed under the 2-Clause BSD license. The licenses of its dependencies are tracked via FOSSA:

FOSSA Status

GitHub

https://github.com/mapbox/mapbox-gl-native
Comments
  • 1. Offline maps

    It is a personal goal to have the ability to view maps without needing an Internet connection.

    Very useful for activities such as bushwalking our mountain biking.

    Plus we know there are others interested in this feature too.

    Reviewed by ljbade at 2014-11-10 20:33
  • 2. Implement Responsive User Location Tracking Mode

    The User Location tracking mode (None, Follow, Bearing) was disabled in #1856 as the User Location dot was being updated on the main UI thread. The core logic is there, but it needs to be implemented in a more efficient way so that the UI remains responsive.

    /cc @erf

    Reviewed by bleege at 2015-08-12 20:18
  • 3. Expose a generic Android View Marker API

    Current Marker API on android is fairly limited because Markers are Gl-drawn components. I'm hearing about requests for animating markers or having the ability to do more typical Android SDK visual things with it (animations, selectors etc.).

    Concurrent InfoWindows from #3127 and UserLocationView showcased that we are able to sync Android Views with the underlying MapView. The logic is their but we do not expose a generic system.

    API proposal:

    For native annotations views in the Android Mapbox SDK. I don't see any reason to stray far from the adapter concept what an Android developer uses on daily basis. Combining this with the existing Mapbox API for adding annotations will look like:

     // combined API
     addMarker();
     addMarkers();
     removeMarker();
     removeMarkers();
     selectMarker();
    
     // new API
     setMarkerViewAdapter();
     setOnMarkerViewClickListener();
     setMarkerViewItemAnimation();
    

    Example API

    Integration of the API will follow the same path as the current Marker API.

      // Add country markers
      List<BaseMarkerOptions> countries = new ArrayList<>();
      countries.add(new CountryMarkerOptions().title("China").abbrevName("ch").flagRes(R.drawable.ic_china).position(new LatLng(31.230416, 121.473701)));
      countries.add(new CountryMarkerOptions().title("United States").abbrevName("us").flagRes(R.drawable.ic_us).position(new LatLng(38.907192, -77.036871)));
      countries.add(new CountryMarkerOptions().title("Brazil").abbrevName("br").flagRes(R.drawable.ic_brazil).position(new LatLng(-15.798200, -47.922363)));
      countries.add(new CountryMarkerOptions().title("Germany").abbrevName("de").flagRes(R.drawable.ic_germany).position(new LatLng(52.520007, 13.404954)));
      mapboxMap.addMarkers(countries);
    

    On top of that it will expose some new APIs to make ViewMarkers possible:

      // Add view marker adapter
      mapboxMap.setMarkerViewAdapter(new CountryAdapter(this));
    
      // Add a view marker click listener
      mapboxMap.setOnMarkerViewClickListener(new MapboxMap.OnMarkerViewClickListener() {
                @Override
                public void onMarkerClick(@NonNull Marker marker, @NonNull View view) {
                    Log.d(MapboxConstants.TAG, "Country clicked " + ((CountryMarker) marker).getAbbrevName());
                }
            });
    

    An example of the MarkerViewAdapter shown above:

        private static class CountryAdapter implements MapboxMap.MarkerViewAdapter<CountryMarker> {
    
            private LayoutInflater inflater;
    
            public CountryAdapter(@NonNull Context context) {
                this.inflater = LayoutInflater.from(context);
            }
    
            @Nullable
            @Override
            public View getView(@NonNull CountryMarker marker, @Nullable View convertView, @NonNull ViewGroup parent) {
                ViewHolder viewHolder;
                if (convertView == null) {
                    viewHolder = new ViewHolder();
                    convertView = inflater.inflate(R.layout.view_custom_marker, parent, false);
                    viewHolder.flag = (ImageView) convertView.findViewById(R.id.imageView);
                    viewHolder.abbrev = (TextView) convertView.findViewById(R.id.textView);
                    convertView.setTag(viewHolder);
                } else {
                    viewHolder = (ViewHolder) convertView.getTag();
                }
                viewHolder.flag.setImageResource(marker.getFlagRes());
                viewHolder.abbrev.setText(marker.getAbbrevName());
                return convertView;
            }
    
            private static class ViewHolder {
                ImageView flag;
                TextView abbrev;
            }
        }
    

    Next steps:

    • [x] Basic tracking view on Mapview - @tobrun
    • [x] Research limitations + perf. impacts - @tobrun
    • [x] Test out Android SDK animations - @tobrun
    • [x] Look into different approaches to publicly expose the API - @tobrun
    • [x] Introduce basic View Adapter approach - @tobrun
    • [x] Use a View reuse pattern in adapter (SimplePool) - @tobrun
    • [x] Integrate with selectMarker(Marker m) API - @tobrun
    • [x] Integrate with removeMarker(Marker m) API - @tobrun
    • [x] Hide old GL marker - @tobrun
    • [x] Trigger invalidate on View markers when Map is fully loaded - @tobrun
    • [x] Validate is exposed Android View Marker API matches iOS View Annotation API - @tobrun
    • [x] Profile execution - @tobrun
    • [x] Animation system - @tobrun
    • [x] Select animation API - @tobrun
    • [x] allow adding multiple adapters - @tobrun
    • [x] Flat configurable
    • [x] Offset configurable
    • [x] Double check changes made to basic Marker API - @tobrun
    • [ ] API documentation - @tobrun

    @incanus @bleege @zugaldia @cammace @danswick

    Reviewed by tobrun at 2015-12-14 01:31
  • 4. merge GeoJSON vector tiles work

    Picking up from https://github.com/mapbox/mapbox-gl-native/issues/507#issuecomment-69076871, we'll need to merge the geojsonvt branch, which will require it interfacing better with the library.

    • [x] match vector tile object structure with main library
    • [x] allow for live reindexing when features are added/removed
    • [x] handle non-GeoJSON (in-memory features)
    • [x] nailing some hopefully-basic performance kinks
    • [ ] MultiGeometry support
    • [x] other API merging (e.g. LatLng struct)
    • [x] figuring out how independent of or reliant on GL we want the library to be

    /cc @mourner @1ec5

    Reviewed by incanus at 2015-02-17 18:22
  • 5. Add arm64 As Supported ABI

    Nexus 9 devices are arm64 based so Android GL needs to provide a arm64 based libmapboxgl.so binding. Update build process to support this ABI.

    https://developer.android.com/ndk/guides/abis.html

    /cc @incanus @ljbade

    Reviewed by bleege at 2015-07-28 18:33
  • 6. Freezes when going back and forth between activites

    If you add a button to the main view in the test app, and open an arbitrary activity on a click event and then closes it, moves the map and click the button again, the app freezes on my nexus 7 (2012). I made a simple test case here: https://github.com/erf/mapbox-gl-native/tree/freezes

    Reviewed by erf at 2015-08-09 15:47
  • 7. Android crashes on startup

    Hey guys,

    Looks like mapbox crashes for some devices on start.

    14620-14620/am.ggtaxi.main.ggdriver E/libEGL: validate_display:254 error 3008 (EGL_BAD_DISPLAY)
    14620-14620/am.ggtaxi.main.ggdriver E/mbgl: {Main}[OpenGL]: eglCreateWindowSurface() returned error 12296
    14620-14620/am.ggtaxi.main.ggdriver A/libc: Fatal signal 6 (SIGABRT) at 0x0000391c (code=-6), thread 14620 (i.main.ggdriver)
    

    Device: Samsung Galaxy Tab Pro 8.4 3G/LTE Android Version: 4.2.2

    Reviewed by iCyberon at 2015-11-10 15:12
  • 8. Get Core GL C++ Into Android Project

    In order to support C++ / NDK debugging in Android Studio and streamline CI builds and artifact publication we need to refactor the current make android process to integrate the Core GL C++ project files into the Gradle managed Android project. The current process compiles the Core GL into .so files based on ABI and places them into jniLibs for the Gradle build process to then use as a separate step, while the new process will copy the uncompiled C++ files into jni and make (the Gradle driven) Android NDK responsible for compiling them and linking them via JNI to the Android code along with building the SDK as whole in one step. This process will essentially mirror what is done for iOS and Xcode with make iproj where Xcode is responsible for all the compilation and linking.

    Unknowns

    • Will custom Android.mk files be needed or will the built in NDK controls in Gradle be enough.
    • Will current GL Makefile process work or will refactoring to use something like Bazel be needed?

    Resources

    @mapbox/mobile @mapbox/gl

    Reviewed by bleege at 2015-06-18 15:38
  • 9. Performance regression between iOS 0.5.2 and 0.5.3

    I've noticed a performance regression between iOS 0.5.2 and 0.5.3. I have a UI element which acts as a scrubber along a polyline (video here). I use a custom animation, driven by a CADisplayLink, to set the zoom and centre coordinate of the map every frame using a 3D spring behaviour.

    In 0.5.2, the labels don't redraw until the animation stops, and during the animation the movement is smooth.

    In 0.5.3, if the animation changes the zoom to the extent that the labels are due for refresh, it becomes jerky. If you pause the movement long enough for the labels to redraw, it becomes smooth again.

    Let me know if you need any more information.

    Reviewed by tomtaylor at 2015-07-31 07:33
  • 10. Map tiles do not load on Android

    After the app loads the map only renders the styles background fill colour and no tiles load.

    20150508-app-launch-screenshot

    @kkaefer I think you encountered this too a while back?

    Reviewed by ljbade at 2015-05-08 01:03
  • 11. improve synced view tracking

    General ticket for improvement of "sticking" native, Cocoa-side views to the panning, zooming GL render view.

    This relates to the user dot now, later to callouts and annotation views. Let's keep a ticket around until we are 100% satisfied with the behavior here, but we can move it along milestones as we make staged improvements.

    Reviewed by incanus at 2015-03-26 21:26
  • 12. Native iOS crash when downloading offline regions

    There is a native crash on iOS when multiple offline region are downloaded, canceled and restarted again simultaneously. It's hard to provide a minimum reproducible example but maybe the exact log can already help to determine the cause of this. Looks like some kind of wrong pointer reference error.

    Summary:

    Removing offline pack notification observers
    Runner(13750,0x1050eb880) malloc: *** error for object 0x282468840: pointer being freed was not allocated
    Runner(13750,0x1050eb880) malloc: *** set a breakpoint in malloc_error_break to debug
    * thread #1, queue = 'com.apple.main-thread', stop reason = signal SIGABRT
        frame #0: 0x00000001ba42a7b0 libsystem_kernel.dylib`__pthread_kill + 8
    libsystem_kernel.dylib`__pthread_kill:
    ->  0x1ba42a7b0 <+8>:  b.lo   0x1ba42a7cc               ; <+36>
        0x1ba42a7b4 <+12>: stp    x29, x30, [sp, #-0x10]!
        0x1ba42a7b8 <+16>: mov    x29, sp
        0x1ba42a7bc <+20>: bl     0x1ba4071fc               ; cerror_nocancel
    Target 0: (Runner) stopped.
    Lost connection to device.
    Exited (sigterm)
    

    Extended stack trace:

    Click to show the whole log
    Exception Type: EXC_CRASH (SIGABRT)
    Crashed Thread: 0
    
    Application Specific Information:
    Runner > Runner(34050,0x102f10580) malloc: *** error for object 0x163039000: pointer being freed was not allocated
    
    
    Thread 0 Crashed:
    0   libsystem_kernel.dylib          0x38259db78         __pthread_kill
    1   libsystem_pthread.dylib         0x3f51d53b8         pthread_kill
    2   libsystem_c.dylib               0x32946c518         abort
    3   libsystem_malloc.dylib          0x3376e8a00         malloc_vreport
    4   libsystem_malloc.dylib          0x3376e8bd8         malloc_report
    5   libsystem_malloc.dylib          0x3376cde34         free
    6   Mapbox                          0x1037df318         mbgl::style::StyleData::~StyleData
    7   Mapbox                          0x103522650         mbgl::OfflineDownloadStatus::~OfflineDownloadStatus
    8   Mapbox                          0x1038e049c         MBGLOfflineDownloadObserver::statusChanged
    9   libdispatch.dylib               0x312b8fe64         _dispatch_call_block_and_release
    10  libdispatch.dylib               0x312b91a28         _dispatch_client_callout
    11  libdispatch.dylib               0x312b9ff44         _dispatch_main_queue_drain
    12  libdispatch.dylib               0x312b9fb94         _dispatch_main_queue_callback_4CF
    13  CoreFoundation                  0x3131e62ec         __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__
    14  CoreFoundation                  0x3131a01f0         __CFRunLoopRun
    15  CoreFoundation                  0x3131b36b4         CFRunLoopRunSpecific
    16  GraphicsServices                0x34b305370         GSEventRunModal
    17  UIKitCore                       0x317f89e84         -[UIApplication _run]
    18  UIKitCore                       0x317d0b5e8         UIApplicationMain
    19  Runner                          0x202cad824         <redacted>
    20  <unknown>                       0x102ebdce4         <redacted>
    
    Thread 0 Crashed:
    0   libsystem_kernel.dylib          0x38259db78         __pthread_kill
    1   libsystem_pthread.dylib         0x3f51d53b8         pthread_kill
    2   libsystem_c.dylib               0x32946c518         abort
    3   libsystem_malloc.dylib          0x3376e8a00         malloc_vreport
    4   libsystem_malloc.dylib          0x3376e8bd8         malloc_report
    5   libsystem_malloc.dylib          0x3376cde34         free
    6   Mapbox                          0x1037df318         mbgl::style::StyleData::~StyleData
    7   Mapbox                          0x103522650         mbgl::OfflineDownloadStatus::~OfflineDownloadStatus
    8   Mapbox                          0x1038e049c         MBGLOfflineDownloadObserver::statusChanged
    9   libdispatch.dylib               0x312b8fe64         _dispatch_call_block_and_release
    10  libdispatch.dylib               0x312b91a28         _dispatch_client_callout
    11  libdispatch.dylib               0x312b9ff44         _dispatch_main_queue_drain
    12  libdispatch.dylib               0x312b9fb94         _dispatch_main_queue_callback_4CF
    13  CoreFoundation                  0x3131e62ec         __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__
    14  CoreFoundation                  0x3131a01f0         __CFRunLoopRun
    15  CoreFoundation                  0x3131b36b4         CFRunLoopRunSpecific
    16  GraphicsServices                0x34b305370         GSEventRunModal
    17  UIKitCore                       0x317f89e84         -[UIApplication _run]
    18  UIKitCore                       0x317d0b5e8         UIApplicationMain
    19  Runner                          0x202cad824         <redacted>
    20  <unknown>                       0x102ebdce4         <redacted>
    
    Thread 1
    0   libsystem_kernel.dylib          0x382597ab4         __workq_kernreturn
    1   libsystem_pthread.dylib         0x3f51cf104         _pthread_wqthread
    
    Thread 2
    0   libsystem_kernel.dylib          0x382597ab4         __workq_kernreturn
    1   libsystem_pthread.dylib         0x3f51cf104         _pthread_wqthread
    
    Thread 3
    0   libsystem_kernel.dylib          0x382597ab4         __workq_kernreturn
    1   libsystem_pthread.dylib         0x3f51cf104         _pthread_wqthread
    
    Thread 4
    0   libsystem_kernel.dylib          0x382597ab4         __workq_kernreturn
    1   libsystem_pthread.dylib         0x3f51cf104         _pthread_wqthread
    
    Thread 5 name: com.apple.uikit.eventfetch-thread
    0   libsystem_kernel.dylib          0x3825974e0         mach_msg_trap
    1   libsystem_kernel.dylib          0x382597b20         mach_msg
    2   CoreFoundation                  0x31319b81c         __CFRunLoopServiceMachPort
    3   CoreFoundation                  0x31319fca8         __CFRunLoopRun
    4   CoreFoundation                  0x3131b36b4         CFRunLoopRunSpecific
    5   Foundation                      0x316188410         -[NSRunLoop(NSRunLoop) runMode:beforeDate:]
    6   Foundation                      0x3161c9ca8         -[NSRunLoop(NSRunLoop) runUntilDate:]
    7   UIKitCore                       0x317f03fac         -[UIEventFetcher threadMain]
    8   Foundation                      0x3161d8558         __NSThread__start__
    9   libsystem_pthread.dylib         0x3f51cf9a8         _pthread_start
    
    Thread 6
    0   libsystem_kernel.dylib          0x382597ab4         __workq_kernreturn
    1   libsystem_pthread.dylib         0x3f51cf104         _pthread_wqthread
    
    Thread 7 name: io.flutter.1.ui
    0   libsystem_kernel.dylib          0x3825974e0         mach_msg_trap
    1   libsystem_kernel.dylib          0x382597b20         mach_msg
    2   CoreFoundation                  0x31319b81c         __CFRunLoopServiceMachPort
    3   CoreFoundation                  0x31319fca8         __CFRunLoopRun
    4   CoreFoundation                  0x3131b36b4         CFRunLoopRunSpecific
    5   Flutter                         0x104567088         <redacted>
    6   Flutter                         0x104566848         <redacted>
    7   libsystem_pthread.dylib         0x3f51cf9a8         _pthread_start
    
    Thread 8 name: io.flutter.1.raster
    0   libsystem_kernel.dylib          0x3825974e0         mach_msg_trap
    1   libsystem_kernel.dylib          0x382597b20         mach_msg
    2   CoreFoundation                  0x31319b81c         __CFRunLoopServiceMachPort
    3   CoreFoundation                  0x31319fca8         __CFRunLoopRun
    4   CoreFoundation                  0x3131b36b4         CFRunLoopRunSpecific
    5   Flutter                         0x104567088         <redacted>
    6   Flutter                         0x104566848         <redacted>
    7   libsystem_pthread.dylib         0x3f51cf9a8         _pthread_start
    
    Thread 9 name: io.flutter.1.io
    0   libsystem_kernel.dylib          0x3825974e0         mach_msg_trap
    1   libsystem_kernel.dylib          0x382597b20         mach_msg
    2   CoreFoundation                  0x31319b81c         __CFRunLoopServiceMachPort
    3   CoreFoundation                  0x31319fca8         __CFRunLoopRun
    4   CoreFoundation                  0x3131b36b4         CFRunLoopRunSpecific
    5   Flutter                         0x104567088         <redacted>
    6   Flutter                         0x104566848         <redacted>
    7   libsystem_pthread.dylib         0x3f51cf9a8         _pthread_start
    
    Thread 10 name: io.worker.1
    0   libsystem_kernel.dylib          0x382597f64         __psynch_cvwait
    1   libsystem_pthread.dylib         0x3f51d6294         _pthread_cond_wait
    2   libc++.1.dylib                  0x344cc3234         std::__1::condition_variable::wait
    3   Flutter                         0x104561440         <redacted>
    4   libsystem_pthread.dylib         0x3f51cf9a8         _pthread_start
    
    Thread 11 name: io.worker.2
    0   libsystem_kernel.dylib          0x382597f64         __psynch_cvwait
    1   libsystem_pthread.dylib         0x3f51d6294         _pthread_cond_wait
    2   libc++.1.dylib                  0x344cc3234         std::__1::condition_variable::wait
    3   Flutter                         0x104561440         <redacted>
    4   libsystem_pthread.dylib         0x3f51cf9a8         _pthread_start
    
    Thread 12 name: io.worker.3
    0   libsystem_kernel.dylib          0x382597f64         __psynch_cvwait
    1   libsystem_pthread.dylib         0x3f51d6294         _pthread_cond_wait
    2   libc++.1.dylib                  0x344cc3234         std::__1::condition_variable::wait
    3   Flutter                         0x104561440         <redacted>
    4   libsystem_pthread.dylib         0x3f51cf9a8         _pthread_start
    
    Thread 13 name: io.worker.4
    0   libsystem_kernel.dylib          0x382597f64         __psynch_cvwait
    1   libsystem_pthread.dylib         0x3f51d6294         _pthread_cond_wait
    2   libc++.1.dylib                  0x344cc3234         std::__1::condition_variable::wait
    3   Flutter                         0x104561440         <redacted>
    4   libsystem_pthread.dylib         0x3f51cf9a8         _pthread_start
    
    Thread 14 name: io.worker.5
    0   libsystem_kernel.dylib          0x382597f64         __psynch_cvwait
    1   libsystem_pthread.dylib         0x3f51d6294         _pthread_cond_wait
    2   libc++.1.dylib                  0x344cc3234         std::__1::condition_variable::wait
    3   Flutter                         0x104561440         <redacted>
    4   libsystem_pthread.dylib         0x3f51cf9a8         _pthread_start
    
    Thread 15 name: io.worker.6
    0   libsystem_kernel.dylib          0x382597f64         __psynch_cvwait
    1   libsystem_pthread.dylib         0x3f51d6294         _pthread_cond_wait
    2   libc++.1.dylib                  0x344cc3234         std::__1::condition_variable::wait
    3   Flutter                         0x104561440         <redacted>
    4   libsystem_pthread.dylib         0x3f51cf9a8         _pthread_start
    
    Thread 16 name: dart:io EventHandler
    0   libsystem_kernel.dylib          0x382598e58         kevent
    1   Flutter                         0x1047367a4         <redacted>
    2   Flutter                         0x104765358         <redacted>
    3   libsystem_pthread.dylib         0x3f51cf9a8         _pthread_start
    
    Thread 17
    0   libsystem_kernel.dylib          0x382597ab4         __workq_kernreturn
    1   libsystem_pthread.dylib         0x3f51cf104         _pthread_wqthread
    
    Thread 18
    0   libsystem_kernel.dylib          0x382597a6c         __semwait_signal
    1   libsystem_c.dylib               0x3294510d8         nanosleep
    2   libsystem_c.dylib               0x32946537c         sleep
    3   Sentry                          0x103eb5808         monitorCachedData
    4   libsystem_pthread.dylib         0x3f51cf9a8         _pthread_start
    
    Thread 19 name: SentryCrash Exception Handler (Secondary)
    0   libsystem_kernel.dylib          0x3825974e0         mach_msg_trap
    1   libsystem_kernel.dylib          0x382597b20         mach_msg
    2   libsystem_kernel.dylib          0x3825a3a80         thread_suspend
    3   Sentry                          0x103ec2a84         handleExceptions
    4   libsystem_pthread.dylib         0x3f51cf9a8         _pthread_start
    
    Thread 20 name: SentryCrash Exception Handler (Primary)
    0   libsystem_kernel.dylib          0x3825974e0         mach_msg_trap
    1   libsystem_kernel.dylib          0x382597b20         mach_msg
    2   Sentry                          0x103ec2ab0         handleExceptions
    3   libsystem_pthread.dylib         0x3f51cf9a8         _pthread_start
    
    Thread 21
    0   libsystem_kernel.dylib          0x382597ab4         __workq_kernreturn
    1   libsystem_pthread.dylib         0x3f51cf104         _pthread_wqthread
    
    Thread 22
    0   libsystem_pthread.dylib         0x3f51cee54         start_wqthread
    
    Thread 23 name: DartWorker
    0   libsystem_kernel.dylib          0x382597f64         __psynch_cvwait
    1   libsystem_pthread.dylib         0x3f51d62c0         _pthread_cond_wait
    2   Flutter                         0x10482e1d4         <redacted>
    3   Flutter                         0x104875874         <redacted>
    4   Flutter                         0x10482dafc         <redacted>
    5   libsystem_pthread.dylib         0x3f51cf9a8         _pthread_start
    
    Thread 24 name: DartWorker
    0   libsystem_kernel.dylib          0x382597f64         __psynch_cvwait
    1   libsystem_pthread.dylib         0x3f51d62c0         _pthread_cond_wait
    2   Flutter                         0x10482e1d4         <redacted>
    3   Flutter                         0x104875874         <redacted>
    4   Flutter                         0x10482dafc         <redacted>
    5   libsystem_pthread.dylib         0x3f51cf9a8         _pthread_start
    
    Thread 25 name: DartWorker
    0   libsystem_kernel.dylib          0x382597f64         __psynch_cvwait
    1   libsystem_pthread.dylib         0x3f51d62c0         _pthread_cond_wait
    2   Flutter                         0x10482e1d4         <redacted>
    3   Flutter                         0x104875874         <redacted>
    4   Flutter                         0x10482dafc         <redacted>
    5   libsystem_pthread.dylib         0x3f51cf9a8         _pthread_start
    
    Thread 26 name: DartWorker
    0   libsystem_kernel.dylib          0x382597f64         __psynch_cvwait
    1   libsystem_pthread.dylib         0x3f51d62c0         _pthread_cond_wait
    2   Flutter                         0x10482e1d4         <redacted>
    3   Flutter                         0x104875874         <redacted>
    4   Flutter                         0x10482dafc         <redacted>
    5   libsystem_pthread.dylib         0x3f51cf9a8         _pthread_start
    
    Thread 27 name: DartWorker
    0   libsystem_kernel.dylib          0x382597f64         __psynch_cvwait
    1   libsystem_pthread.dylib         0x3f51d62c0         _pthread_cond_wait
    2   Flutter                         0x10482e1d4         <redacted>
    3   Flutter                         0x104875874         <redacted>
    4   Flutter                         0x10482dafc         <redacted>
    5   libsystem_pthread.dylib         0x3f51cf9a8         _pthread_start
    
    Thread 28 name: DartWorker
    0   libsystem_kernel.dylib          0x382597f64         __psynch_cvwait
    1   libsystem_pthread.dylib         0x3f51d62c0         _pthread_cond_wait
    2   Flutter                         0x10482e1d4         <redacted>
    3   Flutter                         0x104875874         <redacted>
    4   Flutter                         0x10482dafc         <redacted>
    5   libsystem_pthread.dylib         0x3f51cf9a8         _pthread_start
    
    Thread 29 name: DartWorker
    0   libsystem_kernel.dylib          0x382597f64         __psynch_cvwait
    1   libsystem_pthread.dylib         0x3f51d62c0         _pthread_cond_wait
    2   Flutter                         0x10482e1d4         <redacted>
    3   Flutter                         0x104875874         <redacted>
    4   Flutter                         0x10482dafc         <redacted>
    5   libsystem_pthread.dylib         0x3f51cf9a8         _pthread_start
    
    Thread 30 name: DartWorker
    0   libsystem_kernel.dylib          0x382597f64         __psynch_cvwait
    1   libsystem_pthread.dylib         0x3f51d62c0         _pthread_cond_wait
    2   Flutter                         0x10482e1d4         <redacted>
    3   Flutter                         0x104875874         <redacted>
    4   Flutter                         0x10482dafc         <redacted>
    5   libsystem_pthread.dylib         0x3f51cf9a8         _pthread_start
    
    Thread 31 name: com.apple.NSURLConnectionLoader
    0   libsystem_kernel.dylib          0x3825974e0         mach_msg_trap
    1   libsystem_kernel.dylib          0x382597b20         mach_msg
    2   CoreFoundation                  0x31319b81c         __CFRunLoopServiceMachPort
    3   CoreFoundation                  0x31319fca8         __CFRunLoopRun
    4   CoreFoundation                  0x3131b36b4         CFRunLoopRunSpecific
    5   CFNetwork                       0x3144474d4         _CFURLStorageSessionDisableCache
    6   Foundation                      0x3161d8558         __NSThread__start__
    7   libsystem_pthread.dylib         0x3f51cf9a8         _pthread_start
    
    Thread 32
    0   libsystem_kernel.dylib          0x382597ab4         __workq_kernreturn
    1   libsystem_pthread.dylib         0x3f51cf104         _pthread_wqthread
    
    Thread 33 name: com.mapbox.mbgl.AssetFileSource
    0   libsystem_kernel.dylib          0x3825974e0         mach_msg_trap
    1   libsystem_kernel.dylib          0x382597b20         mach_msg
    2   CoreFoundation                  0x31319b81c         __CFRunLoopServiceMachPort
    3   CoreFoundation                  0x31319fca8         __CFRunLoopRun
    4   CoreFoundation                  0x3131b36b4         CFRunLoopRunSpecific
    5   CoreFoundation                  0x313234894         CFRunLoopRun
    6   Mapbox                          0x10350c450         mbgl::util::Thread<T>::Thread<T>::lambda::operator()
    7   Mapbox                          0x10350c254         std::__1::thread::thread<T>
    8   libsystem_pthread.dylib         0x3f51cf9a8         _pthread_start
    
    Thread 34 name: com.mapbox.mbgl.OnlineFileSource
    0   libsystem_kernel.dylib          0x3825974e0         mach_msg_trap
    1   libsystem_kernel.dylib          0x382597b20         mach_msg
    2   CoreFoundation                  0x31319b81c         __CFRunLoopServiceMachPort
    3   CoreFoundation                  0x31319fca8         __CFRunLoopRun
    4   CoreFoundation                  0x3131b36b4         CFRunLoopRunSpecific
    5   CoreFoundation                  0x313234894         CFRunLoopRun
    6   Mapbox                          0x10353c300         mbgl::util::Thread<T>::Thread<T>::lambda::operator()
    7   Mapbox                          0x10353c178         std::__1::thread::thread<T>
    8   libsystem_pthread.dylib         0x3f51cf9a8         _pthread_start
    
    Thread 35 name: com.mapbox.mbgl.MultiDatabaseFileSource
    0   libsystem_kernel.dylib          0x382597d8c         stat
    1   libsqlite3.dylib                0x350ea7888         sqlite3_finalize
    2   libsqlite3.dylib                0x350ea64e0         sqlite3_finalize
    3   libsqlite3.dylib                0x350ea5b3c         sqlite3_finalize
    4   libsqlite3.dylib                0x350ec5da0         sqlite3_step
    5   libsqlite3.dylib                0x350ec4224         sqlite3_step
    6   Mapbox                          0x10353f304         mapbox::sqlite::Query::run
    7   Mapbox                          0x10352c42c         mbgl::OfflineDatabase::deleteRegion
    8   Mapbox                          0x10350e950         mbgl::DatabaseFileSourceThread::deleteRegion
    9   Mapbox                          0x103515c7c         mbgl::MessageImpl<T>::operator()
    10  Mapbox                          0x1035437f8         mbgl::Mailbox::receive
    11  Mapbox                          0x10354444c         std::__1::__split_buffer<T>::push_front
    12  Mapbox                          0x10350855c         mbgl::WorkTaskImpl<T>::operator()
    13  Mapbox                          0x1035077b0         mbgl::util::RunLoop::process
    14  Mapbox                          0x1034ff074         mbgl::util::AsyncTask::Impl::perform
    15  CoreFoundation                  0x31324ff00         __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__
    16  CoreFoundation                  0x313260c8c         __CFRunLoopDoSource0
    17  CoreFoundation                  0x31319a180         __CFRunLoopDoSources0
    18  CoreFoundation                  0x31319fb48         __CFRunLoopRun
    19  CoreFoundation                  0x3131b36b4         CFRunLoopRunSpecific
    20  CoreFoundation                  0x313234894         CFRunLoopRun
    21  Mapbox                          0x103689cb4         mbgl::util::Thread<T>::Thread<T>::lambda::operator()
    22  Mapbox                          0x103689bac         std::__1::thread::thread<T>
    23  libsystem_pthread.dylib         0x3f51cf9a8         _pthread_start
    
    Thread 36 name: com.mapbox.mbgl.LocalFileSource
    0   libsystem_kernel.dylib          0x3825974e0         mach_msg_trap
    1   libsystem_kernel.dylib          0x382597b20         mach_msg
    2   CoreFoundation                  0x31319b81c         __CFRunLoopServiceMachPort
    3   CoreFoundation                  0x31319fca8         __CFRunLoopRun
    4   CoreFoundation                  0x3131b36b4         CFRunLoopRunSpecific
    5   CoreFoundation                  0x313234894         CFRunLoopRun
    6   Mapbox                          0x103518a5c         mbgl::util::Thread<T>::Thread<T>::lambda::operator()
    7   Mapbox                          0x1035188bc         std::__1::thread::thread<T>
    8   libsystem_pthread.dylib         0x3f51cf9a8         _pthread_start
    
    Thread 37 name: com.mapbox.mbgl.ResourceLoaderThread
    0   libsystem_kernel.dylib          0x3825974e0         mach_msg_trap
    1   libsystem_kernel.dylib          0x382597b20         mach_msg
    2   CoreFoundation                  0x31319b81c         __CFRunLoopServiceMachPort
    3   CoreFoundation                  0x31319fca8         __CFRunLoopRun
    4   CoreFoundation                  0x3131b36b4         CFRunLoopRunSpecific
    5   CoreFoundation                  0x313234894         CFRunLoopRun
    6   Mapbox                          0x10351d8e8         mbgl::util::Thread<T>::Thread<T>::lambda::operator()
    7   Mapbox                          0x10351d790         std::__1::thread::thread<T>
    8   libsystem_pthread.dylib         0x3f51cf9a8         _pthread_start
    
    Thread 38 name: com.mapbox.mbgl.Worker 1
    0   libsystem_kernel.dylib          0x382597f64         __psynch_cvwait
    1   libsystem_pthread.dylib         0x3f51d6294         _pthread_cond_wait
    2   libc++.1.dylib                  0x344cc3234         std::__1::condition_variable::wait
    3   Mapbox                          0x103869bd0         std::__1::__deque_base<T>::clear
    4   libsystem_pthread.dylib         0x3f51cf9a8         _pthread_start
    
    Thread 39 name: com.mapbox.mbgl.Worker 2
    0   libsystem_kernel.dylib          0x382597f64         __psynch_cvwait
    1   libsystem_pthread.dylib         0x3f51d6294         _pthread_cond_wait
    2   libc++.1.dylib                  0x344cc3234         std::__1::condition_variable::wait
    3   Mapbox                          0x103869bd0         std::__1::__deque_base<T>::clear
    4   libsystem_pthread.dylib         0x3f51cf9a8         _pthread_start
    
    Thread 40 name: com.mapbox.mbgl.Worker 3
    0   libsystem_kernel.dylib          0x382597f64         __psynch_cvwait
    1   libsystem_pthread.dylib         0x3f51d6294         _pthread_cond_wait
    2   libc++.1.dylib                  0x344cc3234         std::__1::condition_variable::wait
    3   Mapbox                          0x103869bd0         std::__1::__deque_base<T>::clear
    4   libsystem_pthread.dylib         0x3f51cf9a8         _pthread_start
    
    Thread 41 name: com.mapbox.mbgl.Worker 4
    0   libsystem_kernel.dylib          0x382597f64         __psynch_cvwait
    1   libsystem_pthread.dylib         0x3f51d6294         _pthread_cond_wait
    2   libc++.1.dylib                  0x344cc3234         std::__1::condition_variable::wait
    3   Mapbox                          0x103869bd0         std::__1::__deque_base<T>::clear
    4   libsystem_pthread.dylib         0x3f51cf9a8         _pthread_start
    
    Thread 42 name: com.mapbox.mbgl.Worker 1
    0   libsystem_kernel.dylib          0x382597f64         __psynch_cvwait
    1   libsystem_pthread.dylib         0x3f51d6294         _pthread_cond_wait
    2   libc++.1.dylib                  0x344cc3234         std::__1::condition_variable::wait
    3   Mapbox                          0x103869bd0         std::__1::__deque_base<T>::clear
    4   libsystem_pthread.dylib         0x3f51cf9a8         _pthread_start
    
    Thread 43 name: com.mapbox.mbgl.Worker 1
    0   libsystem_kernel.dylib          0x382597f64         __psynch_cvwait
    1   libsystem_pthread.dylib         0x3f51d6294         _pthread_cond_wait
    2   libc++.1.dylib                  0x344cc3234         std::__1::condition_variable::wait
    3   Mapbox                          0x103869bd0         std::__1::__deque_base<T>::clear
    4   libsystem_pthread.dylib         0x3f51cf9a8         _pthread_start
    
    Thread 44 name: com.mapbox.mbgl.Worker 1
    0   libsystem_kernel.dylib          0x382597f64         __psynch_cvwait
    1   libsystem_pthread.dylib         0x3f51d6294         _pthread_cond_wait
    2   libc++.1.dylib                  0x344cc3234         std::__1::condition_variable::wait
    3   Mapbox                          0x103869bd0         std::__1::__deque_base<T>::clear
    4   libsystem_pthread.dylib         0x3f51cf9a8         _pthread_start
    
    Thread 45 name: com.mapbox.mbgl.Worker 1
    0   libsystem_kernel.dylib          0x382597f64         __psynch_cvwait
    1   libsystem_pthread.dylib         0x3f51d6294         _pthread_cond_wait
    2   libc++.1.dylib                  0x344cc3234         std::__1::condition_variable::wait
    3   Mapbox                          0x103869bd0         std::__1::__deque_base<T>::clear
    4   libsystem_pthread.dylib         0x3f51cf9a8         _pthread_start
    
    Thread 46 name: com.mapbox.mbgl.Worker 1
    0   libsystem_kernel.dylib          0x382597f64         __psynch_cvwait
    1   libsystem_pthread.dylib         0x3f51d6294         _pthread_cond_wait
    2   libc++.1.dylib                  0x344cc3234         std::__1::condition_variable::wait
    3   Mapbox                          0x103869bd0         std::__1::__deque_base<T>::clear
    4   libsystem_pthread.dylib         0x3f51cf9a8         _pthread_start
    
    Thread 47 name: com.mapbox.mbgl.Worker 1
    0   libsystem_kernel.dylib          0x382597f64         __psynch_cvwait
    1   libsystem_pthread.dylib         0x3f51d6294         _pthread_cond_wait
    2   libc++.1.dylib                  0x344cc3234         std::__1::condition_variable::wait
    3   Mapbox                          0x103869bd0         std::__1::__deque_base<T>::clear
    4   libsystem_pthread.dylib         0x3f51cf9a8         _pthread_start
    
    Thread 48 name: com.mapbox.mbgl.Worker 1
    0   libsystem_kernel.dylib          0x382597f64         __psynch_cvwait
    1   libsystem_pthread.dylib         0x3f51d6294         _pthread_cond_wait
    2   libc++.1.dylib                  0x344cc3234         std::__1::condition_variable::wait
    3   Mapbox                          0x103869bd0         std::__1::__deque_base<T>::clear
    4   libsystem_pthread.dylib         0x3f51cf9a8         _pthread_start
    
    Thread 49 name: com.mapbox.mbgl.Worker 1
    0   libsystem_kernel.dylib          0x382597f64         __psynch_cvwait
    1   libsystem_pthread.dylib         0x3f51d6294         _pthread_cond_wait
    2   libc++.1.dylib                  0x344cc3234         std::__1::condition_variable::wait
    3   Mapbox                          0x103869bd0         std::__1::__deque_base<T>::clear
    4   libsystem_pthread.dylib         0x3f51cf9a8         _pthread_start
    
    Thread 50 name: com.mapbox.mbgl.Worker 1
    0   libsystem_kernel.dylib          0x382597f64         __psynch_cvwait
    1   libsystem_pthread.dylib         0x3f51d6294         _pthread_cond_wait
    2   libc++.1.dylib                  0x344cc3234         std::__1::condition_variable::wait
    3   Mapbox                          0x103869bd0         std::__1::__deque_base<T>::clear
    4   libsystem_pthread.dylib         0x3f51cf9a8         _pthread_start
    
    Thread 51 name: com.mapbox.mbgl.Worker 1
    0   libsystem_kernel.dylib          0x382597f64         __psynch_cvwait
    1   libsystem_pthread.dylib         0x3f51d6294         _pthread_cond_wait
    2   libc++.1.dylib                  0x344cc3234         std::__1::condition_variable::wait
    3   Mapbox                          0x103869bd0         std::__1::__deque_base<T>::clear
    4   libsystem_pthread.dylib         0x3f51cf9a8         _pthread_start
    
    Thread 52 name: DartWorker
    0   libsystem_kernel.dylib          0x382597f64         __psynch_cvwait
    1   libsystem_pthread.dylib         0x3f51d62c0         _pthread_cond_wait
    2   Flutter                         0x10482e1d4         <redacted>
    3   Flutter                         0x104875874         <redacted>
    4   Flutter                         0x10482dafc         <redacted>
    5   libsystem_pthread.dylib         0x3f51cf9a8         _pthread_start
    
    Thread 53 name: DartWorker
    0   libsystem_kernel.dylib          0x382597f64         __psynch_cvwait
    1   libsystem_pthread.dylib         0x3f51d62c0         _pthread_cond_wait
    2   Flutter                         0x10482e1d4         <redacted>
    3   Flutter                         0x104875874         <redacted>
    4   Flutter                         0x10482dafc         <redacted>
    5   libsystem_pthread.dylib         0x3f51cf9a8         _pthread_start
    
    Thread 54 name: DartWorker
    0   libsystem_kernel.dylib          0x382597f64         __psynch_cvwait
    1   libsystem_pthread.dylib         0x3f51d62c0         _pthread_cond_wait
    2   Flutter                         0x10482e1d4         <redacted>
    3   Flutter                         0x104875874         <redacted>
    4   Flutter                         0x10482dafc         <redacted>
    5   libsystem_pthread.dylib         0x3f51cf9a8         _pthread_start
    
    Thread 55 name: DartWorker
    0   libsystem_kernel.dylib          0x382597f64         __psynch_cvwait
    1   libsystem_pthread.dylib         0x3f51d62c0         _pthread_cond_wait
    2   Flutter                         0x10482e1d4         <redacted>
    3   Flutter                         0x104875874         <redacted>
    4   Flutter                         0x10482dafc         <redacted>
    5   libsystem_pthread.dylib         0x3f51cf9a8         _pthread_start
    
    EOF
    

    Mapbox SDK and iOS are both running on the latest version Flutter Version: 2.010.5

    Reviewed by felix-mittermeier at 2022-05-31 12:48
  • 13. Using `text-variable-anchor` removes label

    Platform: node Mapbox SDK version: 5.0.2

    I understand this is for a platform that is no longer supported, but I suspect this may be something simple that I am missing.

    Steps to trigger behavior

    1. Removed all text layers from the style except one;
    2. Rendered a tile with and without text-variable-anchor (['center', 'top', 'bottom', 'left', 'right']) .

    Expected behavior

    Expect that text-variable-anchor has no effect if there's enough space to render the labels. So the labels are rendered.

    Actual behavior

    Using this style. Without text-variable-anchor the label gets rendered (top). With it, it does not (bottom). See the label San Francisco (code):

    image image

    Code

    const mbgl = require('@mapbox/mapbox-gl-native')
    const request = require('request')
    const utils = require('./utils')
    const config = require('./config')
    const sharp = require('sharp')
    const readline = require('readline')
    const fs = require('fs')
    
    var tile1 = {
      zoom: 11.2,
      width: 4099,
      height: 4099,
      pxWidth: 931,
      pxHeight: 931,
      center: [ -121.892441, 37.638385],
      bearing: 0,
      pitch: 0,
      ratio: 0.2271310075628202
    }
    
    renderTile('tile1', tile1)
    
    function mapRequest(req, callback) {
      var url = req.url
      if (url.indexOf('access_token') === -1) {
        var urlObject = utils.parseURL(url)
        url = utils.makeAPIURL(urlObject, config.ACCESS_TOKEN)
      }
    
      makeRequest(url, callback)
    }
    
    function makeRequest(url, callback) {
      request({
        url: url,
        encoding: null,
        gzip: true
      }, function (err, res, body) {
        if (err) {
          callback(err)
        } else if (res.statusCode == 200) {
          var response = {}
    
          if (res.headers.modified) { response.modified = new Date(res.headers.modified) }
          if (res.headers.expires) { response.expires = new Date(res.headers.expires) }
          if (res.headers.etag) { response.etag = res.headers.etag }
    
          response.data = body
    
          callback(null, response)
        } else {
          callback(new Error(JSON.parse(body).message))
        }
      })
    }
    
    function renderTile(name, tile) {
      var options = {
        request: mapRequest,
        ratio: tile.ratio,
        mode: 'tile'
      }
      var map = new mbgl.Map(options)
    
      map.load(require('./style.json'))
    
      map.render({
        zoom: tile.zoom,
        width: tile.width,
        height:  tile.height,
        center: tile.center,
        bearing: 0,
        pitch: 0,
      }, function(err, buffer) {
          if (err) {
            throw err
          }
    
          map.release()
    
          var image = sharp(buffer, {
              raw: {
                  width: tile.pxWidth,
                  height: tile.pxHeight,
                  channels: 4
              }
          })
    
          image.toFile(name + '.png', function(err) {
              if (err) {
                throw err
              }
          })
      })
    }
    
    Reviewed by pbnsilva at 2022-05-07 10:36
  • 14. building android

    hi based on read me i ran these commands $ git submodule update --init --recursive $ cmake . -B build $ cmake --build build $ MAPBOX_ACCESS_TOKEN=my_access_token_here ./build/platform/glfw/mbgl-glfw every thing is ok and this command runs successfully. but inside ./build/platform/ only this folder glfw/mbgl-glfw is built but i need android folder being build too so i ran following commands: (make android-configuration) (in root project folder) and result : make: *** No rule to make target 'android-configuration'. Stop. how can i resolve this problem?

    Reviewed by imaxkhan at 2022-04-28 14:46
  • 15. Strange lines after zoom-in LineLayer in Android

    Platform: Android Mapbox SDK version: 9.7.1 implementation 'com.mapbox.mapboxsdk:mapbox-android-sdk:9.7.1'

    Steps to trigger behavior

    1. Load map view async + map style

    2. Add a list of latlngs to map as Layer and Source as below:

          val features = mutableListOf<Feature>()
          var coordinateList = ArrayList<Point>()
          var index = 0
          for (item in locations) {
              coordinateList.add(
                  Point.fromLngLat(
                      item.longitude,
                      item.latitude
                  )
              )
      
              val properties = JsonObject()
              properties.addProperty("index", index)
              val feature =
                  Feature.fromGeometry(
                      Point.fromLngLat(item.longitude, item.latitude),
                      properties
                  )
              features.add(feature)
              index += 1
          }
          mapStyle!!.addSource(
              GeoJsonSource(
                  "route-line-source", FeatureCollection.fromFeatures(
                      arrayOf(
                          Feature.fromGeometry(
                              MultiPoint.fromLngLats(coordinateList)
                          )
                      )
                  )
              )
          )
      
          mapStyle!!.addLayer(
              LineLayer("route-line-layer", "route-line-source").withProperties(
                  PropertyFactory.lineCap(Property.LINE_CAP_ROUND),
                  PropertyFactory.lineJoin(Property.LINE_JOIN_ROUND),
                  PropertyFactory.lineWidth(3f),
                  PropertyFactory.lineColor(Color.RED)
              )
          )
      
          val fromFeatures = FeatureCollection.fromFeatures(features)
          mapStyle!!.addSource(GeoJsonSource("index-source", fromFeatures))
          val symbolLayer = SymbolLayer("index-layer", "index-source")
          symbolLayer.setProperties(
              PropertyFactory.textField(Expression.toString(Expression.get("index"))),
              PropertyFactory.textSize(MapFragment.CLUSTER_RADIUS / 2f),
              PropertyFactory.textColor(Color.RED),
              PropertyFactory.textAllowOverlap(true)
          )
          mapStyle!!.addLayer(symbolLayer)
      

    Expected behavior

    The line should always follow and be beneath the index numbers.

    Actual behavior

    It worked well if the camera zoom out < 13. However, when I tried to zoom in the map, I saw a lot of strange lines crossing near the numbers as in the image below. If I zoomed out, the strange lines disappeared.

    It's very easy to reproduce. You can test it with the attached locations.json: locations.json.zip

    Screenshot_20220420_001941

    Reviewed by kingfisherphuoc at 2022-04-19 17:42
  • 16. tile fails to load on timeout even if it is cached

    Platform: Android

    Mapbox SDK version: 9.7.1

    Steps to trigger behavior

    1. View a section of the map (or mark for offline).
    2. Emulate a "bad" network connection on an emulator (I used an "Edge" network type with "Moderate" signal strength)
    3. Restart the app.
    4. Attempt to view the same section of the map.

    Expected behavior

    The cached / offline version of the tile is loaded from the disk whilst a network request is sent to see if there is an update available.

    Actual behavior

    Because a network connection is present, the tile will attempt to be downloaded from the network, however, if the network request to load the tile over a "bad" network exceeds the default 10 seconds timeout it fails and the request is never recovered. In the network profiler, I can see the requests start and then hit the timeout. If I extend the timeout by providing a new okhttp client with different values, the tiles do eventually load and display.

    Reviewed by JRWilding at 2022-04-01 16:17
  • 17. pmd.yml

    Launch Checklist

    • [x] briefly describe the changes in this PR
    • [x] include before/after visuals or gifs if this PR includes visual changes
    • [ ] write tests for all new functionality
    • [x] document any changes to public APIs
    • [x] tagged @mapbox/maps-android @mapbox/maps-ios @mapbox/core-sdk if this PR adds or updates a public API
    • [x] tagged @mapbox/gl-js if this PR includes shader changes or needs a js port
    • [x] apply needs changelog label if a changelog is needed (remove label when added)
    Reviewed by epworth at 2022-03-28 18:34
A spatial analysis library written in Swift for native iOS, macOS, tvOS, watchOS, and Linux applications, ported from Turf.js.

Turf for Swift ?? ?? ?? ?? ⌚️ A spatial analysis library written in Swift for native iOS, macOS, tvOS, watchOS, and Linux applications, ported from Tu

Jun 16, 2022
Use Swift in the macOS command line to build maps.
Use Swift in the macOS command line to build maps.

Use Swift in the macOS command line to build maps. imagefrom A Swift command line utility that gets an image from a URL. Saves the web image as JPEG o

Dec 30, 2021
An iOS map clustering framework targeting MapKit, Google Maps and Mapbox.
An iOS map clustering framework targeting MapKit, Google Maps and Mapbox.

ClusterKit is an elegant and efficiant clustering controller for maps. Its flexible architecture make it very customizable, you can use your own algor

May 27, 2022
Jun 13, 2022
JDSwiftMap is an IOS Native MapKit Library. You can easily make a highly customized HeatMap.
JDSwiftMap is an IOS Native MapKit Library.  You can easily make a highly customized HeatMap.

JDSwiftMap is an IOS Native MapKit Library. You can easily make a highly customized HeatMap. Installation Cocoapods pod 'JDSWiftHeatMap' Usage JDSwi

Jun 18, 2022
Location, motion, and activity recording framework for iOS

LocoKit A Machine Learning based location recording and activity detection framework for iOS. Location and Motion Recording Combined, simplified Core

Jun 13, 2022
Google Directions API helper for iOS, written in Swift
Google Directions API helper for iOS, written in Swift

PXGoogleDirections Google Directions API SDK for iOS, entirely written in Swift. ?? Features Supports all features from the Google Directions API as o

Mar 11, 2022
A Swift wrapper for forward and reverse geocoding of OpenStreetMap data

Nominatim NominatimKit is a Swift wrapper for forward and reverse geocoding of OpenStreetMap data. Why? Geocoding location data on iOS requires the us

Feb 5, 2022
MSFlightMapView allows you to easily add and animate geodesic flights to Google map

MSFlightMapView Demo Requirements iOS 10.0+ Xcode 9.0+ Installation Just add the MSFlightMapView folder to your project. or use CocoaPods: pod 'MSFlig

Apr 24, 2022
πŸ—ΊοΈ MAPS.ME β€” Offline OpenStreetMap maps for iOS and Android
πŸ—ΊοΈ MAPS.ME β€” Offline OpenStreetMap maps for iOS and Android

MAPS.ME MAPS.ME is an open source cross-platform offline maps application, built on top of crowd-sourced OpenStreetMap data. It was publicly released

Jun 20, 2022
3D Shoot'em Up written with OpenGL ES 1.1/2.0 running on iOS, Android, Windows and MacOS X.
3D Shoot'em Up written with OpenGL ES 1.1/2.0 running on iOS, Android, Windows and MacOS X.

SHMUP This is the source code of "SHMUP" a 3D Shoot 'em up that I wrote in 2009. It is very inspired of Treasure Ikaruga, the engine runs on iOS, Andr

Jun 20, 2022
React Native utility library around image and video files for getting metadata like MIME type, timestamp, duration, and dimensions. Works on iOS and Android using Java and Obj-C, instead of Node πŸš€.

Qeepsake React Native File Utils Extracts information from image and video files including MIME type, duration (video), dimensions, and timestamp. The

Apr 30, 2022
Android/iOS Apps created to practice with different iOS/Android Tech. These apps were built to have similar feature sets using native Android/iOS.

AgilityFitTodayApp Android/iOS Apps created to practice with different iOS/Android Tech. These apps were built to have similar feature sets using nati

Feb 25, 2022
Automate box any value! Print log without any format control symbol! Change debug habit thoroughly!

LxDBAnything Automate box any value! Print log without any format control symbol! Change debug habit thoroughly! Installation You only need drag LxD

May 16, 2022
Card-based view controller for apps that display content cards with accompanying maps, similar to Apple Maps.

TripGo Card View Controller This is a repo for providing the card-based design for TripGo as well as the TripKitUI SDK by SkedGo. Specs 1. Basic funct

May 26, 2022
Tutorial GraphQL + Node Express + MySQL, and sample for Android / iOS client

GraphQL-tutorial Tutorial for GraphQL + Node Express + MySQL, and sample for Android / iOS client Blog NeoRoman's GraphQL-tutorial (Korean) Materials

Aug 2, 2021
MKOverlayRenderer.setNeedsDisplay Causes MKTileOverlayRenderer To Re-Render Tiles
MKOverlayRenderer.setNeedsDisplay Causes MKTileOverlayRenderer To Re-Render Tiles

MKOverlayRenderer.setNeedsDisplay Causes MKTileOverlayRenderer To Re-Render Tiles Bug Report ID FB9957545 Note: this is still broken as of iOS 15 (Xco

Mar 16, 2022
Profiling / Debugging assist tools for iOS. (Memory Leak, OOM, ANR, Hard Stalling, Network, OpenGL, Time Profile ...)
Profiling / Debugging assist tools for iOS. (Memory Leak, OOM, ANR, Hard Stalling, Network, OpenGL, Time Profile ...)

MTHawkeye Readme δΈ­ζ–‡η‰ˆζœ¬ MTHawkeye is profiling, debugging tools for iOS used in Meitu. It's designed to help iOS developers improve development producti

Jun 16, 2022
An iOS library for SwiftUI to create draggable sheet experiences similar to iOS applications like Maps and Stocks.

An iOS library for SwiftUI to create draggable sheet experiences similar to iOS applications like Maps and Stocks.

Jun 15, 2022
Lightweight library for web server applications in Swift on macOS and Linux powered by coroutines.
Lightweight library for web server applications in Swift on macOS and Linux powered by coroutines.

Why Zewo? β€’ Support β€’ Community β€’ Contributing Zewo Zewo is a lightweight library for web applications in Swift. What sets Zewo apart? Zewo is not a w

May 30, 2022