· · 1 分钟阅读

Pin 聚类终于登陆 .NET MAUI Maps — 一个属性,零痛苦

.NET MAUI 11 Preview 3 为 Map 控件添加了原生 Pin 聚类功能。一个属性、独立的聚类分组和点击处理 — 全部内置。

dotnet maui mobile maps dotnet-11
这篇文章也有其他语言版本:English, Español, Deutsch, Français, Português, Italiano, 日本語, 한국어, Русский

本文为自动翻译。查看原文请点击这里

你知道那种感觉吗?在地图上加载一百个 Pin,然后整个地图变成一团看不清的东西?对,这就是 .NET MAUI Maps 一直以来的体验。现在不会了。

David Ortinau 刚刚宣布 .NET MAUI 11 Preview 3 在 Android 和 iOS/Mac Catalyst 上内置了 Pin 聚类功能。而且最棒的是 — 启用它简单得不可思议。

一个属性统治一切

<maps:Map IsClusteringEnabled="True" />

就这样。相邻的 Pin 会被分组到带有计数徽章的聚类中。放大时展开,缩小时折叠。这是用户对任何现代地图都期望的行为 — 现在你只需一个属性就能获得。

独立的聚类分组

这才是有趣的地方。不是所有 Pin 都应该聚在一起。咖啡店和公园是不同的东西,你的地图应该知道这一点。

ClusteringIdentifier 属性让你可以将 Pin 分成独立的组:

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"
});

具有相同标识符的 Pin 会聚在一起。不同的标识符即使在地理位置很近的情况下也会形成独立的聚类。没有标识符?默认分组。干净且可预测。

处理聚类点击

当用户点击一个聚类时,你会收到一个 ClusterClicked 事件,包含你需要的一切:

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;
};

事件参数提供 Pins(聚类中的 Pin)、Location(地理中心)和 Handled(如果你想覆盖默认缩放行为,设置为 true)。简单、实用,完全符合预期。

值得了解的平台细节

在 Android 上,聚类使用自定义的基于网格的算法,在缩放变化时重新计算 — 没有外部依赖。在 iOS 和 Mac Catalyst 上,它利用了 MapKit 原生的 MKClusterAnnotation 支持,这意味着流畅的平台原生动画。

这是 MAUI 团队做出正确决策的案例之一 — 在有意义的地方依靠平台能力。

为什么这很重要

Pin 聚类一直是 .NET MAUI 中最受期待的功能之一(issue #11811),这是有充分理由的。每个在地图上显示位置的应用 — 配送追踪、门店定位、房地产 — 都需要它。以前你必须自己构建或引入第三方库。现在它是内置的。

对于我们构建跨平台移动应用的 .NET 开发者来说,这正是那种让 MAUI 成为地图密集型场景中真正实用选择的生活质量改善。

开始使用

安装 .NET 11 Preview 3 并更新 .NET MAUI 工作负载。Maps 示例包含一个新的聚类页面,你可以立即上手体验。

去用它构建点什么吧 — 让你的地图终于能喘口气。

分享:
在GitHub上查看此文章的源代码 ↗
← .NET 2026年4月服务更新 — 你今天就该应用的安全补丁
Azure MCP 工具现已内置于 Visual Studio 2022 — 无需安装扩展 →