이 글은 자동 번역되었습니다. 원문은 여기에서 확인하세요.
지도에 핀 100개를 로드했더니 전체가 읽을 수 없는 덩어리가 되는 그 순간, 아시죠? 네, 지금까지 .NET MAUI Maps 경험이 딱 그랬습니다. 이제 끝입니다.
David Ortinau가 방금 발표했습니다. .NET MAUI 11 Preview 3에서 Android와 iOS/Mac Catalyst에 핀 클러스터링이 기본 탑재됩니다. 그리고 가장 좋은 점 — 활성화하는 게 말도 안 되게 간단합니다.
모든 것을 지배하는 하나의 프로퍼티
<maps:Map IsClusteringEnabled="True" />
이게 전부입니다. 가까운 핀들이 카운트 배지가 달린 클러스터로 그룹화됩니다. 확대하면 펼쳐지고, 축소하면 접힙니다. 모던한 지도라면 당연히 기대하는 동작 — 이제 프로퍼티 하나로 얻을 수 있습니다.
독립적인 클러스터링 그룹
여기서부터 흥미로워집니다. 모든 핀이 함께 클러스터링되어야 하는 건 아닙니다. 커피숍과 공원은 다른 것이고, 지도도 그걸 알아야 합니다.
ClusteringIdentifier 프로퍼티를 사용하면 핀을 독립적인 그룹으로 분리할 수 있습니다:
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"
});
같은 식별자를 가진 핀은 함께 클러스터링됩니다. 다른 식별자는 지리적으로 가까워도 독립적인 클러스터를 형성합니다. 식별자 없음? 기본 그룹. 깔끔하고 예측 가능합니다.
클러스터 탭 처리
사용자가 클러스터를 탭하면 필요한 모든 것이 담긴 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(클러스터 내 핀), Location(지리적 중심), Handled(기본 줌 동작을 재정의하려면 true로 설정)를 받습니다. 간단하고, 실용적이고, 정확히 기대한 대로입니다.
알아두면 좋은 플랫폼 세부사항
Android에서는 클러스터링이 줌 변경 시 재계산하는 커스텀 그리드 기반 알고리즘을 사용합니다 — 외부 의존성 없음. iOS와 Mac Catalyst에서는 MapKit의 네이티브 MKClusterAnnotation 지원을 활용하여 부드럽고 플랫폼 네이티브한 애니메이션을 제공합니다.
MAUI 팀이 올바른 결정을 내린 사례입니다 — 의미 있는 곳에서 플랫폼에 의존하기.
왜 이것이 중요한가
핀 클러스터링은 .NET MAUI에서 가장 많이 요청된 기능 중 하나였습니다(issue #11811). 당연한 이유가 있습니다. 지도에 위치를 표시하는 모든 앱 — 배송 추적, 매장 찾기, 부동산 — 에 필요합니다. 이전에는 직접 구현하거나 서드파티 라이브러리를 사용해야 했습니다. 이제는 내장되어 있습니다.
크로스플랫폼 모바일 앱을 만드는 .NET 개발자들에게, 이것은 MAUI를 지도 중심 시나리오에서 진정으로 실용적인 선택으로 만드는 삶의 질 개선입니다.
시작하기
.NET 11 Preview 3를 설치하고 .NET MAUI 워크로드를 업데이트하세요. Maps 샘플에 바로 사용해볼 수 있는 새로운 클러스터링 페이지가 포함되어 있습니다.
뭔가 만들어 보세요 — 그리고 지도가 드디어 숨 쉴 수 있게 해주세요.
