Stadt und Bundesland aus der iOS-Fotobibliothek abrufen
Posted: 11 Jan 2025, 10:25
Unter MacOS konnte ich die Ortsnamen aller meiner 90.000 Fotos abrufen, indem ich die Photos.sqlite-Datenbank abfragte.
Ich versuche jetzt, etwas Ähnliches in iOS zu tun. habe aber nur „koordinate.latitude und „koordinate.longitude“ gefunden.
Ich sehe, dass es eine reverseGeocodeLocation gibt, die eine Koordinate annimmt und eine CLPlacemark zurückgibt, aber Geokodierungsanfragen sind Die Rate ist für jede App begrenzt.
Wenn ich in der Fotos-App auf dem iPhone nachschaue, kann ich sehen, dass meine Bilder bereits Ortsnamen-Metadaten enthalten. Werden diese irgendwo in einer API bereitgestellt?
Ich versuche jetzt, etwas Ähnliches in iOS zu tun. habe aber nur „koordinate.latitude und „koordinate.longitude“ gefunden.
Ich sehe, dass es eine reverseGeocodeLocation gibt, die eine Koordinate annimmt und eine CLPlacemark zurückgibt, aber Geokodierungsanfragen sind Die Rate ist für jede App begrenzt.
Wenn ich in der Fotos-App auf dem iPhone nachschaue, kann ich sehen, dass meine Bilder bereits Ortsnamen-Metadaten enthalten. Werden diese irgendwo in einer API bereitgestellt?
Code: Select all
private func fetchPhotoLocations() {
let fetchOptions = PHFetchOptions()
fetchOptions.includeHiddenAssets = false
fetchOptions.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: false)]
let assets = PHAsset.fetchAssets(with: fetchOptions)
assets.enumerateObjects { (asset, index, stop) in
if let location = asset.location {
let resources = PHAssetResource.assetResources(for: asset)
let filename = resources.first?.originalFilename ?? "Unknown"
let options = PHAssetResourceRequestOptions()
options.isNetworkAccessAllowed = false
if let resource = resources.first {
PHAssetResourceManager.default().requestData(for: resource, options: options) { (data) in
} completionHandler: { (error) in
if let error = error {
print("Error loading resource: \(error)")
}
}
DispatchQueue.main.async {
self.photoLocations.append(PhotoLocation(
id: asset.localIdentifier,
coordinate: location.coordinate,
creationDate: asset.creationDate ?? Date(),
filename: filename
))
}
}
}
}
}