Add camp boundary and label map layers - #233
Conversation
Implemented two new toggleable map layers for camp visualization: - Camp boundaries: Polyline outlines showing camp perimeters - Camp labels (big): Polyline-drawn letter shapes for camp names Changes: - Add MapLayerManager to control runtime layer visibility - Update MapFilterView with new "Camp Display" section - Add UserSettings properties for showCampBoundaries and showBigCampNames - Integrate layer management with BaseMapViewController - Default both layers to visible for immediate user feedback Technical details: - Layers use GeoJSON data from camp_outlines.geojson and camp_labels.geojson - Style JSONs updated with appropriate colors for light/dark themes - Layers positioned between outline and street layers for proper hierarchy 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
Fixed critical issue where BaseMapViewController was overriding MapViewAdapter's delegate, breaking all annotation functionality. Changes: - Remove mapView.delegate override in BaseMapViewController - Add onStyleLoaded callback to MapViewAdapter for layer management - Set minzoom:17 on camp-labels-big layer to match camp pin visibility - Use delegate forwarding pattern to maintain separation of concerns This preserves all existing annotation functionality while properly integrating the map layer management system. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
New features: - Added "Show Camp Boundaries (Always)" toggle to override zoom restriction - Camp boundaries normally show at zoom 15+, Always mode shows at all zooms - Added zoom level indicators in UI (zoom 15+ for boundaries, zoom 17+ for labels) - Dynamic minzoom control in MapLayerManager based on Always setting UI improvements: - Conditional display of zoom text when Always mode is off - Nested toggle for Always mode under main boundaries toggle - Clear visual hierarchy with indentation Technical: - New UserSettings.showCampBoundariesAlways property (defaults to false) - MapLayerManager dynamically sets minimumZoomLevel based on settings - Preserves performance by respecting zoom limits by default 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
|
Claude finished @chrisballinger's task —— View job Code Review CompleteI've thoroughly reviewed this pull request that adds camp boundary and label map layers. Here's my comprehensive assessment: Review Tasks
Overall Assessment: ✅ Good Implementation with Minor SuggestionsThis PR successfully adds two new map layers with a clean, well-architected approach that follows the existing codebase patterns. Code Quality Analysis✅ Strengths
|
Changed mapLayerManager from optional property to lazy var for cleaner code: - Automatic initialization on first access - Removed nil checks and manual initialization - Simplified onStyleLoaded callback - More idiomatic Swift pattern 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
|
Claude finished @chrisballinger's task —— View job Claude Code Review Complete Code Review Tasks
Overall Assessment: ✅ Good Implementation with Minor SuggestionsThis PR successfully adds two new map layers with a clean, well-architected approach that follows the existing codebase patterns. Code Quality Analysis✅ Strengths
|
|
Claude finished @chrisballinger's task —— View job Code Review CompleteI've thoroughly reviewed this pull request that adds camp boundary and label map layers. Here's my comprehensive assessment: Review Tasks
Overall Assessment: ✅ Good Implementation with Minor SuggestionsThis PR successfully adds two new map layers with a clean, well-architected approach that follows the existing codebase patterns. Code Quality Analysis✅ Strengths
|
Summary
Adds two new toggleable map layers for camp visualization with zoom-based visibility controls.
Features
New Map Layers
UI Controls
Technical Implementation
MapLayerManagerclass to control runtime layer visibilitycamp_outlines.geojsonandcamp_labels.geojsonChanges
Core Implementation
Bug Fixes
Style Updates
Testing
Files Modified
iBurn/MapLayerManager.swift(new)iBurn/MapFilterView.swiftiBurn/UserSettings.swiftiBurn/BaseMapViewController.swiftiBurn/MainMapViewController.swiftiBurn/MapViewAdapter.swift🤖 Generated with Claude Code