Epic: Maps Control Improvements for .NET 11
- Dominant language
- C#
- Stars
- 23.3k
- Forks
- 2k
- Avg merge
- 1d 15h
- Merged PRs (30d)
- 290
Description
# Epic: Maps Control Improvements for .NET 11
## Overview
This epic tracks improvements to the .NET MAUI Maps control for .NET 11, focusing on new functionality requested by the community and addressing feature gaps compared to native map SDKs.
## Goals
- Deliver the most requested community features (pin clustering, custom icons)
- Expose commonly needed native capabilities (zoom level, camera events)
- Improve MapElement functionality (visibility, click events, layering)
- Provide better user location integration
---
## Community Requested Features
### π₯ High Priority (Most Voted)
| Feature | Issue | Votes | Status |
|---------|-------|-------|--------|
| Pin Clustering | #11811 | 21 | β
PR Ready: #33831 |
| Custom Pin Icons | #10400 | 13 | β
PR Ready: #33950 |
| Zoom Level Property | #11332 | 6 | β
PR Ready: #33982 |
### β Medium Priority
| Feature | Issue | Votes | Status |
|---------|-------|-------|--------|
| Show Info Window Programmatically | #10601 | 4 | β
PR Ready: #33985 |
| Custom Map Styles (JSON) | #10706 | 3 | β
PR Ready: #33991 |
| MoveToRegion Animation Control | #21046 | 2 | β
PR Ready: #33982 |
| Best Fit Zoom for Pins | #10718 | - | β
PR Ready: #33982 |
| MapElement Click Events | #28825 | - | β
PR Ready: #29101 |
| User Location from Map | #14700 | 1 | β
PR Ready: #33799 |
### π½ Lower Priority
| Feature | Issue | Votes | Status | Notes |
|---------|-------|-------|--------|-------|
| Separate Zoom Buttons from Gestures | #17605 | 3 | π² Not Started | Android-only; could use PlatformSpecific pattern |
---
## New Features (Gaps Identified)
### Quick Wins (Low Effort)
| Feature | Description | Issue | Status |
|---------|-------------|-------|--------|
| `MapLongClicked` event | Long-press/hold event on map | N/A | β
PR Ready: #33792 |
| `MapElement.IsVisible` | Show/hide elements without removing | N/A | β
PR Ready: #33993 |
| `MapElement.ZIndex` | Control draw order/layering | N/A | β
PR Ready: #33993 |
| XAML TypeConverters | `LocationTypeConverter`, `MapSpanTypeConverter`, `Map.Region` property | N/A | β
PR Ready: #33995 |
| `Polyline.IsGeodesic` | Lines follow earth curvature | TBD | π² Not Started |
### Medium Effort
| Feature | Description | Issue | Status |
|---------|-------------|-------|--------|
| Camera Events | `CameraPositionChanged`, `CameraIdle`, `MapLoaded` | TBD | π² Not Started |
| `Pin.Anchor` | Position custom icon relative to location | TBD | π² Not Started |
| `Polyline.StrokeDashPattern` | Dashed/dotted line support | TBD | π² Not Started |
---
## Implementation Phases
### Phase 1: Quick Wins β
COMPLETE
Low-risk, high-value additions that can ship quickly:
- [x] MapElement Click Events (#28825) β PR #29101
- [x] `MapLongClicked` event β PR #33792
- [x] User Location from Map (#14700) β PR #33799
- [x] `MapElement.IsVisible` β PR #33993
- [x] `MapElement.ZIndex` β PR #33993
- [ ] `Polyline.IsGeodesic`
### Phase 2: Pin Enhancements β
COMPLETE
Most requested features:
- [x] Pin Clustering (#11811) β PR #33831
- [x] Custom Pin Icons (#10400) β PR #33950
- [ ] `Pin.Anchor` property
### Phase 3: Camera & Zoom β
COMPLETE
- [x] `MoveToRegion(animated)` overload (#21046) β PR #33982
- [x] `MapSpan.FromLocations()` best-fit zoom (#10718) β PR #33982
- [x] Zoom level control via MoveToRegion + VisibleRegion (#11332) β PR #33982
- [x] Fix initial map animation (Maui island fly-in) (#21046) β PR #33982
- [ ] Camera events (`CameraPositionChanged`, `CameraIdle`, `MapLoaded`)
### Phase 4: Info Windows β
COMPLETE
- [x] Programmatic info window (#10601) β PR #33985
### Phase 5: Styling β
COMPLETE
- [x] Custom Map Styles (#10706) β PR #33991 (Android-only, `[UnsupportedOSPlatform]` for iOS/MacCatalyst/Windows)
### Phase 6: XAML Experience β
COMPLETE
- [x] `LocationTypeConverter` ("lat,lon" β Location) β PR #33995
- [x] `MapSpanTypeConverter` ("lat,lon,latDeg,lonDeg" β MapSpan) β PR #33995
- [x] `Map.Region` bindable property β PR #33995
### Phase 7: MapElement Improvements
- [ ] `StrokeDashPattern` for Polyline
### Phase 8: Advanced
- [ ] Separate Zoom Buttons from Gestures (#17605)
---
## Non-Goals (Out of Scope)
- β Windows/WinUI Map support (tracked separately in #12694)
- β Offline map caching (depends on native SDK limitations)
- β Indoor maps / floor plans
- β Turn-by-turn directions
---
## Related Issues & PRs
**Completed PRs:**
- #29101 - MapElement Click Events (Circle, Polygon, Polyline) β
- #33792 - MapLongClicked Event β
- #33799 - User Location from Map (`LastUserLocation`, `UserLocationChanged`) β
- #33831 - Pin Clustering β
- #33950 - Custom Pin Icons β
- #33982 - Camera & Zoom (MoveToRegion animation, MapSpan.FromLocations, fix initial animation) β
- #33985 - Show Info Window Programmatically (`Pin.ShowInfoWindow()`, `Pin.HideInfoWindow()`) β
- #33991 - Custom Map Styles (Android, `[UnsupportedOSPlatform]` for other platforms) β
- #33993 - MapElement IsVisible & ZIndex β
- #33995 - XAML TypeConverters (LocationTypeConverter, MapSpanTypeConverter, Map.Region) β
**Community Requests:**
- #11811 - Pin Clustering β
- #10400 - Custom Pin Icons β
- #11332 - Zoom Level Property β
- #21046 - MoveToRegion Animation β
- #10718 - Best Fit for Pins β
- #28825 - MapElement Click Events β
- #14700 - User Location Access β
- #10601 - Show Info Window Programmatically β
- #10706 - Custom Map Styles β
- #17605 - Zoom Buttons vs Gestures
---
## Success Metrics
- [x] All Phase 1-6 features shipped in .NET 11 Preview
- [x] Top 3 voted issues resolved (#11811, #10400, #11332)
- [x] All community-requested features with existing issues addressed (10/10)
- [ ] No new public API breaking changes post-GA
Contributor guide
Research direction
This is an umbrella epic and names no source files, tests, or single entry point. Review the not-started items and their related issues first, then choose one feature with a defined platform scope; done means that feature is implemented and validated separately from the already completed work and linked pull requests.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- csharp
- Domain
- desktop, mobile
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 20/100