mapbox-android-patterns
Mapbox Maps SDK for Androidの公式インテグレーションパターンを提供するスキルです。インストール手順から、マーカーの追加、ユーザー位置情報の取得、カスタムデータの表示、スタイル設定、カメラ制御、フィーチャーセットの操作まで幅広くカバーします。公式Mapboxドキュメントに基づいており、Android向けマップ機能の実装時に活用できます。
description の原文を見る
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.
SKILL.md 本文
Mapbox Android インテグレーション パターン
Kotlin、Jetpack Compose、View システムを使用した Mapbox Maps SDK v11 の Android への統合パターン。
このスキルを使用する場合:
- Mapbox Maps SDK for Android のインストールと設定
- マップへのマーカーとアノテーションの追加
- ユーザーの位置情報を表示し、カメラでトラッキング
- カスタムデータ (GeoJSON) をマップに追加
- マップスタイル、カメラ、またはユーザーインタラクションの操作
- フィーチャーインタラクションとタップの処理
公式リソース:
インストール & セットアップ
必要条件
- Android SDK 21+
- Kotlin または Java
- Android Studio
- Mapbox の無料アカウント
ステップ 1: アクセストークンの設定
app/res/values/mapbox_access_token.xml を作成:
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools">
<string name="mapbox_access_token" translatable="false"
tools:ignore="UnusedResources">YOUR_MAPBOX_ACCESS_TOKEN</string>
</resources>
トークンを取得: mapbox.com でサインイン
ステップ 2: Maven リポジトリを追加
settings.gradle.kts で:
dependencyResolutionManagement {
repositories {
google()
mavenCentral()
maven {
url = uri("https://api.mapbox.com/downloads/v2/releases/maven")
}
}
}
ステップ 3: 依存関係を追加
モジュール build.gradle.kts で:
android {
defaultConfig {
minSdk = 21
}
}
dependencies {
implementation("com.mapbox.maps:android:11.18.1")
}
Jetpack Compose の場合:
dependencies {
implementation("com.mapbox.maps:android:11.18.1")
implementation("com.mapbox.extension:maps-compose:11.18.1")
}
マップ初期化
Jetpack Compose パターン
基本的なマップ:
import androidx.compose.runtime.*
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.ui.Modifier
import com.mapbox.maps.extension.compose.*
import com.mapbox.maps.Style
import com.mapbox.geojson.Point
@Composable
fun MapScreen() {
MapboxMap(
modifier = Modifier.fillMaxSize()
) {
// MapEffect でカメラを初期化 (Style.STANDARD はデフォルトで読み込まれます)
MapEffect(Unit) { mapView ->
// 初期カメラ位置を設定
mapView.mapboxMap.setCamera(
CameraOptions.Builder()
.center(Point.fromLngLat(-122.4194, 37.7749))
.zoom(12.0)
.build()
)
}
}
}
装飾付き:
MapboxMap(
modifier = Modifier.fillMaxSize(),
scaleBar = {
ScaleBar(
enabled = true,
position = Alignment.BottomStart
)
},
compass = {
Compass(enabled = true)
}
) {
// Style.STANDARD はデフォルトで読み込まれます
}
View システム パターン
レイアウト XML (activity_map.xml):
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.mapbox.maps.MapView
android:id="@+id/mapView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
Activity:
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import com.mapbox.maps.MapView
import com.mapbox.maps.Style
import com.mapbox.geojson.Point
class MapActivity : AppCompatActivity() {
private lateinit var mapView: MapView
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_map)
mapView = findViewById(R.id.mapView)
mapView.mapboxMap.setCamera(
CameraOptions.Builder()
.center(Point.fromLngLat(-122.4194, 37.7749))
.zoom(12.0)
.build()
)
mapView.mapboxMap.loadStyle(Style.STANDARD)
}
override fun onStart() {
super.onStart()
mapView.onStart()
}
override fun onStop() {
super.onStop()
mapView.onStop()
}
override fun onDestroy() {
super.onDestroy()
mapView.onDestroy()
}
}
マーカー追加 (ポイントアノテーション)
ポイントアノテーションはマップ上に位置をマークする最も一般的な方法です。
Jetpack Compose:
MapboxMap(modifier = Modifier.fillMaxSize()) {
MapEffect(Unit) { mapView ->
// まずスタイルを読み込む
mapView.mapboxMap.loadStyle(Style.STANDARD)
// アノテーションマネージャーを作成してマーカーを追加
val annotationManager = mapView.annotations.createPointAnnotationManager()
val pointAnnotation = PointAnnotationOptions()
.withPoint(Point.fromLngLat(-122.4194, 37.7749))
.withIconImage("custom-marker")
annotationManager.create(pointAnnotation)
}
}
// 注: Compose には宣言的な PointAnnotation コンポーネントがありません
// マーカーは MapEffect を介して命令型で追加する必要があります
View システム:
// アノテーションマネージャーを作成 (1回、更新時に再利用)
val pointAnnotationManager = mapView.annotations.createPointAnnotationManager()
// マーカーを作成
val pointAnnotation = PointAnnotationOptions()
.withPoint(Point.fromLngLat(-122.4194, 37.7749))
.withIconImage("custom-marker")
pointAnnotationManager.create(pointAnnotation)
複数のマーカー:
val locations = listOf(
Point.fromLngLat(-122.4194, 37.7749),
Point.fromLngLat(-122.4094, 37.7849),
Point.fromLngLat(-122.4294, 37.7649)
)
val annotations = locations.map { point ->
PointAnnotationOptions()
.withPoint(point)
.withIconImage("marker")
}
pointAnnotationManager.create(annotations)
ユーザーの位置情報を表示
ステップ 1: AndroidManifest.xml にパーミッションを追加:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
ステップ 2: パーミッションをリクエストして位置情報を表示:
// まずパーミッションをリクエスト (ActivityResultContracts を使用)
// ロケーションパックを表示
mapView.location.updateSettings {
enabled = true
puckBearingEnabled = true
}
パフォーマンスベストプラクティス
アノテーションマネージャーの再利用
// 新しいマネージャーを繰り返し作成しないでください
// val manager = mapView.annotations.createPointAnnotationManager() // 毎回呼び出し
// 1回作成して再利用
val pointAnnotationManager = mapView.annotations.createPointAnnotationManager()
fun updateMarkers() {
pointAnnotationManager.deleteAll()
pointAnnotationManager.create(markers)
}
アノテーション更新のバッチ処理
// すべて一度に作成
pointAnnotationManager.create(allAnnotations)
// ループで 1 つずつ作成しないこと
ライフサイクル管理
// 常にライフサイクルメソッドを呼び出す
override fun onStart() {
super.onStart()
mapView.onStart()
}
override fun onStop() {
super.onStop()
mapView.onStop()
}
override fun onDestroy() {
super.onDestroy()
mapView.onDestroy()
}
Standard スタイルを使用
// Standard スタイルは最適化されており推奨されています
Style.STANDARD
// 特定のユースケースで必要な場合のみ他のスタイルを使用
Style.STANDARD_SATELLITE // 衛星画像
トラブルシューティング
マップが表示されない
確認事項:
mapbox_access_token.xmlにトークンがある- トークンが有効 (mapbox.com でテスト)
- Maven リポジトリが設定されている
- 依存関係が正しく追加されている
- マニフェストにインターネットパーミッションがある
スタイルが読み込まれない
mapView.mapboxMap.subscribeStyleLoaded { _ ->
Log.d("Map", "Style loaded successfully")
// ここでレイヤーとソースを追加
}
パフォーマンスの問題
Style.STANDARDを使用 (推奨かつ最適化)- 表示されるアノテーションをビューポートに制限
- アノテーションマネージャーを再利用
- 頻繁なスタイルの再読み込みを回避
- ライフサイクルメソッド (onStart, onStop, onDestroy) を呼び出す
- アノテーション更新をバッチ処理
リファレンスファイル
特定のトピックについての詳細なパターンが必要な場合は、以下のリファレンスを読み込んでください:
references/compose.md-- Jetpack Compose: 依存関係、トークン設定、MapboxMap、クリック付きアノテーション、GeoJSON、MapEffectreferences/annotations.md-- サークル、ポリライン、ポリゴンアノテーションパターンreferences/location-tracking.md-- カメラでユーザーの位置をフォロー + 現在位置の 1 回取得references/custom-data.md-- GeoJSON ソースとレイヤー: ライン、ポリゴン、ポイント、更新/削除references/camera-styles.md-- カメラコントロール (設定、アニメーション、フィット) + マップスタイル (ビルトインおよびカスタム)references/interactions.md-- フィーチャーセットインタラクション、カスタムレイヤータップ、長押し、ジェスチャー
追加リソース
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- mapbox
- ライセンス
- MIT
- 最終更新
- 不明
Source: https://github.com/mapbox/mapbox-agent-skills / ライセンス: MIT
関連スキル
hugging-face-trackio
Trackioを使用してMLトレーニング実験を追跡・可視化できます。トレーニング中のメトリクスログ記録(Python API)、トレーニング診断のアラート発火、ログされたメトリクスの取得・分析(CLI)が必要な場合に活用してください。リアルタイムダッシュボード表示、Webhookを使用したアラート、HF Space同期、自動化向けのJSON出力に対応しています。
btc-bottom-model
ビットコインのサイクルタイミングモデルで、加重スコアリングシステムを搭載しています。日次パルス(4指標、32ポイント)とウィークリー構造(9指標、68ポイント)の2カテゴリーにわたる13の指標を追跡し、0~100のマーケットヒートスコアを算出します。ETFフロー、ファンディングレート、ロング/ショート比率、恐怖・貪欲指数、LTH-MVRV、NUPL、SOPR(LTH+STH)、LTH供給率、移動平均倍率(365日MA、200週MA)、週次RSI、出来高トレンドに対応します。市場サイクル全体を通じて買いと売りの両方の推奨を提供します。ビットコインの底値拾い、BTCサイクルポジション、買い時・売り時、オンチェーン指標、MVRV、NUPL、SOPR、LTH動向、ETFの流出入、ファンディングレート、恐怖指数、ビットコインが過熱状態か、マイナーコスト、暗号資産市場のセンチメント、BTCのポジションサイジング、「今ビットコインを買うべきか」「BTCが天井をつけているか」「オンチェーン指標は何を示しているか」といった質問の際にこのスキルを活用します。
protein_solubility_optimization
タンパク質の溶解性最適化 - タンパク質の溶解性を最適化します。タンパク質の特性を計算し、溶解性と親水性を予測し、有効な変異を提案します。タンパク質配列の特性計算、タンパク質機能の予測、親水性計算、ゼロショット配列予測を含むタンパク質エンジニアリング業務に使用できます。3つのSCPサーバーから4つのツールを統合しています。
research-lookup
Parallel Chat APIまたはPerplexity sonar-pro-searchを使用して、最新の研究情報を検索できます。学術論文の検索にも対応しています。クエリは自動的に最適なバックエンドにルーティングされるため、論文の検索、研究データの収集、科学情報の検証に活用できます。
tree-formatting
ggtree(R)またはiTOL(ウェブ)を使用して、系統樹の可視化とフォーマットを行います。系統樹を図として描画する際、ツリーレイアウトの選択、分類学に基づく枝やラベルの色付け、クレードの折りたたみ、サポート値の表示、またはツリーへのオーバーレイ追加が必要な場合に使用してください。系統推定(protein-phylogenyスキルを使用)やドメイン注釈(今後の独立したスキル)には使用しないでください。
querying-indonesian-gov-data
インドネシア政府の50以上のAPIとデータソースに接続できます。BPJPH(ハラール認証)、BOM(食品安全)、OJK(金融適正性)、BPS(統計)、BMKG(気象・地震)、インドネシア中央銀行(為替レート)、IDX(株式)、CKAN公開データポータル、pasal.id(第三者法MCP)に対応しています。インドネシア政府データを活用したアプリ開発、.go.idウェブサイトのスクレイピング、ハラール認証の確認、企業の法的適正性の検証、金融機関ステータスの照会、またはインドネシアMCPサーバーへの接続時に使用できます。CSRF処理、CKAN API使用方法、IP制限回避など、すぐに実行可能なPythonパターンを含んでいます。