Google Mapsの短縮URLから緯度経度を取得する際の備忘録
概要
以下のようなGoogle Mapsの短縮URLから緯度経度を取得する機会がありました。
https://goo.gl/maps/aPxUgDJ9KP2FLFkN7
この時、2つの緯度経度が取得できたので、その備忘録です。
抽出方法
GPT-4から以下の回答が得られました。
--- 以下、回答 ---
Google Mapsの短縮URL (goo.gl/maps/...
) から直接緯度経度を抽出することはできません。しかし、この短縮URLを展開して元のURLを取得することで、そのURLから緯度経度を抽出することができます。
以下の手順で緯度経度を取得することができます:
- 短縮URLを展開します。
- 展開されたURLから緯度経度を抽出します。
以下はPythonでこれを実現する一例です:
import requests
import re
def get_lat_lon_from_google_url(short_url):
# 短縮URLを展開
response = requests.get(short_url, allow_redirects=False)
if response.status_code != 302:
return None
long_url = response.headers['location']
# 展開されたURLから緯度経度を抽出
match = re.search(r'@([\-0-9.]+),([\-0-9.]+)', long_url)
if match:
lat, lon = match.groups()
return float(lat), float(lon)
else:
return None
url = "https://goo.gl/maps/aPxUgDJ9KP2FLFkN7"
lat_lon = get_lat_lon_from_google_url(url)
print(lat_lon)
このコードは、短縮URLを展開して緯度経度を抽出するための基本的なものです。しかし、実際の使用環境や目的に応じて、エラーハンドリングや例外処理を追加することが推奨されます。
--- 回答、ここまで ---
上記により、以下のURLに含まれる緯度経度(ここでは、28.3410487,129.9769402
)を取得できました。
しかし、この座標を指定すると、以下の場所が指定され、求めている座標からずれているようでした。
修正
以下のURLを確認すると、末尾にも!3d28.3439714!4d129.9838012
という座標が見られました。
そこで、先ほどプログラムについて、prefixとdelimiterを指定できるように修正しました。
import requests
import re
def get_lat_lon_from_google_url(short_url, prefix= "@", delimiter = ","):
# 短縮URLを展開
response = requests.get(short_url, allow_redirects=False)
if response.status_code != 302:
return None
long_url = response.headers['location']
print(long_url)
# 展開されたURLから緯度経度を抽出
pattern = r'{prefix}([\-0-9.]+){delimiter}([\-0-9.]+)'.format(prefix=re.escape(prefix), delimiter=re.escape(delimiter))
match = re.search(pattern, long_url)
if match:
lat, lon = match.groups()
return float(lat), float(lon)
else:
return None
url = "https://goo.gl/maps/aPxUgDJ9KP2FLFkN7"
lat_lon = get_lat_lon_from_google_url(url, prefix="!3d", delimiter="!4d")
print(lat_lon)
結果、28.3439714,129.9838012
が取得できました。この座標を使用してみたところ、以下のように、より目的に近い座標にピンが立ちました。
まとめ
答えが一つに決まるものではありませんが、Google Mapsの短縮URLから緯度経度を取得するにあたり、参考になりましたら幸いです。
Discussion