MKMapKit Geofence & CLCircleOverlay

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • MKMapKit Geofence & CLCircleOverlay

    Hallo Zusammen.
    Ich möchte folgendes verwirklichen:
    Ich habe in einem Array Suchbegriffe für GeoLocations gespeichert, die ich gerne über Geofence überwachen möchte.
    Da Geofence Funktionalität auf 20 Regionen pro App begrenzt sind, speichere ich die initial Location beim starten der App und führe einmal eine MKLocalSearchRequest für jeden Begriff aus.
    Vor jeder Durchführung einer MKLocalSearchRequest lösche ich die alten mit Geofence überwachten Regionen und alle ClCircularRegionOverlays.
    Über die response der MKLocalSearchRequest erhalte ich dann die gesuchten Locations als MKMapItem.
    Über eine Schleife prüfe ich dann die Distanz zur aktuellen User Position und lege für die am nächsten gelegenen Suchergebnisse neue Geofence Regionen fest.
    Dabei überwache ich nur die 5 am nächsten liegenden Ergebnisse.

    Wenn der User sich um eine Distanz > meiner MapSpan bewegt, führe ich erneut eine MKLocalSearchRequest aus.
    Mein Problem ist, dass meine CLCircularRegionOverlays nicht auf der Map gezeichnet werden.

    Vielleicht kann jemand direkt sehen woran das liegen kann?

    In der ViewDidLoad()

    Quellcode

    1. locationManager = CLLocationManager()
    2. locationManager.delegate = self
    3. locationManager.allowsBackgroundLocationUpdates = true
    4. locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters
    5. MapView.delegate = self
    6. MapView.userTrackingMode = .follow
    7. MapView.showsUserLocation = true






    Hier der Teil in dem ich die Geofence Regionen Überwachung festlege:


    Quellcode

    1. private func MonitoreCircularRegion(mapItem: MKMapItem){
    2. DispatchQueue.main.async {
    3. let region = CLCircularRegion(center: mapItem.placemark.coordinate, radius: CLLocationDistance(self.radiusToMonitore), identifier: "\(UUID().uuidString)\("SB_")\(mapItem.name!)")
    4. self.locationManager.startMonitoring(for: region)
    5. NSLog("Monitored Regions: \(self.locationManager.monitoredRegions.count)")
    6. NSLog("MapSpan: \(self.mapSpan)")
    7. NSLog("Start monitoring for Region: %A", region)
    8. }
    9. }


    In der LocationManager DidStartMonitoringForRegion delegate Funktion füge ich die MKCircle als Overlay zur Map hinzu:

    Quellcode

    1. func locationManager(_ manager: CLLocationManager, didStartMonitoringFor region: CLRegion) {
    2. NSLog("Started monitoring for Region: \(region.identifier)")
    3. NSLog("Monitored Regions: \(locationManager.monitoredRegions.count)")
    4. // Add region overlay circel
    5. if let circularRegion = region as? CLCircularRegion{
    6. let circle = MKCircle(center: circularRegion.center, radius: circularRegion.radius)
    7. self.MapView.add(circle)
    8. NSLog("Adding circular Overlay")
    9. }
    10. }
    In der mapView RendererForOverlay delegate Funktion sollte der Overlay dann gezeichnet werden:


    Quellcode

    1. func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {
    2. guard let circleOverlay = overlay as? MKCircle else {
    3. return MKOverlayRenderer()
    4. }
    5. NSLog("Drawing Circular Overlay")
    6. let circleRenderer = MKCircleRenderer(circle: circleOverlay)
    7. circleRenderer.strokeColor = UIColor.red
    8. circleRenderer.fillColor = UIColor.red
    9. circleRenderer.alpha = 1
    10. circleRenderer.lineWidth = 2
    11. circleRenderer.setNeedsDisplay()
    12. return circleRenderer
    13. }
    Alles anzeigen


    Laut meinem Log werden meine Funktionen auch ausgeführt aber ich sehe keinen Overlay:

    Quellcode

    1. 2017-08-12 15:57:50.739271+0200 ShoppingBuddy[6199:2037589] Drawing Circular Overlay
    2. 2017-08-12 15:57:50.739426+0200 ShoppingBuddy[6199:2037589] Adding circular Overlay
    3. 2017-08-12 15:57:50.744723+0200 ShoppingBuddy[6199:2037589] Started monitoring for Region: 45DD4450-4018-4822-A68F-44F034342EA4SB_Aldi
    4. 2017-08-12 15:57:50.746293+0200 ShoppingBuddy[6199:2037589] Monitored Regions: 8
    5. 2017-08-12 15:57:50.746384+0200 ShoppingBuddy[6199:2037589] Drawing Circular Overlay
    6. 2017-08-12 15:57:50.746520+0200 ShoppingBuddy[6199:2037589] Adding circular Overlay
    7. 2017-08-12 15:57:50.748352+0200 ShoppingBuddy[6199:2037589] Started monitoring for Region: 8C588EFE-3EB7-4A46-891D-DD997821520CSB_Aldi
    8. 2017-08-12 15:57:50.749642+0200 ShoppingBuddy[6199:2037589] Monitored Regions: 8
    9. 2017-08-12 15:57:50.749709+0200 ShoppingBuddy[6199:2037589] Drawing Circular Overlay
    10. 2017-08-12 15:57:50.749801+0200 ShoppingBuddy[6199:2037589] Adding circular Overlay