Hallo zusammen,
ich versuche eine Umkreissuche für meine App zu entwickeln und komme hier absolut nicht weiter. Ich brauche dringen Hilfe, da ich gefühlt schon das ganz Netz durchsucht habe.
Mein gedanklicher Aufbau ist wie folgt:
- geladen wird ein Array aus Dictionaries aus einer plist (getMapAnnotations())
- dieses Array wird durch die Funktion (UmkreissucheFilter()) nach dem Sliderwert (kommt aus den Einstellungen) gefiltert (alle Punkte die eine geringere Distanz haben als der Sliderwert, werden in das neue Array übernommen)
- als letztes wird das neue Array im MapView dargestellt
Mein Problem ist, dass ich es nicht schaffe den Wert für annotaionsLat und annotationsLong aus dem Array einzusetzen und somit das Array nicht gefiltert bekomme.
Ich würde mich sehr freuen wenn mir jemand helfen könnte, da ich noch nicht so lange dabei bin und hier wirklich nicht weiter komme.
Screenshot 2017-02-18 20.45.43.jpeg[Blockierte Grafik: https://www.dropbox.com/s/bih8kqgerszh294/Screenshot%202017-02-18%2020.45.43.jpeg?dl=0]
Alles anzeigen
ich versuche eine Umkreissuche für meine App zu entwickeln und komme hier absolut nicht weiter. Ich brauche dringen Hilfe, da ich gefühlt schon das ganz Netz durchsucht habe.
Mein gedanklicher Aufbau ist wie folgt:
- geladen wird ein Array aus Dictionaries aus einer plist (getMapAnnotations())
- dieses Array wird durch die Funktion (UmkreissucheFilter()) nach dem Sliderwert (kommt aus den Einstellungen) gefiltert (alle Punkte die eine geringere Distanz haben als der Sliderwert, werden in das neue Array übernommen)
- als letztes wird das neue Array im MapView dargestellt
Mein Problem ist, dass ich es nicht schaffe den Wert für annotaionsLat und annotationsLong aus dem Array einzusetzen und somit das Array nicht gefiltert bekomme.
Ich würde mich sehr freuen wenn mir jemand helfen könnte, da ich noch nicht so lange dabei bin und hier wirklich nicht weiter komme.
Screenshot 2017-02-18 20.45.43.jpeg[Blockierte Grafik: https://www.dropbox.com/s/bih8kqgerszh294/Screenshot%202017-02-18%2020.45.43.jpeg?dl=0]
Quellcode
- //MARK: - Annotations
- func getMapAnnotations() -> [UmkreissucheAnnotation] {
- var annotations:Array = [UmkreissucheAnnotation]()
- //MARK: - load plist file
- var stations: NSArray?
- if let path = Bundle.main.path(forResource: "Gesamt", ofType: "plist") {
- stations = NSArray(contentsOfFile: path)
- }
- if let items = stations {
- for item in items {
- let lat = (item as AnyObject).value(forKey: "inlat") as! Double
- let long = (item as AnyObject).value(forKey: "inlong")as! Double
- let outlatitude = (item as AnyObject).value(forKey: "outlat") as? Double
- let outlongitude = (item as AnyObject).value(forKey: "outlong") as? Double
- let poiart = (item as AnyObject).value(forKey: "poiart")as! String
- let WWpruef = (item as AnyObject).value(forKey: "wwpruef")as! String
- let annotation = UmkreissucheAnnotation(wwpruef: WWpruef, identifier: poiart, inlatitude: lat, inlongitude: long, outlatitude: outlatitude!, outlongitude: outlongitude!)
- annotation.title = (item as AnyObject).value(forKey: "titel") as? String
- annotation.subtitle = (item as AnyObject).value(forKey: "land") as? String
- annotation.In = (item as AnyObject).value(forKey: "in") as? String
- annotation.Flussname = (item as AnyObject).value(forKey: "flussname") as? String
- annotation.Von = (item as AnyObject).value(forKey: "von") as? String
- annotation.Bis = (item as AnyObject).value(forKey: "bis") as? String
- annotation.Out = (item as AnyObject).value(forKey: "out") as? String
- annotation.Land = (item as AnyObject).value(forKey: "land") as? String
- annotation.POIart = (item as AnyObject).value(forKey: "poiart") as? String
- annotation.KM = (item as AnyObject).value(forKey: "km") as? String
- annotation.WWvon = (item as AnyObject).value(forKey: "wwvon") as? String
- annotation.WWbis = (item as AnyObject).value(forKey: "wwbis") as? String
- annotation.hoehe = (item as AnyObject).value(forKey: "hoehe")as? String
- annotation.mindestpegel = (item as AnyObject).value(forKey: "mindestpegel")as? String
- annotation.Charakter = (item as AnyObject).value(forKey: "charakter") as? String
- annotation.Besonderheiten = (item as AnyObject).value(forKey: "besonderheiten") as? String
- annotation.Beschreibungslink = (item as AnyObject).value(forKey: "beschreibungslink") as? String
- annotation.Pegellink = (item as AnyObject).value(forKey: "pegellink") as? String
- annotation.Fotolink = (item as AnyObject).value(forKey: "fotolink") as? String
- annotations.append(annotation)
- }
- }
- return annotations
- }
- //MARK: - Filter Fuctions
- func UmkreissucheFilter() {
- //MARK: - Distance from Sliver Value
- let SliderValueDefaults = UserDefaults.standard.double(forKey: "SliderValue")
- //MARK: - locations from Array
- let annotations = getMapAnnotations()
- let annotationsLat = 50.8691 // ersetzen durch Array latitude
- let annotationsLong = 9.7095 // ersetzen durch Array longitude
- let annotationsLoc = CLLocation (latitude: annotationsLat, longitude: annotationsLong)
- //MARK: - Users current location
- let currentLat = self.locationManager.location?.coordinate.latitude
- let currentLong = self.locationManager.location?.coordinate.longitude
- let myLocation = CLLocation (latitude: currentLat!, longitude: currentLong!)
- //MARK: - distance calculation
- let distance = annotationsLoc.distance(from: myLocation)
- let distanceKM = distance / 1000
- let distancefilter = annotations.filter {_ in distanceKM < SliderValueDefaults}
- //MARK: - Alternative Lösung
- //if distanceKM > 1 && distanceKM < SliderValueDefaults {
- // MapView.addAnnotations(annotations)
- //print("Annotation wird angezeigt")
- //}
- // else {
- // print("Annotation wird nicht angezeigt")
- //}
- MapView.addAnnotations(distancefilter)
- }