學習筆記-1 使用Google Maps API在網頁上顯示地圖與搜尋店家名稱

更新於 發佈於 閱讀時間約 11 分鐘

本篇是一個初學轉職工程師撰寫的,內容都是以原生JS無使用框架的方式達到想要達成的目標,如有刺眼之處還請多見諒

由於參與的專案需要使用到地點以及撈取店家資訊,所以使用了Google Maps api地圖資料來處理。

首先,先至Google Cloud Platform(GCP)申請 api key

google提供各式各樣的 api給客戶使用,只要有了這組金鑰就可以使用他們家的api服務,但要注意的是google api不是免費提供的,每個月有200美金的免費額度,後續用完的計價方式可以去GCP上看相關的說明。

有了這組金鑰之後就可以去js上引用了

    <script>    (g => {      var h, a, k, p = "The Google Maps JavaScript API",
        c = "google",        l = "importLibrary",        q = "__ib__",       
m = document,        b = window;      b = b[c] || (b[c] = {});     
var d = b.maps || (b.maps = {}),        r = new Set,       
e = new URLSearchParams,       
u = () => h || (h = new Promise(async (f, n) => {         
await (a = m.createElement("script"));         
e.set("libraries", [...r] + "");         
for (k in g) e.set(k.replace(/[A-Z]/g, t => "_" + t[0].toLowerCase()), g[k]); 
        e.set("callback", c + ".maps." + q);         
a.src = `https://maps.${c}apis.com/maps/api/js?` + e;          d[q] = f; 
        a.onerror = () => h = n(Error(p + " could not load."));         
a.nonce = m.querySelector("script[nonce]")?.nonce || "";       
  m.head.append(a)        }));     
d[l] ? console.warn(p + " only loads once. Ignoring:", g) : d[l] = (f, ...n)
=> r.add(f) && u().then(() => d[l](f, ...n))    })    ({     
key: "YOUR_KEY",      v: "weekly"    }); 
</script>

在YOUR_KEY上填入你申請的金鑰 就可以引入GOOGLEMAP API的內容了。

接下來來做初始化地圖

<div class="container">      
<div id="map"></div>     
</div>
let map;      
let center;
async function initMap() {       
const { Map } = await google.maps.importLibrary("maps");
  center = {         
lat: 25.0374865,         
lng: 121.5647688,       
};       
map = new Map(document.getElementById("map"), {         
center: center,         
zoom: 14,         
mapId: "4504f8b37365c3d0",       
});     
}

initMap();

這個部分就可以把一張沒有任何標記點的地圖呈現在網頁上

center可以改成你想要搜索以及初始化頁面的位置

zoom的數字可以填入1-20 數字愈大,地圖愈細:1是世界地圖,20就會到街道

raw-image

接下來就可以使用input來搜尋想搜尋的店家名稱

<form action="" method="get">          
<input type="text" name="search" />         
<button>送出</button>       
</form>
let input = document.querySelector("input[name=search]");
let search = document.querySelector("form");

因為搜尋會是使用剛剛初始化過的地圖作呈現,所以這邊的話會在剛剛初始化地圖的function內加入

search.addEventListener("submit", (e) => {          
e.preventDefault();         
findPlaces();       
});

之後開始處理findPlaces()搜尋的部分

