AVAsset (または AVURLAsset) には、配列に AVMetadataItems が含まれており、その 1 つが共通キー AVMetadataCommonKeyLocation である可能性があります。
そのアイテムの値は、次のような形式で表示される文字列です。
+39.9410-075.2040+007.371/
その文字列を CLLocation にどのように変換しますか?
AVAsset (または AVURLAsset) には、配列に AVMetadataItems が含まれており、その 1 つが共通キー AVMetadataCommonKeyLocation である可能性があります。
そのアイテムの値は、次のような形式で表示される文字列です。
+39.9410-075.2040+007.371/
その文字列を CLLocation にどのように変換しますか?
文字列が ISO 6709 形式であることを発見し、関連する Apple サンプル コードを見つけた後、わかりました。
NSString* locationDescription = [item stringValue];
NSString *latitude = [locationDescription substringToIndex:8];
NSString *longitude = [locationDescription substringWithRange:NSMakeRange(8, 9)];
CLLocation* location = [[CLLocation alloc] initWithLatitude:latitude.doubleValue
longitude:longitude.doubleValue];
Apple のサンプル コードは次のとおりです。
また、元に戻すコードは次のとおりです。
+ (NSString*)iso6709StringFromCLLocation:(CLLocation*)location
{
//Comes in like
//+39.9410-075.2040+007.371/
//Goes out like
//+39.9410-075.2040/
if (location) {
return [NSString stringWithFormat:@"%+08.4f%+09.4f/",
location.coordinate.latitude,
location.coordinate.longitude];
} else {
return nil;
}
}
私は同じ質問に取り組んでおり、使用せずにSwiftで同じコードを持っていますsubstring
:
ここlocationString
は
+39.9410-075.2040+007.371/
let indexLat = locationString.index(locationString.startIndex, offsetBy: 8)
let indexLong = locationString.index(indexLat, offsetBy: 9)
let lat = String(locationString[locationString.startIndex..<indexLat])
let long = String(locationString[indexLat..<indexLong])
if let lattitude = Double(lat), let longitude = Double(long) {
let location = CLLocation(latitude: lattitude, longitude: longitude)
}