vocus logo

方格子 vocus

學習筆記-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
a86774546的沙龍
1會員
1內容數
你可能也想看
Thumbnail
如果你也是那種在職場上追求極致效率,對生活品質有堅持,且渴望一段成熟、穩定、不拖泥帶水關係的專業人士,那麼 Ping! 會是你目前市面上最值得嘗試的選擇。 成熟的大人,不需要在低效的社交中消磨熱情。讓 Ping!,為你的情感生活進行「降噪」,把精力和時間,留給那個真正能與你靈魂共鳴、頻率一致的人。
Thumbnail
如果你也是那種在職場上追求極致效率,對生活品質有堅持,且渴望一段成熟、穩定、不拖泥帶水關係的專業人士,那麼 Ping! 會是你目前市面上最值得嘗試的選擇。 成熟的大人,不需要在低效的社交中消磨熱情。讓 Ping!,為你的情感生活進行「降噪」,把精力和時間,留給那個真正能與你靈魂共鳴、頻率一致的人。
Thumbnail
厭倦只看外貌的交友方式嗎?Ping!主打真實、安全的深度交友體驗,透過真人驗證與多樣化的個人化問答,幫助使用者在認識彼此之前,先理解價值觀、關係期待與交友目標。即使是慢熟的 I 人,也能透過提問找到適合的人選,避免聊到一半才發現方向不同。適合想被理解、重視心理連結與安心互動的你。
Thumbnail
厭倦只看外貌的交友方式嗎?Ping!主打真實、安全的深度交友體驗,透過真人驗證與多樣化的個人化問答,幫助使用者在認識彼此之前,先理解價值觀、關係期待與交友目標。即使是慢熟的 I 人,也能透過提問找到適合的人選,避免聊到一半才發現方向不同。適合想被理解、重視心理連結與安心互動的你。
Thumbnail
Ping!主打真人驗證機制,透過AI人臉比對確保用戶真實性,讓人放心。獨特的照片主題功能、個性化標籤和趣味文字問答,讓用戶更深入展現自我,為開啟話題提供契機,甚至有機會找到擁有相似冷門興趣的同好。Ping!注重高品質的交友關係,透過共同點建立雙方的連結,為現代人提供一個舒適、真實且有意義的交友環境。
Thumbnail
Ping!主打真人驗證機制,透過AI人臉比對確保用戶真實性,讓人放心。獨特的照片主題功能、個性化標籤和趣味文字問答,讓用戶更深入展現自我,為開啟話題提供契機,甚至有機會找到擁有相似冷門興趣的同好。Ping!注重高品質的交友關係,透過共同點建立雙方的連結,為現代人提供一個舒適、真實且有意義的交友環境。
Thumbnail
也許不是我不適合交友,而是我適合的節奏,本來就比較慢。 比起快速認識很多人,我更在意人與人怎麼相遇,才不會那麼累。當對話可以慢慢發生,當我們從想法開始靠近彼此,那種剛剛好的距離,反而讓人更願意走近。
Thumbnail
也許不是我不適合交友,而是我適合的節奏,本來就比較慢。 比起快速認識很多人,我更在意人與人怎麼相遇,才不會那麼累。當對話可以慢慢發生,當我們從想法開始靠近彼此,那種剛剛好的距離,反而讓人更願意走近。
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 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