let markers = [];
async function findPlaces() {       
const { Place } = await google.maps.importLibrary("places");       
const { AdvancedMarkerElement } = await google.maps.importLibrary(         
"marker"        );
markers.forEach((marker) => marker.setMap(null));       
markers = [];       
const request = {         
textQuery: `${input.value}`,         
fields: [           
"displayName",           
"location",           
"formattedAddress",           
"businessStatus",         
],         
locationBias: {            //可以自行設定想要搜尋的中心點,沒有特定點的話這句刪掉就會是該台裝置目前的定位位置           
center: {             
lat: center.lat,             
lng: center.lng,           
},           
radius: 500,         // 預計搜尋的範圍 最大50000(公尺)         
},         
isOpenNow: true,         
language: "zh-tw",         
maxResultCount: 10,    
//預計搜尋的店家數量  至多20         
minRating: 0,          
//預計搜尋的評價星數         
region: "tw",         
useStrictTypeFiltering: true,       
};       
const { places } = await Place.searchByText(request);
if (places.length) {         
console.log(places);
const { LatLngBounds } = await google.maps.importLibrary("core");         
const bounds = new LatLngBounds();
places.forEach((place) => {           
const markerView = new AdvancedMarkerElement({             
map,             
position:
place.location,             
title: place.displayName,           
});           
markers.push(markerView);           
bounds.extend(place.location);         
});map.setCenter(bounds.getCenter());       
} else {         
alert("No results");         
console.log("No results");       
}       
input.value = "";      }


raw-image


以上code所呈現的會如上圖所示,接著在搜尋地點內打想要查閱的地點關鍵字,地圖就會以你所設定的中心點向外搜尋

raw-image

如果想要更精確的搜尋,可以在request內輸入"includedTypes",以便增加搜尋條件,想知道實際有甚麼type可以使用可以上google map api的說明文件上搜尋

