· · 3 Minuten Lesezeit

Pin-Clustering landet endlich in .NET MAUI Maps — Eine Property, null Aufwand

.NET MAUI 11 Preview 3 bringt natives Pin-Clustering für das Map-Control. Eine Property, separate Clustering-Gruppen und Tap-Handling — alles eingebaut.

dotnet maui mobile maps dotnet-11
Dieser Beitrag ist auch verfügbar in:English, Español, Français, Português, Italiano, 日本語, 中文, 한국어, Русский

Dieser Beitrag wurde automatisch übersetzt. Die Originalversion findest du hier.

Kennst du den Moment, wenn du eine Karte mit hundert Pins lädst und das Ganze zu einem unlesbaren Klumpen wird? Ja, so war die .NET MAUI Maps-Erfahrung bisher. Damit ist jetzt Schluss.

David Ortinau hat gerade angekündigt, dass .NET MAUI 11 Preview 3 Pin-Clustering auf Android und iOS/Mac Catalyst out of the box mitliefert. Und das Beste — es ist lächerlich einfach zu aktivieren.

Eine Property, sie alle zu beherrschen

<maps:Map IsClusteringEnabled="True" />

Das war’s. Benachbarte Pins werden in Clustern mit einem Zähler-Badge gruppiert. Reinzoomen — sie expandieren. Rauszoomen — sie kollabieren. Genau das Verhalten, das Nutzer von jeder modernen Karte erwarten — und jetzt bekommst du es mit einer einzigen Property.

Unabhängige Clustering-Gruppen

Hier wird es interessant. Nicht alle Pins sollten zusammen geclustert werden. Cafés und Parks sind verschiedene Dinge, und deine Karte sollte das wissen.

Die ClusteringIdentifier-Property ermöglicht es dir, Pins in unabhängige Gruppen zu trennen:

map.Pins.Add(new Pin
{
    Label = "Pike Place Coffee",
    Location = new Location(47.6097, -122.3331),
    ClusteringIdentifier = "coffee"
});

map.Pins.Add(new Pin
{
    Label = "Occidental Square",
    Location = new Location(47.6064, -122.3325),
    ClusteringIdentifier = "parks"
});

Pins mit demselben Identifier clustern zusammen. Verschiedene Identifier bilden unabhängige Cluster, selbst wenn sie geografisch nah beieinander liegen. Kein Identifier? Standardgruppe. Sauber und vorhersehbar.

Cluster-Taps verarbeiten

Wenn ein Nutzer auf einen Cluster tippt, bekommst du ein ClusterClicked-Event mit allem, was du brauchst:

map.ClusterClicked += async (sender, e) =>
{
    string names = string.Join("\n", e.Pins.Select(p => p.Label));
    await DisplayAlert(
        $"Cluster ({e.Pins.Count} pins)",
        names,
        "OK");

    // Suppress default zoom-to-cluster behavior:
    // e.Handled = true;
};

Die Event-Args liefern dir Pins (die Pins im Cluster), Location (das geografische Zentrum) und Handled (auf true setzen, wenn du den Standard-Zoom überschreiben willst). Einfach, praktisch, genau was man erwartet.

Plattform-Details, die man kennen sollte

Auf Android verwendet das Clustering einen eigenen Grid-basierten Algorithmus, der bei Zoom-Änderungen neu berechnet — keine externen Abhängigkeiten. Auf iOS und Mac Catalyst wird die native MKClusterAnnotation-Unterstützung von MapKit genutzt, was flüssige, plattformnative Animationen bedeutet.

Das ist einer dieser Fälle, in denen das MAUI-Team die richtige Entscheidung getroffen hat — auf die Plattform setzen, wo es Sinn ergibt.

Warum das wichtig ist

Pin-Clustering war eines der meistgewünschten Features in .NET MAUI (Issue #11811), und das aus gutem Grund. Jede App, die Standorte auf einer Karte zeigt — Lieferverfolgung, Filialfinder, Immobilien — braucht das. Vorher musstest du es selbst bauen oder eine Drittanbieter-Bibliothek einbinden. Jetzt ist es eingebaut.

Für uns .NET-Entwickler, die plattformübergreifende mobile Apps bauen, ist das genau die Art von Quality-of-Life-Verbesserung, die MAUI zu einer wirklich praktischen Wahl für kartenintensive Szenarien macht.

Loslegen

Installiere .NET 11 Preview 3 und aktualisiere den .NET MAUI Workload. Das Maps-Sample enthält eine neue Clustering-Seite, mit der du sofort loslegen kannst.

Bau etwas damit — und lass deine Karten endlich atmen.

Teilen:
Quellcode dieses Beitrags auf GitHub ansehen ↗
← .NET April 2026 Servicing — Sicherheitspatches, die du heute einspielen solltest
Azure MCP Tools sind jetzt in Visual Studio 2022 integriert — Keine Erweiterung erforderlich →