用途:在 iOS 应用中加入地图、标注/标记、地点搜索、路线导航,或排查地图显示异常与性能问题。也用于在 SwiftUI Map 与 MKMapView 之间做技术选型。
主要能力:
- 选型决策:目标 iOS 17+ 时,标准标记、相机控制、用户位置、形状覆盖、地图样式、选择与聚合优先用 SwiftUI Map;需要自定义瓦片覆盖、细粒度 delegate 回调或低于 iOS 17 时才用 UIViewRepresentable 包装 MKMapView。
- 常见反模式与修复:SwiftUI 视图体内创建标注(应移入模型,用 @State 或 @Observable)、MKMapView 不复用标注视图(应使用 dequeueReusableAnnotationView(withIdentifier:for:))、updateUIView 中无保护地 setRegion 导致无限循环、主线程同步地理编码、未按可见区域过滤标注、忽略 MKLocalSearch 的 resultTypes。
- 标注策略:少于 100 个可直接声明;100–1000 启用聚合(clusteringIdentifier);1000 以上服务端预聚合或按可见区域过滤,可用 onMapCameraChange(frequency: .onEnd) 配合区域范围判断。
- 搜索:实时自动补全用 MKLocalSearchCompleter,选中后再用 MKLocalSearch 取完整结果;程序化搜索用 naturalLanguageQuery,并配置 resultTypes 与 region。
- 路线:MKDirections.Request 设置起点、终点与 transportType,取 MKRoute 的画线 polyline、expectedTravelTime、distance、steps。
- 与 Core Location 集成:设置 showsUserLocation 或加 UserAnnotation() 会隐式请求定位授权,建议先显式请求授权再展示地图,iOS 17+ 可用 CLServiceSession。
使用方式:技能内含 SwiftUI Map 快速上手示例、搜索模型示例、路线计算与绘制示例、聚合实现,以及配套的技能引用 axiom-mapkit-ref、axiom-mapkit-diag、axiom-core-location。
限制与注意:资料未提供具体安装命令、价格或平台支持范围,暂未提供;示例主要面向 iOS/iPadOS,需注意 API 版本要求(如 SwiftUI Map 相关特性需 iOS 17+),MapKit 搜索存在 Apple 侧速率限制,应复用 completer 而非每次按键新建。