Evernote のノート位置情報はkCGImageProperty と異なる
Evernote のノートは位置情報を持っています。
それはEDAMNote というクラスのattributes というプロパティ内に格納されているのですが、画像に使われているkCGImagePrperty の位置情報と微妙に形式が異なります。
内容的にはCLLocation と同じ。
東経および北緯をプラス値、西経および南緯をマイナス値で格納しているのです。 *01ちなみにkCGImageProperty は値はプラス値のみで、東経西経および北緯南緯を識別するプロパティを別途持っています。
kCGImageProperty の方がキーが共有できて便利
私は位置情報を扱うにはkCGImageProperty の方が便利だと考えています。
理由は位置情報を扱う際のキーが共有できるからです。
Evernote に位置情報をセットする際はCLLocation 形式に直してやる
そんなわけで、Evernote のノートに位置情報をセットするときは、kCGImageProperty 形式からCLLocation の形式に直してから格納してやります。
以下コード。
- (void)createNoteAtGPS {
// kCGImageProperty 形式の位置情報(事前に用意済み)
NSDirectory* gpsDict = gpsDict_;
// 位置情報を格納するプロパティ
EDAMNoteAttributes* attr = [EDAMNoteAttributes new];
// 経度
double latitude = [[gpsDict objectForKey:(NSString *)kCGImagePropertyGPSLatitude] doubleValue];
if ( [[gpsDict objectForKey:(NSString *)kCGImagePropertyGPSLatitudeRef] isEqualToString:@"W"] ) {
// 西経
latitude = -latitude;
}
[attr setLatitude:latitude];
// 緯度
double longitude = [[gpsDict objectForKey:(NSString *)kCGImagePropertyGPSLongitude] doubleValue];
if ( [[gpsDict objectForKey:(NSString *)kCGImagePropertyGPSLongitudeRef] isEqualToString:@"S"] ) {
// 南緯
longitude = -longitude;
}
[attr setLongitude:longitude];
// 標高
double altitude = [[gpsDict objectForKey:(NSString*)kCGImagePropertyGPSAltitude] doubleValue];
if ( [[gpsDict objectForKey:(NSString*)kCGImagePropertyGPSAltitudeRef] isEqualToString:@"1"] ) {
// 海抜0m より下
altitude = -altitude;
}
[attr setAltitude:altitude];
// EDAMNote を生成
NSMutableString* ENML = @"<?xml version="1.0" encoding="UTF-8"?>";
[ENML appendFormat:%@", @"<!DOCTYPE en-note SYSTEM "http://xml.evernote.com/pub/enml2.dtd">"];
[ENML appendFormat:%@", @"<en-note>テスト</en-note>"];
EDAMNote* newNote = [[EDAMNote alloc] initWithGuid:nil
title:@"hoge"
content:(NSString*)ENML
contentHash:nil
contentLength:(int)ENML.length
created:0
updated:0
deleted:0
active:YES
updateSequenceNum:0
notebookGuid:nil
tagGuids:nil
resources:nil
attributes:attr
tagNames:nil];
// EDAMNote をアップロード
[[EvernoteNoteStore noteStore] createNote:newNote success:^(EDAMNote *note) {
NSLog(@"Note created : %@",note);
} failure:^(NSError *error) {
NSLog(@"Error : %@",error);
}];
}
最初からCLLocation 使えば?
「最初からCLLocation 使えよ!」というツッコミが聞こえてきそうですが、画像から位置情報を取得してノートの位置情報に転記したい場合などもあるので、こーゆーのも「あり」かなと。
と言いますか、しつこいですが「キー値を共有できる」って楽じゃないですか?
だめ?
脚注
| ↩01 | ちなみにkCGImageProperty は値はプラス値のみで、東経西経および北緯南緯を識別するプロパティを別途持っています。 |
|---|