Laravel google api 反向地址查找
註冊以及啟用 Geocoding API
先到 GCP 註冊,前三個月免費,然後申請 api
創建金鑰
點選 API 和服務->點選憑證->建立憑證->API 金鑰
這樣子就建立成功囉
點選限制金鑰,可以將它選擇只用來使用 Geocoding API
啟用服務
到Geocoding API點擊啟用
撰寫程式碼
env
修改.env
檔案,加上以下程式碼
GOOGLE_API=YOUR_API_KEY
利用經緯度取得地址
Geocoding API
有以下參數可選
- language — 返回結果的語言
- location_type — 一種或多種位置類型的過濾器
- result_type — 一種或多種地址類型的過濾器
必填參數為
- latlng — 填入 經度,緯度 中間不能有空格
- key — 你的 google api key
以下範例result_type
選用street_address
表示返回準確的街道地址。
接下來我們使用 Guzzle HTTP client對GOOGLE API
發出請求,而Illuminate\Http\Client\Response
類實現了 PHPArrayAccess
接口,所以可以直接訪問 JSON
響應數據。
use Illuminate\Support\Facades\Http;
public function get_address($lat, $lng) { try { $language = 'zh-TW'; $result_type = 'street_address'; $api_key = env("GOOGLE_API"); $url = "https://maps.googleapis.com/maps/api/geocode/json"; $response = Http::get($url, [ 'latlng' => "$lat,$lng", 'key' => $api_key, 'language' => $language, 'result_type' => $result_type, ]); if ($response->ok()) { $contents = $response->json(); if ($contents['status'] == 'OK') { $data['name'] = $contents['results'][0]['formatted_address']; return $data; } else { return false; } } else { return false; } } catch (\Throwable $th) { report($th); return $url; } }
|
Response
以台南火車站經緯度為例返回資料
{ "plus_code": { "compound_code": "X6W7+R5Q 台灣台南市東區", "global_code": "7QJ2X6W7+R5Q" }, "results": [ { "address_components": [ { "long_name": "4", "short_name": "4", "types": ["street_number"] }, { "long_name": "北門路二段", "short_name": "北門路二段", "types": ["route"] }, { "long_name": "成大里", "short_name": "成大里", "types": ["administrative_area_level_4", "political"] }, { "long_name": "東區", "short_name": "東區", "types": ["administrative_area_level_3", "political"] }, { "long_name": "台南市", "short_name": "台南市", "types": ["administrative_area_level_1", "political"] }, { "long_name": "台灣", "short_name": "TW", "types": ["country", "political"] }, { "long_name": "701", "short_name": "701", "types": ["postal_code"] } ], "formatted_address": "701台灣台南市東區北門路二段4號", "geometry": { "location": { "lat": 22.9971305, "lng": 120.2129885 }, "location_type": "ROOFTOP", "viewport": { "northeast": { "lat": 22.9984794802915, "lng": 120.2143374802915 }, "southwest": { "lat": 22.99578151970849, "lng": 120.2116395197085 } } }, "place_id": "ChIJs1S-8Ix2bjQRAJqtZowd7UQ", "plus_code": { "compound_code": "X6W7+V5 台灣台南市東區", "global_code": "7QJ2X6W7+V5" }, "types": ["street_address"] } ], "status": "OK" }
|
Laravel Geocoding api 反向地址查找