Hi , nachdem ich wohl einen gewaltigen Knoten im Kopf habe frage ich Euch, und hoffe auf Hilfe.
folgendes Problem:
ich lese die aktuellen Geokoordinaten des Iphone aus und will wissen ob ich mich in der Nähe eines Gewässers befinde.
über die genauen Positionsdaten bekomme ich natürlich über das placemark.inlandWater keine Ausgabe da ich ja nicht IM Wasser mein Handy dabei habe.
bin ich jetzt am Ufer muss ich also eine Umkreissuche durchführen. Ich dachte ich nehme einfach meinen Längen und Breitengrad und verändere diese bis
das placemark.inlandWater einen Inhalt hat. Das ganze mit einer While - Schleife: while Gewaesser.isEmpty { ... längen und Breitengrad ändern und neu abfragen ob da ein Gewässer ist }
funktioniert aber leider nicht.
p.s.: die schleife habe ich jedesmal in die Funktion locationManager(didUpdateLocations) eingebaut. auf mit einer for schleife funktioniert es nicht die veränderten längen und Breitengrade zu übergeben. :(( macht auch keinen sinn (in meinen Augen) warum soll ich feste durchläufe haben wenn er mit while abbricht sobald die Bedingung nicht mehr erfüllt ist.
natürlich kann ich das händisch erledigen : 10 m nach Norden -> abfragen , 10 m nach Süden -> abfragen , 10 m nach Westen -> abfragen , 10 m nach Osten -> abfragen
das kann aber nicht die Lösung sein zumal man ja den radius bei negativmeldungen jeweils erhöhen muss
wo ist der Denkfehler?
hier mein code:
import UIKit
import CoreLocation
var long = 11.738053// <---- Nordufer Heimstettener See , Ergebnis : Seename ist nil
var lat = 48.157318
var gewaesser = ""
// var lat = 48.156274 // <--- Heimstettener See
// var long = 11.738846
class FirstViewController: UIViewController, CLLocationManagerDelegate {
@IBOutlet weak var lblSeename: UILabel!
@IBOutlet weak var lblLongitude: UILabel!
@IBOutlet weak var lblLatitude: UILabel!
let manager = CLLocationManager()
let geocoder = CLGeocoder()
// MARK: -- ViewController Lebenszirkel
override func viewDidLoad() {
super.viewDidLoad()
self.manager.requestAlwaysAuthorization()
self.manager.delegate = self
self.manager.desiredAccuracy = kCLLocationAccuracyBest
self.manager.startUpdatingLocation()
}
// MARK: -- CLLocationManagerDelegate
func locationManager(manager: CLLocationManager!, didFailWithError error: NSError!) {
println("Error! \(error.localizedDescription)")
}
func locationManager(manager: CLLocationManager!, didUpdateLocations locations: [AnyObject]!)
{
let locationOne = CLLocation(latitude: lat , longitude: long)
// let locationOne = manager.location
// var lat = locationOne.coordinate.latitude
// var long = locationOne.coordinate.longitude
CLGeocoder().reverseGeocodeLocation(locationOne, completionHandler:
{(placemarks, error)->Void in
if (error != nil)
{
println("Error: \(error.localizedDescription)")
return
}
if placemarks.count > 0
{
let pm = placemarks[0] as! CLPlacemark
self.displayLocationInfo(pm)
self.lblLatitude.text = "\(lat)"
self.lblLongitude.text = "\(long)"
}
else
{
println("Datenfehler!")
}
})
}
func displayLocationInfo(placemark: CLPlacemark)
{
if placemark.inlandWater != nil {
self.manager.stopUpdatingLocation()
lblSeename.text = placemark.inlandWater
gewaesser = placemark.inlandWater
} else {
lblSeename.text = placemark.locality
}
}
// END of code
}
folgendes Problem:
ich lese die aktuellen Geokoordinaten des Iphone aus und will wissen ob ich mich in der Nähe eines Gewässers befinde.
über die genauen Positionsdaten bekomme ich natürlich über das placemark.inlandWater keine Ausgabe da ich ja nicht IM Wasser mein Handy dabei habe.
bin ich jetzt am Ufer muss ich also eine Umkreissuche durchführen. Ich dachte ich nehme einfach meinen Längen und Breitengrad und verändere diese bis
das placemark.inlandWater einen Inhalt hat. Das ganze mit einer While - Schleife: while Gewaesser.isEmpty { ... längen und Breitengrad ändern und neu abfragen ob da ein Gewässer ist }
funktioniert aber leider nicht.
p.s.: die schleife habe ich jedesmal in die Funktion locationManager(didUpdateLocations) eingebaut. auf mit einer for schleife funktioniert es nicht die veränderten längen und Breitengrade zu übergeben. :(( macht auch keinen sinn (in meinen Augen) warum soll ich feste durchläufe haben wenn er mit while abbricht sobald die Bedingung nicht mehr erfüllt ist.
natürlich kann ich das händisch erledigen : 10 m nach Norden -> abfragen , 10 m nach Süden -> abfragen , 10 m nach Westen -> abfragen , 10 m nach Osten -> abfragen
das kann aber nicht die Lösung sein zumal man ja den radius bei negativmeldungen jeweils erhöhen muss
wo ist der Denkfehler?
hier mein code:
import UIKit
import CoreLocation
var long = 11.738053// <---- Nordufer Heimstettener See , Ergebnis : Seename ist nil
var lat = 48.157318
var gewaesser = ""
// var lat = 48.156274 // <--- Heimstettener See
// var long = 11.738846
class FirstViewController: UIViewController, CLLocationManagerDelegate {
@IBOutlet weak var lblSeename: UILabel!
@IBOutlet weak var lblLongitude: UILabel!
@IBOutlet weak var lblLatitude: UILabel!
let manager = CLLocationManager()
let geocoder = CLGeocoder()
// MARK: -- ViewController Lebenszirkel
override func viewDidLoad() {
super.viewDidLoad()
self.manager.requestAlwaysAuthorization()
self.manager.delegate = self
self.manager.desiredAccuracy = kCLLocationAccuracyBest
self.manager.startUpdatingLocation()
}
// MARK: -- CLLocationManagerDelegate
func locationManager(manager: CLLocationManager!, didFailWithError error: NSError!) {
println("Error! \(error.localizedDescription)")
}
func locationManager(manager: CLLocationManager!, didUpdateLocations locations: [AnyObject]!)
{
let locationOne = CLLocation(latitude: lat , longitude: long)
// let locationOne = manager.location
// var lat = locationOne.coordinate.latitude
// var long = locationOne.coordinate.longitude
CLGeocoder().reverseGeocodeLocation(locationOne, completionHandler:
{(placemarks, error)->Void in
if (error != nil)
{
println("Error: \(error.localizedDescription)")
return
}
if placemarks.count > 0
{
let pm = placemarks[0] as! CLPlacemark
self.displayLocationInfo(pm)
self.lblLatitude.text = "\(lat)"
self.lblLongitude.text = "\(long)"
}
else
{
println("Datenfehler!")
}
})
}
func displayLocationInfo(placemark: CLPlacemark)
{
if placemark.inlandWater != nil {
self.manager.stopUpdatingLocation()
lblSeename.text = placemark.inlandWater
gewaesser = placemark.inlandWater
} else {
lblSeename.text = placemark.locality
}
}
// END of code
}
Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von cochris () aus folgendem Grund: p.s: der code ist natürlich ohne die schleife ,.... diese habe ich jedesmal in die Funktion locationManager (didUpdateLocations) eingebaut.