留言
avatar-img
留言分享你的想法!
avatar-img
a86774546的沙龍
1會員
1內容數
你可能也想看
Thumbnail
TOMICA第一波推出吉伊卡哇聯名小車車的時候馬上就被搶購一空,一直很扼腕當時沒有趕緊入手。前陣子閒來無事逛蝦皮,突然發現幾家商場都又開始重新上架,價格也都回到正常水準,估計是官方又再補了一批貨,想都沒想就立刻下單! 同文也跟大家分享近期蝦皮購物紀錄、好用推薦、蝦皮分潤計畫的聯盟行銷!
Thumbnail
TOMICA第一波推出吉伊卡哇聯名小車車的時候馬上就被搶購一空,一直很扼腕當時沒有趕緊入手。前陣子閒來無事逛蝦皮,突然發現幾家商場都又開始重新上架,價格也都回到正常水準,估計是官方又再補了一批貨,想都沒想就立刻下單! 同文也跟大家分享近期蝦皮購物紀錄、好用推薦、蝦皮分潤計畫的聯盟行銷!
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
你有幾個 Google 帳號?Google 提供許多免費的應用程式,包括大家最常使用的地圖、YouTube、 email、日曆、Meet、Gemini、雲端硬碟、翻譯、文件、Google表單…等,如果你還沒有申請過 Google 帳號,請 抽空到此申請,免費體驗各種功能豐富的應用程式。 下圖右邊都
Thumbnail
你有幾個 Google 帳號?Google 提供許多免費的應用程式,包括大家最常使用的地圖、YouTube、 email、日曆、Meet、Gemini、雲端硬碟、翻譯、文件、Google表單…等,如果你還沒有申請過 Google 帳號,請 抽空到此申請,免費體驗各種功能豐富的應用程式。 下圖右邊都
Thumbnail
你最近有特別有興趣的產業嗎,有興趣的股票嗎?你是每天去刷網頁嗎? 這裡有個方法可以幫你收集相關的網路新聞,固定送到你的信箱。 這個方法就是Google帳號的功能,快訊。 一、        首先你要有一個Google account及Gmail 然後是login in的狀態! 二、     
Thumbnail
你最近有特別有興趣的產業嗎,有興趣的股票嗎?你是每天去刷網頁嗎? 這裡有個方法可以幫你收集相關的網路新聞,固定送到你的信箱。 這個方法就是Google帳號的功能,快訊。 一、        首先你要有一個Google account及Gmail 然後是login in的狀態! 二、     
Thumbnail
這是一篇介紹如何使用Google Maps API在網頁上呈現地圖,並進行店家名稱的搜尋的文章。內容包含如何申請Google Cloud Platform的API金鑰、初始化地圖、設定搜尋功能等步驟。文章中提供了部分程式碼範例,並附上圖片說明操作過程。
Thumbnail
這是一篇介紹如何使用Google Maps API在網頁上呈現地圖,並進行店家名稱的搜尋的文章。內容包含如何申請Google Cloud Platform的API金鑰、初始化地圖、設定搜尋功能等步驟。文章中提供了部分程式碼範例,並附上圖片說明操作過程。
Thumbnail
手機版進入Google表單有三步驟 第一是進入Google瀏覽器, 第二是在瀏覽器上搜尋框,輸入Google表單, 找到,Google表單登錄,的網頁,點按進入即可 接下來就會出現目前的畫面,我們只要點選,前往表單,就可進入正式編輯的頁面了 首次進入表單編輯頁面,我們必須要為表單,訂定一個
Thumbnail
手機版進入Google表單有三步驟 第一是進入Google瀏覽器, 第二是在瀏覽器上搜尋框,輸入Google表單, 找到,Google表單登錄,的網頁,點按進入即可 接下來就會出現目前的畫面,我們只要點選,前往表單,就可進入正式編輯的頁面了 首次進入表單編輯頁面,我們必須要為表單,訂定一個
Thumbnail
Google Cloud Arcade 是一個免費、以遊戲來學習 Google Cloud 的平台,在這裡您可以透過實作的Labs 來解決主題任務和每週任務,每個月的主題任務和每週任務都會更新,充實掌握雲端技能。
Thumbnail
Google Cloud Arcade 是一個免費、以遊戲來學習 Google Cloud 的平台,在這裡您可以透過實作的Labs 來解決主題任務和每週任務,每個月的主題任務和每週任務都會更新,充實掌握雲端技能。
Thumbnail
Google 提供了免費的雲端服務 Google Apps Script (GAS) ,我們可以撰寫一些簡易的程式APP,串接其他 Google 雲端服務 如 Google Docs ,Sheets …,就能夠幫助我們利用雲端硬碟做日常工作
Thumbnail
Google 提供了免費的雲端服務 Google Apps Script (GAS) ,我們可以撰寫一些簡易的程式APP,串接其他 Google 雲端服務 如 Google Docs ,Sheets …,就能夠幫助我們利用雲端硬碟做日常工作
Thumbnail
您有開店嗎? 如果有,本篇文章會一口氣讓您了解什麼是Google地圖廣告? 讓你了解Google廣告到底能幫助您什麼? Google地圖廣告又是如何成為店家們一定要有的武器!
Thumbnail
您有開店嗎? 如果有,本篇文章會一口氣讓您了解什麼是Google地圖廣告? 讓你了解Google廣告到底能幫助您什麼? Google地圖廣告又是如何成為店家們一定要有的武器!
Thumbnail
這篇文章記錄了如何在網頁中使用<iframe>或套件vue3-google-map來實現Google Map呈現,並在上面設置圖釘。兩種方法的優缺點也有相關的說明。想要在網頁上加入Google Map及設置圖釘的讀者可以參考這篇文章。
Thumbnail
這篇文章記錄了如何在網頁中使用<iframe>或套件vue3-google-map來實現Google Map呈現,並在上面設置圖釘。兩種方法的優缺點也有相關的說明。想要在網頁上加入Google Map及設置圖釘的讀者可以參考這篇文章。
Thumbnail
先前幾篇筆記介紹了網路請求,瀏覽器儲存資料的方式,那麼實務上,前端最常需要發送網路請求的時候,就是透過呼叫 API,去向後端工程師發送/請求資料,所以今天來記錄什麼是 API吧!
Thumbnail
先前幾篇筆記介紹了網路請求,瀏覽器儲存資料的方式,那麼實務上,前端最常需要發送網路請求的時候,就是透過呼叫 API,去向後端工程師發送/請求資料,所以今天來記錄什麼是 API吧!
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News