diff --git a/Sources/MapConductorForMapKit/MapKitMapView.swift b/Sources/MapConductorForMapKit/MapKitMapView.swift index a208aed..669b0b7 100644 --- a/Sources/MapConductorForMapKit/MapKitMapView.swift +++ b/Sources/MapConductorForMapKit/MapKitMapView.swift @@ -1,6 +1,6 @@ import Combine import MapKit -import MapConductorCore +@_spi(MapConductorDriver) import MapConductorCore import QuartzCore import SwiftUI import UIKit @@ -269,6 +269,17 @@ private struct MapKitMapViewRepresentable: UIViewRepresentable { let rasterLayerController = MapKitRasterLayerController(mapView: mapView) self.rasterLayerController = rasterLayerController + // Many polygons are drawn into raster tiles and shown as one raster + // layer; taps still resolve against the original shapes. + let polygonTiler = PolygonTiler() + polygonTiler.onTemplate = { [weak rasterLayerController] template, tileSize in + if let template { + await rasterLayerController?.upsert(state: PolygonTiler.rasterLayerState(template: template, tileSize: tileSize)) + } else { + await rasterLayerController?.removeById(PolygonTiler.layerId) + } + } + polygonController.tiler = polygonTiler let groundImageController = MapKitGroundImageController(mapView: mapView) self.groundImageController = groundImageController @@ -382,6 +393,7 @@ private struct MapKitMapViewRepresentable: UIViewRepresentable { overlayScope?.circleCollector.sync(content.circles.map { $0.state }) overlayScope?.polylineCollector.sync(content.polylines.map { $0.state }) overlayScope?.polygonCollector.sync(content.polygons.map { $0.state }) + polygonController?.tiler?.refreshIfServerMoved() for handler in content.polygonSyncHandlers { let hullController = hullPolygonController handler.bindPolygonSync { [weak hullController] states in