Google Maps API - 使用地圖與基本設定
有別於 Embed API,如果要開始使用 Google Map 的功能,就必須透過 JavaScript API 才能實現,這篇將會記錄相關的用法以及做些範例展示。
Google Maps JavaScript API
要使用 JavaScript API 得先到 Google API Console 裡啟用。
![]()
雖然和 Embed API 類似,但 JavaScript API 不能免費無限次數使用,免費的版本一天有 25,000 次的使用限制,超過之後當天就無法使用,所以必須善用金鑰的保護限制,避免金鑰外流。
收費規範參考:Google Maps JavaScript API 使用限制。
![]()
載入地圖
載入地圖的方法一開始在 html 裡放入一個 div 作為地圖區域,並指定一個 id。
<div id="map"></div>
設定這個 div 的寬高,以下方的例子來說,設定為滿版的地圖。
html, body {
height: 100%;
width: 100%;
margin: 0;
padding: 0;
}
#map {
height: 100%;
width: 100%;
}
JavaScript 的部分透new google.maps.Map將地圖載入指定的 div 內,地圖包含兩個必要的屬性:center 中心點經緯度、zoom 縮放層級,以下方的例子來說,網頁打開就會看到一個滿版的地圖,中心點位在紐約自由女神像。
範例:demo01.html
<script>
var map;
function initMap() {
map = new google.maps.Map(document.getElementById('map'), {
center: {lat: 40.689104, lng: -74.044599},
zoom: 16
});
}
</script>
<script src="https://maps.googleapis.com/maps/api/js?key=你的金鑰&callback=initMap"
async defer></script>
![]()
MapOptions 必要屬性
在上面的 JavaScript 裡,使用了new google.maps.Map將地圖載入,這段可以直接看 Google 參考文件中的 Map class,當中包含兩個參數,第一個是指定的地圖 div 區塊,第二個則是地圖設定,使用時會 new 一個地圖物件,針對當中的 Map 屬性去做修改設定。
參考:Map class
new google.maps.Map(mapDiv:Element, opts?:MapOptions)
當中比較重要的是地圖的 MapOptions,MapOptions 的必要屬性有兩個:
| 屬性名稱 | 說明 |
|---|---|
| center | 中心點經緯度,center 是一個物件,物件內分別有 lat ( 緯度 ) 與 lng ( 經度 ) 兩個屬性。 |
| zoom | 預設縮放大小,zoom 的數值可從 0 到 21,也可以透過其他設定屬性,指定最小與最大值。 |
MapOptions 控制項
控制項屬性不是必要屬性,主要讓我們能在地圖的四周添加對應的控制元件 UI,例如放大縮小、旋轉、全螢幕、街景切換...等,控制項都是用 true 和 false 作切換,true 會顯示,false 則不會顯示控制項有下列這幾個:
| 控制項名稱 | 說明 |
|---|---|
| mapTypeControl | 預設 true,地圖與衛星類型。 |
| fullscreenControl | 預設 false,全螢幕地圖。 |
| rotateControl | 預設 false,旋轉 45 度地圖,必須放大到一定程度才會出現,若不支援 45 度的地圖則不顯示。 |
| scaleControl | 預設 false,比例尺。 |
| streetViewControl | 預設 true,地圖與街景切換。 |
| zoomControl | 預設 true,放大縮小地圖。 |
這些控制項也有另外的屬性可以進行 UI 位置與樣式的設定,位置設定內容可以參考 控制項定位,樣式可以參考 控制項選項,這些設定的分別是:
| 控制項名稱 | 說明 |
|---|---|
| mapTypeControlOptions | 地圖與衛星類型 UI,位置預設左上方 |
| fullscreenControlOptions | 全螢幕地圖 UI,位置預設右上方 |
| rotateControlOptions | 旋轉 45 度地圖 UI,位置預設右下方 |
| scaleControlOptions | 比例尺 UI,位置預設右下方 |
| streetViewControlOptions | 地圖與街景切換 UI,位置預設右下方 |
| zoomControlOptions | 放大縮小地圖 UI,位置預設右下方 |
以下面的例子來說,打開地圖後,切換為衛星檢視,放大到一定程度可以看到一個 45 度角的自由女神衛星地圖,而中間正上方是地圖與衛星圖的切換,右邊中間為旋轉的按鈕,右下方是放大縮小按鈕,右上方為全螢幕按鈕,左上方是街景圖按鈕,左下方則是比例尺。
範例:demo02.html
var map;
function initMap() {
map = new google.maps.Map(document.getElementById('map'), {
center: {lat: 40.689104, lng: -74.044599},
zoom: 16,
mapTypeControl:true,
fullscreenControl:true,
rotateControl:true,
scaleControl:true,
streetViewControl:true,
zoomControl:true,
mapTypeControlOptions:{position:google.maps.ControlPosition.TOP_CENTER},
fullscreenControlOptions:{position:google.maps.ControlPosition.TOP_RIGHT},
rotateControlOptions:{position:google.maps.ControlPosition.RIGHT_CENTER},
scaleControlOptions:{position:google.maps.ControlPosition.RIGHT_BOTTOM},
streetViewControlOptions:{position:google.maps.ControlPosition.TOP_LEFT},
zoomControlOptions:{position:google.maps.ControlPosition.RIGHT_BOTTOM}
});
}
![]()
MapOptions 其他屬性
| 控制項名稱 | 說明 |
|---|---|
| clickableIcons | ( true/false ) 地點標記能否點擊,預設 true 當我們用滑鼠點擊地圖上的地點標記,會彈出資訊視窗說明。 |
| disableDefaultUI | ( enabled/disabled ) 顯示或隱藏預設 UI,預設 enabled 的 UI 會顯示相關控制項的 UI。 |
| disableDoubleClickZoom | ( enabled/disable ) 可否滑鼠點兩下放大地圖,預設 enabled 滑鼠連點兩下地圖會放大。 |
| scrollwheel | ( true/false ) 是否支援滑鼠滾輪,預設 true 可用滑鼠滾輪縮放地圖。 |
| draggable | ( true/false ) 可否拖曳移動地圖,預設 true 可以用滑鼠拖曳移動地圖。 |
| keyboardShortcuts | ( true/false ) 是否支援鍵盤熱鍵,預設 true 可以。 |
| tilt | ( 0/45 )指定衛星圖的顯示方式,數字 0 是 0 度 ( 正上方往下看 ),數字 45 則是 45 度地圖 ( 如果該地區地圖不支援 45 度則一律以 0 度顯示 )。 |
| heading | 若地圖支援 45 度地圖,可設定旋轉的方向 ( 每 90 度為一個單位 )。 |
| mapTypeId | 地圖類型,共有四種:hybrid、roadmap、satellite 和 terrain,hybrid 是地圖與衛星空照圖合在一起,roadmap 則是純粹地圖,satellite 是純粹衛星空照圖,terrain 則是地圖與地形圖合在一起 ( 參考 範例圖片 )。 |
| noClear | ( true/false ) 是否清除地圖 div,預設 false。 |
| styles | 陣列形式,表示這個地圖顯示出來的樣式。 |
| maxZoom | 地圖最大縮放尺寸。 |
| minZoom | 地圖最小縮放尺寸。 |
| backgroundColor | 地圖背景顏色,背景色表示地圖尚未載入之前的背景色,和 CSS 設定比較不一樣的地方,CSS 呈現的是 div 的背景色,而這個屬性是地圖在初始化時的背景色。 |
| draggableCursor | 在可拖曳的地圖下,滑鼠的游標圖案,設定方式和 CSS 相同。 |
| draggingCursor | 正在拖曳的地圖裡,滑鼠的游標圖案,設定方式和 CSS 相同。 |
舉例來說,將 mapTypeId 設定為 terrain,就可以得到一個帶有地形圖地圖了。
範例:demo03.html
![]()
小結
透過地圖本身的屬性設定,就已經可以做出一些和一般地圖不一樣的感覺,再來會慢慢修改地圖以及增加地圖上的元素,打造一個真正客製化的地圖喔~