2017-02-24 2 views
4

Wie kann ich ein Foto in einer Fotobibliothek mit Geolocation-Metadaten speichern?Foto mit Geolokalisierungsdaten in Fotobibliothek speichern Swift 3

Ich habe beantragt (und erlaubt) die App Benutzer-Standort zuzugreifen:

private func allowAccessToUserLocation() { 

     locationManager = CLLocationManager() 
     locationManager.delegate = self 
     locationManager.requestWhenInUseAuthorization() 
    } 

Muss ich für die Kamera-App für bestimmte premissions fragen?

EDIT:

I UIImagePickerController verwenden, um Fotos aus der App heraus zu nehmen. Alle Fotos aus der App werden in der Fotobibliothek OHNE Geolokalisierung gespeichert.

Hat es etwas damit zu tun, wie ich das Bild in der Fotobibliothek speichern kann? Ist mein Problem hier eher als in den zentralen Standortberechtigungen?

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { 
     if let pickedImage = info[UIImagePickerControllerOriginalImage] as? UIImage{ 
      UIImageWriteToSavedPhotosAlbum(pickedImage, self, #selector(image(_:didFinishSavingWithError:contextInfo:)), nil) 

      dismiss(animated: true, completion: { 

       self.showPhoto()}) 
     } 
    } 
+0

Ich verstehe nicht, was ist die Beziehung zwischen dem Ort und Fotos in Foto-Bibliothek? Können Sie Ihre Frage bitte überarbeiten und korrigieren, um klarer zu sein? – hasan83

+0

können Sie bitte den Code hinzufügen, in dem Sie die Geolokationsdaten lesen? – hasan83

+0

haben Sie den Standort vor dem reverseGeoCodeLocation gedruckt? was ist der Wert? – hasan83

Antwort

1

Nun, ich denke, Sie müssen zuerst die Position des Benutzers zuzugreifen, bevor Sie func addAsset(image: UIImage, location: CLLocation? = nil) {...}

so irgendwo in der func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {....}

nennen Ich rufe:

let locationManager = CLLocationManager() 

     if CLLocationManager.locationServicesEnabled() { 
      locationManager.delegate = self 
      locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters 
      locationManager.startUpdatingLocation() 

     } 
     else{ 
      //Location service disabled" 
     } 
     //and then call.... 

     addAsset(image: pickedImage, location: locationManager.location) 

sobald ich mit dem Abschluss :

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {...} 

i stoppen den Standort Aktualisierung:

locationManager.stopUpdatingLocation() 

Dies funktioniert für mich

3

In iOS 8 Apple hat Photo Library.

Hier ist das Beispiel zu erstellen und PHAsset mit dem Standort zu aktualisieren:

func addAsset(image: UIImage, location: CLLocation? = nil) { 
    PHPhotoLibrary.shared().performChanges({ 
     // Request creating an asset from the image. 
     let creationRequest = PHAssetChangeRequest.creationRequestForAsset(from: image) 
     // Set metadata location 
     if let location = location { 
      creationRequest.location = location 
     } 
    }, completionHandler: { success, error in 
     if !success { NSLog("error creating asset: \(error)") } 
    }) 
} 

Stellen Sie sicher, Fotos zugreifen autorisiert, bevor mit dem Speichern

PHPhotoLibrary.requestAuthorization(_:) 

Metadaten können mit gelesen werden:

info[UIImagePickerControllerMediaMetadata] 

Ich kann nicht überprüfen, dass Metadaten Standort speichert, in mein Test NICHT sogar mit Location-Service erlaubt. In diesem Fall könnte die Verwendung von CoreLocation den tatsächlichen Standort ermitteln.

+0

Diese Zeile hat einen Fehler ... asset.location = location '(Wert des Typs PHObjectPlaceholder hat keine Mitgliederposition)' –

+0

Entschuldigung, check edit, Ich habe die Antwort vereinfacht, indem ich die Album-Sammlungen entfernt habe – XeNoN

Verwandte Themen