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

Overview

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

Issues
  • Offline maps

    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.

    feature offline 
    opened by ljbade 94
  • Implement Responsive User Location Tracking Mode

    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

    Android 
    opened by bleege 80
  • Expose a generic Android View Marker API

    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

    feature Android 
    opened by tobrun 70
  • point clustering

    point clustering

    Once we have #170 GeoJSON with arbitrary points complete, then we need to be able to cluster overlay points for parity with existing mobile APIs.

    feature iOS Android 
    opened by incanus 62
  • merge GeoJSON vector tiles work

    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

    feature 
    opened by incanus 59
  • Add arm64 As Supported ABI

    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

    build Android 
    opened by bleege 56
  • Freezes when going back and forth between activites

    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

    bug Android 
    opened by erf 55
  • Android crashes on startup

    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

    Android crash 
    opened by iCyberon 54
  • Get Core GL C++ Into Android Project

    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

    refactor Android 
    opened by bleege 52
  • Map tiles do not load on Android

    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?

    bug Android 
    opened by ljbade 51
  • Help react-native-mapbox-gl maintainers to support Mapbox 10

    Help react-native-mapbox-gl maintainers to support Mapbox 10

    See discussion here: https://github.com/react-native-mapbox-gl/maps/pull/1222

    TL;DR:

    • Mapbox 10 is great
    • Mapbox stopped supporting react-native in 2019
    • Upgrading react-native-mapbox-gl to Mapbox 10 takes effort: estimated at 150 hours
    • More and more users are using the official Mapbox SDK through react-native-mapbox-gl

    Any chance Mapbox could help out with engineering effort or financial aid so that @mfazekas can get the upgrade done?

    opened by mvanroon 3
  • Map box request Cancel Second time on android 11

    Map box request Cancel Second time on android 11

    com.app.amaze D/Mbgl-HttpRequest: [HTTP] This request was cancelled (https://api.mapbox.com/v4/mapbox.mapbox-streets-v8,mapbox.mapbox-terrain-v2/12/2936/1727.vector.pbf?access_token=xxxxa3VzaHNociIsImEiOiJjazdudGVvcHAwMXV2M2Zzd3J4dmx1ZG12In0.3Fc4H9cTf6zzSxhGJmb0gg&sku=100kw0pyv0o193bcd002f2d4770bd540b3f6a140a49). This is expected for tiles that were being prefetched but are no longer needed for the map to render.

    Platform: Android 11 Mapbox SDK version: 9.7.1

    Steps to trigger behavior

    1. Opening Map on the bottom sheet
    2. First time open fine
    3. After closing the app and trying again the same bottom sheet is not opening

    Expected behavior

    It should work like first time

    Actual behavior

    opened by AndroidASAPP 1
  • Map going blank for missing tiles instead of zooming lower level tiles

    Map going blank for missing tiles instead of zooming lower level tiles

    I hope this this is correct place to post this issue. This issue is happening on Mapbox Android SDK v9.6.2. I'm using my own tile server to serve vector tiles with openmaptiles style to the mapbox map. To achieve this, I've taken the openmaptiles style json and replaced the sources url with my own tileserver's url.

    "tiles": [
        "http://localhost:7000/tiles/{z}/{x}/{y}"
      ]
    

    For a certain requirement, I only need to load the entire planet's tile but only for zoom 0-5. So when the server receives a request for a tile for zoom 6 onwards it responds with a 404 error code and a simple message in the body. The problem is that when the map requests for tiles for zoom 6, it receives a 404 but shows a blank instead of simply zooming and expanding the zoom 5 tile. The first GIF is showing this behaviour -

    However, after the zoom 5 tiles are loaded if I stop my server, when the map requests zoom 6 tiles, the server address is not resolved and zooming into the map zoom 5 tiles are expanded and a blank is not shown. This same behaviour is what I want the map to emulate even when the map receives a 404 from the server. How can I do this? The second GIF shows when I stop the server and zoom 5 tiles are expanded.

    20211102_211335

    20211102_211858

    Thank you.

    opened by kuwapa 0
  • Telemetry Settings cannot be changed programmatically

    Telemetry Settings cannot be changed programmatically

    Platform: Android Mapbox SDK version: 10.0.0

    Note

    This is a crosspost of https://github.com/mapbox/mapbox-maps-android/issues/772 because I don't know which is the right repository to post this issue.

    Steps to trigger behavior

    By default, telemetry seems to be enabled. We would like to integrate the settings into the app overall settings, and toggle the settings from there, which it seems it was possible, see:

    mapbox/mapbox-gl-native#13304 mapbox/mapbox-gl-native-android#90 (comment)

    These functions are not exposed anymore. With some digging I found the following:

    val telemetry = mapView.getPlugin<AttributionPlugin>(Plugin.MAPBOX_ATTRIBUTION_PLUGIN_ID)!!
    	.getMapAttributionDelegate().telemetry()
    telemetry.disableTelemetrySession()
    telemetry.setUserTelemetryRequestState(false)
    

    Expected behavior

    Telemetry is disabled, MapboxTelemetryService is stopped.

    Actual behavior

    MapboxTelemetryService keeps running, and neither seems the Telemetry to be disabled.

    opened by stolzda 1
  • How does mapbox GL native support CGCS2000?

    How does mapbox GL native support CGCS2000?

    How does mapbox GL native support CGCS2000?

    opened by fsdhr1 0
  • Crash when the user is geolocated and the camera of the map is moving to user location

    Crash when the user is geolocated and the camera of the map is moving to user location

    Sometimes app crash at start up when the user is geolocated and the camera of the map is moving to the user location. It happens :

    • when app start after long time in background
    • after the app has just been killed and reopened

    This crash is happening in Android 9+ only and we never noticed this kind of crash in an earliest version, regardless of the device manufacturer.

    Configuration Platform: Android Mapbox SDK version: 9.6.0

    here is the stacktrace coming from our production play store console :


    pid: 0, tid: 0 >>> apk_id <<<
    
    backtrace:
      #00  pc 00000000000898f8  /apex/com.android.runtime/lib64/bionic/libc.so (abort+168)
      #00  pc 0000000000373998  /data/app/~~VcvAPxU9WU0DxuPzNC9RSw==/apk_id-jv-ElCCJHVwbwIiQt2XpyQ==/base.apk!lib/arm64-v8a/libmapbox-gl.so (offset 0x1058000)
      #00  pc 0000000000373b08  /data/app/~~VcvAPxU9WU0DxuPzNC9RSw==/apk_id-jv-ElCCJHVwbwIiQt2XpyQ==/base.apk!lib/arm64-v8a/libmapbox-gl.so (offset 0x1058000)
      #00  pc 00000000003710c8  /data/app/~~VcvAPxU9WU0DxuPzNC9RSw==/apk_id-jv-ElCCJHVwbwIiQt2XpyQ==/base.apk!lib/arm64-v8a/libmapbox-gl.so (offset 0x1058000)
      #00  pc 00000000003706f4  /data/app/~~VcvAPxU9WU0DxuPzNC9RSw==/apk_id-jv-ElCCJHVwbwIiQt2XpyQ==/base.apk!lib/arm64-v8a/libmapbox-gl.so (offset 0x1058000)
      #00  pc 0000000000370650  /data/app/~~VcvAPxU9WU0DxuPzNC9RSw==/apk_id-jv-ElCCJHVwbwIiQt2XpyQ==/base.apk!lib/arm64-v8a/libmapbox-gl.so (offset 0x1058000) (__cxa_throw+112)
      #00  pc 0000000000094808  /data/app/~~VcvAPxU9WU0DxuPzNC9RSw==/apk_id-jv-ElCCJHVwbwIiQt2XpyQ==/base.apk!lib/arm64-v8a/libmapbox-gl.so (offset 0x1058000)
      #00  pc 00000000000996e0  /data/app/~~VcvAPxU9WU0DxuPzNC9RSw==/apk_id-jv-ElCCJHVwbwIiQt2XpyQ==/base.apk!lib/arm64-v8a/libmapbox-gl.so (offset 0x1058000)
      #00  pc 00000000000a99e0  /data/app/~~VcvAPxU9WU0DxuPzNC9RSw==/apk_id-jv-ElCCJHVwbwIiQt2XpyQ==/base.apk!lib/arm64-v8a/libmapbox-gl.so (offset 0x1058000)
      #00  pc 00000000000a1e1c  /data/app/~~VcvAPxU9WU0DxuPzNC9RSw==/apk_id-jv-ElCCJHVwbwIiQt2XpyQ==/base.apk!lib/arm64-v8a/libmapbox-gl.so (offset 0x1058000)
      #00  pc 00000000000ec9b8  /data/app/~~VcvAPxU9WU0DxuPzNC9RSw==/apk_id-jv-ElCCJHVwbwIiQt2XpyQ==/base.apk!lib/arm64-v8a/libmapbox-gl.so (offset 0x1058000)
      #00  pc 00000000000ec758  /data/app/~~VcvAPxU9WU0DxuPzNC9RSw==/apk_id-jv-ElCCJHVwbwIiQt2XpyQ==/base.apk!lib/arm64-v8a/libmapbox-gl.so (offset 0x1058000)
      #00  pc 00000000000fb2f0  /data/app/~~VcvAPxU9WU0DxuPzNC9RSw==/apk_id-jv-ElCCJHVwbwIiQt2XpyQ==/base.apk!lib/arm64-v8a/libmapbox-gl.so (offset 0x1058000)
      #00  pc 0000000000200b80  /data/app/~~VcvAPxU9WU0DxuPzNC9RSw==/apk_id-jv-ElCCJHVwbwIiQt2XpyQ==/base.apk!lib/arm64-v8a/libmapbox-gl.so (offset 0x1058000)
      #00  pc 00000000000eb0ec  /apex/com.android.runtime/lib64/bionic/libc.so (__pthread_start(void*)+64)
      #00  pc 000000000008b850  /apex/com.android.runtime/lib64/bionic/libc.so (__start_thread+64)
    

    And another stacktrace with the steps described below :

    --------- beginning of crash
    09-17 14:10:20.342  5954  9748 F libc    : Fatal signal 6 (SIGABRT), code -1 (SI_QUEUE) in tid 9748 (Worker 1), pid 5954 (el.app_id.recette)
    09-17 14:10:20.496  9760  9760 F DEBUG   : *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
    09-17 14:10:20.496  9760  9760 F DEBUG   : Build fingerprint: 'samsung/c1seea/c1s:10/QP1A.190711.020/N980FXXU1ATIC:user/release-keys'
    09-17 14:10:20.496  9760  9760 F DEBUG   : Revision: '23'
    09-17 14:10:20.496  9760  9760 F DEBUG   : ABI: 'arm64'
    09-17 14:10:20.497  9760  9760 F DEBUG   : Timestamp: 2021-09-17 14:10:20+0200
    09-17 14:10:20.497  9760  9760 F DEBUG   : pid: 5954, tid: 9748, name: Worker 1  >>> apk_id.recette <<<
    09-17 14:10:20.497  9760  9760 F DEBUG   : uid: 10302
    09-17 14:10:20.497  9760  9760 F DEBUG   : signal 6 (SIGABRT), code -1 (SI_QUEUE), fault addr --------
    09-17 14:10:20.497  9760  9760 F DEBUG   : Abort message: 'terminating with uncaught exception of type jni::PendingJavaException'
    09-17 14:10:20.497  9760  9760 F DEBUG   :     x0  0000000000000000  x1  0000000000002614  x2  0000000000000006  x3  0000007885506030
    09-17 14:10:20.497  9760  9760 F DEBUG   :     x4  fefeff6d6e68736f  x5  fefeff6d6e68736f  x6  fefeff6d6e68736f  x7  7f7f7f7f7f7f7f7f
    09-17 14:10:20.497  9760  9760 F DEBUG   :     x8  00000000000000f0  x9  78d0ee4c0945c692  x10 0000000000000001  x11 0000000000000000
    09-17 14:10:20.497  9760  9760 F DEBUG   :     x12 fffffff0fffffbdf  x13 00000000614485ac  x14 0014249abdd7d028  x15 00003e688fff4048
    09-17 14:10:20.497  9760  9760 F DEBUG   :     x16 00000079194cc8c0  x17 00000079194a9940  x18 0000007818078000  x19 0000000000001742
    09-17 14:10:20.497  9760  9760 F DEBUG   :     x20 0000000000002614  x21 00000000ffffffff  x22 ffffff80ffffffc8  x23 0000007885506280
    09-17 14:10:20.497  9760  9760 F DEBUG   :     x24 0000007885506160  x25 00000078855061a0  x26 0000007885507020  x27 000000791a70c020
    09-17 14:10:20.497  9760  9760 F DEBUG   :     x28 0000007882a6b020  x29 00000078855060d0
    09-17 14:10:20.497  9760  9760 F DEBUG   :     sp  0000007885506010  lr  000000791945e108  pc  000000791945e134
    09-17 14:10:20.498  9760  9760 F DEBUG   : 
    09-17 14:10:20.498  9760  9760 F DEBUG   : backtrace:
    09-17 14:10:20.498  9760  9760 F DEBUG   :       #00 pc 0000000000083134  /apex/com.android.runtime/lib64/bionic/libc.so (abort+160) (BuildId: f89dc12fdaab6218ce150d0882ab21bc)
    09-17 14:10:20.498  9760  9760 F DEBUG   :       #01 pc 0000000000373998  /data/app/apk_id.recette-I7gDQ9b_oRwRWGgp5BMVyw==/base.apk!libmapbox-gl.so (offset 0x1096000) (BuildId: 2ae9c34201bb928eef5e23f0fe3a5a2574096e11)
    09-17 14:10:20.498  9760  9760 F DEBUG   :       #02 pc 0000000000373b08  /data/app/apk_id.recette-I7gDQ9b_oRwRWGgp5BMVyw==/base.apk!libmapbox-gl.so (offset 0x1096000) (BuildId: 2ae9c34201bb928eef5e23f0fe3a5a2574096e11)
    09-17 14:10:20.498  9760  9760 F DEBUG   :       #03 pc 00000000003710c8  /data/app/apk_id.recette-I7gDQ9b_oRwRWGgp5BMVyw==/base.apk!libmapbox-gl.so (offset 0x1096000) (BuildId: 2ae9c34201bb928eef5e23f0fe3a5a2574096e11)
    09-17 14:10:20.498  9760  9760 F DEBUG   :       #04 pc 00000000003706f4  /data/app/apk_id.recette-I7gDQ9b_oRwRWGgp5BMVyw==/base.apk!libmapbox-gl.so (offset 0x1096000) (BuildId: 2ae9c34201bb928eef5e23f0fe3a5a2574096e11)
    09-17 14:10:20.498  9760  9760 F DEBUG   :       #05 pc 0000000000370650  /data/app/apk_id.recette-I7gDQ9b_oRwRWGgp5BMVyw==/base.apk!libmapbox-gl.so (offset 0x1096000) (__cxa_throw+112) (BuildId: 2ae9c34201bb928eef5e23f0fe3a5a2574096e11)
    09-17 14:10:20.498  9760  9760 F DEBUG   :       #06 pc 0000000000094808  /data/app/apk_id.recette-I7gDQ9b_oRwRWGgp5BMVyw==/base.apk!libmapbox-gl.so (offset 0x1096000) (BuildId: 2ae9c34201bb928eef5e23f0fe3a5a2574096e11)
    09-17 14:10:20.498  9760  9760 F DEBUG   :       #07 pc 00000000000996e0  /data/app/apk_id.recette-I7gDQ9b_oRwRWGgp5BMVyw==/base.apk!libmapbox-gl.so (offset 0x1096000) (BuildId: 2ae9c34201bb928eef5e23f0fe3a5a2574096e11)
    09-17 14:10:20.498  9760  9760 F DEBUG   :       #08 pc 00000000000a99e0  /data/app/apk_id.recette-I7gDQ9b_oRwRWGgp5BMVyw==/base.apk!libmapbox-gl.so (offset 0x1096000) (BuildId: 2ae9c34201bb928eef5e23f0fe3a5a2574096e11)
    09-17 14:10:20.498  9760  9760 F DEBUG   :       #09 pc 00000000000a1e1c  /data/app/apk_id.recette-I7gDQ9b_oRwRWGgp5BMVyw==/base.apk!libmapbox-gl.so (offset 0x1096000) (BuildId: 2ae9c34201bb928eef5e23f0fe3a5a2574096e11)
    09-17 14:10:20.498  9760  9760 F DEBUG   :       #10 pc 00000000000ec9b8  /data/app/apk_id.recette-I7gDQ9b_oRwRWGgp5BMVyw==/base.apk!libmapbox-gl.so (offset 0x1096000) (BuildId: 2ae9c34201bb928eef5e23f0fe3a5a2574096e11)
    09-17 14:10:20.498  9760  9760 F DEBUG   :       #11 pc 00000000000ec758  /data/app/apk_id.recette-I7gDQ9b_oRwRWGgp5BMVyw==/base.apk!libmapbox-gl.so (offset 0x1096000) (BuildId: 2ae9c34201bb928eef5e23f0fe3a5a2574096e11)
    09-17 14:10:20.498  9760  9760 F DEBUG   :       #12 pc 00000000000fb2f0  /data/app/apk_id.recette-I7gDQ9b_oRwRWGgp5BMVyw==/base.apk!libmapbox-gl.so (offset 0x1096000) (BuildId: 2ae9c34201bb928eef5e23f0fe3a5a2574096e11)
    09-17 14:10:20.498  9760  9760 F DEBUG   :       #13 pc 0000000000200b80  /data/app/apk_id.recette-I7gDQ9b_oRwRWGgp5BMVyw==/base.apk!libmapbox-gl.so (offset 0x1096000) (BuildId: 2ae9c34201bb928eef5e23f0fe3a5a2574096e11)
    09-17 14:10:20.498  9760  9760 F DEBUG   :       #14 pc 00000000000e28e0  /apex/com.android.runtime/lib64/bionic/libc.so (__pthread_start(void*)+36) (BuildId: f89dc12fdaab6218ce150d0882ab21bc)
    09-17 14:10:20.498  9760  9760 F DEBUG   :       #15 pc 000000000008503c  /apex/com.android.runtime/lib64/bionic/libc.so (__start_thread+64) (BuildId: f89dc12fdaab6218ce150d0882ab21bc)
    09-17 14:12:55.077  9830 10325 F libc    : Fatal signal 6 (SIGABRT), code -1 (SI_QUEUE) in tid 10325 (Worker 1), pid 9830 (el.app_id.recette)
    09-17 14:12:55.199 10337 10337 F DEBUG   : *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
    09-17 14:12:55.199 10337 10337 F DEBUG   : Build fingerprint: 'samsung/c1seea/c1s:10/QP1A.190711.020/N980FXXU1ATIC:user/release-keys'
    09-17 14:12:55.199 10337 10337 F DEBUG   : Revision: '23'
    09-17 14:12:55.199 10337 10337 F DEBUG   : ABI: 'arm64'
    09-17 14:12:55.200 10337 10337 F DEBUG   : Timestamp: 2021-09-17 14:12:55+0200
    09-17 14:12:55.200 10337 10337 F DEBUG   : pid: 9830, tid: 10325, name: Worker 1  >>> apk_id.recette <<<
    09-17 14:12:55.200 10337 10337 F DEBUG   : uid: 10302
    09-17 14:12:55.200 10337 10337 F DEBUG   : signal 6 (SIGABRT), code -1 (SI_QUEUE), fault addr --------
    09-17 14:12:55.200 10337 10337 F DEBUG   : Abort message: 'terminating with uncaught exception of type jni::PendingJavaException'
    09-17 14:12:55.200 10337 10337 F DEBUG   :     x0  0000000000000000  x1  0000000000002855  x2  0000000000000006  x3  00000077ee30c030
    09-17 14:12:55.200 10337 10337 F DEBUG   :     x4  fefeff6d6e68736f  x5  fefeff6d6e68736f  x6  fefeff6d6e68736f  x7  7f7f7f7f7f7f7f7f
    09-17 14:12:55.200 10337 10337 F DEBUG   :     x8  00000000000000f0  x9  78d0ee4c0945c692  x10 0000000000000001  x11 0000000000000000
    09-17 14:12:55.200 10337 10337 F DEBUG   :     x12 fffffff0fffffbdf  x13 0000000061448647  x14 000468484f2ace28  x15 0000319b84ebb660
    09-17 14:12:55.200 10337 10337 F DEBUG   :     x16 00000079194cc8c0  x17 00000079194a9940  x18 00000077ccf82000  x19 0000000000002666
    09-17 14:12:55.200 10337 10337 F DEBUG   :     x20 0000000000002855  x21 00000000ffffffff  x22 ffffff80ffffffc8  x23 00000077ee30c280
    09-17 14:12:55.200 10337 10337 F DEBUG   :     x24 00000077ee30c160  x25 00000077ee30c1a0  x26 00000077ee30d020  x27 000000791a70c020
    09-17 14:12:55.200 10337 10337 F DEBUG   :     x28 0000007825cb5620  x29 00000077ee30c0d0
    09-17 14:12:55.200 10337 10337 F DEBUG   :     sp  00000077ee30c010  lr  000000791945e108  pc  000000791945e134
    09-17 14:12:55.201 10337 10337 F DEBUG   : 
    09-17 14:12:55.201 10337 10337 F DEBUG   : backtrace:
    09-17 14:12:55.201 10337 10337 F DEBUG   :       #00 pc 0000000000083134  /apex/com.android.runtime/lib64/bionic/libc.so (abort+160) (BuildId: f89dc12fdaab6218ce150d0882ab21bc)
    09-17 14:12:55.201 10337 10337 F DEBUG   :       #01 pc 0000000000373998  /data/app/apk_id.recette-I7gDQ9b_oRwRWGgp5BMVyw==/base.apk!libmapbox-gl.so (offset 0x1096000) (BuildId: 2ae9c34201bb928eef5e23f0fe3a5a2574096e11)
    09-17 14:12:55.201 10337 10337 F DEBUG   :       #02 pc 0000000000373b08  /data/app/apk_id.recette-I7gDQ9b_oRwRWGgp5BMVyw==/base.apk!libmapbox-gl.so (offset 0x1096000) (BuildId: 2ae9c34201bb928eef5e23f0fe3a5a2574096e11)
    09-17 14:12:55.202 10337 10337 F DEBUG   :       #03 pc 00000000003710c8  /data/app/apk_id.recette-I7gDQ9b_oRwRWGgp5BMVyw==/base.apk!libmapbox-gl.so (offset 0x1096000) (BuildId: 2ae9c34201bb928eef5e23f0fe3a5a2574096e11)
    09-17 14:12:55.202 10337 10337 F DEBUG   :       #04 pc 00000000003706f4  /data/app/apk_id.recette-I7gDQ9b_oRwRWGgp5BMVyw==/base.apk!libmapbox-gl.so (offset 0x1096000) (BuildId: 2ae9c34201bb928eef5e23f0fe3a5a2574096e11)
    09-17 14:12:55.202 10337 10337 F DEBUG   :       #05 pc 0000000000370650  /data/app/apk_id.recette-I7gDQ9b_oRwRWGgp5BMVyw==/base.apk!libmapbox-gl.so (offset 0x1096000) (__cxa_throw+112) (BuildId: 2ae9c34201bb928eef5e23f0fe3a5a2574096e11)
    09-17 14:12:55.202 10337 10337 F DEBUG   :       #06 pc 0000000000094808  /data/app/apk_id.recette-I7gDQ9b_oRwRWGgp5BMVyw==/base.apk!libmapbox-gl.so (offset 0x1096000) (BuildId: 2ae9c34201bb928eef5e23f0fe3a5a2574096e11)
    09-17 14:12:55.202 10337 10337 F DEBUG   :       #07 pc 00000000000996e0  /data/app/apk_id.recette-I7gDQ9b_oRwRWGgp5BMVyw==/base.apk!libmapbox-gl.so (offset 0x1096000) (BuildId: 2ae9c34201bb928eef5e23f0fe3a5a2574096e11)
    09-17 14:12:55.202 10337 10337 F DEBUG   :       #08 pc 00000000000a99e0  /data/app/apk_id.recette-I7gDQ9b_oRwRWGgp5BMVyw==/base.apk!libmapbox-gl.so (offset 0x1096000) (BuildId: 2ae9c34201bb928eef5e23f0fe3a5a2574096e11)
    09-17 14:12:55.202 10337 10337 F DEBUG   :       #09 pc 00000000000a1e1c  /data/app/apk_id.recette-I7gDQ9b_oRwRWGgp5BMVyw==/base.apk!libmapbox-gl.so (offset 0x1096000) (BuildId: 2ae9c34201bb928eef5e23f0fe3a5a2574096e11)
    09-17 14:12:55.202 10337 10337 F DEBUG   :       #10 pc 00000000000ec9b8  /data/app/apk_id.recette-I7gDQ9b_oRwRWGgp5BMVyw==/base.apk!libmapbox-gl.so (offset 0x1096000) (BuildId: 2ae9c34201bb928eef5e23f0fe3a5a2574096e11)
    09-17 14:12:55.202 10337 10337 F DEBUG   :       #11 pc 00000000000ec758  /data/app/apk_id.recette-I7gDQ9b_oRwRWGgp5BMVyw==/base.apk!libmapbox-gl.so (offset 0x1096000) (BuildId: 2ae9c34201bb928eef5e23f0fe3a5a2574096e11)
    09-17 14:12:55.202 10337 10337 F DEBUG   :       #12 pc 00000000000fb2f0  /data/app/apk_id.recette-I7gDQ9b_oRwRWGgp5BMVyw==/base.apk!libmapbox-gl.so (offset 0x1096000) (BuildId: 2ae9c34201bb928eef5e23f0fe3a5a2574096e11)
    09-17 14:12:55.202 10337 10337 F DEBUG   :       #13 pc 0000000000200b80  /data/app/apk_id.recette-I7gDQ9b_oRwRWGgp5BMVyw==/base.apk!libmapbox-gl.so (offset 0x1096000) (BuildId: 2ae9c34201bb928eef5e23f0fe3a5a2574096e11)
    09-17 14:12:55.202 10337 10337 F DEBUG   :       #14 pc 00000000000e28e0  /apex/com.android.runtime/lib64/bionic/libc.so (__pthread_start(void*)+36) (BuildId: f89dc12fdaab6218ce150d0882ab21bc)
    09-17 14:12:55.202 10337 10337 F DEBUG   :       #15 pc 000000000008503c  /apex/com.android.runtime/lib64/bionic/libc.so (__start_thread+64) (BuildId: f89dc12fdaab6218ce150d0882ab21bc)
    

    Thank you for your help.

    opened by badyous 0
  • add/remove annotations and overlays too fast causes deadlock

    add/remove annotations and overlays too fast causes deadlock

    I am having an issue just like #14998 that @bsterry posted, where I am receiving a deadlock when adding or removing annotations or overlays too quickly. Part of the stacktrace:

    0   libsystem_kernel.dylib        	0x0000000183935130 __psynch_mutexwait + 8
    1   libsystem_pthread.dylib       	0x0000000183ad8604 _pthread_mutex_lock_wait + 96
    2   libsystem_pthread.dylib       	0x0000000183ad8550 _pthread_mutex_lock_slow$VARIANT$mp + 260
    3   libc++.1.dylib                	0x000000018301ffc4 std::__1::mutex::lock+ 241604 () + 12
    4   Mapbox                        	0x0000000102e732e8 mbgl::AnnotationManager::addAnnotation+ 357096 (mapbox::util::variant<mbgl::SymbolAnnotation, mbgl::LineAnnotation, mbgl::FillAnnotation> const&) + 56
    5   Mapbox                        	0x0000000102ecff58 mbgl::Map::addAnnotation+ 737112 (mapbox::util::variant<mbgl::SymbolAnnotation, mbgl::LineAnnotation, mbgl::FillAnnotation> const&) + 44
    6   Mapbox                        	0x00000001031cd104 -[MGLMapView addAnnotations:] + 3870980 (MGLMapView.mm:0)
    7   Mapbox                        	0x00000001031cf470 -[MGLMapView addOverlay:] + 3880048 (MGLMapView.mm:4870)
    

    The solution that @julianrex mentioned was to use DispatchQueue.main.async, which I have done this in my subclass.

    - (void)addAnnotation:(id<MGLAnnotation>)annotation {
    
        dispatch_async(dispatch_get_main_queue(), ^{
    
            [super addAnnotation:annotation];
    
        });
    
    }
    
    - (void)removeAnnotation:(id<MGLAnnotation>)annotation {
    
        dispatch_async(dispatch_get_main_queue(), ^{
    
            [super removeAnnotation:annotation];
    
        });
    
    }
    

    However, my users testing this still are having crashes with this new code. @julianrex were you suggesting that DispatchQueue.main.async should only be used for removeAnnotations:?

    Expected behavior

    Annotations and overlays should be added and removed without error.

    Actual behavior

    Deadlock and crashing if they are added or removed too fast such as when using a clustering framework.

    Configuration

    Mapbox SDK versions: 5.10 iOS/macOS versions: iOS 13, iOS 14 Device/simulator models: iPhone 11 Pro Max, iPhone 11 Pro, iPhone 6 Xcode version: 12.5

    opened by nnhubbard 1
  • OfflineManager does not detect shared resources between offline packs with parallel downloads

    OfflineManager does not detect shared resources between offline packs with parallel downloads

    Hi, I am experiencing a potentially expensive issue where I want the user to be able to use several styles offline that all use the same data source. As per Mapbox docs those offline packs should be able to share resources, but when I create the offline packs asynchronously in parallel, tiles are being downloaded multiple times, resulting in higher API usage.

    Platform: React Native Mapbox SDK version: 9.1.0

    Steps to trigger behavior

    1. Create two offline packs in parallel (async) with different custom styles that use the same tileset as their data source.

    Expected behavior

    1. completedTileCount for one pack is about 120.
    2. Check account statistics and see that 120 tiles have been downloaded.

    Actual behavior

    1. completedTileCount for one pack is about 120.
    2. Check account statistics and see that 240 tiles have been downloaded.
    opened by sedot42 0
  • SDK throws ClassNotFoundException on location update

    SDK throws ClassNotFoundException on location update

    Logs

    E/Parcel: Class not found when unmarshalling: com.google.android.gms.location.LocationResult
        java.lang.ClassNotFoundException: com.google.android.gms.location.LocationResult
            at java.lang.Class.classForName(Native Method)
            at java.lang.Class.forName(Class.java:454)
            at `android.os.Parcel.readParcelableCreator(Parcel.java:3350)`
            at android.os.Parcel.readParcelable(Parcel.java:3284)
            at android.os.Parcel.readValue(Parcel.java:3186)
            at android.os.Parcel.readArrayMapInternal(Parcel.java:3579)
            at android.os.BaseBundle.initializeFromParcelLocked(BaseBundle.java:292)
            at android.os.BaseBundle.unparcel(BaseBundle.java:236)
            at android.os.BaseBundle.containsKey(BaseBundle.java:516)
            at android.content.Intent.hasExtra(Intent.java:8699)
            at com.mapbox.android.core.location.LocationEngineResult.hasResult(LocationEngineResult.java:107)
            at com.mapbox.android.core.location.LocationEngineResult.extractAndroidResult(LocationEngineResult.java:101)
            at com.mapbox.android.core.location.LocationEngineResult.extractResult(LocationEngineResult.java:92)
            at com.mapbox.android.telemetry.location.LocationUpdatesBroadcastReceiver.onReceive(LocationUpdatesBroadcastReceiver.java:35)
            at android.app.LoadedApk$ReceiverDispatcher$Args.lambda$getRunnable$0$LoadedApk$ReceiverDispatcher$Args(LoadedApk.java:1666)
            at android.app.-$$Lambda$LoadedApk$ReceiverDispatcher$Args$_BumDX2UKsnxLVrE6UJsJZkotuA.run(Unknown Source:2)
            at android.os.Handler.handleCallback(Handler.java:938)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:246)
            at android.app.ActivityThread.main(ActivityThread.java:8506)
            at java.lang.reflect.Method.invoke(Native Method)
            at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:602)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1130)
         Caused by: java.lang.ClassNotFoundException: Didn't find class "com.google.android.gms.location.LocationResult" on path: DexPathList[[zip file "/data/app/~~3pL-4VJuj_AMndMHyzS1rw==/fr.free.nrw.commons-LJG8Rbbi_x5QV2DsDAzC7Q==/base.apk"],nativeLibraryDirectories=[/data/app/~~3pL-4VJuj_AMndMHyzS1rw==/fr.free.nrw.commons-LJG8Rbbi_x5QV2DsDAzC7Q==/lib/arm64, /data/app/~~3pL-4VJuj_AMndMHyzS1rw==/fr.free.nrw.commons-LJG8Rbbi_x5QV2DsDAzC7Q==/base.apk!/lib/arm64-v8a, /system/lib64, /system/system_ext/lib64]]
            at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:207)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
            at java.lang.Class.classForName(Native Method) 
            at java.lang.Class.forName(Class.java:454) 
            at android.os.Parcel.readParcelableCreator(Parcel.java:3350) 
            at android.os.Parcel.readParcelable(Parcel.java:3284) 
            at android.os.Parcel.readValue(Parcel.java:3186) 
            at android.os.Parcel.readArrayMapInternal(Parcel.java:3579) 
            at android.os.BaseBundle.initializeFromParcelLocked(BaseBundle.java:292) 
            at android.os.BaseBundle.unparcel(BaseBundle.java:236) 
            at android.os.BaseBundle.containsKey(BaseBundle.java:516) 
            at android.content.Intent.hasExtra(Intent.java:8699) 
            at com.mapbox.android.core.location.LocationEngineResult.hasResult(LocationEngineResult.java:107) 
            at com.mapbox.android.core.location.LocationEngineResult.extractAndroidResult(LocationEngineResult.java:101) 
            at com.mapbox.android.core.location.LocationEngineResult.extractResult(LocationEngineResult.java:92) 
            at com.mapbox.android.telemetry.location.LocationUpdatesBroadcastReceiver.onReceive(LocationUpdatesBroadcastReceiver.java:35) 
            at android.app.LoadedApk$ReceiverDispatcher$Args.lambda$getRunnable$0$LoadedApk$ReceiverDispatcher$Args(LoadedApk.java:1666) 
            at android.app.-$$Lambda$LoadedApk$ReceiverDispatcher$Args$_BumDX2UKsnxLVrE6UJsJZkotuA.run(Unknown Source:2) 
            at android.os.Handler.handleCallback(Handler.java:938) 
            at android.os.Handler.dispatchMessage(Handler.java:99) 
            at android.os.Looper.loop(Looper.java:246) 
            at android.app.ActivityThread.main(ActivityThread.java:8506) 
            at java.lang.reflect.Method.invoke(Native Method) 
            at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:602) 
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1130) 
    E/LocationUpdateReceiver: android.os.BadParcelableException: ClassNotFoundException when unmarshalling: com.google.android.gms.location.LocationResult
    D/LocationServiceManager: on location changed
    D/NearbyParentFragment: Location slightly changed
    E/Parcel: Class not found when unmarshalling: com.google.android.gms.location.LocationResult
        java.lang.ClassNotFoundException: com.google.android.gms.location.LocationResult
            at java.lang.Class.classForName(Native Method)
            at java.lang.Class.forName(Class.java:454)
            at android.os.Parcel.readParcelableCreator(Parcel.java:3350)
            at android.os.Parcel.readParcelable(Parcel.java:3284)
            at android.os.Parcel.readValue(Parcel.java:3186)
            at android.os.Parcel.readArrayMapInternal(Parcel.java:3579)
            at android.os.BaseBundle.initializeFromParcelLocked(BaseBundle.java:292)
            at android.os.BaseBundle.unparcel(BaseBundle.java:236)
            at android.os.BaseBundle.containsKey(BaseBundle.java:516)
            at android.content.Intent.hasExtra(Intent.java:8699)
            at com.mapbox.android.core.location.LocationEngineResult.hasResult(LocationEngineResult.java:107)
            at com.mapbox.android.core.location.LocationEngineResult.extractAndroidResult(LocationEngineResult.java:101)
            at com.mapbox.android.core.location.LocationEngineResult.extractResult(LocationEngineResult.java:92)
            at com.mapbox.android.telemetry.location.LocationUpdatesBroadcastReceiver.onReceive(LocationUpdatesBroadcastReceiver.java:35)
            at android.app.LoadedApk$ReceiverDispatcher$Args.lambda$getRunnable$0$LoadedApk$ReceiverDispatcher$Args(LoadedApk.java:1666)
            at android.app.-$$Lambda$LoadedApk$ReceiverDispatcher$Args$_BumDX2UKsnxLVrE6UJsJZkotuA.run(Unknown Source:2)
            at android.os.Handler.handleCallback(Handler.java:938)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:246)
            at android.app.ActivityThread.main(ActivityThread.java:8506)
            at java.lang.reflect.Method.invoke(Native Method)
            at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:602)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1130)
         Caused by: java.lang.ClassNotFoundException: Didn't find class "com.google.android.gms.location.LocationResult" on path: DexPathList[[zip file "/data/app/~~3pL-4VJuj_AMndMHyzS1rw==/fr.free.nrw.commons-LJG8Rbbi_x5QV2DsDAzC7Q==/base.apk"],nativeLibraryDirectories=[/data/app/~~3pL-4VJuj_AMndMHyzS1rw==/fr.free.nrw.commons-LJG8Rbbi_x5QV2DsDAzC7Q==/lib/arm64, /data/app/~~3pL-4VJuj_AMndMHyzS1rw==/fr.free.nrw.commons-LJG8Rbbi_x5QV2DsDAzC7Q==/base.apk!/lib/arm64-v8a, /system/lib64, /system/system_ext/lib64]]
            at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:207)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
            at java.lang.Class.classForName(Native Method) 
            at java.lang.Class.forName(Class.java:454) 
            at android.os.Parcel.readParcelableCreator(Parcel.java:3350) 
            at android.os.Parcel.readParcelable(Parcel.java:3284) 
            at android.os.Parcel.readValue(Parcel.java:3186) 
            at android.os.Parcel.readArrayMapInternal(Parcel.java:3579) 
            at android.os.BaseBundle.initializeFromParcelLocked(BaseBundle.java:292) 
            at android.os.BaseBundle.unparcel(BaseBundle.java:236) 
            at android.os.BaseBundle.containsKey(BaseBundle.java:516) 
            at android.content.Intent.hasExtra(Intent.java:8699) 
            at com.mapbox.android.core.location.LocationEngineResult.hasResult(LocationEngineResult.java:107) 
            at com.mapbox.android.core.location.LocationEngineResult.extractAndroidResult(LocationEngineResult.java:101) 
            at com.mapbox.android.core.location.LocationEngineResult.extractResult(LocationEngineResult.java:92) 
            at com.mapbox.android.telemetry.location.LocationUpdatesBroadcastReceiver.onReceive(LocationUpdatesBroadcastReceiver.java:35) 
            at android.app.LoadedApk$ReceiverDispatcher$Args.lambda$getRunnable$0$LoadedApk$ReceiverDispatcher$Args(LoadedApk.java:1666) 
            at android.app.-$$Lambda$LoadedApk$ReceiverDispatcher$Args$_BumDX2UKsnxLVrE6UJsJZkotuA.run(Unknown Source:2) 
            at android.os.Handler.handleCallback(Handler.java:938) 
            at android.os.Handler.dispatchMessage(Handler.java:99) 
            at android.os.Looper.loop(Looper.java:246) 
            at android.app.ActivityThread.main(ActivityThread.java:8506) 
            at java.lang.reflect.Method.invoke(Native Method) 
            at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:602) 
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1130) 
    E/LocationUpdateReceiver: android.os.BadParcelableException: ClassNotFoundException when unmarshalling: com.google.android.gms.location.LocationResult
    E/Parcel: Class not found when unmarshalling: com.google.android.gms.location.LocationResult
        java.lang.ClassNotFoundException: com.google.android.gms.location.LocationResult
            at java.lang.Class.classForName(Native Method)
            at java.lang.Class.forName(Class.java:454)
            at android.os.Parcel.readParcelableCreator(Parcel.java:3350)
            at android.os.Parcel.readParcelable(Parcel.java:3284)
            at android.os.Parcel.readValue(Parcel.java:3186)
            at android.os.Parcel.readArrayMapInternal(Parcel.java:3579)
            at android.os.BaseBundle.initializeFromParcelLocked(BaseBundle.java:292)
            at android.os.BaseBundle.unparcel(BaseBundle.java:236)
            at android.os.BaseBundle.containsKey(BaseBundle.java:516)
            at android.content.Intent.hasExtra(Intent.java:8699)
            at com.mapbox.android.core.location.LocationEngineResult.hasResult(LocationEngineResult.java:107)
            at com.mapbox.android.core.location.LocationEngineResult.extractAndroidResult(LocationEngineResult.java:101)
            at com.mapbox.android.core.location.LocationEngineResult.extractResult(LocationEngineResult.java:92)
            at com.mapbox.android.telemetry.location.LocationUpdatesBroadcastReceiver.onReceive(LocationUpdatesBroadcastReceiver.java:35)
            at android.app.LoadedApk$ReceiverDispatcher$Args.lambda$getRunnable$0$LoadedApk$ReceiverDispatcher$Args(LoadedApk.java:1666)
            at android.app.-$$Lambda$LoadedApk$ReceiverDispatcher$Args$_BumDX2UKsnxLVrE6UJsJZkotuA.run(Unknown Source:2)
            at android.os.Handler.handleCallback(Handler.java:938)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:246)
            at android.app.ActivityThread.main(ActivityThread.java:8506)
            at java.lang.reflect.Method.invoke(Native Method)
            at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:602)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1130)
         Caused by: java.lang.ClassNotFoundException: Didn't find class "com.google.android.gms.location.LocationResult" on path: DexPathList[[zip file "/data/app/~~3pL-4VJuj_AMndMHyzS1rw==/fr.free.nrw.commons-LJG8Rbbi_x5QV2DsDAzC7Q==/base.apk"],nativeLibraryDirectories=[/data/app/~~3pL-4VJuj_AMndMHyzS1rw==/fr.free.nrw.commons-LJG8Rbbi_x5QV2DsDAzC7Q==/lib/arm64, /data/app/~~3pL-4VJuj_AMndMHyzS1rw==/fr.free.nrw.commons-LJG8Rbbi_x5QV2DsDAzC7Q==/base.apk!/lib/arm64-v8a, /system/lib64, /system/system_ext/lib64]]
            at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:207)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
            at java.lang.Class.classForName(Native Method) 
            at java.lang.Class.forName(Class.java:454) 
            at android.os.Parcel.readParcelableCreator(Parcel.java:3350) 
            at android.os.Parcel.readParcelable(Parcel.java:3284) 
            at android.os.Parcel.readValue(Parcel.java:3186) 
            at android.os.Parcel.readArrayMapInternal(Parcel.java:3579) 
            at android.os.BaseBundle.initializeFromParcelLocked(BaseBundle.java:292) 
            at android.os.BaseBundle.unparcel(BaseBundle.java:236) 
            at android.os.BaseBundle.containsKey(BaseBundle.java:516) 
            at android.content.Intent.hasExtra(Intent.java:8699) 
            at com.mapbox.android.core.location.LocationEngineResult.hasResult(LocationEngineResult.java:107) 
            at com.mapbox.android.core.location.LocationEngineResult.extractAndroidResult(LocationEngineResult.java:101) 
            at com.mapbox.android.core.location.LocationEngineResult.extractResult(LocationEngineResult.java:92) 
            at com.mapbox.android.telemetry.location.LocationUpdatesBroadcastReceiver.onReceive(LocationUpdatesBroadcastReceiver.java:35) 
            at android.app.LoadedApk$ReceiverDispatcher$Args.lambda$getRunnable$0$LoadedApk$ReceiverDispatcher$Args(LoadedApk.java:1666) 
            at android.app.-$$Lambda$LoadedApk$ReceiverDispatcher$Args$_BumDX2UKsnxLVrE6UJsJZkotuA.run(Unknown Source:2) 
            at android.os.Handler.handleCallback(Handler.java:938) 
            at android.os.Handler.dispatchMessage(Handler.java:99) 
            at android.os.Looper.loop(Looper.java:246) 
            at android.app.ActivityThread.main(ActivityThread.java:8506) 
            at java.lang.reflect.Method.invoke(Native Method) 
            at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:602) 
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1130) 
    E/LocationUpdateReceiver: android.os.BadParcelableException: ClassNotFoundException when unmarshalling: com.google.android.gms.location.LocationResult
    E/Parcel: Class not found when unmarshalling: com.google.android.gms.location.LocationResult
        java.lang.ClassNotFoundException: com.google.android.gms.location.LocationResult
            at java.lang.Class.classForName(Native Method)
            at java.lang.Class.forName(Class.java:454)
            at android.os.Parcel.readParcelableCreator(Parcel.java:3350)
            at android.os.Parcel.readParcelable(Parcel.java:3284)
            at android.os.Parcel.readValue(Parcel.java:3186)
            at android.os.Parcel.readArrayMapInternal(Parcel.java:3579)
            at android.os.BaseBundle.initializeFromParcelLocked(BaseBundle.java:292)
            at android.os.BaseBundle.unparcel(BaseBundle.java:236)
            at android.os.BaseBundle.containsKey(BaseBundle.java:516)
            at android.content.Intent.hasExtra(Intent.java:8699)
            at com.mapbox.android.core.location.LocationEngineResult.hasResult(LocationEngineResult.java:107)
            at com.mapbox.android.core.location.LocationEngineResult.extractAndroidResult(LocationEngineResult.java:101)
            at com.mapbox.android.core.location.LocationEngineResult.extractResult(LocationEngineResult.java:92)
            at com.mapbox.android.telemetry.location.LocationUpdatesBroadcastReceiver.onReceive(LocationUpdatesBroadcastReceiver.java:35)
            at android.app.LoadedApk$ReceiverDispatcher$Args.lambda$getRunnable$0$LoadedApk$ReceiverDispatcher$Args(LoadedApk.java:1666)
            at android.app.-$$Lambda$LoadedApk$ReceiverDispatcher$Args$_BumDX2UKsnxLVrE6UJsJZkotuA.run(Unknown Source:2)
            at android.os.Handler.handleCallback(Handler.java:938)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:246)
            at android.app.ActivityThread.main(ActivityThread.java:8506)
            at java.lang.reflect.Method.invoke(Native Method)
            at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:602)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1130)
         Caused by: java.lang.ClassNotFoundException: Didn't find class "com.google.android.gms.location.LocationResult" on path: DexPathList[[zip file "/data/app/~~3pL-4VJuj_AMndMHyzS1rw==/fr.free.nrw.commons-LJG8Rbbi_x5QV2DsDAzC7Q==/base.apk"],nativeLibraryDirectories=[/data/app/~~3pL-4VJuj_AMndMHyzS1rw==/fr.free.nrw.commons-LJG8Rbbi_x5QV2DsDAzC7Q==/lib/arm64, /data/app/~~3pL-4VJuj_AMndMHyzS1rw==/fr.free.nrw.commons-LJG8Rbbi_x5QV2DsDAzC7Q==/base.apk!/lib/arm64-v8a, /system/lib64, /system/system_ext/lib64]]
            at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:207)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
            at java.lang.Class.classForName(Native Method) 
            at java.lang.Class.forName(Class.java:454) 
            at android.os.Parcel.readParcelableCreator(Parcel.java:3350) 
            at android.os.Parcel.readParcelable(Parcel.java:3284) 
            at android.os.Parcel.readValue(Parcel.java:3186) 
            at android.os.Parcel.readArrayMapInternal(Parcel.java:3579) 
            at android.os.BaseBundle.initializeFromParcelLocked(BaseBundle.java:292) 
            at android.os.BaseBundle.unparcel(BaseBundle.java:236) 
            at android.os.BaseBundle.containsKey(BaseBundle.java:516) 
            at android.content.Intent.hasExtra(Intent.java:8699) 
            at com.mapbox.android.core.location.LocationEngineResult.hasResult(LocationEngineResult.java:107) 
            at com.mapbox.android.core.location.LocationEngineResult.extractAndroidResult(LocationEngineResult.java:101) 
            at com.mapbox.android.core.location.LocationEngineResult.extractResult(LocationEngineResult.java:92) 
            at com.mapbox.android.telemetry.location.LocationUpdatesBroadcastReceiver.onReceive(LocationUpdatesBroadcastReceiver.java:35) 
            at android.app.LoadedApk$ReceiverDispatcher$Args.lambda$getRunnable$0$LoadedApk$ReceiverDispatcher$Args(LoadedApk.java:1666) 
            at android.app.-$$Lambda$LoadedApk$ReceiverDispatcher$Args$_BumDX2UKsnxLVrE6UJsJZkotuA.run(Unknown Source:2) 
            at android.os.Handler.handleCallback(Handler.java:938) 
            at android.os.Handler.dispatchMessage(Handler.java:99) 
            at android.os.Looper.loop(Looper.java:246) 
            at android.app.ActivityThread.main(ActivityThread.java:8506) 
            at java.lang.reflect.Method.invoke(Native Method) 
            at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:602) 
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1130) 
    E/LocationUpdateReceiver: android.os.BadParcelableException: ClassNotFoundException when unmarshalling: com.google.android.gms.location.LocationResult
    E/Parcel: Class not found when unmarshalling: com.google.android.gms.location.LocationResult
        java.lang.ClassNotFoundException: com.google.android.gms.location.LocationResult
            at java.lang.Class.classForName(Native Method)
            at java.lang.Class.forName(Class.java:454)
            at android.os.Parcel.readParcelableCreator(Parcel.java:3350)
            at android.os.Parcel.readParcelable(Parcel.java:3284)
            at android.os.Parcel.readValue(Parcel.java:3186)
            at android.os.Parcel.readArrayMapInternal(Parcel.java:3579)
            at android.os.BaseBundle.initializeFromParcelLocked(BaseBundle.java:292)
            at android.os.BaseBundle.unparcel(BaseBundle.java:236)
            at android.os.BaseBundle.containsKey(BaseBundle.java:516)
            at android.content.Intent.hasExtra(Intent.java:8699)
            at com.mapbox.android.core.location.LocationEngineResult.hasResult(LocationEngineResult.java:107)
            at com.mapbox.android.core.location.LocationEngineResult.extractAndroidResult(LocationEngineResult.java:101)
            at com.mapbox.android.core.location.LocationEngineResult.extractResult(LocationEngineResult.java:92)
            at com.mapbox.android.telemetry.location.LocationUpdatesBroadcastReceiver.onReceive(LocationUpdatesBroadcastReceiver.java:35)
            at android.app.LoadedApk$ReceiverDispatcher$Args.lambda$getRunnable$0$LoadedApk$ReceiverDispatcher$Args(LoadedApk.java:1666)
            at android.app.-$$Lambda$LoadedApk$ReceiverDispatcher$Args$_BumDX2UKsnxLVrE6UJsJZkotuA.run(Unknown Source:2)
            at android.os.Handler.handleCallback(Handler.java:938)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:246)
            at android.app.ActivityThread.main(ActivityThread.java:8506)
            at java.lang.reflect.Method.invoke(Native Method)
            at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:602)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1130)
         Caused by: java.lang.ClassNotFoundException: Didn't find class "com.google.android.gms.location.LocationResult" on path: DexPathList[[zip file "/data/app/~~3pL-4VJuj_AMndMHyzS1rw==/fr.free.nrw.commons-LJG8Rbbi_x5QV2DsDAzC7Q==/base.apk"],nativeLibraryDirectories=[/data/app/~~3pL-4VJuj_AMndMHyzS1rw==/fr.free.nrw.commons-LJG8Rbbi_x5QV2DsDAzC7Q==/lib/arm64, /data/app/~~3pL-4VJuj_AMndMHyzS1rw==/fr.free.nrw.commons-LJG8Rbbi_x5QV2DsDAzC7Q==/base.apk!/lib/arm64-v8a, /system/lib64, /system/system_ext/lib64]]
            at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:207)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
            at java.lang.Class.classForName(Native Method) 
            at java.lang.Class.forName(Class.java:454) 
            at android.os.Parcel.readParcelableCreator(Parcel.java:3350) 
            at android.os.Parcel.readParcelable(Parcel.java:3284) 
            at android.os.Parcel.readValue(Parcel.java:3186) 
            at android.os.Parcel.readArrayMapInternal(Parcel.java:3579) 
            at android.os.BaseBundle.initializeFromParcelLocked(BaseBundle.java:292) 
            at android.os.BaseBundle.unparcel(BaseBundle.java:236) 
            at android.os.BaseBundle.containsKey(BaseBundle.java:516) 
            at android.content.Intent.hasExtra(Intent.java:8699) 
            at com.mapbox.android.core.location.LocationEngineResult.hasResult(LocationEngineResult.java:107) 
            at com.mapbox.android.core.location.LocationEngineResult.extractAndroidResult(LocationEngineResult.java:101) 
            at com.mapbox.android.core.location.LocationEngineResult.extractResult(LocationEngineResult.java:92) 
            at com.mapbox.android.telemetry.location.LocationUpdatesBroadcastReceiver.onReceive(LocationUpdatesBroadcastReceiver.java:35) 
            at android.app.LoadedApk$ReceiverDispatcher$Args.lambda$getRunnable$0$LoadedApk$ReceiverDispatcher$Args(LoadedApk.java:1666) 
            at android.app.-$$Lambda$LoadedApk$ReceiverDispatcher$Args$_BumDX2UKsnxLVrE6UJsJZkotuA.run(Unknown Source:2) 
            at android.os.Handler.handleCallback(Handler.java:938) 
            at android.os.Handler.dispatchMessage(Handler.java:99) 
            at android.os.Looper.loop(Looper.java:246) 
            at android.app.ActivityThread.main(ActivityThread.java:8506) 
            at java.lang.reflect.Method.invoke(Native Method) 
            at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:602) 
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1130) 
    E/LocationUpdateReceiver: android.os.BadParcelableException: ClassNotFoundException when unmarshalling: com.google.android.gms.location.LocationResult
    

    Platform: : Android Mapbox SDK version: : 9.1.0

    Steps to trigger behavior

    After giving the location permission, along with our registered listeners to location, mapbox also listen to location updates, which is when the crash happens. We are using the mapbox in the commons app - issue https://github.com/commons-app/apps-android-commons/pull/4423. Login to commons app and click on nearby, give location permission

    Expected behavior

    The app should not crash.

    Actual behavior

    The app crashes

    opened by ashishkumar468 0
  • Inability to simultaneously use with MapboxMaps 10

    Inability to simultaneously use with MapboxMaps 10

    Steps to reproduce

    Add to Podfile both of current versions of SDK and run pod install

    pod 'Mapbox-iOS-SDK', '6.3.0'
    pod 'MapboxMaps', '10.0.0-rc.4'
    

    Expected behavior

    Both libraries installed correctly.

    Actual behavior

    Libraries use completely different hardcoded versions of MapboxMobileEvents

    [!] CocoaPods could not find compatible versions for pod "MapboxMobileEvents":
      In snapshot (Podfile.lock):
        MapboxMobileEvents (= 1.0.2)
    
      In Podfile:
        Mapbox-iOS-SDK (= 6.3.0) was resolved to 6.3.0, which depends on
          MapboxMobileEvents (~> 0.10.4)
    
        MapboxMaps (= 10.0.0-rc.4) was resolved to 10.0.0-rc.4, which depends on
          MapboxMobileEvents (= 1.0.2)
    
    Specs satisfying the `MapboxMobileEvents (= 1.0.2), MapboxMobileEvents (= 1.0.2), MapboxMobileEvents (~> 0.10.4)` dependency were found, but they required a higher minimum deployment target.
    
    

    Configuration

    Mapbox SDK versions: 6.3.0 and 10.0.0-rc.4 iOS/macOS versions: 11.4 (20F71) Device/simulator models: none Xcode version: 12.5.1 (12E507)

    opened by nab0y4enko 0
