はじめに
SNSにはたくさんの写真がアップロードされています。地図を使って可視化することが好きな僕は、アップロードされている写真の位置情報を使って地図に可視化できないかなと思いました。調べてみると位置情報の取得が簡単にできるサービスでFlickrというものがありました。今回はFlickrに投稿されている写真を使って、その写真の位置情報をもとに地図に可視化してみたいと思います。
Flickrの写真を使って写真の位置情報を可視化してみた
実現したいこと
今回はFlickrのAPIを扱うPythonライブラいを使って写真の情報を取得し、そのデータをLeafletをPythonで使えるようにしたPythonライブラリのfolium
を使って可視化していこうと思います。地図上に写真の位置情報をもとにピンをたて、ピンには実際のその写真が見えるようにします。
Flickrとは
Flickrとは、写真を共有することのできるサービスです。Instagramのようなサービスですね。今回はこのFlickrのAPIを使って写真の情報を取得しました。
Flickr APIの利用方法については、以下の記事を参考にしました。
実際のコード
Flickr APIを利用して写真の情報を取得方法については、以下の記事と公式ドキュメントを参考にしました。
# 必要なライブラリ
from flickrapi import FlickrAPI
import folium
import json
import pandas as pd
# Flickr APIを利用するための情報を記載
key = "XXXXXXXXXXXXXXXXXXX"
secret = "XXXXXXXXXXXXXXXXXX"
# Flickr APIを使って写真の情報を取得
# 今回は写真のタイトルに"fish"が関連しているものを500件を上限に取得
# 位置情報は、extrasでgeoを指定
flickr = FlickrAPI(key, secret, format='parsed-json')
result = flickr.photos.search(
text = 'fish',
per_page = 500,
media = 'photos',
sort = 'relevance',
safe_seach = 1,
extras = 'url_q, licence, geo'
)
photos = result['photos']['photo']
# 地図の中心を、写真に保存されている緯度経度の平均を出すため
lat_sum, lon_sum = 0,0
for photo in photos:
lat_sum += float(photo['latitude'])
lon_sum += float(photo['longitude'])
lat_mean = lat_sum / len(photos)
lon_mean = lon_sum / len(photos)
# 元となる地図を作成
map = folium.Map(location=[lat_mean, lon_mean], zoom_start=3)
# 写真に保存されている位置にピンをたて、そのピンに写真を載せる
for photo in photos:
folium.Marker(
location=[float(photo['latitude']), float(photo['longitude'])],
popup="<p>{}<br /><img src='{}'</p>".format(photo['title'],photo['url_q'])
).add_to(map)
# 地図を描画
map
結果
さいごに
今回はFlickrに投稿されている写真の位置情報をもとに地図に可視化してみました。写真の位置情報の利用は色々な使い道があると思うので、今度は他の使い方を検討してみたいと思います。