iPhoto から写真を取り出して、GPS情報を抜き出します。
var app = Application("iPhoto") var albums = app.albums //全アルバム取得
iPhotoの構成は
iPhoto Application -> Album -> Photo
のようになっています。
写真を一枚取り出し、情報を取得します。
まず、写真を一枚取り出します。
var app = Application("iPhoto") var albums = app.albums //全アルバム取得 var photo = albums[0].photos[0]
写真の情報を色々取ってみます。
photo.name() //=> "IMG_0041" photo.originalPath() //=> "/Users/(略)/IMG_0041.JPG" photo.height() //=> 2448 photo.width() //=> 3264 photo.latitude() //=> 34.xxxx8329999994 photo.longitude() //=> 13x.xxxx3000000002 photo.altitude() //=> 24 photo.date() //=> Wed Dec 25 2013 18:33:11 GMT+0900 (JST) photo.rating() //=> 0
指定したアルバムを取得します。
アルバムにある写真を全て取得します。
var app = Application("iPhoto") var albums = app.albums var photos = app.albums["コストコ"].photos
GPS 情報にして、JSON化し、ファイルに書き出しします。
次に、これらから、GPS情報を取得して、JSONファイルに書き出しします。
//写真取得 var app = Application("iPhoto") var albums = app.albums var photos = app.albums["コストコ"].photos //GPS情報にする list = Array.apply(null, photos) list = list.filter(function(e){ return e.longitude() }) list = list.map(function(e){ return [e.latitude(),e.longitude()] }) //JSON書き出し app = Application("Script Editor") app.includeStandardAdditions=true var str = JSON.stringify(list) app.doShellScript( 'echo "'+str+'" > /Users/takuya/Desktop/test1.json')
最後に、コレをHTMLに出力します。
<!DOCTYPE html "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"/> <title>Google Maps v3 JavaScript API サンプル</title> <style> body{ margin:0px; padding:0px; } </style> <script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script> <script type="text/javascript"> var locations = [] // ここに、作ったGPSの配列を埋める、若しくはScriptタグで埋める var map; function initialize() { var latlng = new google.maps.LatLng(34.704753329999996, 136.998505); var opts = { zoom: 7 , center: latlng, mapTypeId: google.maps.MapTypeId.ROADMAP }; map = new google.maps.Map (document.getElementById("map_canvas"), opts); } function add_pin( latitude,logitude ){ var marker = new google.maps.Marker({ position: new google.maps.LatLng(latitude,logitude), title:"Hello World!" }); marker.setMap(map) } document.addEventListener( "DOMContentLoaded", function(){ initialize(); locations.forEach(function(e){ console.log(e) add_pin(e[0],e[1]) }) } ) </script> </head> <body> <div id="map_canvas" style="width:100%; height:100%"><div> </body> </html>
これをブラウザで見ると次のようになります。
iPhotoの地図は便利だけど
iPhotoの地図は、近隣撮影地をまとめてしまうので、かえって不便なことがあります。てかApple Mapになってから、表示のもたつき感が増加しちゃって、使いづらい。
GPS を取得して、一覧することで便利
位置情報を活用することで、結構楽しめました。
写真の枚数が多いと結構もたつきます
iPhotoに1万枚ほど、写真があるのですが、これを全部見ているとかなりの時間がかかります。。。。
そこは、Automationの限界でしょうか。タイムアウトすることがあります。
そのときは、xargs と組合せて戦うほうがいいかもしれませんね。 ⇛参考資料
工夫次第で結構楽しい
マーカーにinfoWindow をつけた