本文將總結(jié)Google Map API使用中最簡(jiǎn)單也是最常用的一些操作以及相關(guān)的概念。如果你需要更加詳細(xì)的信息,那么最好直接詳細(xì)地閱讀Google提供的關(guān)于Map的文檔.
在頁(yè)面中引入Google Map 服務(wù)
在使用Google Map服務(wù)之前,我們必須在我們的頁(yè)面中引入響應(yīng)的腳本,在頁(yè)面中插入:
1 2 3 |
|
其中sensor
參數(shù)用于指明此應(yīng)用程序是否使用傳感器確定用戶(hù)的位置。
異步加載Google Map API
我們也可以在需要使用Google Map服務(wù)的時(shí)候動(dòng)態(tài)地添加資源,并指定回調(diào)函數(shù):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
注意其中使用callback
參數(shù)指定了回調(diào)函數(shù)名,其原理同JSONP
初始化Google Map對(duì)象
所有需要在頁(yè)面中顯示地圖視圖的行為都必須以初始化一個(gè)Map對(duì)象為起點(diǎn)。每個(gè)Map
對(duì)象的顯示都需要指定一個(gè)頁(yè)面中的dom結(jié)構(gòu)作為容器,并給定一定的配置,如下面的代碼所示:
1 2 3 4 5 6 7 |
|
其中,map對(duì)象將id為map_canvas(主要,dom容器只要是一般的div等容器就可以)作為容器,并指定了初始化配置信息。上例中的配置信息包括:
- zoom: 地圖的縮放級(jí)別
- center: 地圖中心位置
- mapTypeId: 用戶(hù)指定地圖顯示類(lèi)別
位置對(duì)象LatLng
在Google Map API使用中,我們經(jīng)常需要對(duì)經(jīng)緯度坐標(biāo)進(jìn)行操作,而所有的操作都會(huì)被封裝成LatLng對(duì)象,其構(gòu)造方法為:
1
|
|
地圖顯示常用操作
有了Map
對(duì)象后,我們可以通過(guò)調(diào)用其方法對(duì)地圖的顯示做調(diào)整,下面介紹常用的幾個(gè)方法:
- setCenter(LatLng) 設(shè)置地圖顯示中心的位置
- setZoom(Number) 設(shè)置地圖的縮放級(jí)別
- fitBounds(LatLngBounds) 使得地圖顯示適應(yīng)指定的包圍盒…(翻譯的不好,就是使得一個(gè)指定的矩形區(qū)域能在地圖中顯示出來(lái))
其中fitBounds
方法在我們需要在地圖上顯示多個(gè)結(jié)果的時(shí)候非常有用。使用方法也非常簡(jiǎn)單。
假設(shè)我們現(xiàn)在有這么寫(xiě)個(gè)坐標(biāo)位置:
1 2 3 4 5 6 7 |
|
那么我們只須先構(gòu)造一個(gè)空的Bounds對(duì)象,然后將這些坐標(biāo)一一添加進(jìn)這個(gè)Bounds就能得到一個(gè)同時(shí)包含這里所有點(diǎn)的Bounds了:
1 2 3 4 5 6 7 8 9 10 |
|
其中extend的作用就是擴(kuò)展Bounds以使得給定的坐標(biāo)位置被包含進(jìn)去。
向地圖中添加圖標(biāo)
本快內(nèi)容主要分為兩塊,添加標(biāo)記Marker和添加信息窗口infoWindow,
添加標(biāo)記
每個(gè)標(biāo)記都是一個(gè)google.maps.Marker
對(duì)象,在實(shí)例化時(shí)需要給定一定的配置信息,如標(biāo)記的位置。下面的例子中直接在配置信息中制定了顯示的Map
對(duì)象。我們也可以通過(guò)Marker對(duì)象的setMap
方法來(lái)制定顯示在那個(gè)map實(shí)例中。要隱藏標(biāo)記時(shí),只需設(shè)置setMap(null)
便可:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
添加信息窗口
每個(gè)信息窗口都是一個(gè)google.maps.InfoWindow
對(duì)象,在實(shí)例化時(shí)需要給定一定的配置信息,如窗口中的內(nèi)容,標(biāo)記的位置。
其中需要說(shuō)明的是,配置信息中的content
即可以是html字符串,也可以是一個(gè)dom節(jié)點(diǎn)。要讓一個(gè)信息窗口顯示出來(lái),我們可以調(diào)用它的open方法,并制定顯示在那個(gè)Map實(shí)例對(duì)象中。注意,如果在信息窗口構(gòu)造時(shí)的配置中已經(jīng)制定了位置(通過(guò)position字段),那么直接使用infoWindow.open( map )
,就可以顯示在地圖的制定位置上。當(dāng)然,我們也可以將信息窗口的顯示綁定在已經(jīng)在地圖中的標(biāo)記對(duì)象中,只需在open的第二個(gè)參數(shù)中制定標(biāo)記對(duì)象即可infoWindow.open( map, marker )
,如下面代碼中所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
|
事件綁定
使用google.maps.event.addListener()方法來(lái)進(jìn)行事件的監(jiān)聽(tīng)。該方法接受三個(gè)參數(shù):一個(gè)對(duì)象,一個(gè)待偵聽(tīng)事件以及一個(gè)在指定事件發(fā)生時(shí)調(diào)用的函數(shù)。
舉幾個(gè)例子,更加詳細(xì)的介紹參考文檔。
監(jiān)聽(tīng)地圖的縮放:
1 2 3 |
|
標(biāo)記的點(diǎn)擊:
1 2 3 |
|
監(jiān)聽(tīng)dom事件:
1
|
|
另外關(guān)于事件需要補(bǔ)充的一點(diǎn)是,當(dāng)我們初始化map的時(shí)候,其div為不顯示的,之后通過(guò)某種邏輯過(guò)程顯示出來(lái)時(shí),其地圖在容器中的顯示會(huì)出現(xiàn)不完整的情況,這時(shí)候我們需要告訴組件去重新設(shè)置顯示區(qū)域的大小:
Developers should trigger this event on the map when the div changes size: google.maps.event.trigger(map, ‘resize’)
地址解析
Google Map API 本身已經(jīng)提供了非常方便的地址解析與反地址解析的方法,使用方法非常簡(jiǎn)單:
實(shí)例化一個(gè)google.maps.Geocoder
對(duì)象,調(diào)用Geocoder.geocode()
方法,在其回到中獲取結(jié)果:
1 2 3 4 5 6 7 8 |
|
此處介紹一些第一個(gè)參數(shù)中最重要的兩個(gè)字段,根據(jù)不同的搜索需求,我們每次只需要給定其中一個(gè)參數(shù)即可:
- address (required*) — 你需要解析的地址
- latLng (required*) — 你需要解析的LatLng對(duì)象
兩種方式的結(jié)果返回值格式都一致,具體格式可以看文檔