[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-mapbox-mapbox-android-patterns":3,"mdc--9rizsg-key":30,"related-repo-mapbox-mapbox-android-patterns":2473,"related-org-mapbox-mapbox-android-patterns":2574},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":20,"repoUrl":21,"updatedAt":22,"license":23,"forks":24,"topics":25,"repo":26,"sourceUrl":28,"mdContent":29},"mapbox-android-patterns","integrate Mapbox Maps SDK on Android","Official integration patterns for Mapbox Maps SDK on Android. Covers installation, adding markers, user location, custom data, styles, camera control, and featureset interactions. Based on official Mapbox documentation.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},"mapbox","Mapbox","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fmapbox.png",[12,16,19],{"name":13,"slug":14,"type":15},"Android","android","tag",{"name":17,"slug":18,"type":15},"Mobile","mobile",{"name":9,"slug":8,"type":15},69,"https:\u002F\u002Fgithub.com\u002Fmapbox\u002Fmapbox-agent-skills","2026-07-30T05:30:51.739352",null,10,[],{"repoUrl":21,"stars":20,"forks":24,"topics":27,"description":23},[],"https:\u002F\u002Fgithub.com\u002Fmapbox\u002Fmapbox-agent-skills\u002Ftree\u002FHEAD\u002Fskills\u002Fmapbox-android-patterns","---\nname: mapbox-android-patterns\ndescription: Official integration patterns for Mapbox Maps SDK on Android. Covers installation, adding markers, user location, custom data, styles, camera control, and featureset interactions. Based on official Mapbox documentation.\n---\n\n# Mapbox Android Integration Patterns\n\nOfficial patterns for integrating Mapbox Maps SDK v11 on Android with Kotlin, Jetpack Compose, and View system.\n\n**Use this skill when:**\n\n- Installing and configuring Mapbox Maps SDK for Android\n- Adding markers and annotations to maps\n- Showing user location and tracking with camera\n- Adding custom data (GeoJSON) to maps\n- Working with map styles, camera, or user interaction\n- Handling feature interactions and taps\n\n**Official Resources:**\n\n- [Android Maps Guides](https:\u002F\u002Fdocs.mapbox.com\u002Fandroid\u002Fmaps\u002Fguides\u002F)\n- [API Reference](https:\u002F\u002Fdocs.mapbox.com\u002Fandroid\u002Fmaps\u002Fapi-reference\u002F)\n- [Example Apps](https:\u002F\u002Fgithub.com\u002Fmapbox\u002Fmapbox-maps-android\u002Ftree\u002Fmain\u002FExamples)\n\n---\n\n## Installation & Setup\n\n### Requirements\n\n- Android SDK 21+\n- Kotlin or Java\n- Android Studio\n- Free Mapbox account\n\n### Step 1: Configure Access Token\n\nCreate `app\u002Fres\u002Fvalues\u002Fmapbox_access_token.xml`:\n\n```xml\n\u003C?xml version=\"1.0\" encoding=\"utf-8\"?>\n\u003Cresources xmlns:tools=\"http:\u002F\u002Fschemas.android.com\u002Ftools\">\n    \u003Cstring name=\"mapbox_access_token\" translatable=\"false\"\n        tools:ignore=\"UnusedResources\">YOUR_MAPBOX_ACCESS_TOKEN\u003C\u002Fstring>\n\u003C\u002Fresources>\n```\n\n**Get your token:** Sign in at [mapbox.com](https:\u002F\u002Faccount.mapbox.com\u002Faccess-tokens\u002F)\n\n### Step 1b: Internet permission (required)\n\nMaps need network access. Include this in `AndroidManifest.xml` — agents often omit it and only list location permissions later:\n\n```xml\n\u003Cuses-permission android:name=\"android.permission.INTERNET\" \u002F>\n```\n\n### Step 2: Add Maven Repository\n\nIn `settings.gradle.kts`:\n\n```kotlin\ndependencyResolutionManagement {\n    repositories {\n        google()\n        mavenCentral()\n        maven {\n            url = uri(\"https:\u002F\u002Fapi.mapbox.com\u002Fdownloads\u002Fv2\u002Freleases\u002Fmaven\")\n        }\n    }\n}\n```\n\n### Step 3: Add Dependency\n\nIn module `build.gradle.kts`:\n\n```kotlin\nandroid {\n    defaultConfig {\n        minSdk = 21\n    }\n}\n\ndependencies {\n    implementation(\"com.mapbox.maps:android:11.18.1\")\n}\n```\n\n**For Jetpack Compose:**\n\n```kotlin\ndependencies {\n    implementation(\"com.mapbox.maps:android:11.18.1\")\n    implementation(\"com.mapbox.extension:maps-compose:11.18.1\")\n}\n```\n\n---\n\n## Map Initialization\n\n### Jetpack Compose Pattern\n\n**Basic map:**\n\n```kotlin\nimport androidx.compose.runtime.*\nimport androidx.compose.foundation.layout.fillMaxSize\nimport androidx.compose.ui.Modifier\nimport com.mapbox.maps.extension.compose.*\nimport com.mapbox.maps.Style\nimport com.mapbox.geojson.Point\n\n@Composable\nfun MapScreen() {\n    MapboxMap(\n        modifier = Modifier.fillMaxSize()\n    ) {\n        \u002F\u002F Initialize camera via MapEffect (Style.STANDARD loads by default)\n        MapEffect(Unit) { mapView ->\n            \u002F\u002F Set initial camera position\n            mapView.mapboxMap.setCamera(\n                CameraOptions.Builder()\n                    .center(Point.fromLngLat(-122.4194, 37.7749))\n                    .zoom(12.0)\n                    .build()\n            )\n        }\n    }\n}\n```\n\n**With ornaments:**\n\n```kotlin\nMapboxMap(\n    modifier = Modifier.fillMaxSize(),\n    scaleBar = {\n        ScaleBar(\n            enabled = true,\n            position = Alignment.BottomStart\n        )\n    },\n    compass = {\n        Compass(enabled = true)\n    }\n) {\n    \u002F\u002F Style.STANDARD loads by default\n}\n```\n\n### View System Pattern\n\n**Layout XML (activity_map.xml):**\n\n```xml\n\u003C?xml version=\"1.0\" encoding=\"utf-8\"?>\n\u003Candroidx.constraintlayout.widget.ConstraintLayout\n    xmlns:android=\"http:\u002F\u002Fschemas.android.com\u002Fapk\u002Fres\u002Fandroid\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\">\n\n    \u003Ccom.mapbox.maps.MapView\n        android:id=\"@+id\u002FmapView\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\" \u002F>\n\n\u003C\u002Fandroidx.constraintlayout.widget.ConstraintLayout>\n```\n\n**Activity:**\n\n```kotlin\nimport android.os.Bundle\nimport androidx.appcompat.app.AppCompatActivity\nimport com.mapbox.maps.MapView\nimport com.mapbox.maps.Style\nimport com.mapbox.geojson.Point\n\nclass MapActivity : AppCompatActivity() {\n    private lateinit var mapView: MapView\n\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n        setContentView(R.layout.activity_map)\n\n        mapView = findViewById(R.id.mapView)\n\n        mapView.mapboxMap.setCamera(\n            CameraOptions.Builder()\n                .center(Point.fromLngLat(-122.4194, 37.7749))\n                .zoom(12.0)\n                .build()\n        )\n\n        mapView.mapboxMap.loadStyle(Style.STANDARD)\n    }\n\n    override fun onStart() {\n        super.onStart()\n        mapView.onStart()\n    }\n\n    override fun onStop() {\n        super.onStop()\n        mapView.onStop()\n    }\n\n    override fun onDestroy() {\n        super.onDestroy()\n        mapView.onDestroy()\n    }\n}\n```\n\n---\n\n## Add Markers (Point Annotations)\n\nPoint annotations are the most common way to mark locations on the map.\n\n**Jetpack Compose:**\n\n```kotlin\nMapboxMap(modifier = Modifier.fillMaxSize()) {\n    MapEffect(Unit) { mapView ->\n        \u002F\u002F Load style first\n        mapView.mapboxMap.loadStyle(Style.STANDARD)\n\n        \u002F\u002F Create annotation manager and add markers\n        val annotationManager = mapView.annotations.createPointAnnotationManager()\n        val pointAnnotation = PointAnnotationOptions()\n            .withPoint(Point.fromLngLat(-122.4194, 37.7749))\n            .withIconImage(\"custom-marker\")\n        annotationManager.create(pointAnnotation)\n    }\n}\n\n\u002F\u002F Note: Compose doesn't have declarative PointAnnotation component\n\u002F\u002F Markers must be added imperatively via MapEffect\n```\n\n**View System:**\n\n```kotlin\n\u002F\u002F Create annotation manager (once, reuse for updates)\nval pointAnnotationManager = mapView.annotations.createPointAnnotationManager()\n\n\u002F\u002F Create marker\nval pointAnnotation = PointAnnotationOptions()\n    .withPoint(Point.fromLngLat(-122.4194, 37.7749))\n    .withIconImage(\"custom-marker\")\n\npointAnnotationManager.create(pointAnnotation)\n```\n\n**Multiple markers:**\n\n```kotlin\nval locations = listOf(\n    Point.fromLngLat(-122.4194, 37.7749),\n    Point.fromLngLat(-122.4094, 37.7849),\n    Point.fromLngLat(-122.4294, 37.7649)\n)\n\nval annotations = locations.map { point ->\n    PointAnnotationOptions()\n        .withPoint(point)\n        .withIconImage(\"marker\")\n}\n\npointAnnotationManager.create(annotations)\n```\n\n---\n\n## Show User Location (Display)\n\n**Step 1: Add permissions to AndroidManifest.xml:**\n\n```xml\n\u003Cuses-permission android:name=\"android.permission.INTERNET\" \u002F>\n\u003Cuses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\" \u002F>\n\u003Cuses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\" \u002F>\n```\n\n**Step 2: Request permissions and show location:**\n\n```kotlin\n\u002F\u002F Request permissions first (use ActivityResultContracts)\n\n\u002F\u002F Show location puck\nmapView.location.updateSettings {\n    enabled = true\n    puckBearingEnabled = true\n}\n```\n\n---\n\n## Performance Best Practices\n\n### Reuse Annotation Managers\n\n```kotlin\n\u002F\u002F Don't create new managers repeatedly\n\u002F\u002F val manager = mapView.annotations.createPointAnnotationManager() \u002F\u002F each call\n\n\u002F\u002F Create once, reuse\nval pointAnnotationManager = mapView.annotations.createPointAnnotationManager()\n\nfun updateMarkers() {\n    pointAnnotationManager.deleteAll()\n    pointAnnotationManager.create(markers)\n}\n```\n\n### Batch Annotation Updates\n\n```kotlin\n\u002F\u002F Create all at once\npointAnnotationManager.create(allAnnotations)\n\n\u002F\u002F Don't create one by one in a loop\n```\n\n### Lifecycle Management\n\n```kotlin\n\u002F\u002F Always call lifecycle methods\noverride fun onStart() {\n    super.onStart()\n    mapView.onStart()\n}\n\noverride fun onStop() {\n    super.onStop()\n    mapView.onStop()\n}\n\noverride fun onDestroy() {\n    super.onDestroy()\n    mapView.onDestroy()\n}\n```\n\n### Use Standard Style\n\n```kotlin\n\u002F\u002F Standard style is optimized and recommended\nStyle.STANDARD\n\n\u002F\u002F Use other styles only when needed for specific use cases\nStyle.STANDARD_SATELLITE \u002F\u002F Satellite imagery\n```\n\n---\n\n## Troubleshooting\n\n### Map Not Displaying\n\n**Check:**\n\n1. Token in `mapbox_access_token.xml`\n2. Token is valid (test at mapbox.com)\n3. Maven repository configured\n4. Dependency added correctly\n5. Internet permission in manifest\n\n### Style Not Loading\n\n```kotlin\nmapView.mapboxMap.subscribeStyleLoaded { _ ->\n    Log.d(\"Map\", \"Style loaded successfully\")\n    \u002F\u002F Add layers and sources here\n}\n```\n\n### Performance Issues\n\n- Use `Style.STANDARD` (recommended and optimized)\n- Limit visible annotations to viewport\n- Reuse annotation managers\n- Avoid frequent style reloads\n- Call lifecycle methods (onStart, onStop, onDestroy)\n- Batch annotation updates\n\n---\n\n## Reference Files\n\nLoad these references when you need detailed patterns for specific topics:\n\n- **`references\u002Fcompose.md`** -- Jetpack Compose: dependencies, token setup, MapboxMap, annotations with click, GeoJSON, MapEffect\n- **`references\u002Fannotations.md`** -- Circle, Polyline, and Polygon annotation patterns\n- **`references\u002Flocation-tracking.md`** -- Camera follow user location + get current location once\n- **`references\u002Fcustom-data.md`** -- GeoJSON sources and layers: lines, polygons, points, update\u002Fremove\n- **`references\u002Fcamera-styles.md`** -- Camera control (set, animate, fit) + map styles (built-in and custom)\n- **`references\u002Finteractions.md`** -- Featureset interactions, custom layer taps, long press, gestures\n\n---\n\n## Additional Resources\n\n- [Android Maps Guides](https:\u002F\u002Fdocs.mapbox.com\u002Fandroid\u002Fmaps\u002Fguides\u002F)\n- [API Reference](https:\u002F\u002Fdocs.mapbox.com\u002Fandroid\u002Fmaps\u002Fapi\u002F11.18.1\u002F)\n- [Interactions Guide](https:\u002F\u002Fdocs.mapbox.com\u002Fandroid\u002Fmaps\u002Fguides\u002Fuser-interaction\u002Finteractions\u002F)\n- [Jetpack Compose Guide](https:\u002F\u002Fdocs.mapbox.com\u002Fandroid\u002Fmaps\u002Fguides\u002Fusing-jetpack-compose\u002F)\n- [Example Apps](https:\u002F\u002Fgithub.com\u002Fmapbox\u002Fmapbox-maps-android\u002Ftree\u002Fmain\u002FExamples)\n- [Migration Guide (v10 -> v11)](https:\u002F\u002Fdocs.mapbox.com\u002Fandroid\u002Fmaps\u002Fguides\u002Fmigrate-to-v11\u002F)\n",{"data":31,"body":32},{"name":4,"description":6},{"type":33,"children":34},"root",[35,44,50,59,94,102,137,141,148,155,178,184,198,256,273,279,292,306,312,324,409,415,427,504,512,548,551,557,563,571,780,788,905,911,919,1019,1027,1354,1357,1363,1368,1376,1506,1514,1591,1599,1707,1710,1716,1724,1754,1762,1823,1826,1832,1838,1926,1932,1970,1976,2098,2104,2150,2153,2159,2165,2173,2208,2214,2252,2258,2299,2302,2308,2313,2400,2403,2409,2467],{"type":36,"tag":37,"props":38,"children":40},"element","h1",{"id":39},"mapbox-android-integration-patterns",[41],{"type":42,"value":43},"text","Mapbox Android Integration Patterns",{"type":36,"tag":45,"props":46,"children":47},"p",{},[48],{"type":42,"value":49},"Official patterns for integrating Mapbox Maps SDK v11 on Android with Kotlin, Jetpack Compose, and View system.",{"type":36,"tag":45,"props":51,"children":52},{},[53],{"type":36,"tag":54,"props":55,"children":56},"strong",{},[57],{"type":42,"value":58},"Use this skill when:",{"type":36,"tag":60,"props":61,"children":62},"ul",{},[63,69,74,79,84,89],{"type":36,"tag":64,"props":65,"children":66},"li",{},[67],{"type":42,"value":68},"Installing and configuring Mapbox Maps SDK for Android",{"type":36,"tag":64,"props":70,"children":71},{},[72],{"type":42,"value":73},"Adding markers and annotations to maps",{"type":36,"tag":64,"props":75,"children":76},{},[77],{"type":42,"value":78},"Showing user location and tracking with camera",{"type":36,"tag":64,"props":80,"children":81},{},[82],{"type":42,"value":83},"Adding custom data (GeoJSON) to maps",{"type":36,"tag":64,"props":85,"children":86},{},[87],{"type":42,"value":88},"Working with map styles, camera, or user interaction",{"type":36,"tag":64,"props":90,"children":91},{},[92],{"type":42,"value":93},"Handling feature interactions and taps",{"type":36,"tag":45,"props":95,"children":96},{},[97],{"type":36,"tag":54,"props":98,"children":99},{},[100],{"type":42,"value":101},"Official Resources:",{"type":36,"tag":60,"props":103,"children":104},{},[105,117,127],{"type":36,"tag":64,"props":106,"children":107},{},[108],{"type":36,"tag":109,"props":110,"children":114},"a",{"href":111,"rel":112},"https:\u002F\u002Fdocs.mapbox.com\u002Fandroid\u002Fmaps\u002Fguides\u002F",[113],"nofollow",[115],{"type":42,"value":116},"Android Maps Guides",{"type":36,"tag":64,"props":118,"children":119},{},[120],{"type":36,"tag":109,"props":121,"children":124},{"href":122,"rel":123},"https:\u002F\u002Fdocs.mapbox.com\u002Fandroid\u002Fmaps\u002Fapi-reference\u002F",[113],[125],{"type":42,"value":126},"API Reference",{"type":36,"tag":64,"props":128,"children":129},{},[130],{"type":36,"tag":109,"props":131,"children":134},{"href":132,"rel":133},"https:\u002F\u002Fgithub.com\u002Fmapbox\u002Fmapbox-maps-android\u002Ftree\u002Fmain\u002FExamples",[113],[135],{"type":42,"value":136},"Example Apps",{"type":36,"tag":138,"props":139,"children":140},"hr",{},[],{"type":36,"tag":142,"props":143,"children":145},"h2",{"id":144},"installation-setup",[146],{"type":42,"value":147},"Installation & Setup",{"type":36,"tag":149,"props":150,"children":152},"h3",{"id":151},"requirements",[153],{"type":42,"value":154},"Requirements",{"type":36,"tag":60,"props":156,"children":157},{},[158,163,168,173],{"type":36,"tag":64,"props":159,"children":160},{},[161],{"type":42,"value":162},"Android SDK 21+",{"type":36,"tag":64,"props":164,"children":165},{},[166],{"type":42,"value":167},"Kotlin or Java",{"type":36,"tag":64,"props":169,"children":170},{},[171],{"type":42,"value":172},"Android Studio",{"type":36,"tag":64,"props":174,"children":175},{},[176],{"type":42,"value":177},"Free Mapbox account",{"type":36,"tag":149,"props":179,"children":181},{"id":180},"step-1-configure-access-token",[182],{"type":42,"value":183},"Step 1: Configure Access Token",{"type":36,"tag":45,"props":185,"children":186},{},[187,189,196],{"type":42,"value":188},"Create ",{"type":36,"tag":190,"props":191,"children":193},"code",{"className":192},[],[194],{"type":42,"value":195},"app\u002Fres\u002Fvalues\u002Fmapbox_access_token.xml",{"type":42,"value":197},":",{"type":36,"tag":199,"props":200,"children":205},"pre",{"className":201,"code":202,"language":203,"meta":204,"style":204},"language-xml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u003C?xml version=\"1.0\" encoding=\"utf-8\"?>\n\u003Cresources xmlns:tools=\"http:\u002F\u002Fschemas.android.com\u002Ftools\">\n    \u003Cstring name=\"mapbox_access_token\" translatable=\"false\"\n        tools:ignore=\"UnusedResources\">YOUR_MAPBOX_ACCESS_TOKEN\u003C\u002Fstring>\n\u003C\u002Fresources>\n","xml","",[206],{"type":36,"tag":190,"props":207,"children":208},{"__ignoreMap":204},[209,220,229,238,247],{"type":36,"tag":210,"props":211,"children":214},"span",{"class":212,"line":213},"line",1,[215],{"type":36,"tag":210,"props":216,"children":217},{},[218],{"type":42,"value":219},"\u003C?xml version=\"1.0\" encoding=\"utf-8\"?>\n",{"type":36,"tag":210,"props":221,"children":223},{"class":212,"line":222},2,[224],{"type":36,"tag":210,"props":225,"children":226},{},[227],{"type":42,"value":228},"\u003Cresources xmlns:tools=\"http:\u002F\u002Fschemas.android.com\u002Ftools\">\n",{"type":36,"tag":210,"props":230,"children":232},{"class":212,"line":231},3,[233],{"type":36,"tag":210,"props":234,"children":235},{},[236],{"type":42,"value":237},"    \u003Cstring name=\"mapbox_access_token\" translatable=\"false\"\n",{"type":36,"tag":210,"props":239,"children":241},{"class":212,"line":240},4,[242],{"type":36,"tag":210,"props":243,"children":244},{},[245],{"type":42,"value":246},"        tools:ignore=\"UnusedResources\">YOUR_MAPBOX_ACCESS_TOKEN\u003C\u002Fstring>\n",{"type":36,"tag":210,"props":248,"children":250},{"class":212,"line":249},5,[251],{"type":36,"tag":210,"props":252,"children":253},{},[254],{"type":42,"value":255},"\u003C\u002Fresources>\n",{"type":36,"tag":45,"props":257,"children":258},{},[259,264,266],{"type":36,"tag":54,"props":260,"children":261},{},[262],{"type":42,"value":263},"Get your token:",{"type":42,"value":265}," Sign in at ",{"type":36,"tag":109,"props":267,"children":270},{"href":268,"rel":269},"https:\u002F\u002Faccount.mapbox.com\u002Faccess-tokens\u002F",[113],[271],{"type":42,"value":272},"mapbox.com",{"type":36,"tag":149,"props":274,"children":276},{"id":275},"step-1b-internet-permission-required",[277],{"type":42,"value":278},"Step 1b: Internet permission (required)",{"type":36,"tag":45,"props":280,"children":281},{},[282,284,290],{"type":42,"value":283},"Maps need network access. Include this in ",{"type":36,"tag":190,"props":285,"children":287},{"className":286},[],[288],{"type":42,"value":289},"AndroidManifest.xml",{"type":42,"value":291}," — agents often omit it and only list location permissions later:",{"type":36,"tag":199,"props":293,"children":295},{"className":201,"code":294,"language":203,"meta":204,"style":204},"\u003Cuses-permission android:name=\"android.permission.INTERNET\" \u002F>\n",[296],{"type":36,"tag":190,"props":297,"children":298},{"__ignoreMap":204},[299],{"type":36,"tag":210,"props":300,"children":301},{"class":212,"line":213},[302],{"type":36,"tag":210,"props":303,"children":304},{},[305],{"type":42,"value":294},{"type":36,"tag":149,"props":307,"children":309},{"id":308},"step-2-add-maven-repository",[310],{"type":42,"value":311},"Step 2: Add Maven Repository",{"type":36,"tag":45,"props":313,"children":314},{},[315,317,323],{"type":42,"value":316},"In ",{"type":36,"tag":190,"props":318,"children":320},{"className":319},[],[321],{"type":42,"value":322},"settings.gradle.kts",{"type":42,"value":197},{"type":36,"tag":199,"props":325,"children":329},{"className":326,"code":327,"language":328,"meta":204,"style":204},"language-kotlin shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","dependencyResolutionManagement {\n    repositories {\n        google()\n        mavenCentral()\n        maven {\n            url = uri(\"https:\u002F\u002Fapi.mapbox.com\u002Fdownloads\u002Fv2\u002Freleases\u002Fmaven\")\n        }\n    }\n}\n","kotlin",[330],{"type":36,"tag":190,"props":331,"children":332},{"__ignoreMap":204},[333,341,349,357,365,373,382,391,400],{"type":36,"tag":210,"props":334,"children":335},{"class":212,"line":213},[336],{"type":36,"tag":210,"props":337,"children":338},{},[339],{"type":42,"value":340},"dependencyResolutionManagement {\n",{"type":36,"tag":210,"props":342,"children":343},{"class":212,"line":222},[344],{"type":36,"tag":210,"props":345,"children":346},{},[347],{"type":42,"value":348},"    repositories {\n",{"type":36,"tag":210,"props":350,"children":351},{"class":212,"line":231},[352],{"type":36,"tag":210,"props":353,"children":354},{},[355],{"type":42,"value":356},"        google()\n",{"type":36,"tag":210,"props":358,"children":359},{"class":212,"line":240},[360],{"type":36,"tag":210,"props":361,"children":362},{},[363],{"type":42,"value":364},"        mavenCentral()\n",{"type":36,"tag":210,"props":366,"children":367},{"class":212,"line":249},[368],{"type":36,"tag":210,"props":369,"children":370},{},[371],{"type":42,"value":372},"        maven {\n",{"type":36,"tag":210,"props":374,"children":376},{"class":212,"line":375},6,[377],{"type":36,"tag":210,"props":378,"children":379},{},[380],{"type":42,"value":381},"            url = uri(\"https:\u002F\u002Fapi.mapbox.com\u002Fdownloads\u002Fv2\u002Freleases\u002Fmaven\")\n",{"type":36,"tag":210,"props":383,"children":385},{"class":212,"line":384},7,[386],{"type":36,"tag":210,"props":387,"children":388},{},[389],{"type":42,"value":390},"        }\n",{"type":36,"tag":210,"props":392,"children":394},{"class":212,"line":393},8,[395],{"type":36,"tag":210,"props":396,"children":397},{},[398],{"type":42,"value":399},"    }\n",{"type":36,"tag":210,"props":401,"children":403},{"class":212,"line":402},9,[404],{"type":36,"tag":210,"props":405,"children":406},{},[407],{"type":42,"value":408},"}\n",{"type":36,"tag":149,"props":410,"children":412},{"id":411},"step-3-add-dependency",[413],{"type":42,"value":414},"Step 3: Add Dependency",{"type":36,"tag":45,"props":416,"children":417},{},[418,420,426],{"type":42,"value":419},"In module ",{"type":36,"tag":190,"props":421,"children":423},{"className":422},[],[424],{"type":42,"value":425},"build.gradle.kts",{"type":42,"value":197},{"type":36,"tag":199,"props":428,"children":430},{"className":326,"code":429,"language":328,"meta":204,"style":204},"android {\n    defaultConfig {\n        minSdk = 21\n    }\n}\n\ndependencies {\n    implementation(\"com.mapbox.maps:android:11.18.1\")\n}\n",[431],{"type":36,"tag":190,"props":432,"children":433},{"__ignoreMap":204},[434,442,450,458,465,472,481,489,497],{"type":36,"tag":210,"props":435,"children":436},{"class":212,"line":213},[437],{"type":36,"tag":210,"props":438,"children":439},{},[440],{"type":42,"value":441},"android {\n",{"type":36,"tag":210,"props":443,"children":444},{"class":212,"line":222},[445],{"type":36,"tag":210,"props":446,"children":447},{},[448],{"type":42,"value":449},"    defaultConfig {\n",{"type":36,"tag":210,"props":451,"children":452},{"class":212,"line":231},[453],{"type":36,"tag":210,"props":454,"children":455},{},[456],{"type":42,"value":457},"        minSdk = 21\n",{"type":36,"tag":210,"props":459,"children":460},{"class":212,"line":240},[461],{"type":36,"tag":210,"props":462,"children":463},{},[464],{"type":42,"value":399},{"type":36,"tag":210,"props":466,"children":467},{"class":212,"line":249},[468],{"type":36,"tag":210,"props":469,"children":470},{},[471],{"type":42,"value":408},{"type":36,"tag":210,"props":473,"children":474},{"class":212,"line":375},[475],{"type":36,"tag":210,"props":476,"children":478},{"emptyLinePlaceholder":477},true,[479],{"type":42,"value":480},"\n",{"type":36,"tag":210,"props":482,"children":483},{"class":212,"line":384},[484],{"type":36,"tag":210,"props":485,"children":486},{},[487],{"type":42,"value":488},"dependencies {\n",{"type":36,"tag":210,"props":490,"children":491},{"class":212,"line":393},[492],{"type":36,"tag":210,"props":493,"children":494},{},[495],{"type":42,"value":496},"    implementation(\"com.mapbox.maps:android:11.18.1\")\n",{"type":36,"tag":210,"props":498,"children":499},{"class":212,"line":402},[500],{"type":36,"tag":210,"props":501,"children":502},{},[503],{"type":42,"value":408},{"type":36,"tag":45,"props":505,"children":506},{},[507],{"type":36,"tag":54,"props":508,"children":509},{},[510],{"type":42,"value":511},"For Jetpack Compose:",{"type":36,"tag":199,"props":513,"children":515},{"className":326,"code":514,"language":328,"meta":204,"style":204},"dependencies {\n    implementation(\"com.mapbox.maps:android:11.18.1\")\n    implementation(\"com.mapbox.extension:maps-compose:11.18.1\")\n}\n",[516],{"type":36,"tag":190,"props":517,"children":518},{"__ignoreMap":204},[519,526,533,541],{"type":36,"tag":210,"props":520,"children":521},{"class":212,"line":213},[522],{"type":36,"tag":210,"props":523,"children":524},{},[525],{"type":42,"value":488},{"type":36,"tag":210,"props":527,"children":528},{"class":212,"line":222},[529],{"type":36,"tag":210,"props":530,"children":531},{},[532],{"type":42,"value":496},{"type":36,"tag":210,"props":534,"children":535},{"class":212,"line":231},[536],{"type":36,"tag":210,"props":537,"children":538},{},[539],{"type":42,"value":540},"    implementation(\"com.mapbox.extension:maps-compose:11.18.1\")\n",{"type":36,"tag":210,"props":542,"children":543},{"class":212,"line":240},[544],{"type":36,"tag":210,"props":545,"children":546},{},[547],{"type":42,"value":408},{"type":36,"tag":138,"props":549,"children":550},{},[],{"type":36,"tag":142,"props":552,"children":554},{"id":553},"map-initialization",[555],{"type":42,"value":556},"Map Initialization",{"type":36,"tag":149,"props":558,"children":560},{"id":559},"jetpack-compose-pattern",[561],{"type":42,"value":562},"Jetpack Compose Pattern",{"type":36,"tag":45,"props":564,"children":565},{},[566],{"type":36,"tag":54,"props":567,"children":568},{},[569],{"type":42,"value":570},"Basic map:",{"type":36,"tag":199,"props":572,"children":574},{"className":326,"code":573,"language":328,"meta":204,"style":204},"import androidx.compose.runtime.*\nimport androidx.compose.foundation.layout.fillMaxSize\nimport androidx.compose.ui.Modifier\nimport com.mapbox.maps.extension.compose.*\nimport com.mapbox.maps.Style\nimport com.mapbox.geojson.Point\n\n@Composable\nfun MapScreen() {\n    MapboxMap(\n        modifier = Modifier.fillMaxSize()\n    ) {\n        \u002F\u002F Initialize camera via MapEffect (Style.STANDARD loads by default)\n        MapEffect(Unit) { mapView ->\n            \u002F\u002F Set initial camera position\n            mapView.mapboxMap.setCamera(\n                CameraOptions.Builder()\n                    .center(Point.fromLngLat(-122.4194, 37.7749))\n                    .zoom(12.0)\n                    .build()\n            )\n        }\n    }\n}\n",[575],{"type":36,"tag":190,"props":576,"children":577},{"__ignoreMap":204},[578,586,594,602,610,618,626,633,641,649,657,666,675,684,693,702,711,720,729,738,747,756,764,772],{"type":36,"tag":210,"props":579,"children":580},{"class":212,"line":213},[581],{"type":36,"tag":210,"props":582,"children":583},{},[584],{"type":42,"value":585},"import androidx.compose.runtime.*\n",{"type":36,"tag":210,"props":587,"children":588},{"class":212,"line":222},[589],{"type":36,"tag":210,"props":590,"children":591},{},[592],{"type":42,"value":593},"import androidx.compose.foundation.layout.fillMaxSize\n",{"type":36,"tag":210,"props":595,"children":596},{"class":212,"line":231},[597],{"type":36,"tag":210,"props":598,"children":599},{},[600],{"type":42,"value":601},"import androidx.compose.ui.Modifier\n",{"type":36,"tag":210,"props":603,"children":604},{"class":212,"line":240},[605],{"type":36,"tag":210,"props":606,"children":607},{},[608],{"type":42,"value":609},"import com.mapbox.maps.extension.compose.*\n",{"type":36,"tag":210,"props":611,"children":612},{"class":212,"line":249},[613],{"type":36,"tag":210,"props":614,"children":615},{},[616],{"type":42,"value":617},"import com.mapbox.maps.Style\n",{"type":36,"tag":210,"props":619,"children":620},{"class":212,"line":375},[621],{"type":36,"tag":210,"props":622,"children":623},{},[624],{"type":42,"value":625},"import com.mapbox.geojson.Point\n",{"type":36,"tag":210,"props":627,"children":628},{"class":212,"line":384},[629],{"type":36,"tag":210,"props":630,"children":631},{"emptyLinePlaceholder":477},[632],{"type":42,"value":480},{"type":36,"tag":210,"props":634,"children":635},{"class":212,"line":393},[636],{"type":36,"tag":210,"props":637,"children":638},{},[639],{"type":42,"value":640},"@Composable\n",{"type":36,"tag":210,"props":642,"children":643},{"class":212,"line":402},[644],{"type":36,"tag":210,"props":645,"children":646},{},[647],{"type":42,"value":648},"fun MapScreen() {\n",{"type":36,"tag":210,"props":650,"children":651},{"class":212,"line":24},[652],{"type":36,"tag":210,"props":653,"children":654},{},[655],{"type":42,"value":656},"    MapboxMap(\n",{"type":36,"tag":210,"props":658,"children":660},{"class":212,"line":659},11,[661],{"type":36,"tag":210,"props":662,"children":663},{},[664],{"type":42,"value":665},"        modifier = Modifier.fillMaxSize()\n",{"type":36,"tag":210,"props":667,"children":669},{"class":212,"line":668},12,[670],{"type":36,"tag":210,"props":671,"children":672},{},[673],{"type":42,"value":674},"    ) {\n",{"type":36,"tag":210,"props":676,"children":678},{"class":212,"line":677},13,[679],{"type":36,"tag":210,"props":680,"children":681},{},[682],{"type":42,"value":683},"        \u002F\u002F Initialize camera via MapEffect (Style.STANDARD loads by default)\n",{"type":36,"tag":210,"props":685,"children":687},{"class":212,"line":686},14,[688],{"type":36,"tag":210,"props":689,"children":690},{},[691],{"type":42,"value":692},"        MapEffect(Unit) { mapView ->\n",{"type":36,"tag":210,"props":694,"children":696},{"class":212,"line":695},15,[697],{"type":36,"tag":210,"props":698,"children":699},{},[700],{"type":42,"value":701},"            \u002F\u002F Set initial camera position\n",{"type":36,"tag":210,"props":703,"children":705},{"class":212,"line":704},16,[706],{"type":36,"tag":210,"props":707,"children":708},{},[709],{"type":42,"value":710},"            mapView.mapboxMap.setCamera(\n",{"type":36,"tag":210,"props":712,"children":714},{"class":212,"line":713},17,[715],{"type":36,"tag":210,"props":716,"children":717},{},[718],{"type":42,"value":719},"                CameraOptions.Builder()\n",{"type":36,"tag":210,"props":721,"children":723},{"class":212,"line":722},18,[724],{"type":36,"tag":210,"props":725,"children":726},{},[727],{"type":42,"value":728},"                    .center(Point.fromLngLat(-122.4194, 37.7749))\n",{"type":36,"tag":210,"props":730,"children":732},{"class":212,"line":731},19,[733],{"type":36,"tag":210,"props":734,"children":735},{},[736],{"type":42,"value":737},"                    .zoom(12.0)\n",{"type":36,"tag":210,"props":739,"children":741},{"class":212,"line":740},20,[742],{"type":36,"tag":210,"props":743,"children":744},{},[745],{"type":42,"value":746},"                    .build()\n",{"type":36,"tag":210,"props":748,"children":750},{"class":212,"line":749},21,[751],{"type":36,"tag":210,"props":752,"children":753},{},[754],{"type":42,"value":755},"            )\n",{"type":36,"tag":210,"props":757,"children":759},{"class":212,"line":758},22,[760],{"type":36,"tag":210,"props":761,"children":762},{},[763],{"type":42,"value":390},{"type":36,"tag":210,"props":765,"children":767},{"class":212,"line":766},23,[768],{"type":36,"tag":210,"props":769,"children":770},{},[771],{"type":42,"value":399},{"type":36,"tag":210,"props":773,"children":775},{"class":212,"line":774},24,[776],{"type":36,"tag":210,"props":777,"children":778},{},[779],{"type":42,"value":408},{"type":36,"tag":45,"props":781,"children":782},{},[783],{"type":36,"tag":54,"props":784,"children":785},{},[786],{"type":42,"value":787},"With ornaments:",{"type":36,"tag":199,"props":789,"children":791},{"className":326,"code":790,"language":328,"meta":204,"style":204},"MapboxMap(\n    modifier = Modifier.fillMaxSize(),\n    scaleBar = {\n        ScaleBar(\n            enabled = true,\n            position = Alignment.BottomStart\n        )\n    },\n    compass = {\n        Compass(enabled = true)\n    }\n) {\n    \u002F\u002F Style.STANDARD loads by default\n}\n",[792],{"type":36,"tag":190,"props":793,"children":794},{"__ignoreMap":204},[795,803,811,819,827,835,843,851,859,867,875,882,890,898],{"type":36,"tag":210,"props":796,"children":797},{"class":212,"line":213},[798],{"type":36,"tag":210,"props":799,"children":800},{},[801],{"type":42,"value":802},"MapboxMap(\n",{"type":36,"tag":210,"props":804,"children":805},{"class":212,"line":222},[806],{"type":36,"tag":210,"props":807,"children":808},{},[809],{"type":42,"value":810},"    modifier = Modifier.fillMaxSize(),\n",{"type":36,"tag":210,"props":812,"children":813},{"class":212,"line":231},[814],{"type":36,"tag":210,"props":815,"children":816},{},[817],{"type":42,"value":818},"    scaleBar = {\n",{"type":36,"tag":210,"props":820,"children":821},{"class":212,"line":240},[822],{"type":36,"tag":210,"props":823,"children":824},{},[825],{"type":42,"value":826},"        ScaleBar(\n",{"type":36,"tag":210,"props":828,"children":829},{"class":212,"line":249},[830],{"type":36,"tag":210,"props":831,"children":832},{},[833],{"type":42,"value":834},"            enabled = true,\n",{"type":36,"tag":210,"props":836,"children":837},{"class":212,"line":375},[838],{"type":36,"tag":210,"props":839,"children":840},{},[841],{"type":42,"value":842},"            position = Alignment.BottomStart\n",{"type":36,"tag":210,"props":844,"children":845},{"class":212,"line":384},[846],{"type":36,"tag":210,"props":847,"children":848},{},[849],{"type":42,"value":850},"        )\n",{"type":36,"tag":210,"props":852,"children":853},{"class":212,"line":393},[854],{"type":36,"tag":210,"props":855,"children":856},{},[857],{"type":42,"value":858},"    },\n",{"type":36,"tag":210,"props":860,"children":861},{"class":212,"line":402},[862],{"type":36,"tag":210,"props":863,"children":864},{},[865],{"type":42,"value":866},"    compass = {\n",{"type":36,"tag":210,"props":868,"children":869},{"class":212,"line":24},[870],{"type":36,"tag":210,"props":871,"children":872},{},[873],{"type":42,"value":874},"        Compass(enabled = true)\n",{"type":36,"tag":210,"props":876,"children":877},{"class":212,"line":659},[878],{"type":36,"tag":210,"props":879,"children":880},{},[881],{"type":42,"value":399},{"type":36,"tag":210,"props":883,"children":884},{"class":212,"line":668},[885],{"type":36,"tag":210,"props":886,"children":887},{},[888],{"type":42,"value":889},") {\n",{"type":36,"tag":210,"props":891,"children":892},{"class":212,"line":677},[893],{"type":36,"tag":210,"props":894,"children":895},{},[896],{"type":42,"value":897},"    \u002F\u002F Style.STANDARD loads by default\n",{"type":36,"tag":210,"props":899,"children":900},{"class":212,"line":686},[901],{"type":36,"tag":210,"props":902,"children":903},{},[904],{"type":42,"value":408},{"type":36,"tag":149,"props":906,"children":908},{"id":907},"view-system-pattern",[909],{"type":42,"value":910},"View System Pattern",{"type":36,"tag":45,"props":912,"children":913},{},[914],{"type":36,"tag":54,"props":915,"children":916},{},[917],{"type":42,"value":918},"Layout XML (activity_map.xml):",{"type":36,"tag":199,"props":920,"children":922},{"className":201,"code":921,"language":203,"meta":204,"style":204},"\u003C?xml version=\"1.0\" encoding=\"utf-8\"?>\n\u003Candroidx.constraintlayout.widget.ConstraintLayout\n    xmlns:android=\"http:\u002F\u002Fschemas.android.com\u002Fapk\u002Fres\u002Fandroid\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\">\n\n    \u003Ccom.mapbox.maps.MapView\n        android:id=\"@+id\u002FmapView\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\" \u002F>\n\n\u003C\u002Fandroidx.constraintlayout.widget.ConstraintLayout>\n",[923],{"type":36,"tag":190,"props":924,"children":925},{"__ignoreMap":204},[926,933,941,949,957,965,972,980,988,996,1004,1011],{"type":36,"tag":210,"props":927,"children":928},{"class":212,"line":213},[929],{"type":36,"tag":210,"props":930,"children":931},{},[932],{"type":42,"value":219},{"type":36,"tag":210,"props":934,"children":935},{"class":212,"line":222},[936],{"type":36,"tag":210,"props":937,"children":938},{},[939],{"type":42,"value":940},"\u003Candroidx.constraintlayout.widget.ConstraintLayout\n",{"type":36,"tag":210,"props":942,"children":943},{"class":212,"line":231},[944],{"type":36,"tag":210,"props":945,"children":946},{},[947],{"type":42,"value":948},"    xmlns:android=\"http:\u002F\u002Fschemas.android.com\u002Fapk\u002Fres\u002Fandroid\"\n",{"type":36,"tag":210,"props":950,"children":951},{"class":212,"line":240},[952],{"type":36,"tag":210,"props":953,"children":954},{},[955],{"type":42,"value":956},"    android:layout_width=\"match_parent\"\n",{"type":36,"tag":210,"props":958,"children":959},{"class":212,"line":249},[960],{"type":36,"tag":210,"props":961,"children":962},{},[963],{"type":42,"value":964},"    android:layout_height=\"match_parent\">\n",{"type":36,"tag":210,"props":966,"children":967},{"class":212,"line":375},[968],{"type":36,"tag":210,"props":969,"children":970},{"emptyLinePlaceholder":477},[971],{"type":42,"value":480},{"type":36,"tag":210,"props":973,"children":974},{"class":212,"line":384},[975],{"type":36,"tag":210,"props":976,"children":977},{},[978],{"type":42,"value":979},"    \u003Ccom.mapbox.maps.MapView\n",{"type":36,"tag":210,"props":981,"children":982},{"class":212,"line":393},[983],{"type":36,"tag":210,"props":984,"children":985},{},[986],{"type":42,"value":987},"        android:id=\"@+id\u002FmapView\"\n",{"type":36,"tag":210,"props":989,"children":990},{"class":212,"line":402},[991],{"type":36,"tag":210,"props":992,"children":993},{},[994],{"type":42,"value":995},"        android:layout_width=\"match_parent\"\n",{"type":36,"tag":210,"props":997,"children":998},{"class":212,"line":24},[999],{"type":36,"tag":210,"props":1000,"children":1001},{},[1002],{"type":42,"value":1003},"        android:layout_height=\"match_parent\" \u002F>\n",{"type":36,"tag":210,"props":1005,"children":1006},{"class":212,"line":659},[1007],{"type":36,"tag":210,"props":1008,"children":1009},{"emptyLinePlaceholder":477},[1010],{"type":42,"value":480},{"type":36,"tag":210,"props":1012,"children":1013},{"class":212,"line":668},[1014],{"type":36,"tag":210,"props":1015,"children":1016},{},[1017],{"type":42,"value":1018},"\u003C\u002Fandroidx.constraintlayout.widget.ConstraintLayout>\n",{"type":36,"tag":45,"props":1020,"children":1021},{},[1022],{"type":36,"tag":54,"props":1023,"children":1024},{},[1025],{"type":42,"value":1026},"Activity:",{"type":36,"tag":199,"props":1028,"children":1030},{"className":326,"code":1029,"language":328,"meta":204,"style":204},"import android.os.Bundle\nimport androidx.appcompat.app.AppCompatActivity\nimport com.mapbox.maps.MapView\nimport com.mapbox.maps.Style\nimport com.mapbox.geojson.Point\n\nclass MapActivity : AppCompatActivity() {\n    private lateinit var mapView: MapView\n\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n        setContentView(R.layout.activity_map)\n\n        mapView = findViewById(R.id.mapView)\n\n        mapView.mapboxMap.setCamera(\n            CameraOptions.Builder()\n                .center(Point.fromLngLat(-122.4194, 37.7749))\n                .zoom(12.0)\n                .build()\n        )\n\n        mapView.mapboxMap.loadStyle(Style.STANDARD)\n    }\n\n    override fun onStart() {\n        super.onStart()\n        mapView.onStart()\n    }\n\n    override fun onStop() {\n        super.onStop()\n        mapView.onStop()\n    }\n\n    override fun onDestroy() {\n        super.onDestroy()\n        mapView.onDestroy()\n    }\n}\n",[1031],{"type":36,"tag":190,"props":1032,"children":1033},{"__ignoreMap":204},[1034,1042,1050,1058,1065,1072,1079,1087,1095,1102,1110,1118,1126,1133,1141,1148,1156,1164,1172,1180,1188,1195,1202,1210,1217,1225,1234,1243,1252,1260,1268,1277,1286,1295,1303,1311,1320,1329,1338,1346],{"type":36,"tag":210,"props":1035,"children":1036},{"class":212,"line":213},[1037],{"type":36,"tag":210,"props":1038,"children":1039},{},[1040],{"type":42,"value":1041},"import android.os.Bundle\n",{"type":36,"tag":210,"props":1043,"children":1044},{"class":212,"line":222},[1045],{"type":36,"tag":210,"props":1046,"children":1047},{},[1048],{"type":42,"value":1049},"import androidx.appcompat.app.AppCompatActivity\n",{"type":36,"tag":210,"props":1051,"children":1052},{"class":212,"line":231},[1053],{"type":36,"tag":210,"props":1054,"children":1055},{},[1056],{"type":42,"value":1057},"import com.mapbox.maps.MapView\n",{"type":36,"tag":210,"props":1059,"children":1060},{"class":212,"line":240},[1061],{"type":36,"tag":210,"props":1062,"children":1063},{},[1064],{"type":42,"value":617},{"type":36,"tag":210,"props":1066,"children":1067},{"class":212,"line":249},[1068],{"type":36,"tag":210,"props":1069,"children":1070},{},[1071],{"type":42,"value":625},{"type":36,"tag":210,"props":1073,"children":1074},{"class":212,"line":375},[1075],{"type":36,"tag":210,"props":1076,"children":1077},{"emptyLinePlaceholder":477},[1078],{"type":42,"value":480},{"type":36,"tag":210,"props":1080,"children":1081},{"class":212,"line":384},[1082],{"type":36,"tag":210,"props":1083,"children":1084},{},[1085],{"type":42,"value":1086},"class MapActivity : AppCompatActivity() {\n",{"type":36,"tag":210,"props":1088,"children":1089},{"class":212,"line":393},[1090],{"type":36,"tag":210,"props":1091,"children":1092},{},[1093],{"type":42,"value":1094},"    private lateinit var mapView: MapView\n",{"type":36,"tag":210,"props":1096,"children":1097},{"class":212,"line":402},[1098],{"type":36,"tag":210,"props":1099,"children":1100},{"emptyLinePlaceholder":477},[1101],{"type":42,"value":480},{"type":36,"tag":210,"props":1103,"children":1104},{"class":212,"line":24},[1105],{"type":36,"tag":210,"props":1106,"children":1107},{},[1108],{"type":42,"value":1109},"    override fun onCreate(savedInstanceState: Bundle?) {\n",{"type":36,"tag":210,"props":1111,"children":1112},{"class":212,"line":659},[1113],{"type":36,"tag":210,"props":1114,"children":1115},{},[1116],{"type":42,"value":1117},"        super.onCreate(savedInstanceState)\n",{"type":36,"tag":210,"props":1119,"children":1120},{"class":212,"line":668},[1121],{"type":36,"tag":210,"props":1122,"children":1123},{},[1124],{"type":42,"value":1125},"        setContentView(R.layout.activity_map)\n",{"type":36,"tag":210,"props":1127,"children":1128},{"class":212,"line":677},[1129],{"type":36,"tag":210,"props":1130,"children":1131},{"emptyLinePlaceholder":477},[1132],{"type":42,"value":480},{"type":36,"tag":210,"props":1134,"children":1135},{"class":212,"line":686},[1136],{"type":36,"tag":210,"props":1137,"children":1138},{},[1139],{"type":42,"value":1140},"        mapView = findViewById(R.id.mapView)\n",{"type":36,"tag":210,"props":1142,"children":1143},{"class":212,"line":695},[1144],{"type":36,"tag":210,"props":1145,"children":1146},{"emptyLinePlaceholder":477},[1147],{"type":42,"value":480},{"type":36,"tag":210,"props":1149,"children":1150},{"class":212,"line":704},[1151],{"type":36,"tag":210,"props":1152,"children":1153},{},[1154],{"type":42,"value":1155},"        mapView.mapboxMap.setCamera(\n",{"type":36,"tag":210,"props":1157,"children":1158},{"class":212,"line":713},[1159],{"type":36,"tag":210,"props":1160,"children":1161},{},[1162],{"type":42,"value":1163},"            CameraOptions.Builder()\n",{"type":36,"tag":210,"props":1165,"children":1166},{"class":212,"line":722},[1167],{"type":36,"tag":210,"props":1168,"children":1169},{},[1170],{"type":42,"value":1171},"                .center(Point.fromLngLat(-122.4194, 37.7749))\n",{"type":36,"tag":210,"props":1173,"children":1174},{"class":212,"line":731},[1175],{"type":36,"tag":210,"props":1176,"children":1177},{},[1178],{"type":42,"value":1179},"                .zoom(12.0)\n",{"type":36,"tag":210,"props":1181,"children":1182},{"class":212,"line":740},[1183],{"type":36,"tag":210,"props":1184,"children":1185},{},[1186],{"type":42,"value":1187},"                .build()\n",{"type":36,"tag":210,"props":1189,"children":1190},{"class":212,"line":749},[1191],{"type":36,"tag":210,"props":1192,"children":1193},{},[1194],{"type":42,"value":850},{"type":36,"tag":210,"props":1196,"children":1197},{"class":212,"line":758},[1198],{"type":36,"tag":210,"props":1199,"children":1200},{"emptyLinePlaceholder":477},[1201],{"type":42,"value":480},{"type":36,"tag":210,"props":1203,"children":1204},{"class":212,"line":766},[1205],{"type":36,"tag":210,"props":1206,"children":1207},{},[1208],{"type":42,"value":1209},"        mapView.mapboxMap.loadStyle(Style.STANDARD)\n",{"type":36,"tag":210,"props":1211,"children":1212},{"class":212,"line":774},[1213],{"type":36,"tag":210,"props":1214,"children":1215},{},[1216],{"type":42,"value":399},{"type":36,"tag":210,"props":1218,"children":1220},{"class":212,"line":1219},25,[1221],{"type":36,"tag":210,"props":1222,"children":1223},{"emptyLinePlaceholder":477},[1224],{"type":42,"value":480},{"type":36,"tag":210,"props":1226,"children":1228},{"class":212,"line":1227},26,[1229],{"type":36,"tag":210,"props":1230,"children":1231},{},[1232],{"type":42,"value":1233},"    override fun onStart() {\n",{"type":36,"tag":210,"props":1235,"children":1237},{"class":212,"line":1236},27,[1238],{"type":36,"tag":210,"props":1239,"children":1240},{},[1241],{"type":42,"value":1242},"        super.onStart()\n",{"type":36,"tag":210,"props":1244,"children":1246},{"class":212,"line":1245},28,[1247],{"type":36,"tag":210,"props":1248,"children":1249},{},[1250],{"type":42,"value":1251},"        mapView.onStart()\n",{"type":36,"tag":210,"props":1253,"children":1255},{"class":212,"line":1254},29,[1256],{"type":36,"tag":210,"props":1257,"children":1258},{},[1259],{"type":42,"value":399},{"type":36,"tag":210,"props":1261,"children":1263},{"class":212,"line":1262},30,[1264],{"type":36,"tag":210,"props":1265,"children":1266},{"emptyLinePlaceholder":477},[1267],{"type":42,"value":480},{"type":36,"tag":210,"props":1269,"children":1271},{"class":212,"line":1270},31,[1272],{"type":36,"tag":210,"props":1273,"children":1274},{},[1275],{"type":42,"value":1276},"    override fun onStop() {\n",{"type":36,"tag":210,"props":1278,"children":1280},{"class":212,"line":1279},32,[1281],{"type":36,"tag":210,"props":1282,"children":1283},{},[1284],{"type":42,"value":1285},"        super.onStop()\n",{"type":36,"tag":210,"props":1287,"children":1289},{"class":212,"line":1288},33,[1290],{"type":36,"tag":210,"props":1291,"children":1292},{},[1293],{"type":42,"value":1294},"        mapView.onStop()\n",{"type":36,"tag":210,"props":1296,"children":1298},{"class":212,"line":1297},34,[1299],{"type":36,"tag":210,"props":1300,"children":1301},{},[1302],{"type":42,"value":399},{"type":36,"tag":210,"props":1304,"children":1306},{"class":212,"line":1305},35,[1307],{"type":36,"tag":210,"props":1308,"children":1309},{"emptyLinePlaceholder":477},[1310],{"type":42,"value":480},{"type":36,"tag":210,"props":1312,"children":1314},{"class":212,"line":1313},36,[1315],{"type":36,"tag":210,"props":1316,"children":1317},{},[1318],{"type":42,"value":1319},"    override fun onDestroy() {\n",{"type":36,"tag":210,"props":1321,"children":1323},{"class":212,"line":1322},37,[1324],{"type":36,"tag":210,"props":1325,"children":1326},{},[1327],{"type":42,"value":1328},"        super.onDestroy()\n",{"type":36,"tag":210,"props":1330,"children":1332},{"class":212,"line":1331},38,[1333],{"type":36,"tag":210,"props":1334,"children":1335},{},[1336],{"type":42,"value":1337},"        mapView.onDestroy()\n",{"type":36,"tag":210,"props":1339,"children":1341},{"class":212,"line":1340},39,[1342],{"type":36,"tag":210,"props":1343,"children":1344},{},[1345],{"type":42,"value":399},{"type":36,"tag":210,"props":1347,"children":1349},{"class":212,"line":1348},40,[1350],{"type":36,"tag":210,"props":1351,"children":1352},{},[1353],{"type":42,"value":408},{"type":36,"tag":138,"props":1355,"children":1356},{},[],{"type":36,"tag":142,"props":1358,"children":1360},{"id":1359},"add-markers-point-annotations",[1361],{"type":42,"value":1362},"Add Markers (Point Annotations)",{"type":36,"tag":45,"props":1364,"children":1365},{},[1366],{"type":42,"value":1367},"Point annotations are the most common way to mark locations on the map.",{"type":36,"tag":45,"props":1369,"children":1370},{},[1371],{"type":36,"tag":54,"props":1372,"children":1373},{},[1374],{"type":42,"value":1375},"Jetpack Compose:",{"type":36,"tag":199,"props":1377,"children":1379},{"className":326,"code":1378,"language":328,"meta":204,"style":204},"MapboxMap(modifier = Modifier.fillMaxSize()) {\n    MapEffect(Unit) { mapView ->\n        \u002F\u002F Load style first\n        mapView.mapboxMap.loadStyle(Style.STANDARD)\n\n        \u002F\u002F Create annotation manager and add markers\n        val annotationManager = mapView.annotations.createPointAnnotationManager()\n        val pointAnnotation = PointAnnotationOptions()\n            .withPoint(Point.fromLngLat(-122.4194, 37.7749))\n            .withIconImage(\"custom-marker\")\n        annotationManager.create(pointAnnotation)\n    }\n}\n\n\u002F\u002F Note: Compose doesn't have declarative PointAnnotation component\n\u002F\u002F Markers must be added imperatively via MapEffect\n",[1380],{"type":36,"tag":190,"props":1381,"children":1382},{"__ignoreMap":204},[1383,1391,1399,1407,1414,1421,1429,1437,1445,1453,1461,1469,1476,1483,1490,1498],{"type":36,"tag":210,"props":1384,"children":1385},{"class":212,"line":213},[1386],{"type":36,"tag":210,"props":1387,"children":1388},{},[1389],{"type":42,"value":1390},"MapboxMap(modifier = Modifier.fillMaxSize()) {\n",{"type":36,"tag":210,"props":1392,"children":1393},{"class":212,"line":222},[1394],{"type":36,"tag":210,"props":1395,"children":1396},{},[1397],{"type":42,"value":1398},"    MapEffect(Unit) { mapView ->\n",{"type":36,"tag":210,"props":1400,"children":1401},{"class":212,"line":231},[1402],{"type":36,"tag":210,"props":1403,"children":1404},{},[1405],{"type":42,"value":1406},"        \u002F\u002F Load style first\n",{"type":36,"tag":210,"props":1408,"children":1409},{"class":212,"line":240},[1410],{"type":36,"tag":210,"props":1411,"children":1412},{},[1413],{"type":42,"value":1209},{"type":36,"tag":210,"props":1415,"children":1416},{"class":212,"line":249},[1417],{"type":36,"tag":210,"props":1418,"children":1419},{"emptyLinePlaceholder":477},[1420],{"type":42,"value":480},{"type":36,"tag":210,"props":1422,"children":1423},{"class":212,"line":375},[1424],{"type":36,"tag":210,"props":1425,"children":1426},{},[1427],{"type":42,"value":1428},"        \u002F\u002F Create annotation manager and add markers\n",{"type":36,"tag":210,"props":1430,"children":1431},{"class":212,"line":384},[1432],{"type":36,"tag":210,"props":1433,"children":1434},{},[1435],{"type":42,"value":1436},"        val annotationManager = mapView.annotations.createPointAnnotationManager()\n",{"type":36,"tag":210,"props":1438,"children":1439},{"class":212,"line":393},[1440],{"type":36,"tag":210,"props":1441,"children":1442},{},[1443],{"type":42,"value":1444},"        val pointAnnotation = PointAnnotationOptions()\n",{"type":36,"tag":210,"props":1446,"children":1447},{"class":212,"line":402},[1448],{"type":36,"tag":210,"props":1449,"children":1450},{},[1451],{"type":42,"value":1452},"            .withPoint(Point.fromLngLat(-122.4194, 37.7749))\n",{"type":36,"tag":210,"props":1454,"children":1455},{"class":212,"line":24},[1456],{"type":36,"tag":210,"props":1457,"children":1458},{},[1459],{"type":42,"value":1460},"            .withIconImage(\"custom-marker\")\n",{"type":36,"tag":210,"props":1462,"children":1463},{"class":212,"line":659},[1464],{"type":36,"tag":210,"props":1465,"children":1466},{},[1467],{"type":42,"value":1468},"        annotationManager.create(pointAnnotation)\n",{"type":36,"tag":210,"props":1470,"children":1471},{"class":212,"line":668},[1472],{"type":36,"tag":210,"props":1473,"children":1474},{},[1475],{"type":42,"value":399},{"type":36,"tag":210,"props":1477,"children":1478},{"class":212,"line":677},[1479],{"type":36,"tag":210,"props":1480,"children":1481},{},[1482],{"type":42,"value":408},{"type":36,"tag":210,"props":1484,"children":1485},{"class":212,"line":686},[1486],{"type":36,"tag":210,"props":1487,"children":1488},{"emptyLinePlaceholder":477},[1489],{"type":42,"value":480},{"type":36,"tag":210,"props":1491,"children":1492},{"class":212,"line":695},[1493],{"type":36,"tag":210,"props":1494,"children":1495},{},[1496],{"type":42,"value":1497},"\u002F\u002F Note: Compose doesn't have declarative PointAnnotation component\n",{"type":36,"tag":210,"props":1499,"children":1500},{"class":212,"line":704},[1501],{"type":36,"tag":210,"props":1502,"children":1503},{},[1504],{"type":42,"value":1505},"\u002F\u002F Markers must be added imperatively via MapEffect\n",{"type":36,"tag":45,"props":1507,"children":1508},{},[1509],{"type":36,"tag":54,"props":1510,"children":1511},{},[1512],{"type":42,"value":1513},"View System:",{"type":36,"tag":199,"props":1515,"children":1517},{"className":326,"code":1516,"language":328,"meta":204,"style":204},"\u002F\u002F Create annotation manager (once, reuse for updates)\nval pointAnnotationManager = mapView.annotations.createPointAnnotationManager()\n\n\u002F\u002F Create marker\nval pointAnnotation = PointAnnotationOptions()\n    .withPoint(Point.fromLngLat(-122.4194, 37.7749))\n    .withIconImage(\"custom-marker\")\n\npointAnnotationManager.create(pointAnnotation)\n",[1518],{"type":36,"tag":190,"props":1519,"children":1520},{"__ignoreMap":204},[1521,1529,1537,1544,1552,1560,1568,1576,1583],{"type":36,"tag":210,"props":1522,"children":1523},{"class":212,"line":213},[1524],{"type":36,"tag":210,"props":1525,"children":1526},{},[1527],{"type":42,"value":1528},"\u002F\u002F Create annotation manager (once, reuse for updates)\n",{"type":36,"tag":210,"props":1530,"children":1531},{"class":212,"line":222},[1532],{"type":36,"tag":210,"props":1533,"children":1534},{},[1535],{"type":42,"value":1536},"val pointAnnotationManager = mapView.annotations.createPointAnnotationManager()\n",{"type":36,"tag":210,"props":1538,"children":1539},{"class":212,"line":231},[1540],{"type":36,"tag":210,"props":1541,"children":1542},{"emptyLinePlaceholder":477},[1543],{"type":42,"value":480},{"type":36,"tag":210,"props":1545,"children":1546},{"class":212,"line":240},[1547],{"type":36,"tag":210,"props":1548,"children":1549},{},[1550],{"type":42,"value":1551},"\u002F\u002F Create marker\n",{"type":36,"tag":210,"props":1553,"children":1554},{"class":212,"line":249},[1555],{"type":36,"tag":210,"props":1556,"children":1557},{},[1558],{"type":42,"value":1559},"val pointAnnotation = PointAnnotationOptions()\n",{"type":36,"tag":210,"props":1561,"children":1562},{"class":212,"line":375},[1563],{"type":36,"tag":210,"props":1564,"children":1565},{},[1566],{"type":42,"value":1567},"    .withPoint(Point.fromLngLat(-122.4194, 37.7749))\n",{"type":36,"tag":210,"props":1569,"children":1570},{"class":212,"line":384},[1571],{"type":36,"tag":210,"props":1572,"children":1573},{},[1574],{"type":42,"value":1575},"    .withIconImage(\"custom-marker\")\n",{"type":36,"tag":210,"props":1577,"children":1578},{"class":212,"line":393},[1579],{"type":36,"tag":210,"props":1580,"children":1581},{"emptyLinePlaceholder":477},[1582],{"type":42,"value":480},{"type":36,"tag":210,"props":1584,"children":1585},{"class":212,"line":402},[1586],{"type":36,"tag":210,"props":1587,"children":1588},{},[1589],{"type":42,"value":1590},"pointAnnotationManager.create(pointAnnotation)\n",{"type":36,"tag":45,"props":1592,"children":1593},{},[1594],{"type":36,"tag":54,"props":1595,"children":1596},{},[1597],{"type":42,"value":1598},"Multiple markers:",{"type":36,"tag":199,"props":1600,"children":1602},{"className":326,"code":1601,"language":328,"meta":204,"style":204},"val locations = listOf(\n    Point.fromLngLat(-122.4194, 37.7749),\n    Point.fromLngLat(-122.4094, 37.7849),\n    Point.fromLngLat(-122.4294, 37.7649)\n)\n\nval annotations = locations.map { point ->\n    PointAnnotationOptions()\n        .withPoint(point)\n        .withIconImage(\"marker\")\n}\n\npointAnnotationManager.create(annotations)\n",[1603],{"type":36,"tag":190,"props":1604,"children":1605},{"__ignoreMap":204},[1606,1614,1622,1630,1638,1646,1653,1661,1669,1677,1685,1692,1699],{"type":36,"tag":210,"props":1607,"children":1608},{"class":212,"line":213},[1609],{"type":36,"tag":210,"props":1610,"children":1611},{},[1612],{"type":42,"value":1613},"val locations = listOf(\n",{"type":36,"tag":210,"props":1615,"children":1616},{"class":212,"line":222},[1617],{"type":36,"tag":210,"props":1618,"children":1619},{},[1620],{"type":42,"value":1621},"    Point.fromLngLat(-122.4194, 37.7749),\n",{"type":36,"tag":210,"props":1623,"children":1624},{"class":212,"line":231},[1625],{"type":36,"tag":210,"props":1626,"children":1627},{},[1628],{"type":42,"value":1629},"    Point.fromLngLat(-122.4094, 37.7849),\n",{"type":36,"tag":210,"props":1631,"children":1632},{"class":212,"line":240},[1633],{"type":36,"tag":210,"props":1634,"children":1635},{},[1636],{"type":42,"value":1637},"    Point.fromLngLat(-122.4294, 37.7649)\n",{"type":36,"tag":210,"props":1639,"children":1640},{"class":212,"line":249},[1641],{"type":36,"tag":210,"props":1642,"children":1643},{},[1644],{"type":42,"value":1645},")\n",{"type":36,"tag":210,"props":1647,"children":1648},{"class":212,"line":375},[1649],{"type":36,"tag":210,"props":1650,"children":1651},{"emptyLinePlaceholder":477},[1652],{"type":42,"value":480},{"type":36,"tag":210,"props":1654,"children":1655},{"class":212,"line":384},[1656],{"type":36,"tag":210,"props":1657,"children":1658},{},[1659],{"type":42,"value":1660},"val annotations = locations.map { point ->\n",{"type":36,"tag":210,"props":1662,"children":1663},{"class":212,"line":393},[1664],{"type":36,"tag":210,"props":1665,"children":1666},{},[1667],{"type":42,"value":1668},"    PointAnnotationOptions()\n",{"type":36,"tag":210,"props":1670,"children":1671},{"class":212,"line":402},[1672],{"type":36,"tag":210,"props":1673,"children":1674},{},[1675],{"type":42,"value":1676},"        .withPoint(point)\n",{"type":36,"tag":210,"props":1678,"children":1679},{"class":212,"line":24},[1680],{"type":36,"tag":210,"props":1681,"children":1682},{},[1683],{"type":42,"value":1684},"        .withIconImage(\"marker\")\n",{"type":36,"tag":210,"props":1686,"children":1687},{"class":212,"line":659},[1688],{"type":36,"tag":210,"props":1689,"children":1690},{},[1691],{"type":42,"value":408},{"type":36,"tag":210,"props":1693,"children":1694},{"class":212,"line":668},[1695],{"type":36,"tag":210,"props":1696,"children":1697},{"emptyLinePlaceholder":477},[1698],{"type":42,"value":480},{"type":36,"tag":210,"props":1700,"children":1701},{"class":212,"line":677},[1702],{"type":36,"tag":210,"props":1703,"children":1704},{},[1705],{"type":42,"value":1706},"pointAnnotationManager.create(annotations)\n",{"type":36,"tag":138,"props":1708,"children":1709},{},[],{"type":36,"tag":142,"props":1711,"children":1713},{"id":1712},"show-user-location-display",[1714],{"type":42,"value":1715},"Show User Location (Display)",{"type":36,"tag":45,"props":1717,"children":1718},{},[1719],{"type":36,"tag":54,"props":1720,"children":1721},{},[1722],{"type":42,"value":1723},"Step 1: Add permissions to AndroidManifest.xml:",{"type":36,"tag":199,"props":1725,"children":1727},{"className":201,"code":1726,"language":203,"meta":204,"style":204},"\u003Cuses-permission android:name=\"android.permission.INTERNET\" \u002F>\n\u003Cuses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\" \u002F>\n\u003Cuses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\" \u002F>\n",[1728],{"type":36,"tag":190,"props":1729,"children":1730},{"__ignoreMap":204},[1731,1738,1746],{"type":36,"tag":210,"props":1732,"children":1733},{"class":212,"line":213},[1734],{"type":36,"tag":210,"props":1735,"children":1736},{},[1737],{"type":42,"value":294},{"type":36,"tag":210,"props":1739,"children":1740},{"class":212,"line":222},[1741],{"type":36,"tag":210,"props":1742,"children":1743},{},[1744],{"type":42,"value":1745},"\u003Cuses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\" \u002F>\n",{"type":36,"tag":210,"props":1747,"children":1748},{"class":212,"line":231},[1749],{"type":36,"tag":210,"props":1750,"children":1751},{},[1752],{"type":42,"value":1753},"\u003Cuses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\" \u002F>\n",{"type":36,"tag":45,"props":1755,"children":1756},{},[1757],{"type":36,"tag":54,"props":1758,"children":1759},{},[1760],{"type":42,"value":1761},"Step 2: Request permissions and show location:",{"type":36,"tag":199,"props":1763,"children":1765},{"className":326,"code":1764,"language":328,"meta":204,"style":204},"\u002F\u002F Request permissions first (use ActivityResultContracts)\n\n\u002F\u002F Show location puck\nmapView.location.updateSettings {\n    enabled = true\n    puckBearingEnabled = true\n}\n",[1766],{"type":36,"tag":190,"props":1767,"children":1768},{"__ignoreMap":204},[1769,1777,1784,1792,1800,1808,1816],{"type":36,"tag":210,"props":1770,"children":1771},{"class":212,"line":213},[1772],{"type":36,"tag":210,"props":1773,"children":1774},{},[1775],{"type":42,"value":1776},"\u002F\u002F Request permissions first (use ActivityResultContracts)\n",{"type":36,"tag":210,"props":1778,"children":1779},{"class":212,"line":222},[1780],{"type":36,"tag":210,"props":1781,"children":1782},{"emptyLinePlaceholder":477},[1783],{"type":42,"value":480},{"type":36,"tag":210,"props":1785,"children":1786},{"class":212,"line":231},[1787],{"type":36,"tag":210,"props":1788,"children":1789},{},[1790],{"type":42,"value":1791},"\u002F\u002F Show location puck\n",{"type":36,"tag":210,"props":1793,"children":1794},{"class":212,"line":240},[1795],{"type":36,"tag":210,"props":1796,"children":1797},{},[1798],{"type":42,"value":1799},"mapView.location.updateSettings {\n",{"type":36,"tag":210,"props":1801,"children":1802},{"class":212,"line":249},[1803],{"type":36,"tag":210,"props":1804,"children":1805},{},[1806],{"type":42,"value":1807},"    enabled = true\n",{"type":36,"tag":210,"props":1809,"children":1810},{"class":212,"line":375},[1811],{"type":36,"tag":210,"props":1812,"children":1813},{},[1814],{"type":42,"value":1815},"    puckBearingEnabled = true\n",{"type":36,"tag":210,"props":1817,"children":1818},{"class":212,"line":384},[1819],{"type":36,"tag":210,"props":1820,"children":1821},{},[1822],{"type":42,"value":408},{"type":36,"tag":138,"props":1824,"children":1825},{},[],{"type":36,"tag":142,"props":1827,"children":1829},{"id":1828},"performance-best-practices",[1830],{"type":42,"value":1831},"Performance Best Practices",{"type":36,"tag":149,"props":1833,"children":1835},{"id":1834},"reuse-annotation-managers",[1836],{"type":42,"value":1837},"Reuse Annotation Managers",{"type":36,"tag":199,"props":1839,"children":1841},{"className":326,"code":1840,"language":328,"meta":204,"style":204},"\u002F\u002F Don't create new managers repeatedly\n\u002F\u002F val manager = mapView.annotations.createPointAnnotationManager() \u002F\u002F each call\n\n\u002F\u002F Create once, reuse\nval pointAnnotationManager = mapView.annotations.createPointAnnotationManager()\n\nfun updateMarkers() {\n    pointAnnotationManager.deleteAll()\n    pointAnnotationManager.create(markers)\n}\n",[1842],{"type":36,"tag":190,"props":1843,"children":1844},{"__ignoreMap":204},[1845,1853,1866,1873,1881,1888,1895,1903,1911,1919],{"type":36,"tag":210,"props":1846,"children":1847},{"class":212,"line":213},[1848],{"type":36,"tag":210,"props":1849,"children":1850},{},[1851],{"type":42,"value":1852},"\u002F\u002F Don't create new managers repeatedly\n",{"type":36,"tag":210,"props":1854,"children":1855},{"class":212,"line":222},[1856,1861],{"type":36,"tag":210,"props":1857,"children":1858},{},[1859],{"type":42,"value":1860},"\u002F\u002F val manager = mapView.annotations.createPointAnnotationManager()",{"type":36,"tag":210,"props":1862,"children":1863},{},[1864],{"type":42,"value":1865}," \u002F\u002F each call\n",{"type":36,"tag":210,"props":1867,"children":1868},{"class":212,"line":231},[1869],{"type":36,"tag":210,"props":1870,"children":1871},{"emptyLinePlaceholder":477},[1872],{"type":42,"value":480},{"type":36,"tag":210,"props":1874,"children":1875},{"class":212,"line":240},[1876],{"type":36,"tag":210,"props":1877,"children":1878},{},[1879],{"type":42,"value":1880},"\u002F\u002F Create once, reuse\n",{"type":36,"tag":210,"props":1882,"children":1883},{"class":212,"line":249},[1884],{"type":36,"tag":210,"props":1885,"children":1886},{},[1887],{"type":42,"value":1536},{"type":36,"tag":210,"props":1889,"children":1890},{"class":212,"line":375},[1891],{"type":36,"tag":210,"props":1892,"children":1893},{"emptyLinePlaceholder":477},[1894],{"type":42,"value":480},{"type":36,"tag":210,"props":1896,"children":1897},{"class":212,"line":384},[1898],{"type":36,"tag":210,"props":1899,"children":1900},{},[1901],{"type":42,"value":1902},"fun updateMarkers() {\n",{"type":36,"tag":210,"props":1904,"children":1905},{"class":212,"line":393},[1906],{"type":36,"tag":210,"props":1907,"children":1908},{},[1909],{"type":42,"value":1910},"    pointAnnotationManager.deleteAll()\n",{"type":36,"tag":210,"props":1912,"children":1913},{"class":212,"line":402},[1914],{"type":36,"tag":210,"props":1915,"children":1916},{},[1917],{"type":42,"value":1918},"    pointAnnotationManager.create(markers)\n",{"type":36,"tag":210,"props":1920,"children":1921},{"class":212,"line":24},[1922],{"type":36,"tag":210,"props":1923,"children":1924},{},[1925],{"type":42,"value":408},{"type":36,"tag":149,"props":1927,"children":1929},{"id":1928},"batch-annotation-updates",[1930],{"type":42,"value":1931},"Batch Annotation Updates",{"type":36,"tag":199,"props":1933,"children":1935},{"className":326,"code":1934,"language":328,"meta":204,"style":204},"\u002F\u002F Create all at once\npointAnnotationManager.create(allAnnotations)\n\n\u002F\u002F Don't create one by one in a loop\n",[1936],{"type":36,"tag":190,"props":1937,"children":1938},{"__ignoreMap":204},[1939,1947,1955,1962],{"type":36,"tag":210,"props":1940,"children":1941},{"class":212,"line":213},[1942],{"type":36,"tag":210,"props":1943,"children":1944},{},[1945],{"type":42,"value":1946},"\u002F\u002F Create all at once\n",{"type":36,"tag":210,"props":1948,"children":1949},{"class":212,"line":222},[1950],{"type":36,"tag":210,"props":1951,"children":1952},{},[1953],{"type":42,"value":1954},"pointAnnotationManager.create(allAnnotations)\n",{"type":36,"tag":210,"props":1956,"children":1957},{"class":212,"line":231},[1958],{"type":36,"tag":210,"props":1959,"children":1960},{"emptyLinePlaceholder":477},[1961],{"type":42,"value":480},{"type":36,"tag":210,"props":1963,"children":1964},{"class":212,"line":240},[1965],{"type":36,"tag":210,"props":1966,"children":1967},{},[1968],{"type":42,"value":1969},"\u002F\u002F Don't create one by one in a loop\n",{"type":36,"tag":149,"props":1971,"children":1973},{"id":1972},"lifecycle-management",[1974],{"type":42,"value":1975},"Lifecycle Management",{"type":36,"tag":199,"props":1977,"children":1979},{"className":326,"code":1978,"language":328,"meta":204,"style":204},"\u002F\u002F Always call lifecycle methods\noverride fun onStart() {\n    super.onStart()\n    mapView.onStart()\n}\n\noverride fun onStop() {\n    super.onStop()\n    mapView.onStop()\n}\n\noverride fun onDestroy() {\n    super.onDestroy()\n    mapView.onDestroy()\n}\n",[1980],{"type":36,"tag":190,"props":1981,"children":1982},{"__ignoreMap":204},[1983,1991,1999,2007,2015,2022,2029,2037,2045,2053,2060,2067,2075,2083,2091],{"type":36,"tag":210,"props":1984,"children":1985},{"class":212,"line":213},[1986],{"type":36,"tag":210,"props":1987,"children":1988},{},[1989],{"type":42,"value":1990},"\u002F\u002F Always call lifecycle methods\n",{"type":36,"tag":210,"props":1992,"children":1993},{"class":212,"line":222},[1994],{"type":36,"tag":210,"props":1995,"children":1996},{},[1997],{"type":42,"value":1998},"override fun onStart() {\n",{"type":36,"tag":210,"props":2000,"children":2001},{"class":212,"line":231},[2002],{"type":36,"tag":210,"props":2003,"children":2004},{},[2005],{"type":42,"value":2006},"    super.onStart()\n",{"type":36,"tag":210,"props":2008,"children":2009},{"class":212,"line":240},[2010],{"type":36,"tag":210,"props":2011,"children":2012},{},[2013],{"type":42,"value":2014},"    mapView.onStart()\n",{"type":36,"tag":210,"props":2016,"children":2017},{"class":212,"line":249},[2018],{"type":36,"tag":210,"props":2019,"children":2020},{},[2021],{"type":42,"value":408},{"type":36,"tag":210,"props":2023,"children":2024},{"class":212,"line":375},[2025],{"type":36,"tag":210,"props":2026,"children":2027},{"emptyLinePlaceholder":477},[2028],{"type":42,"value":480},{"type":36,"tag":210,"props":2030,"children":2031},{"class":212,"line":384},[2032],{"type":36,"tag":210,"props":2033,"children":2034},{},[2035],{"type":42,"value":2036},"override fun onStop() {\n",{"type":36,"tag":210,"props":2038,"children":2039},{"class":212,"line":393},[2040],{"type":36,"tag":210,"props":2041,"children":2042},{},[2043],{"type":42,"value":2044},"    super.onStop()\n",{"type":36,"tag":210,"props":2046,"children":2047},{"class":212,"line":402},[2048],{"type":36,"tag":210,"props":2049,"children":2050},{},[2051],{"type":42,"value":2052},"    mapView.onStop()\n",{"type":36,"tag":210,"props":2054,"children":2055},{"class":212,"line":24},[2056],{"type":36,"tag":210,"props":2057,"children":2058},{},[2059],{"type":42,"value":408},{"type":36,"tag":210,"props":2061,"children":2062},{"class":212,"line":659},[2063],{"type":36,"tag":210,"props":2064,"children":2065},{"emptyLinePlaceholder":477},[2066],{"type":42,"value":480},{"type":36,"tag":210,"props":2068,"children":2069},{"class":212,"line":668},[2070],{"type":36,"tag":210,"props":2071,"children":2072},{},[2073],{"type":42,"value":2074},"override fun onDestroy() {\n",{"type":36,"tag":210,"props":2076,"children":2077},{"class":212,"line":677},[2078],{"type":36,"tag":210,"props":2079,"children":2080},{},[2081],{"type":42,"value":2082},"    super.onDestroy()\n",{"type":36,"tag":210,"props":2084,"children":2085},{"class":212,"line":686},[2086],{"type":36,"tag":210,"props":2087,"children":2088},{},[2089],{"type":42,"value":2090},"    mapView.onDestroy()\n",{"type":36,"tag":210,"props":2092,"children":2093},{"class":212,"line":695},[2094],{"type":36,"tag":210,"props":2095,"children":2096},{},[2097],{"type":42,"value":408},{"type":36,"tag":149,"props":2099,"children":2101},{"id":2100},"use-standard-style",[2102],{"type":42,"value":2103},"Use Standard Style",{"type":36,"tag":199,"props":2105,"children":2107},{"className":326,"code":2106,"language":328,"meta":204,"style":204},"\u002F\u002F Standard style is optimized and recommended\nStyle.STANDARD\n\n\u002F\u002F Use other styles only when needed for specific use cases\nStyle.STANDARD_SATELLITE \u002F\u002F Satellite imagery\n",[2108],{"type":36,"tag":190,"props":2109,"children":2110},{"__ignoreMap":204},[2111,2119,2127,2134,2142],{"type":36,"tag":210,"props":2112,"children":2113},{"class":212,"line":213},[2114],{"type":36,"tag":210,"props":2115,"children":2116},{},[2117],{"type":42,"value":2118},"\u002F\u002F Standard style is optimized and recommended\n",{"type":36,"tag":210,"props":2120,"children":2121},{"class":212,"line":222},[2122],{"type":36,"tag":210,"props":2123,"children":2124},{},[2125],{"type":42,"value":2126},"Style.STANDARD\n",{"type":36,"tag":210,"props":2128,"children":2129},{"class":212,"line":231},[2130],{"type":36,"tag":210,"props":2131,"children":2132},{"emptyLinePlaceholder":477},[2133],{"type":42,"value":480},{"type":36,"tag":210,"props":2135,"children":2136},{"class":212,"line":240},[2137],{"type":36,"tag":210,"props":2138,"children":2139},{},[2140],{"type":42,"value":2141},"\u002F\u002F Use other styles only when needed for specific use cases\n",{"type":36,"tag":210,"props":2143,"children":2144},{"class":212,"line":249},[2145],{"type":36,"tag":210,"props":2146,"children":2147},{},[2148],{"type":42,"value":2149},"Style.STANDARD_SATELLITE \u002F\u002F Satellite imagery\n",{"type":36,"tag":138,"props":2151,"children":2152},{},[],{"type":36,"tag":142,"props":2154,"children":2156},{"id":2155},"troubleshooting",[2157],{"type":42,"value":2158},"Troubleshooting",{"type":36,"tag":149,"props":2160,"children":2162},{"id":2161},"map-not-displaying",[2163],{"type":42,"value":2164},"Map Not Displaying",{"type":36,"tag":45,"props":2166,"children":2167},{},[2168],{"type":36,"tag":54,"props":2169,"children":2170},{},[2171],{"type":42,"value":2172},"Check:",{"type":36,"tag":2174,"props":2175,"children":2176},"ol",{},[2177,2188,2193,2198,2203],{"type":36,"tag":64,"props":2178,"children":2179},{},[2180,2182],{"type":42,"value":2181},"Token in ",{"type":36,"tag":190,"props":2183,"children":2185},{"className":2184},[],[2186],{"type":42,"value":2187},"mapbox_access_token.xml",{"type":36,"tag":64,"props":2189,"children":2190},{},[2191],{"type":42,"value":2192},"Token is valid (test at mapbox.com)",{"type":36,"tag":64,"props":2194,"children":2195},{},[2196],{"type":42,"value":2197},"Maven repository configured",{"type":36,"tag":64,"props":2199,"children":2200},{},[2201],{"type":42,"value":2202},"Dependency added correctly",{"type":36,"tag":64,"props":2204,"children":2205},{},[2206],{"type":42,"value":2207},"Internet permission in manifest",{"type":36,"tag":149,"props":2209,"children":2211},{"id":2210},"style-not-loading",[2212],{"type":42,"value":2213},"Style Not Loading",{"type":36,"tag":199,"props":2215,"children":2217},{"className":326,"code":2216,"language":328,"meta":204,"style":204},"mapView.mapboxMap.subscribeStyleLoaded { _ ->\n    Log.d(\"Map\", \"Style loaded successfully\")\n    \u002F\u002F Add layers and sources here\n}\n",[2218],{"type":36,"tag":190,"props":2219,"children":2220},{"__ignoreMap":204},[2221,2229,2237,2245],{"type":36,"tag":210,"props":2222,"children":2223},{"class":212,"line":213},[2224],{"type":36,"tag":210,"props":2225,"children":2226},{},[2227],{"type":42,"value":2228},"mapView.mapboxMap.subscribeStyleLoaded { _ ->\n",{"type":36,"tag":210,"props":2230,"children":2231},{"class":212,"line":222},[2232],{"type":36,"tag":210,"props":2233,"children":2234},{},[2235],{"type":42,"value":2236},"    Log.d(\"Map\", \"Style loaded successfully\")\n",{"type":36,"tag":210,"props":2238,"children":2239},{"class":212,"line":231},[2240],{"type":36,"tag":210,"props":2241,"children":2242},{},[2243],{"type":42,"value":2244},"    \u002F\u002F Add layers and sources here\n",{"type":36,"tag":210,"props":2246,"children":2247},{"class":212,"line":240},[2248],{"type":36,"tag":210,"props":2249,"children":2250},{},[2251],{"type":42,"value":408},{"type":36,"tag":149,"props":2253,"children":2255},{"id":2254},"performance-issues",[2256],{"type":42,"value":2257},"Performance Issues",{"type":36,"tag":60,"props":2259,"children":2260},{},[2261,2274,2279,2284,2289,2294],{"type":36,"tag":64,"props":2262,"children":2263},{},[2264,2266,2272],{"type":42,"value":2265},"Use ",{"type":36,"tag":190,"props":2267,"children":2269},{"className":2268},[],[2270],{"type":42,"value":2271},"Style.STANDARD",{"type":42,"value":2273}," (recommended and optimized)",{"type":36,"tag":64,"props":2275,"children":2276},{},[2277],{"type":42,"value":2278},"Limit visible annotations to viewport",{"type":36,"tag":64,"props":2280,"children":2281},{},[2282],{"type":42,"value":2283},"Reuse annotation managers",{"type":36,"tag":64,"props":2285,"children":2286},{},[2287],{"type":42,"value":2288},"Avoid frequent style reloads",{"type":36,"tag":64,"props":2290,"children":2291},{},[2292],{"type":42,"value":2293},"Call lifecycle methods (onStart, onStop, onDestroy)",{"type":36,"tag":64,"props":2295,"children":2296},{},[2297],{"type":42,"value":2298},"Batch annotation updates",{"type":36,"tag":138,"props":2300,"children":2301},{},[],{"type":36,"tag":142,"props":2303,"children":2305},{"id":2304},"reference-files",[2306],{"type":42,"value":2307},"Reference Files",{"type":36,"tag":45,"props":2309,"children":2310},{},[2311],{"type":42,"value":2312},"Load these references when you need detailed patterns for specific topics:",{"type":36,"tag":60,"props":2314,"children":2315},{},[2316,2330,2344,2358,2372,2386],{"type":36,"tag":64,"props":2317,"children":2318},{},[2319,2328],{"type":36,"tag":54,"props":2320,"children":2321},{},[2322],{"type":36,"tag":190,"props":2323,"children":2325},{"className":2324},[],[2326],{"type":42,"value":2327},"references\u002Fcompose.md",{"type":42,"value":2329}," -- Jetpack Compose: dependencies, token setup, MapboxMap, annotations with click, GeoJSON, MapEffect",{"type":36,"tag":64,"props":2331,"children":2332},{},[2333,2342],{"type":36,"tag":54,"props":2334,"children":2335},{},[2336],{"type":36,"tag":190,"props":2337,"children":2339},{"className":2338},[],[2340],{"type":42,"value":2341},"references\u002Fannotations.md",{"type":42,"value":2343}," -- Circle, Polyline, and Polygon annotation patterns",{"type":36,"tag":64,"props":2345,"children":2346},{},[2347,2356],{"type":36,"tag":54,"props":2348,"children":2349},{},[2350],{"type":36,"tag":190,"props":2351,"children":2353},{"className":2352},[],[2354],{"type":42,"value":2355},"references\u002Flocation-tracking.md",{"type":42,"value":2357}," -- Camera follow user location + get current location once",{"type":36,"tag":64,"props":2359,"children":2360},{},[2361,2370],{"type":36,"tag":54,"props":2362,"children":2363},{},[2364],{"type":36,"tag":190,"props":2365,"children":2367},{"className":2366},[],[2368],{"type":42,"value":2369},"references\u002Fcustom-data.md",{"type":42,"value":2371}," -- GeoJSON sources and layers: lines, polygons, points, update\u002Fremove",{"type":36,"tag":64,"props":2373,"children":2374},{},[2375,2384],{"type":36,"tag":54,"props":2376,"children":2377},{},[2378],{"type":36,"tag":190,"props":2379,"children":2381},{"className":2380},[],[2382],{"type":42,"value":2383},"references\u002Fcamera-styles.md",{"type":42,"value":2385}," -- Camera control (set, animate, fit) + map styles (built-in and custom)",{"type":36,"tag":64,"props":2387,"children":2388},{},[2389,2398],{"type":36,"tag":54,"props":2390,"children":2391},{},[2392],{"type":36,"tag":190,"props":2393,"children":2395},{"className":2394},[],[2396],{"type":42,"value":2397},"references\u002Finteractions.md",{"type":42,"value":2399}," -- Featureset interactions, custom layer taps, long press, gestures",{"type":36,"tag":138,"props":2401,"children":2402},{},[],{"type":36,"tag":142,"props":2404,"children":2406},{"id":2405},"additional-resources",[2407],{"type":42,"value":2408},"Additional Resources",{"type":36,"tag":60,"props":2410,"children":2411},{},[2412,2420,2429,2439,2449,2457],{"type":36,"tag":64,"props":2413,"children":2414},{},[2415],{"type":36,"tag":109,"props":2416,"children":2418},{"href":111,"rel":2417},[113],[2419],{"type":42,"value":116},{"type":36,"tag":64,"props":2421,"children":2422},{},[2423],{"type":36,"tag":109,"props":2424,"children":2427},{"href":2425,"rel":2426},"https:\u002F\u002Fdocs.mapbox.com\u002Fandroid\u002Fmaps\u002Fapi\u002F11.18.1\u002F",[113],[2428],{"type":42,"value":126},{"type":36,"tag":64,"props":2430,"children":2431},{},[2432],{"type":36,"tag":109,"props":2433,"children":2436},{"href":2434,"rel":2435},"https:\u002F\u002Fdocs.mapbox.com\u002Fandroid\u002Fmaps\u002Fguides\u002Fuser-interaction\u002Finteractions\u002F",[113],[2437],{"type":42,"value":2438},"Interactions Guide",{"type":36,"tag":64,"props":2440,"children":2441},{},[2442],{"type":36,"tag":109,"props":2443,"children":2446},{"href":2444,"rel":2445},"https:\u002F\u002Fdocs.mapbox.com\u002Fandroid\u002Fmaps\u002Fguides\u002Fusing-jetpack-compose\u002F",[113],[2447],{"type":42,"value":2448},"Jetpack Compose Guide",{"type":36,"tag":64,"props":2450,"children":2451},{},[2452],{"type":36,"tag":109,"props":2453,"children":2455},{"href":132,"rel":2454},[113],[2456],{"type":42,"value":136},{"type":36,"tag":64,"props":2458,"children":2459},{},[2460],{"type":36,"tag":109,"props":2461,"children":2464},{"href":2462,"rel":2463},"https:\u002F\u002Fdocs.mapbox.com\u002Fandroid\u002Fmaps\u002Fguides\u002Fmigrate-to-v11\u002F",[113],[2465],{"type":42,"value":2466},"Migration Guide (v10 -> v11)",{"type":36,"tag":2468,"props":2469,"children":2470},"style",{},[2471],{"type":42,"value":2472},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":2474,"total":731},[2475,2481,2498,2513,2535,2547,2561],{"slug":4,"name":4,"fn":5,"description":6,"org":2476,"tags":2477,"stars":20,"repoUrl":21,"updatedAt":22},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2478,2479,2480],{"name":13,"slug":14,"type":15},{"name":9,"slug":8,"type":15},{"name":17,"slug":18,"type":15},{"slug":2482,"name":2482,"fn":2483,"description":2484,"org":2485,"tags":2486,"stars":20,"repoUrl":21,"updatedAt":2497},"mapbox-cartography","apply cartographic design principles to Mapbox","Expert guidance on map design principles, color theory, visual hierarchy, typography, and cartographic best practices for creating effective and beautiful maps with Mapbox. Use when designing map styles, choosing colors, or making cartographic decisions.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2487,2490,2493,2494],{"name":2488,"slug":2489,"type":15},"Branding","branding",{"name":2491,"slug":2492,"type":15},"Design","design",{"name":9,"slug":8,"type":15},{"name":2495,"slug":2496,"type":15},"Typography","typography","2026-04-06T18:28:41.2556",{"slug":2499,"name":2499,"fn":2500,"description":2501,"org":2502,"tags":2503,"stars":20,"repoUrl":21,"updatedAt":2512},"mapbox-data-visualization-patterns","implement Mapbox data visualization patterns","Patterns for visualizing data on maps including choropleth maps, heat maps, 3D visualizations, data-driven styling, and animated data. Covers layer types, color scales, and performance optimization.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2504,2507,2508,2509],{"name":2505,"slug":2506,"type":15},"Data Visualization","data-visualization",{"name":2491,"slug":2492,"type":15},{"name":9,"slug":8,"type":15},{"name":2510,"slug":2511,"type":15},"Performance","performance","2026-04-06T18:29:02.907655",{"slug":2514,"name":2514,"fn":2515,"description":2516,"org":2517,"tags":2518,"stars":20,"repoUrl":21,"updatedAt":2534},"mapbox-flutter-patterns","integrate Mapbox maps into Flutter applications","Official integration patterns for the Mapbox Maps Flutter SDK. Covers installation, iOS\u002FAndroid platform setup, access token configuration, MapWidget initialization, camera control, annotations with tap handling, user location, and loading GeoJSON. Based on official Mapbox documentation.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2519,2520,2523,2526,2529,2530,2531],{"name":13,"slug":14,"type":15},{"name":2521,"slug":2522,"type":15},"Dart","dart",{"name":2524,"slug":2525,"type":15},"Flutter","flutter",{"name":2527,"slug":2528,"type":15},"iOS","ios",{"name":9,"slug":8,"type":15},{"name":17,"slug":18,"type":15},{"name":2532,"slug":2533,"type":15},"SDK","sdk","2026-05-12T06:03:11.211517",{"slug":2536,"name":2536,"fn":2537,"description":2538,"org":2539,"tags":2540,"stars":20,"repoUrl":21,"updatedAt":2546},"mapbox-geospatial-operations","select geospatial tools for Mapbox operations","Expert guidance on choosing the right geospatial tool based on problem type, accuracy requirements, and performance needs",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2541,2542,2543],{"name":9,"slug":8,"type":15},{"name":2510,"slug":2511,"type":15},{"name":2544,"slug":2545,"type":15},"Strategy","strategy","2026-07-30T05:30:52.766227",{"slug":2548,"name":2548,"fn":2549,"description":2550,"org":2551,"tags":2552,"stars":20,"repoUrl":21,"updatedAt":2560},"mapbox-google-maps-migration","migrate from Google Maps to Mapbox","Migration guide for developers moving from Google Maps Platform to Mapbox GL JS, covering API equivalents, pattern translations, and key differences",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2553,2554,2557],{"name":9,"slug":8,"type":15},{"name":2555,"slug":2556,"type":15},"Migration","migration",{"name":2558,"slug":2559,"type":15},"Web Development","web-development","2026-04-06T18:28:56.459496",{"slug":2562,"name":2562,"fn":2563,"description":2564,"org":2565,"tags":2566,"stars":20,"repoUrl":21,"updatedAt":2573},"mapbox-ios-patterns","integrate Mapbox Maps SDK on iOS","Official integration patterns for Mapbox Maps SDK on iOS. Covers installation, adding markers, user location, custom data, styles, camera control, and featureset interactions. Based on official Mapbox documentation.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2567,2568,2569,2570],{"name":2527,"slug":2528,"type":15},{"name":9,"slug":8,"type":15},{"name":17,"slug":18,"type":15},{"name":2571,"slug":2572,"type":15},"Swift","swift","2026-07-30T05:30:54.75526",{"items":2575,"total":731},[2576,2582,2589,2596,2606,2612,2618,2625,2639,2652,2667,2679],{"slug":4,"name":4,"fn":5,"description":6,"org":2577,"tags":2578,"stars":20,"repoUrl":21,"updatedAt":22},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2579,2580,2581],{"name":13,"slug":14,"type":15},{"name":9,"slug":8,"type":15},{"name":17,"slug":18,"type":15},{"slug":2482,"name":2482,"fn":2483,"description":2484,"org":2583,"tags":2584,"stars":20,"repoUrl":21,"updatedAt":2497},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2585,2586,2587,2588],{"name":2488,"slug":2489,"type":15},{"name":2491,"slug":2492,"type":15},{"name":9,"slug":8,"type":15},{"name":2495,"slug":2496,"type":15},{"slug":2499,"name":2499,"fn":2500,"description":2501,"org":2590,"tags":2591,"stars":20,"repoUrl":21,"updatedAt":2512},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2592,2593,2594,2595],{"name":2505,"slug":2506,"type":15},{"name":2491,"slug":2492,"type":15},{"name":9,"slug":8,"type":15},{"name":2510,"slug":2511,"type":15},{"slug":2514,"name":2514,"fn":2515,"description":2516,"org":2597,"tags":2598,"stars":20,"repoUrl":21,"updatedAt":2534},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2599,2600,2601,2602,2603,2604,2605],{"name":13,"slug":14,"type":15},{"name":2521,"slug":2522,"type":15},{"name":2524,"slug":2525,"type":15},{"name":2527,"slug":2528,"type":15},{"name":9,"slug":8,"type":15},{"name":17,"slug":18,"type":15},{"name":2532,"slug":2533,"type":15},{"slug":2536,"name":2536,"fn":2537,"description":2538,"org":2607,"tags":2608,"stars":20,"repoUrl":21,"updatedAt":2546},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2609,2610,2611],{"name":9,"slug":8,"type":15},{"name":2510,"slug":2511,"type":15},{"name":2544,"slug":2545,"type":15},{"slug":2548,"name":2548,"fn":2549,"description":2550,"org":2613,"tags":2614,"stars":20,"repoUrl":21,"updatedAt":2560},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2615,2616,2617],{"name":9,"slug":8,"type":15},{"name":2555,"slug":2556,"type":15},{"name":2558,"slug":2559,"type":15},{"slug":2562,"name":2562,"fn":2563,"description":2564,"org":2619,"tags":2620,"stars":20,"repoUrl":21,"updatedAt":2573},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2621,2622,2623,2624],{"name":2527,"slug":2528,"type":15},{"name":9,"slug":8,"type":15},{"name":17,"slug":18,"type":15},{"name":2571,"slug":2572,"type":15},{"slug":2626,"name":2626,"fn":2627,"description":2628,"org":2629,"tags":2630,"stars":20,"repoUrl":21,"updatedAt":2638},"mapbox-location-grounding","generate grounded location-aware responses with Mapbox","Compose Mapbox MCP tools to produce grounded, cited location-aware responses from live data instead of training data",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2631,2634,2635],{"name":2632,"slug":2633,"type":15},"Data Quality","data-quality",{"name":9,"slug":8,"type":15},{"name":2636,"slug":2637,"type":15},"MCP","mcp","2026-04-15T05:01:44.248764",{"slug":2640,"name":2640,"fn":2641,"description":2642,"org":2643,"tags":2644,"stars":20,"repoUrl":21,"updatedAt":2651},"mapbox-maplibre-migration","migrate from MapLibre to Mapbox","Guide for migrating from MapLibre GL JS to Mapbox GL JS, covering API compatibility, token setup, style configuration, and the benefits of Mapbox's official support and ecosystem",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2645,2648,2649,2650],{"name":2646,"slug":2647,"type":15},"Engineering","engineering",{"name":9,"slug":8,"type":15},{"name":2555,"slug":2556,"type":15},{"name":2558,"slug":2559,"type":15},"2026-04-06T18:28:51.531856",{"slug":2653,"name":2653,"fn":2654,"description":2655,"org":2656,"tags":2657,"stars":20,"repoUrl":21,"updatedAt":2666},"mapbox-mcp-devkit-patterns","integrate Mapbox MCP DevKit in coding assistants","Integration patterns for Mapbox MCP DevKit Server in AI coding assistants. Covers setup, style management, token management, validation workflows, and documentation access through MCP. Use when building Mapbox applications with AI coding assistance.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2658,2661,2664,2665],{"name":2659,"slug":2660,"type":15},"Documentation","documentation",{"name":2662,"slug":2663,"type":15},"Local Development","local-development",{"name":9,"slug":8,"type":15},{"name":2636,"slug":2637,"type":15},"2026-04-06T18:28:53.790961",{"slug":2668,"name":2668,"fn":2669,"description":2670,"org":2671,"tags":2672,"stars":20,"repoUrl":21,"updatedAt":2678},"mapbox-mcp-runtime-patterns","integrate Mapbox MCP Server in AI apps","Integration patterns for Mapbox MCP Server in AI applications and agent frameworks. Covers runtime integration with pydantic-ai, mastra, LangChain, and custom agents. Use when building AI-powered applications that need geospatial capabilities.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2673,2676,2677],{"name":2674,"slug":2675,"type":15},"Architecture","architecture",{"name":9,"slug":8,"type":15},{"name":2636,"slug":2637,"type":15},"2026-04-06T18:28:55.164842",{"slug":2680,"name":2680,"fn":2681,"description":2682,"org":2683,"tags":2684,"stars":20,"repoUrl":21,"updatedAt":2692},"mapbox-search-integration","implement Mapbox search in applications","Complete workflow for implementing Mapbox search in applications - from discovery questions to production-ready integration with best practices",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2685,2688,2689],{"name":2686,"slug":2687,"type":15},"API Development","api-development",{"name":9,"slug":8,"type":15},{"name":2690,"slug":2691,"type":15},"Search","search","2026-04-06T18:28:50.264933"]