Releases(maps-v1.6.0)
  • maps-v1.6.0(Apr 30, 2020)

    ✨ New features

    • [core] Add support for Polygon, MultiPolygon geometry types in distance expression. (#16446)

    • [core] Introduce Source::setMinimumTileUpdateInterval API (#16416)

      The Source::setMinimumTileUpdateInterval(Duration) method sets the minimum tile update interval, which is used to throttle the tile update network requests.

      The corresponding Source::getMinimumTileUpdateInterval() getter is added too.

      Default minimum tile update interval value is Duration::zero().

    • [core] Indroduce distance expression. (#16397)

      The distance expression returns the shortest distance between two geometries. The returned value can be consumed as an input into another expression for changing a paint or layout property or filtering features by distance.

      Currently, the distance expression supports Point, MultiPoint, LineString, MultiLineString geometry types.

    • [core] Introduce style::Source::setVolatile()/isVolatile() API (#16422)

      The Source::setVolatile(bool) method sets a flag defining whether or not the fetched tiles for the given source should be stored in the local cache.

      The corresponding Source::isVolatile() getter is added too.

      By default, the source is not volatile.

    • [ios, macos] Allow specifying multiple fonts or font families for local font rendering (#16253)

      By default, CJK characters are now set in the font specified by the text-font layout property. If the named font is not installed on the device or bundled with the application, the characters are set in one of the fallback fonts passed into the localFontFamily parameter of mbgl::Renderer::Renderer() and mbgl::MapSnapshotter::MapSnapshotter(). This parameter can now contain a list of font family names, font display names, and font PostScript names, each name separated by a newline.

    • [core] Move logging off the main thread (#16325)

    • Add source property to limit parent's tile overscale factor (#16347)

      The new property sets a limit for how much parent tile can be overscaled.

    • [core][tile mode] Introduce API to collect placed symbols data (#16339)

      The following methods are added to the Renderer class in implemented in the Tile map mode:

      • collectPlacedSymbolData() enables or disables collecting of the placed symbols data

      • getPlacedSymbolsData() if collecting of the placed symbols data is enabled, returns the reference to the PlacedSymbolData vector holding the collected data.

    • [core] Enable circle-sort-key property (#15875)

      Adds support for circle-sort-key property, consistent with symbol-sort-key.

      Sorts drawing order by sort key both within-tile and cross-tile.

    • [core] Add LocationIndicator layer (#16340)

      Adds a new layer type, location-indicator, that can be used to add a source-less indicator to the map, comprising raster images and a precision radius in meters.

    • Add generic setter for Layer's 'source' property (#16406)

    🐞 Bug fixes

    • [core][tile mode] Labels priority fixes (#16432)

      This change does the following:

      • strictly arranges all the intersecting labels accordingly to the style-defined priorities
      • fixes placement order of the variable labels. Before this change, all variable labels that could potentially intersect tile borders were placed first, breaking the style label placement priority order. Now, all the variable labels, which do not actually intersect the tile borders, are placed accordingly to the style-defined priorities
    • [ios, macos] Fixed error receiving local file URL response (#16428)

    • [ios, macos] Corrected metrics of locally rendered fonts (#16253)

      CJK characters are now laid out according to the font, so fonts with nonsquare glyphs have the correct kerning. This also fixes an issue where the baseline for CJK characters was too low compared to non-CJK characters.

    • [core][tile mode] Reduce cut-off labels (part 2) (#16369)

      Now, the intersecting symbols are placed across all layers symbol by symbol according to the following rules:

      1. First we look, which of the tile border(s) the symbol intersects and prioritize the the symbol placement accordingly (high priority -> low priority): vertical & horizontal -> vertical -> horizontal
      2. For the symbols that intersect the same tile border(s), assuming the tile border split symbol into several sections, we look at the minimal section length. The symbol with a larger minimal section length is placed first.
      3. For the symbols that intersect the same tile border(s), and have equal minimal section length, we look at the anchor coordinates.
      4. Finally, if all the previous criteria are the same, we look at the symbol key hashes.
    • [core][tile mode] Fix variable placement for labels with the icon-text-fit property set (#16382)

      The symbolIntersectsTileEdges() util in mbgl::TilePlacement now considers icon shift for the variable symbols with enabled icon-text-fit setting, thus providing more accurate results.

    • [core] Correctly log a warning instead of crashing when a non-existent image is attempted to be removed. (#16391)

    • [core] Fix segfault resulting from an invalid geometry (#16409)

    • [macos] Restored support for macOS 10.11–10.14 (#16412)

    Source code(tar.gz)
    Source code(zip)
  • maps-v1.5.2(Apr 27, 2020)

  • maps-v1.6.0-rc.2(Apr 25, 2020)

    ✨ New features

    • [core] Introduce Source::setMinimumTileUpdateInterval API (#16416)

      The Source::setMinimumTileUpdateInterval(Duration) method sets the minimum tile update interval, which is used to throttle the tile update network requests.

      The corresponding Source::getMinimumTileUpdateInterval() getter is added too.

      Default minimum tile update interval value is Duration::zero().

    • [core] Introduce distance expression. (#16397)

      The distance expression returns the shortest distance between two geometries. The returned value can be consumed as an input into another expression for changing a paint or layout property or filtering features by distance.

      Currently, the distance expression supports Point, MultiPoint, LineString, MultiLineString geometry types.

    • [core] Introduce style::Source::setVolatile()/isVolatile() API (#16422)

      The Source::setVolatile(bool) method sets a flag defining whether or not the fetched tiles for the given source should be stored in the local cache.

      The corresponding Source::isVolatile() getter is added too.

      By default, the source is not volatile.

    • [ios, macos] Allow specifying multiple fonts or font families for local font rendering (#16253)

      By default, CJK characters are now set in the font specified by the text-font layout property. If the named font is not installed on the device or bundled with the application, the characters are set in one of the fallback fonts passed into the localFontFamily parameter of mbgl::Renderer::Renderer() and mbgl::MapSnapshotter::MapSnapshotter(). This parameter can now contain a list of font family names, font display names, and font PostScript names, each name separated by a newline.

    🐞 Bug fixes

    • [ios, macos] Fixed error receiving local file URL response (#16428)

    • [ios, macos] Corrected metrics of locally rendered fonts (#16253)

      CJK characters are now laid out according to the font, so fonts with nonsquare glyphs have the correct kerning. This also fixes an issue where the baseline for CJK characters was too low compared to non-CJK characters.

    Source code(tar.gz)
    Source code(zip)
  • maps-v1.6.0-rc.1(Apr 20, 2020)

    ✨ New features

    • [core] Move logging off the main thread (#16325)

    • Add source property to limit parent's tile overscale factor (#16347)

      The new property sets a limit for how much parent tile can be overscaled.

    • [core][tile mode] Introduce API to collect placed symbols data (#16339)

      The following methods are added to the Renderer class in implemented in the Tile map mode:

      • collectPlacedSymbolData() enables or disables collecting of the placed symbols data

      • getPlacedSymbolsData() if collecting of the placed symbols data is enabled, returns the reference to the PlacedSymbolData vector holding the collected data.

    • [core] Enable circle-sort-key property (#15875)

      Adds support for circle-sort-key property, consistent with symbol-sort-key.

      Sorts drawing order by sort key both within-tile and cross-tile.

    • [core] Add LocationIndicator layer (#16340)

      Adds a new layer type, location-indicator, that can be used to add a source-less indicator to the map, comprising raster images and a precision radius in meters.

    • Add generic setter for Layer's 'source' property (#16406)

    🐞 Bug fixes

    • [core][tile mode] Reduce cut-off labels (part 2) (#16369)

      Now, the intersecting symbols are placed across all layers symbol by symbol according to the following rules:

      1. First we look, which of the tile border(s) the symbol intersects and prioritize the the symbol placement accordingly (high priority -> low priority): vertical & horizontal -> vertical -> horizontal
      2. For the symbols that intersect the same tile border(s), assuming the tile border split symbol into several sections, we look at the minimal section length. The symbol with a larger minimal section length is placed first.
      3. For the symbols that intersect the same tile border(s), and have equal minimal section length, we look at the anchor coordinates.
      4. Finally, if all the previous criteria are the same, we look at the symbol key hashes.
    • [core][tile mode] Fix variable placement for labels with the icon-text-fit property set (#16382)

      The symbolIntersectsTileEdges() util in mbgl::TilePlacement now considers icon shift for the variable symbols with enabled icon-text-fit setting, thus providing more accurate results.

    • [core] Correctly log a warning instead of crashing when a non-existent image is attempted to be removed. (#16391)

    • [core] Fix segfault resulting from an invalid geometry (#16409)

    Source code(tar.gz)
    Source code(zip)
  • maps-v1.5.1(Apr 3, 2020)

    maps-v1.5.1

    🐞 Bug fixes

    • [core] Fix assert in gfx resources cleanup (#16349)

      Fix a resource leak assertion in gl::Context::~Context() that is evaluating false in scenarios where graphics context has been marked as lost.

    • Hillshade bucket fix for mapbox-gl-native-ios #240 (#16362)

      When dem tiles are loaded, border in neighboring tiles is updated, too leading to bucket re-upload. if std::move moved indices / vertices previously, they are empty and we get crash. Re-upload requires that only DEM texture is re-uploaded, not the quad vertices and indices.

    Source code(tar.gz)
    Source code(zip)
  • maps-v1.5.0(Mar 26, 2020)

    maps-v1.5.0

    ✨ New features

    • [core] Add Renderer::clearData() (#16323)

      The newly added Renderer::clearData() method allows to clear render data and thus save memory and make sure outdated tiles are not shown. It clears data more agressively than Renderer::reduceMemoryUse() does, as it clears not only the cache but all orchestration data, including the data used by the currently rendered frame.

    • [android] Add jni binding for styleable snapshotter (#16286)

    • [core] Ability to set generic layer properties using setProperty method (#16324) This change enables the following new keys for the mbgl::Layer::setProperty() API:

      • "filter" invokes setFilter()
      • "minzoom" invokes setMinZoom()
      • "maxzoom" invokes setMaxZoom()
      • "source-layer" invokes setSourceLayer()

      The newly-added API is used in the style-conversion code, which made this code much simpler.

    • [android] Expose getLayer, getSource and Observer interface for snapshotter (#16338)

    🐞 Bug fixes

    • [core] Use TileCoordinates instead of LngLat for within expression calculation (#16319)

      Fix the issue that within expression evaluates point features inconsistently across zoom levels if the point lies near the boundary of a GeoJSON object (#16301)

    • [core][tile mode] Reduce cut-off labels (#16336)

      Place tile intersecting labels first, across all the layers. Thus we reduce the amount of label cut-offs in Tile mode.

      Before, labels were arranged within one symbol layer (one bucket),which was not enough for several symbol layers being placed at the same time.

    • [core] Fix issue that within expression returns incorrect results for geometries crossing the anti-meridian (#16330)

    Source code(tar.gz)
    Source code(zip)
  • maps-v1.4.1(Mar 16, 2020)

    maps-v1.4.1

    🐞 Bug fixes

    • [android] Fix wrong method call in map_snapshotter (#16308)

      In map_snapshotter, a wrong method call will cause Sanpshotter not works with a style url in Android. This change makes it call the right method to let Snapshotter works.

    Source code(tar.gz)
    Source code(zip)
  • maps-v1.4.0(Mar 13, 2020)

    maps-v1.4.0

    ✨ New features

    • [android] Add jni binding for line-sort-key and fill-sort-key (#16256)

      With this change, android sdk will be able to get sort key for LineLayer and FillLayer.

    • Styleable MapSnapshotter (#16268)

      New feature provides means of modifying style of a MapSnapshotter. The new API enables several use-cases, such as: adding route overlays, removing extra information (layers) from a base style, adding custom images that are missing from a style.

    • [core] Improve stability of symbol placement when the map is tilted (#16287)

      These changes improve performance and bring more stability to the symbol placement for the tilted view, which is mainly used for navigation scenarios.

    🐞 Bug fixes

    • [core] Fix iterators in addRegularDash() (#16249)

      Fixes possible crashes when using styles with line patterns.

    • [default] Fix possible crash at RunLoop::wake() (#16255)

    • [android] Update toGeoJSON in android_conversion.hpp (#16243)

      Before this chage, toGeoJSON method in android_conversion.hpp could not convert an Object (Map in android) to GeoJSON object.

      But within expression needs to accept an Object and then convert it to the GeoJSON object, now toGeoJSON method can convert both string and Object to GeoJSON.

    • [core] Fix within expression algorithm so that false value will be returned when point is on the boundary. Allow using different GeoJSON formats as arguments of within expression.(#16232)

      A valid GeoJSON argument should contain one of the following types: "Feature", "FeatureCollection","Polygon" or "MultiPolygon".

    • [core] [tile mode] placement algorithm must consider icons bounding boxes (#16277)

      Tile mode placement algorithm now checks if bounding boxes for both label text and icon are intersecting the edges of the tiles.

      Before, it checked only text bounding boxes and thus label icons might have got cut off.

    • [core] Calculate size of an ambient cache without offline region's resources (#15622)

      Resources that belong to an offline region, should not contribute to the amount of space available in the ambient cache.

    • [core][tile mode] Fix assertion at line-center placement handling (#16293)

      The Symbol Intersects Tile Edges placement algorithm should not be applied to the symbols with line-center placement.

    • Fixed using of the in expression as a layer filter (#16272)

      The bug was caused by mbgl::style::conversion::isExpression() always returning false for the in expression.

    🧩 Architectural changes

    • Changes to MapSnapshotter threading model (#16268)

      Snapshotter's threading model has been changed. Previously, Map and HeadlessFrontend that is responsible for rendering snapshot, were running on a dedicated thread. After #16268, Map object lives on client thread, so that the client can access Style object, while HeadlessFrontend lives on a dedicated Snapshotter thread.

    ⚠️ Breaking changes
    • Signature of a MapSnapshotter's constructor has been changed
    • Signature for a MapSnapshotter::snapshot method has been changed
    • Size of an offline regions do not affect ambient cache size (#15622)
    📌 Known issues
    • When feature is exactly on the geometry boundary, within expression returns inconsistent values for different zoom levels (#16301)
    Source code(tar.gz)
    Source code(zip)
  • maps-v1.3.1+ios(Mar 10, 2020)

  • maps-v1.2.2(Mar 2, 2020)

    maps-v1.2.2 (2020.02-release-vanillashake)

    🐞 Bug fixes

    • [core] Fix iterators in addRegularDash() (#16249)

      Fixes possible crashes when using styles with line patterns.

    Source code(tar.gz)
    Source code(zip)
  • maps-v1.3.1(Mar 2, 2020)

    maps-v1.3.1 (2020.02-release-vanillashake)

    🐞 Bug fixes

    • [core] Fix iterators in addRegularDash() (#16249)

      Fixes possible crashes when using styles with line patterns.

    • [default] Fix possible crash at RunLoop::wake() (#16255)

    Source code(tar.gz)
    Source code(zip)
  • maps-v1.3.0(Feb 28, 2020)

    maps-v1.3.0 (2020.02-release-vanillashake)

    🐞 Bug fixes

    • [core] Fix offline region download freezing (#16230)

      Downloaded resources are put in the buffer and inserted in the database in batches.

      Before this change, the buffer was flushed only at the network response callback and thus it never got flushed if the last required resources were present locally and did not initiate network requests - it caused freezing.

      Now the buffer is flushed every time the remaining resources container gets empty.

    ✨ New features

    • [core] Add Layer::serialize() method (#16231)

      New method allows serialization of a layer into a Value type, including all modifications done via runtime style API. New method is also an enabler for Style object serialization (sources, layers, etc).

    • [android] Add jni binding for min and max pitch (#16236)

    • [offline] Offline tool does not hang on 404 error (#16240)

      The missing resource gets skipped and teh offline region download continues.

    ⚠️ Breaking changes
    • Changes to mbgl::FileSourceManager::getFileSource() (#16238)

      It returns now mbgl::PassRefPtr<FileSource> (previously was std::shared_ptr<FileSource>) in order to enforce keeping the strong reference to the returned object.

      Breaking code example: auto fs = FileSourceManager::getFileSource(); fs->..

      Posible fix: std::shared_ptr<FileSource> fs =;

    • The mbgl::OnlineFileSource class cannot be used directly (#16238)

      Clients must use the parent mbgl::FileSource interface instead.

      Breaking code example: std::shared_ptr<OnlineFileSource> onlineSource = std::static_pointer_cast<OnlineFileSource>(FileSourceManager::get()->getFileSource(..));

      Possible fix: std::shared_ptr<FileSource> onlineSource = FileSourceManager::get()->getFileSource(..);

    Source code(tar.gz)
    Source code(zip)
  • maps-v1.2.1(Feb 28, 2020)

  • maps-v1.2.0(Feb 17, 2020)

    maps-v1.2.0 (2020.02-release-vanillashake)

    ✨ New features

    • [core] Global settings API (#16174)

      Global settings API provides means of managing non-persistent in-process settings. Initial implementation contains support for experimental option for setting thread priorities.

    • Expose READ_ONLY_MODE_KEY property for DatabaseFileSource (#16183)

      The READ_ONLY_MODE_KEY property is exposed for DatabaseFileSource.

      This property allows to re-open the offline database in read-only mode and thus improves the performance for the set-ups that do not require the offline database modifications.

    • [core] Add runtime API for setting tile prefetch delta for a Source (#16179)

      The new Source::setPrefetchZoomDelta(optional<uint8_t>) method allows overriding default tile prefetch setting that is defined by the Map instance.

    • [core] Add support for within expression. Implement the use of within expression with paint propery and filter expression. (#16157)

      The within expression enables checking whether a feature is inside a pre-defined geometry set/boundary or not. This within expression returns a boolean value, true indicates that the feature being evaluated is inside the geometry set. The returned value can be then consumed as input by another expression or used directly by a paint/layer property.

      Support for using within expression with layout property will be implemented separately.

    • [core] Add support for using within expression with layout property. (#16194)

    • [core] Add support for in expression. (#16162)

      The in expression enables checking whether a Number/String/Boolean type item is in a String/Array and returns a boolean value.

    🐞 Bug fixes

    • [core] Don't provide multiple responses with the same data for 304 replies (#16200)

      In cases when cached resource is useable, yet don't have an expiration timestamp, we provided data to the requester from the cache and the same data was returned once 304 response was received from the network.

    • [core] Fix potential visual artifact for line-dasharray (#16202)

    • Store gfx::DrawScope objects with associated render objects. (#15395)

      We used some shared SegmentVectors, e.g. for drawing raster or background tiles. In longer running maps, this lead to resource accumulation. By storing the SegmentVectors and the contained gfx::DrawScope objects, we ensure that resources get released when the associated render objects vanish.

    • [core] Fix sprite sheet merging in Style::Impl::onSpriteLoaded (#16211)

      If we get a new sprite sheet from the server, we need to merge current sprite sheet with a new one, while overwriting duplicates and keeping old unique images in a style.

    🏁 Performance improvements

    • [core] Loading images to style optimization (#16187)

      This change enables attaching images to the style with batches and avoids massive re-allocations. Thus, it improves UI performance especially at start-up time.

    🧩 Architectural changes

    ⚠️ Breaking changes
    • [core] Loading images to style optimization (#16187)

      The style::Style::getImage() semantics changed - it now returns optional<style::Image>.

    Source code(tar.gz)
    Source code(zip)
  • maps-v1.0.1(Feb 3, 2020)

    maps-v1.0.1 (2020.01-release-unicorn)

    🐞 Bug fixes

    • [core] Use std::list instead of std::map for factory instance (#16161)

      Factory 'get' method can be invoked recursively and stable iterators are required to guarantee safety.

    • [tile mode] Improvements in symbol placement on tile borders (#16159)

      In tile mode, the placement order of two symbols crossing a tile border is defined by their anchor Y values.

      Symbols crossing the borders between two neighboring tiles are placed with priority.

      It improves symbol placement stability in the tile map mode.

    Source code(tar.gz)
    Source code(zip)
  • maps-v1.0.0(Jan 27, 2020)

    maps-v1.0.0 (2020.01-release-unicorn)

    ✨ New features

    • [core] Implement stretchable icons (#16030)

      Stretchable icons allow defining certain areas of an icon that may be stretched, leaving the remaining areas of an icon at a fixed size.

    • [core] Port line-sort-key and fill-sort-key (#15839)

      The new feature allows to sort line and fill layer features. Similar to symbol-sort-key.

    • [core] Add image sections to format expression (#15937)

      The new feature allows to embed images into labels.

    • [core] Introduce OfflineDatabase::runPackDatabaseAutomatically() API (#15967)

      The new API allows to enable / disable automatic packing of a database.

    • [core] Decouple offline storage vacuum and the deleteRegion API (#15899)

      • introduce OfflineDatabase::pack() standing for incremental vacuum
      • make packing optional at offline region deletion
    • [core] Implement image expression (#15877)

      The image expression allows determining an image's availability.

    • [core] Add batch conversion of latLngs to/from screenCoords (#15891)

      This patch introduces batch conversion between LatLng and ScreenCoordinate in Gl-Native core, so for multiple conversions with single point/latLng previously now it can be done with invoking one function call by passing vector of points/latLngs.

    🐞 Bug fixes

    • [tile mode] Fix variable symbols placement (#16141

      This change allows the variable symbols to cross the tile border only if their anchor is the first anchor from the text-variable-anchor list.

    • [core] Use weak scheduler inside mailbox (#16136)

      If there are pending requests that are completed after main scheduler is destructed, worker threads may try to push messages to destructed scheduler's queue.

    • [core] Fix a crash in GeoJSON source parsing, caused by GeoJSONVTData ownership error (#16106)

    • [core] Stable position of labels at tile borders in tile mode (#16040)

      These changes allow to avoid cutting-off labels on tile borders if the variable text placement is enabled.

    • [core] Fix really overscaled lines (#16045)

      We resample lines after sharp corners in some situations. When tiles were really overscaled, sometimes we didn't have enough precision to represent the resampled vertex because it was too close. Disabling this after a certain point prevents this (#16018).

    • [core] Don't use signed int type for anchor segment (#16008)

      Erroneous signed to unsigned implicit conversion was used when PlacedSymbol(s) were created in SymbolLayout and signed values were used as indexes in a few other places.

    • [core] Increase padding in CollisionIndex for MapMode::Tile (#15880)

      This increases the padding to 1024 for MapMode::Tile which should be enough to completely include all the data two zoom levels past the data source's max zoom level. Beyond that, 1024 should be enough of a padding to make clipped labels unlikely.

    • [core] Blacklist VAO extension for Adreno (TM) 4xx GPUs (#15978)

      Blacklist in order to avoid crashes in a driver (Android 5.1.1)

    • [core] Retain thread pool in GeoJSONSource (#15992)

      Otherwise, the construction of the Immutable<Source::Impl> in background thread might never yeld.

    • [core] Fix supercluster lambdas capturing (#15989)

      Fix wrapping of the parameters in supercluster map/reduce lambdas (Previously, local variables were wrapped by reference).

    • [core] fix rendering of dashed lines with round caps (#15947)

      In #15862, we introduced individual textures for line dash patterns to eliminate atlas overflows. Unfortunately, this broke dashed lines that had round caps (dashed lines with straight caps still rendered correctly). Line pattern textures for round caps were now using 256×15 pixel textures.

    • [core] Fix incorrect resizing of TileCache (#15943)

    • [core] Avoid GeoJSON source flickering on style transitions (#15907)

      Before this change, all GeoJSON source cleared tile pyramid at the style transition and it caused flickering.

    • [core] Use individual textures for line dash patterns (#15862)

      This moves the LineAtlas from a shared texture that contained SDF dash patterns to use individual textures.

    • [core] Fix collisions with icon-text-fit and variable placement (#15828)

      When deciding the placement position it was only checking whether there were text collisions. Now, if icon-text-fit is used it now checks whether the icon fits before accepting a placement position.

    • [core] Fix icon-text-fit (#15634)

      This fixes rendering by account for the 1px texture padding around icons that were stretched with icon-text-fit.

    🏁 Performance improvements

    • [core] Cross tile index performance (#16127)

      For overscaled tiles, index only the symbols inside the viewport.

      Find matches only among the buckets that have the same leader Id.

    • [core] Calculate GeoJSON tile geometries in a background thread (#15953)

      Call mapbox::geojsonvt::GeoJSONVT::getTile() in a background thread, so that the rendering thread is not blocked.

    • [core] Make requests for expired resources lower priority than requests for new resources (#15950)

    • [core] Add Scheduler::scheduleAndReplyValue() API (#15885)

      This change converts GeoJSON features to tiles for the loaded source description in a background thread and thus unblock the UI thread.

    • [core] Enable incremental vacuum for Offline DB (#15837)

      Thus we avoid re-creating the whole database and keeping the backup file as it happens on calling VACUUM.

    • [core] Fix image requests for already obtained images (#15825)

      Before this fix, repeated request for an already obtained image was erroneously treated as pending, and it prevented from the tiles load completion.

    🧩 Architectural changes

    • [core] Merge style::Layer::set{Layout,Paint}Property (#15997)

    • [core] Use expected.hpp from mapbox-base (#15898)

    ⚠️ Breaking changes
    • [core] Cross tile index performance (#16127)

      Introduces public mblg::Renderer::render API break.

    • [core] Refactor DefaultFileSource codebase (#15768)

      • Adds FileSourceManager interface that provides access to FileSource instances and means of registering / unregistering FileSource factories
      • Splits DefaultFileSource into smaller parts
      • Adds DatabaseFileSource interface and it's default implementation
      • Removes inter-dependencies between concrete FileSource classes
      • All sources operate on dedicated thread, except MainResourceLoader that acts as a dispatcher and works on thread that requested it.
      • Removes ResourceOptions::withCacheOnlyRequestsSupport method
    • [core] Remove Map::cycleDebugOptions (#16005)

      This function was mostly used by the Android API, which is no longer necessary.

    Source code(tar.gz)
    Source code(zip)
  • android-v8.5.0-alpha.2(Oct 10, 2019)

  • ios-v5.5.0-alpha.2(Oct 9, 2019)

    Changes since Mapbox Maps SDK for iOS v5.5.0-alpha.1:

    Performance improvements

    • Improved rendering performance for the styles with multiple sources (#15756)

    Other changes

    • Added -[MGLMapSnapshotOverlay coordinateForPoint:] and -[MGLMapSnapshotOverlay pointForCoordinate:] to convert between context and map coordinates, mirroring those of MGLMapSnapshot. (#15746)
    • Fixed an issue that cause the ornaments to ignore MGLMapView.contentInset property. (#15584)
    • Fixed an issue that cause -[MGLMapView setCamera:withDuration:animationTimingFunction:edgePadding:completionHandler:] persist the value of edgePadding. (#15584)
    • Added MGLMapView.automaticallyAdjustsContentInset property that indicates if wether the map view should automatically adjust its content insets. (#15584)
    • Fixed an issue that caused MGLScaleBar to have an incorrect size when resizing or rotating. (#15703)

    To install this pre-release via a dependency manager, see our CocoaPods or Carthage instructions.

    Documentation is available online or as part of the download.

    Source code(tar.gz)
    Source code(zip)
    mapbox-ios-sdk-5.5.0-alpha.2-dynamic.zip(133.91 MB)
    mapbox-ios-sdk-5.5.0-alpha.2-stripped-dynamic.zip(48.87 MB)
  • android-v8.5.0-alpha.1(Oct 3, 2019)

    8.5.0-alpha.1 - October 3, 2019

    Changes since Mapbox Maps SDK for Android v8.4.0:

    Bug fixes

    • Suppress network requests for expired tiles update, if these tiles are invisible. #15741
    • Fixed opacity interpolation for composition expressions #15738
    • Fixed an issue where Projection#getMetersPerPixelAtLatitude returned a value incorrectly divided by the pixel ratio. This also fixes an issue where LocationComponent accuracy circle's radius was artificially increased. #15742
    Source code(tar.gz)
    Source code(zip)
  • ios-v5.5.0-alpha.1(Oct 2, 2019)

  • ios-v5.4.0(Sep 25, 2019)

    Please reach out to Mapbox Support if you have any questions regarding the new iOS 13 location dialog that appears when NSLocationAlwaysAndWhenInUseUsageDescription is set.

    Changes since Mapbox Maps SDK for iOS v5.3.2:

    Styles and rendering

    • Added an -[MGLMapSnapshotter startWithOverlayHandler:completionHandler:] method to provide the snapshot's current CGContext in order to perform custom drawing on MGLMapSnapshot objects. (#15530)
    • Fixed an issue that caused MGLTileSourceOptionMaximumZoomLevel to be ignored when setting MGLTileSource.configurationURL. (#15581)
    • Fixed an assertion caused by adding a layer to an incompatible source. (#15644)
    • Fixed crashes triggered when MGLSource and MGLStyleLayer objects are accessed after having been invalidated after a style change. (#15539)
    • Fixed an issue where the collision boxes for symbols would not be updated when MGLSymbolStyleLayer.textTranslation or MGLSymbolStyleLayer.iconTranslation were used. (#15467)
    • Enabled use of MGLSymbolStyleLayer.textOffset option together with MGLSymbolStyleLayer.textVariableAnchor (if MGLSymbolStyleLayer.textRadialOffset option is not provided). (#15542)
    • Fixed an issue that caused constant repainting for sources with invisible layers. (#15600)

    User interaction

    • Fixed an issue that caused the tilt gesture to trigger too easily and conflict with pinch or pan gestures. (#15349)
    • Fixed an issue that caused the map to rotate too easily during a pinch gesture. (#15562)

    Performance improvements

    • Improved offline region download performance by batching certain database activities. (#15521)
    • Newly loaded labels appear faster on the screen. (#15308)

    Other changes

    • Fixed a bug where the completion block passed to -[MGLMapView flyToCamera:completionHandler:] (and related methods) wouldn't be called. (#15473)
    • Fixed a crash when offline pack invalidation happened on different threads. (#15582)
    • Fixed a potential integer overflow at high zoom levels. (#15560)
    • Fixed a bug with annotation view positions after camera transitions. (#15122)

    Known issues

    • Edge padding is persisted when set through [MGLMapView setCamera:withDuration:animationTimingFunction:edgePadding:completionHandler:]. (#15233) Workaround: Manually set the contentInset property in the completion handler.
    • Ornaments layout does not respect the contentInset property. (#15584)

    Documentation is available online or as part of the download.

    Source code(tar.gz)
    Source code(zip)
    mapbox-ios-sdk-5.4.0-dynamic.zip(129.56 MB)
    mapbox-ios-sdk-5.4.0-stripped-dynamic.zip(47.67 MB)
  • android-v8.4.0(Sep 25, 2019)

  • android-v8.3.3(Sep 20, 2019)

  • ios-v5.4.0-beta.1(Sep 20, 2019)

    Changes since Mapbox Maps SDK for iOS v5.4.0-alpha.2:

    Styles and rendering

    • Added an -[MGLMapSnapshotter startWithOverlayHandler:completionHandler:] method to provide the snapshot's current CGContext in order to perform custom drawing on MGLMapSnapShot objects. (#15530)
    • Fixed an issue that caused MGLTileSourceOptionMaximumZoomLevel to be ignored when setting MGLTileSource.configurationURL. (#15581)
    • Fixed an assertion hit caused by possibility of adding a layer to an incompatible source. (#15644)
    • Fixed a rendering issue of collisionBox when MGLSymbolStyleLayer.textTranslate or MGLSymbolStyleLayer.iconTranslate is enabled. (#15467)
    • Fixed a crash when -[MGLOfflinePack invalidate] is called on different threads. (#15582)

    Performance improvements

    • Newly loaded labels appear faster on the screen. (#15308)

    Other changes

    • Fixed constant repainting for the sources with invisible layers, caused by RenderSource::hasFadingTiles() returning true all the time. (#15600)

    To install this pre-release via a dependency manager, see our CocoaPods or Carthage instructions.

    Documentation is available online or as part of the download.

    Source code(tar.gz)
    Source code(zip)
    mapbox-ios-sdk-5.4.0-beta.1-dynamic.zip(129.58 MB)
    mapbox-ios-sdk-5.4.0-beta.1-stripped-dynamic.zip(47.64 MB)
  • android-v8.4.0-beta.1(Sep 19, 2019)

    Changes since Mapbox Maps SDK for Android v8.4.0-alpha.2:

    Bug fixes

    • Fixed an issue that maxzoom in style Sources option was ignored when URL resource is provided. It may cause problems such as extra tiles downloading at higher zoom level than maxzoom, or problems that wrong setting of overscaledZ in OverscaledTileID that will be passed to SymbolLayout, leading wrong rendering appearance. #15581
    • Fixed constant repainting for the sources with invisible layers, caused by RenderSource::hasFadingTiles() returning true all the time. #15600
    • Fixed an issue that caused the state of CompassView not up to date when UiSettings.setCompassEnabled() is set to true. #15606
    • Ignore location tracking mode based animations when the camera is transitioning. #15641
    • Fixed MapSnapshotter so that MapSnapshotter.withApiBaseUri works again. #15642
    • Fixed an assertion hit caused by possibility of adding a layer to an incompatible source. #15644
    Source code(tar.gz)
    Source code(zip)
  • android-v8.3.2(Sep 20, 2019)

  • ios-v5.3.2(Sep 19, 2019)

  • android-v8.3.1(Sep 19, 2019)

  • ios-v5.3.1(Sep 19, 2019)

    Changes since Mapbox Maps SDK for iOS v5.3.0:

    Styles and rendering

    • Fixed an issue where connecting coincident holes in a polygon could lead to a race condition. (#15660)

    Other changes

    • Fixed an issue where the scale bar text would become illegible if iOS 13 dark mode was enabled. (#15524)
    • Fixed an issue with the appearance of the compass text in iOS 13. (#15547)

    Documentation is available online or as part of the download.

    Source code(tar.gz)
    Source code(zip)
    mapbox-ios-sdk-5.3.1-dynamic.zip(128.22 MB)
    mapbox-ios-sdk-5.3.1-stripped-dynamic.zip(47.24 MB)
  • ios-v5.4.0-alpha.2(Sep 11, 2019)

    Changes since Mapbox Maps SDK for iOS v5.4.0-alpha.1:

    Styles and rendering

    • Fixed crashes triggered when MGLSource and MGLStyleLayer objects are accessed after having been invalidated after a style change. (#15539)
    • Fixed a bug where the completion block passed to -[MGLMapView flyToCamera:completionHandler: (and related methods) wouldn't be called. (#15473)

    Other changes

    • Fixed a potential integer overflow at high zoom levels. (#15560)

    To install this pre-release via a dependency manager, see our CocoaPods or Carthage instructions.

    Documentation is available online or as part of the download.

    Source code(tar.gz)
    Source code(zip)
    mapbox-ios-sdk-5.4.0-alpha.2-dynamic.zip(128.27 MB)
    mapbox-ios-sdk-5.4.0-alpha.2-stripped-dynamic.zip(47.30 MB)
Owner
Mapbox
Mapbox is the location data platform for mobile and web applications. We're changing the way people move around cities and explore our world.
Mapbox
A command line toolkit to generate maps, point clouds, 3D models and DEMs from drone, balloon or kite images. 📷

An open source command line toolkit for processing aerial drone imagery. ODM turns simple 2D images into: Classified Point Clouds 3D Textured Models G

OpenDroneMap 3.3k Nov 30, 2021
OpenOrienteering Mapper is a software for creating maps for the orienteering sport.

OpenOrienteering Mapper OpenOrienteering Mapper is an orienteering mapmaking program and provides a free and open source alternative to existing comme

null 279 Oct 25, 2021
Mapnik implemention of Mapbox Vector Tile specification

mapnik-vector-tile A Mapnik implemention of Mapbox Vector Tile specification. Provides C++ headers that support rendering geodata into vector tiles an

Mapbox 524 Nov 24, 2021
Build vector tilesets from large collections of GeoJSON features.

tippecanoe Builds vector tilesets from large (or small) collections of GeoJSON, Geobuf, or CSV features, like these. ⚡ Mapbox has a new service for cr

Mapbox 2k Dec 8, 2021
2D and 3D map renderer using OpenGL ES

Tangram ES Tangram ES is a C++ library for rendering 2D and 3D maps from vector data using OpenGL ES. It is a counterpart to Tangram. This repository

Tangram 711 Dec 7, 2021
Advanced map enabled for macOS Monterey

AdvancedMap Lilu plugin for enabling modern maps on non-Apple Silicon hardware. Advanced maps were added in macOS 12 Monterey, and worked fine on Inte

Joshua May 7 Nov 2, 2021
C++ implementation of R*-tree, an MVR-tree and a TPR-tree with C API

libspatialindex Author: Marios Hadjieleftheriou Contact: [email protected] Revision: 1.9.3 Date: 10/23/2019 See http://libspatialindex.org for full doc

null 584 Nov 23, 2021
Terrain Analysis Using Digital Elevation Models (TauDEM) software for hydrologic terrain analysis and channel network extraction.

TauDEM (Terrain Analysis Using Digital Elevation Models) is a suite of Digital Elevation Model (DEM) tools for the extraction and analysis of hydrolog

David Tarboton 172 Dec 1, 2021
Alternative LAZ implementation for C++ and JavaScript

What is this? Alternative LAZ implementation. It supports compilation and usage in JavaScript, usage in database contexts such as pgpointcloud and Ora

Howard Butler 43 Nov 17, 2021
Computational geometry and spatial indexing on the sphere

S2 Geometry Library Overview This is a package for manipulating geometric shapes. Unlike many geometry libraries, S2 is primarily designed to work wit

Google 1.6k Nov 26, 2021
A C++17 image representation, processing and I/O library.

Selene Selene is a C++17 image representation, processing, and I/O library, focusing on ease of use and a clean, modern, type-safe API. Overview: Brie

Michael Hofmann 270 Nov 17, 2021
A fast algorithm for finding the pole of inaccessibility of a polygon (in JavaScript and C++)

A fast algorithm for finding polygon pole of inaccessibility, the most distant internal point from the polygon outline (not to be confused with centroid), implemented as a JavaScript library. Useful for optimal placement of a text label on a polygon.

Mapbox 1.1k Nov 26, 2021
A lean, efficient, accurate geohash encoder and decoder library implemented in C

Geohash encoder/decoder in C A lean, efficient, accurate geohash encoder and decoder library implemented in C. It does not depend on the C standard li

Christopher Wellons 15 Nov 14, 2021
Organic Maps is a better fork of MAPS.ME, an Android & iOS offline maps app for travelers, tourists, hikers, and cyclists based on top of crowd-sourced OpenStreetMap data and curated with love by MAPS.ME founders.

?? Organic Maps is a better fork of MAPS.ME, an Android & iOS offline maps app for travelers, tourists, hikers, and cyclists based on top of crowd-sourced OpenStreetMap data and curated with love by MAPS.ME founders. No ads, no tracking, no data collection, no crapware.

Organic Maps 2.8k Nov 29, 2021
FFmpeg Kit for applications. Supports Android, Flutter, iOS, macOS, React Native and tvOS. Supersedes MobileFFmpeg, flutter_ffmpeg and react-native-ffmpeg.

FFmpeg Kit for applications. Supports Android, Flutter, iOS, macOS, React Native and tvOS. Supersedes MobileFFmpeg, flutter_ffmpeg and react-native-ffmpeg.

Taner Şener 766 Dec 5, 2021
🗺️ OMAPS.APP — Offline OpenStreetMap maps for iOS and Android. A community-driven fork of MAPS.ME.

OMaps is an open source cross-platform offline maps application, built on top of crowd-sourced OpenStreetMap data. It was publicly released for iOS and Android.

OMaps 2.8k Nov 27, 2021
experimental project to create PBF vector tiles

Vector tiles producer This is an experimental project to create vector tiles. What does this do? This creates vector tiles based on the mapnik proto f

vross 31 Nov 2, 2021
Android and iOS SDK to display maps and geodata of swisstopo. Owner: simonroesch, Deputy: gjn

Open Swiss Maps SDK Android and iOS SDK to display maps and geodata of swisstopo Free map layers and geo data by swisstopo in your app Offer your mobi

geo.admin.ch 16 Nov 30, 2021
Modern c++17 unit testing framework on Microsoft Windows, Apple macOS, Linux, iOS and android.

tunit Modern c++17 unit testing framework on Windows, macOS, Linux, iOS and android. Continuous Integration build status Operating system Status Windo

Gammasoft 6 Oct 1, 2021
A cross-platform (Android/iOS/Windows/macOS) cronet plugin for Flutter via `dart:ffi`

cronet_flutter A cross-platform (Android/iOS/Windows/macOS) cronet plugin for Flutter via dart:ffi

null 15 Nov 7, 2021
Custom FFMpeg build script which support cross-compile to macOS/iOS/android

FFmpegCompileScript Custom FFMpeg build script which support cross-compile to macOS/iOS/Android Usage: First, init all submodule: git submodule update

RagnarokStack 2 Nov 4, 2021
Purely native C++ cross-platform GUI framework for Android and iOS development. https://www.boden.io

BODEN CROSS-PLATFORM FRAMEWORK Build purely native cross-platform experiences with Boden Website ⬡ Getting Started ⬡ API Reference ⬡ Guides ⬡ Twitter

Ashampoo Systems GmbH & Co KG 1.5k Dec 1, 2021
The PULP Ara is a 64-bit Vector Unit, compatible with the RISC-V Vector Extension Version 0.9, working as a coprocessor to CORE-V's CVA6 core

Ara Ara is a vector unit working as a coprocessor for the CVA6 core. It supports the RISC-V Vector Extension, version 0.9. Dependencies Check DEPENDEN

null 78 Nov 14, 2021
OpenGL®-Starter is a template for your upcoming OpenGL Projects which has been compiled to run the most basic Hello World OpenGL Program from LearnOpenGL.com.

OpenGL®-Starter OpenGL®-Starter is a template for your upcoming OpenGL Projects which has been compiled to run the most basic Hello World OpenGL Progr

Kushagra 7 Sep 29, 2021
This repository uses a ROS node to subscribe to camera (hikvision) and lidar (livox) data. After the node merges the data, it publishes the colored point cloud and displays it in rviz.

fusion-lidar-camera-ROS 一、介绍 本仓库是一个ROS工作空间,其中ws_fusion_camera/src有一个工具包color_pc ws_fusion_camera │ README.md │ └───src │ └───package: c

hongyu wang 9 Nov 26, 2021
Standalone c++ implementation for computing Motif Adjacency Matrices of large directed networks, for 3-node graphlets and 4-node graphletsa containing a 4 edge loop.

Building Motif Adjacency Matrices This is an efficient C++ software for building Motif Adjacency Matrices (MAM) of networks, for a range of motifs/gra

null 4 Oct 4, 2021
2D Vector Graphics Engine Powered by a JIT Compiler

Blend2D 2D Vector Graphics Powered by a JIT Compiler. Official Home Page (blend2d.com) Official Repository (blend2d/blend2d) Public Chat Channel Zlib

Blend2D 959 Nov 24, 2021
A repository for experimenting with elf loading and in-place patching of android native libraries on non-android operating systems.

droidports: A repository for experimenting with elf loading and in-place patching of android native libraries on non-android operating systems. Discla

João Henrique 19 Nov 27, 2021
A simple library that helps Android developers to execute JavaScript code from Android native side easily without using Webview.

AndroidJSModule A simple library that helps Android developers to execute JavaScript code from Android native side easily without using Webview. Insta

Hung Nguyen 6 Sep 11, 2021