Gulpで指定したディレクトリ内の写真から位置情報を取り出してJSONを作る。

Gulpで写真から位置情報を取り出してJSONを生成する必要があったのでやってみたら以外とあっさりできた。

プラグインのインストール

使うプラグインは以下のとおり。

npm install gulp-data gulp-exif gulp-extend --save-dev

 

gulpfile.jsにタスクを追加

function gpsDecimal( direction, degrees, minutes, seconds ) {
    var d = degrees + minutes / 60 + seconds / ( 60 * 60 );
    return ( direction === 'S' || direction === 'W' ) ? d *= -1 : d;
}

gulp.task( 'exif', function () {
    return gulp.src( 'img/*.jpg' )
        .pipe( exif() )
        .pipe( data( function ( file ) {
            var filename = file.path.substring( file.path.lastIndexOf( '/' ) + 1 ),
                exif = file.exif.gps,
                calcLat = gpsDecimal.bind( null, exif.GPSLatitudeRef ),
                calcLng = gpsDecimal.bind( null, exif.GPSLongitudeRef ),
                data = {};
            data[filename] = {
                lat: calcLat.apply( null, exif.GPSLatitude ),
                lng: calcLng.apply( null, exif.GPSLongitude ),
                alt: exif.GPSAltitude,
                dir: exif.GPSImageDirection
            };
            file.contents = new Buffer( JSON.stringify( data ) );
        } ) )
        .pipe( extend( 'gps.json', true, '    ' ) )
        .pipe( gulp.dest( './' ) );
} );

 

あとは、gulp exifとか実行すればgps.jsonというファイルが生成されて、そのファイルの中に以下のように記述されているはず。

{
    "photo.jpg": {
        "lat": 33.48511388888889,
        "lng": 135.791175,
        "alt": 17.526427061310784
    },

    ...
}

 

 

参考:

https://github.com/omichelsen/exif-gps-to-json-example