Python

Python3で画像からGoogleマップに撮影位置を表示させる方法(Pillow)

Python3で画像からGoogleマップに撮影位置を表示させる方法(Pillow) Python
この記事は約6分で読めます。
piyo
piyo
今日の運勢

Python3でExifデータからGoogle マップ用の文字列を

Google マップで検索するためには、Exifの緯度と経度を10進法で表現する必要があります。

このコードを実行すると、output.txt ファイルに「Google マップのURLリンク」と「検索用の文字列」が書き込まれます。

使用素材

コチラの画像で作成していきます。

piyo
piyo

青山学院大学の前あたりだよー。毎週土日にやってる、ファーマーズマーケットだよ。

Pythonのバージョン

Python3.12.1のバージョンを使用しています。

Dockを立ち上げる

command+「スペースキー」で検索窓が出てくる>「ターミナル」と記入>

「自分のPC名〜%」の後ろに記入していきます。

(例)gotoaya@AGMacBook-Air ~ % ←ここの後ろに記入

Pillowをインストール

Pillowを入れた記憶のない方はコチラを記入してインストール

piyo
piyo

インストール済みの場合はとばしてください。

pip install Pillow

>Enter

Googleマップで場所を特定する

VSコードで書きました。

from PIL import Image
from PIL.ExifTags import TAGS, GPSTAGS
import re

def dms_to_decimal(deg, min, sec, ref):
    decimal = float(deg) + float(min) / 60 + float(sec) / 3600
    return decimal if ref in ['N', 'E'] else -decimal

# 画像ファイルを開く
im = Image.open('test.jpg')
# EXIF情報を得る
exif = im._getexif()

# 出力先のファイルを開く(新しく作成するか、既存のものを上書き)
with open('output.txt', 'w') as output_file:
    # GPS情報が存在する場合のみ処理
    if exif and 34853 in exif:
        gps_info = exif[34853]  # GPS情報のタグIDは34853
        latitude = gps_info.get(2)  # GPSLatitudeのタグIDは2
        longitude = gps_info.get(4)  # GPSLongitudeのタグIDは4
        if latitude and longitude:
            # 数値に変換
            lat_deg, lat_min, lat_sec = [float(val) for val in latitude]
            lon_deg, lon_min, lon_sec = [float(val) for val in longitude]
            lat_ref = gps_info.get(1, 'N')  # GPSLatitudeRefのタグIDは1
            lon_ref = gps_info.get(3, 'E')  # GPSLongitudeRefのタグIDは3

            # Google マップの検索用の文字列を作成
            search_query = f"{dms_to_decimal(lat_deg, lat_min, lat_sec, lat_ref)},{dms_to_decimal(lon_deg, lon_min, lon_sec, lon_ref)}"

            # 数値に変換してから文字列に変換し、f-stringを使用
            google_maps_link = f"https://www.google.com/maps/place/{lat_deg}°{lat_min}'{lat_sec:.2f}\"{lat_ref}+{lon_deg}°{lon_min}'{lon_sec:.2f}\"{lon_ref}"
            
            # 出力ファイルに書き込み
            output_file.write(f"Google Maps Link: {google_maps_link}\n")
            output_file.write(f"Google マップで検索するための文字列: {search_query}\n")
            print("Google Maps Linkと検索用文字列をoutput.txtに保存しました。")
        else:
            print("GPSLatitudeとGPSLongitudeが存在しないか、不正な値です。")
    else:
        print("GPS情報が存在しません。")

※画像データはtest.jpg、出力ファイルは、Output .txt。

Pythonの拡張子で保存

Pythonの拡張子(.py)で保存して画像と同じフォルダに入れる。

一つのフォルダに動画と.pyコードを格納

今回は「test11」という名前のフォルダに格納しました

Dockを立ち上げる

command+「スペースキー」で検索窓が出てくる>「ターミナル」と記入>

「自分のPC名〜%」の後ろに記入していきます。

(例)gotoaya@AGMacBook-Air ~ % ←ここの後ろに記入

読み込み場所を指定する

cd␣全部格納した、ディレクトリーを記入

cd ディレクトリーを記入

>Enter

piyo
piyo

cdの後ろにスペースを入れないとダメピヨ!

※フォルダーのディレクトリーが分からない時は、フォルダーをターミナルにドラックすると表示されるよ。

「Python ファイル名」を記入して「Enter」

Python␣読み込むファイル名

Python 読み込むファイル名

>Enter

フォルダにデータが格納されます

「output.txt」のフォルダが作成されました。

格納された「output.txt」の中はこのように書かれてます。

Google Mapsで検索

Google Maps Link: https://www.google.com/maps/place/35.0°39.0’42.56″N+139.0°42.0’30.31″E

でコチラのページに来ました

Google マップで検索するための文字列:
35.66182222222222,139.70841944444444

これをコピーしてGoogleマップに貼り付けることで、指定された位置を検索できます。

完成

コメント

タイトルとURLをコピーしました