前言
每年都會到日本玩的人越來越多,自駕的也不在少數。但如果有自駕過的人就會知道,因為語言不同,在輸入導航時常常要查很久,甚至有時候連輸入都不會。還好日本導航系統很完整,除了可以輸入電話之外,也可以使用日本獨有地圖資料系統 MapCode (マップコード)。
MapCode 透過將地圖不斷細分劃格的方式,藉此標示出地點的詳細位置資訊,共由 9 ~ 10 個數字所組成。可以在導航前,事先在家裡在官網上輸入地址,查好景點的 Mapcode 。但是有用過的就會發現,日本的地址不太會打,外加輸入繁體字常常會搜尋不到,所以本文章使用大家熟悉的 google map 來做轉換。透過 google api 把地址轉換成經緯度,再利用爬蟲將經緯度轉換成 mapcode 。
功能說明
TransLatLng
將查詢的地址轉換成經緯度,解碼器由 google 提供,如需大量使用請改使用Google Maps API,預設地址為東京
1 2 3 4 5 6 7 8
| def TransLatLng(self, query='東京'): self.LocationParams = {'address': query} r = requests.get(self.LocationURL, params = self.LocationParams) responseJson = json.loads(r.text) lat = responseJson.get('results')[0]['geometry']['location']['lat'] lng = responseJson.get('results')[0]['geometry']['location']['lng'] address = responseJson.get('results')[0]['formatted_address'] return [lat, lng, address]
|
範例
1 2 3 4
| import mapcode
example = mapcode.Mapcode() print (example.TransLatLng('福岡塔'))
|
輸出
1 2
| [33.5932642, 130.3515144, '2 Chome-3-26 Momochihama, Sawara Ward, Fukuoka, Fukuoka Prefecture 814-0001, Japan']
|
TransMapcode
將經緯度轉換成 mapcode
1 2 3 4 5 6
| def TransMapcode(self, lat, lon): self.MapcodeParams = {'address': '', 'lat': lat, 'lon' : lon, 'scl' : 16, 'layer' : ''} r = requests.get(self.MapcodeURL, params = self.MapcodeParams) soup = BeautifulSoup(r.text, "html.parser") mapcode = soup.find('input', attrs={'id':'find', 'name':'find', 'type':'text'})['value'] return mapcode
|
範例
1 2 3 4
| import mapcode
example = mapcode.Mapcode() print (example.TransMapcode(33.5932642, 130.3515144))
|
輸出
完整程式碼
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| import requests from bs4 import BeautifulSoup import json import sys
class Mapcode: def __init__(self): self.LocationParams = {'address': '東京'} self.LocationURL = 'http://maps.googleapis.com/maps/api/geocode/json' self.NameURL = 'https://www.mapion.co.jp/m2/' self.MapcodeParams = {'address': '東京都文京区関口1丁目', 'lat': '35.7090259', 'lon' : '139.7319925', 'scl' : 16, 'layer' : ''} self.MapcodeURL = 'https://www.mapion.co.jp/f/mmail/send_mobile/SendMobile_map.html'
def TransLatLng(self, query='東京'): self.LocationParams = {'address': query} r = requests.get(self.LocationURL, params = self.LocationParams) responseJson = json.loads(r.text) lat = responseJson.get('results')[0]['geometry']['location']['lat'] lng = responseJson.get('results')[0]['geometry']['location']['lng'] address = responseJson.get('results')[0]['formatted_address']
return [lat, lng, address]
def TransMapcode(self, lat, lon): self.MapcodeParams = {'address': '', 'lat': lat, 'lon' : lon, 'scl' : 16, 'layer' : ''} r = requests.get(self.MapcodeURL, params = self.MapcodeParams) soup = BeautifulSoup(r.text, "html.parser") mapcode = soup.find('input', attrs={'id':'find', 'name':'find', 'type':'text'})['value'] return mapcode
|