Konvertierung von Longitude und Latitude

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

  • Konvertierung von Longitude und Latitude

    Hallo,
    ich muss die Koordinaten des aktuellen Standorts in einen String umwandeln, damit ich daraus eine url basteln kann mit der ich einen Webservice anspreche.

    Ich arbeite mit einer mapView. Wenn ich mir Longitude und Latitude über die folgende Anweisung hole:

    Quellcode

    1. NSString *latitude = [[NSNumber numberWithDouble:mapView.userLocation.location.coordinate.latitude] stringValue];


    und über NSLog ausgebe erhalte ich folgendes:

    Quellcode

    1. 2011-03-20 12:39:07.479 meineApp[3229:207] 1.550227833229274e-279
    2. 2011-03-20 12:39:07.480 meineApp[3229:207] 7.774311966892897e-297


    Im Simulator erhält man ja nur die Adresse von Apple, Infinite Loop 1. Eine Abfrage der Geokoordinaten über den Google Webservice liefert für diese Adresse allerdings die Koordinaten:

    "lat": 37.3319100,
    "lng": -122.0312620


    Wie komme ich über die mapView an die richtigen Koordinaten, bzw wie rechne/formatiere ich um?
  • Ich mache es immer so:

    Quellcode

    1. int degrees = locationManager.location.coordinate.latitude;
    2. double decimal = fabs(locationManager.location.coordinate.latitude - degrees);
    3. int minutes = decimal * 60;
    4. double seconds = decimal * 3600 - minutes * 60;
    5. NSString *lat = [NSString stringWithFormat:@"%d° %d' %1.4f\"", degrees, minutes, seconds];
    6. degrees = locationManager.location.coordinate.longitude;
    7. decimal = fabs(locationManager.location.coordinate.longitude - degrees);
    8. minutes = decimal * 60;
    9. seconds = decimal * 3600 - minutes * 60;
    10. NSString *lng = [NSString stringWithFormat:@"%d° %d' %1.4f\"", degrees, minutes, seconds];
    Alles anzeigen
  • Ich würde mal einen Brekpoint setzen und mir das CLLoaction-Objekt ansehen oder die coordinate-Property ausgeben lassen. Sind dort überhaupt Werte <> 0 drin?

    Hast Du das CLLocationManagerDelegate-Protokoll richtig implementiert und das Tacking gestartet?

    Das %g formatiert einen double-Wert in exponential-Schreibweise, also als "<Wert vor dem e> * 10 hoch <Wert nach dem e>" - und das willst Du nicht. Übrigens: Das, was Du bekommst ist schon ziemlich nah dran an 0, denn 7,7 * 10 hoch -308 ist fast 0 - komisches Ergebnis, als würde Ecel rechnen. Der Format-Specifier für "double" ist %f. Steht in der Doku.

    (BTW: %d ist hier auch falsch, denn das ist "Signed 32-bit Integer (int)")
  • Quellcode

    1. - (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation
    2. {
    3. NSLog(@"Lat. = %@", [NSString stringWithFormat:@"%.7f", userLocation.coordinate.latitude]);
    4. NSLog(@"Lon. = %@", [NSString stringWithFormat:@"%.7f", userLocation.coordinate.longitude]);
    5. }


    Ausgabe:
    2011-03-20 15:17:06.182 UIMapKit[1962:207] Lat. = 37.3316930
    2011-03-20 15:17:06.182 UIMapKit[1962:207] Lon. = -122.0304570
  • Ich teste im Simulator, deshalb hampel ich mit der Cupertino Position rum ;)

    Ich vermute das tracking wird nicht richtig gestartet, deshalb bekomme ich die Koordinaten 0,0. Ich überprüfe das mal und schreibe dann, ob es geklappt hat oder nicht. Schon mal danke für die prompte und umfangreiche Hilfe!
  • Es ist auch Absicht, dass die Location nicht schon einfach so feststeht.
    Man muss den CLLocationManager schon erst einmal mit startUpdatingLocation anwerfen. Dann wird der Delegate mit locationManager:didUpdateToLocation:fromLocation: aufgerufen. Wenn du "nur" eine Position brauchst, kannst du mit stopUpdatingLocation wieder stoppen. Erst nachdem die Delegate Methode aufgerufen wurde, ist die location Property sinnvoll gesetzt. Der Wert kann aber schon deutlich älter sein, wenn die Ortung gerade nicht funktioniert.
    Warum das so ist? Erstens wird beim startUpdatingLocation geprüft, ob deine App das überhaupt darf und eventuell ein Alert dargestellt. Zweitens verbraucht die Ortung zusätzlich Strom und das soll vermieden werden - daher auch unbedingt stopUpdatingLocation aufrufen, wenn du keine Updates mehr brauchst.