mcpField
M
maui-maps

maui-maps

github.com/davidortinau開発17645 回インストール16 週間前に更新
リポジトリ

maui-maps について

.NET MAUI アプリの地図機能に関する実装・トラブルシューティングガイドです。プラットフォーム設定、地図コントロールや図形、ジオコーディング、動的なピン、性能上の注意点を扱います。

主な機能

  1. 01地図コントロールと図形の使い方
  2. 02プラットフォーム固有の設定確認
  3. 03動的な地図向けデータバインドピン
  4. 04住所と座標の変換
  5. 05地図のパフォーマンスに関する推奨事項

活用シーン

  1. 01地図の空白表示やクラッシュの調査
  2. 02動的なピンや地図上の図形の表示
  3. 03住所と座標の変換

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/davidortinau/maui-skills --skill maui-maps

インストール後、Claude Code で/maui-mapsを入力して読み込まれたか確認します。

同梱ファイルreferences/maps-api.md

詳細

.NET MAUI マップ

よくある注意点

問題解決方法
Android でマップが空白になるAndroidManifest.xml の Google Maps API キーがない、または間違っています
起動時にマップがクラッシュするMauiProgram.cs で .UseMauiMaps() が呼び出されていません
Map 型が曖昧になるMicrosoft.Maui.ApplicationModel.Map と競合します — 名前空間エイリアスを追加してください
Windows でマップが表示されないWindows はネイティブサポートに対応していません — CommunityToolkit.Maui.Maps を使用する必要があります
ユーザーの位置を示すドットが表示されないIsShowingUser="True" は設定されていますが、位置情報の許可が付与されていません
Android 11 以降で外部マップアプリを起動できないマニフェストに geo スキームの <queries> がありません

⚠️ 名前の競合 — 常にエイリアスを設定してください

Microsoft.Maui.Controls.Maps.Map は Microsoft.Maui.ApplicationModel.Map と競合します。これにより、わかりにくいコンパイルエラーが発生します。

// ✅ Correct — explicit alias
using Map = Microsoft.Maui.Controls.Maps.Map;

xmlns:maps="clr-namespace:Microsoft.Maui.Controls.Maps;assembly=Microsoft.Maui.Controls.Maps"
<maps:Map ... />


<Map ... />

プラットフォーム設定時の注意点

Android — API キーは <application> の内側に配置する必要があります

<application ...>
  <meta-data android:name="com.google.android.geo.API_KEY"
             android:value="YOUR_GOOGLE_MAPS_KEY" />
</application>


⚠️ さらに必要な設定:Google Play Services のバージョンを示すメタデータと、API 30 以降では geo スキーム用の <queries>(references/maps-api.md を参照)。

iOS / Mac Catalyst

⚠️ Info.plist に NSLocationWhenInUseUsageDescription がない場合、位置情報の許可はプロンプトなしで拒否されます。

Windows — ネイティブサポートなし

CommunityToolkit.Maui.Maps と Bing キーを追加する必要があります。条件付きのパッケージ参照と、セットアップ用の #if WINDOWS を使用してください。

MauiProgram.cs — UseMauiMaps を忘れずに

// ✅ Required — without this, Map control throws at runtime
builder.UseMauiMaps();

// ❌ Forgetting this causes "No registered handler for Map" crash

パフォーマンスのヒント

  • ⚠️ 何百ものピンを直接追加しないでください — 大量のピンには、データバインディングを使った ItemsSource を使用してください。
  • 初期領域を設定するには MoveToRegion() を使用し、デフォルトの世界地図表示へのズームアニメーションを避けてください。
  • MoveToRegion() の頻繁な呼び出しは避けてください — 呼び出すたびにマップのアニメーションが発生します。データ変更に連動する場合は、呼び出しをデバウンスしてください。

データバインドされたピン — 動的データではこちらを使用


<maps:Map ItemsSource="{Binding Locations}">
    <maps:Map.ItemTemplate>
        <DataTemplate>
            <maps:Pin Label="{Binding Name}"
                      Address="{Binding Description}"
                      Location="{Binding Position}" />
        </DataTemplate>
    </maps:Map.ItemTemplate>
</maps:Map>


選択ガイド

必要な機能方法
ピン付きの基本的なマップMap コントロールと Pins.Add()、または ItemsSource バインディング
図形付きのマップMapElements — Polygon、Polyline、Circle
住所 → 座標Geocoding.Default.GetLocationsAsync(address)
座標 → 住所Geocoding.Default.GetPlacemarksAsync(lat, lon)
カスタムマップオーバーレイハンドラーを使用してネイティブマップ API にアクセス
Windows のサポートCommunityToolkit.Maui.Maps と Bing キーを追加する必要があります

クイックチェックリスト

  • NuGet:Microsoft.Maui.Controls.Maps を追加済み
  • MauiProgram.cs で .UseMauiMaps() を呼び出し済み
  • Android:Google Maps API キーを AndroidManifest.xml の <application> 内に設定済み
  • Android:Google Play Services のバージョンを示すメタデータを設定済み
  • Android 11 以降:geo スキーム用の <queries> を追加済み
  • iOS/Mac:Info.plist に NSLocationWhenInUseUsageDescription を設定済み
  • Windows:CommunityToolkit.Maui.Maps と Bing Maps キーを条件付きで設定済み
  • Map 型の競合を避けるため、名前空間エイリアスを追加済み

コメント