自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

詳解百度地圖API之地圖標(biāo)注

開(kāi)發(fā) 前端
本文將向大家介紹百度地圖API的標(biāo)注(Marker)的使用方法和一些實(shí)現(xiàn)細(xì)節(jié)。希望對(duì)大家有所幫助。

[[44116]]

本文將向大家介紹百度地圖API的標(biāo)注(Marker)的使用方法和一些實(shí)現(xiàn)細(xì)節(jié)。

  標(biāo)注概述

  標(biāo)注(Marker)是用來(lái)表示一個(gè)點(diǎn)位置的可見(jiàn)元素,每個(gè)標(biāo)注自身都包含地理信息。比如你在西單商場(chǎng)位置添加了一個(gè)標(biāo)注,不論地圖移動(dòng)、縮放,標(biāo)注都會(huì)跟隨一起移動(dòng),保證其始終指向正確的地理位置。

從上面的圖可以看出,不論地圖如何變化標(biāo)注始終指向“西單商場(chǎng)”的位置。

  如何知道某個(gè)點(diǎn)的坐標(biāo)?

  上例中我們?cè)谖鲉紊虉?chǎng)位置添加了一個(gè)標(biāo)注,那么我是如何知道它的坐標(biāo)點(diǎn)呢?可以通過(guò)API的事件機(jī)制來(lái)獲?。?/p>

  1.   map.addEventListener('click', function(e){  
  2.   console.log(e.point);  
  3.   }); 

  我們?cè)趍ap對(duì)象上添加了一個(gè)click事件的監(jiān)聽(tīng)函數(shù),當(dāng)點(diǎn)擊地圖上某個(gè)位置時(shí),監(jiān)聽(tīng)函數(shù)通過(guò)控制臺(tái)把當(dāng)前點(diǎn)擊的位置輸出出來(lái)(注意需要有控制臺(tái)的支持,比如firebug,如果沒(méi)有控制臺(tái)則可使用alert把point的lng和lat屬性輸出出來(lái))。此外,你也可以使用API提供的坐標(biāo)拾取工具來(lái)完成(http://dev.baidu.com/wiki/static/map/API/tool/getPoint/),它支持檢索并且點(diǎn)擊地圖上任意位置時(shí)會(huì)出現(xiàn)該位置的坐標(biāo)。

  標(biāo)注元素組成

  從DOM元素構(gòu)成角度看,一個(gè)完整的標(biāo)注是由以下幾個(gè)部分組成的:

  標(biāo)注點(diǎn)擊區(qū)域

  標(biāo)注圖標(biāo)

  標(biāo)注陰影

  下面是示意圖:

  在地圖API實(shí)現(xiàn)中,這三個(gè)DOM元素分別位于不同的容器中,這些容器可以通過(guò)map.getPanes()方法獲得,其中markerMouseTarget就是標(biāo)注點(diǎn)擊區(qū)域所在容器、markerPane為標(biāo)注圖標(biāo)所在容器,markerShadow為標(biāo)注陰影所在圖層。你可能會(huì)在自定義覆蓋物時(shí)需要這些容器對(duì)象,這里只需要知道Marker的各個(gè)部分是如何放置的即可。

  自定義標(biāo)注圖標(biāo)

  標(biāo)注的圖標(biāo)是可以自定義的,通過(guò)Icon類(lèi)可以自定義標(biāo)注的圖標(biāo),比如我希望使用下面這個(gè)圖片作為標(biāo)注圖標(biāo):

  已知這個(gè)圖標(biāo)大小為20x32。我們初始化地圖,接著定義Icon,并賦給一個(gè)Marker實(shí)例:

  1.   varmap =newBMap.Map('container');  
  2.   map.centerAndZoom(newBMap.Point(116.380797, 39.918497), 18);  
  3.   var icon = new BMap.Icon('pin.png'new BMap.Size(20, 32), {  
  4. anchor: new BMap.Size(10, 30)  
  5.   });varmkr =newBMap.Marker(newBMap.Point(116.38075,39.918986), {  
  6.   icon: icon  
  7.   });  
  8.   map.addOverlay(mkr); 

  我們給定icon所需圖片的url,接著是圖片的尺寸,另外我們還增加了anchor屬性,這個(gè)是干什么用的呢?在自定義標(biāo)注圖標(biāo)時(shí)有一點(diǎn)需要注意的就是標(biāo)注的定位點(diǎn)(anchor),通俗的講就是要指定圖片的哪個(gè)位置是與標(biāo)注真正的位置對(duì)應(yīng)在一起。我們通過(guò)下面的圖示來(lái)說(shuō)明:

  我們獲取到地圖上一個(gè)位置(上圖中標(biāo)注下端所在的黑色小方塊),那么我也希望我標(biāo)注中間下端指向這個(gè)位置,這個(gè)就需要通過(guò)anchor來(lái)調(diào)節(jié)。anchor的意義如下圖所示:

即定位點(diǎn)距離圖片左上角的偏移量。

  如果不給anchor的話,API會(huì)自動(dòng)獲取圖片中心點(diǎn)作為anchor位置:

我們看到標(biāo)注圖片中心的位置覆蓋在那個(gè)小方塊區(qū)域。

  除了anchor之外,還有一個(gè)infoWindowAnchor屬性,它是用來(lái)控制信息窗口開(kāi)啟的位置的(注意這里調(diào)用的是Marker的openInfoWindow方法,而不是Map的openInfoWindow方法),默認(rèn)情況下它和icon的anchor是一個(gè)位置:

  標(biāo)注被InfoWindow的底角擋住了,通過(guò)infoWindowAnchor屬性就可以改變開(kāi)啟位置:

  1.   varicon =newBMap.Icon('pin.png', newBMap.Size(20, 32), {  
  2.   anchor: newBMap.Size(10, 30),  
  3.   infoWindowAnchor: newBMap.Size(10, 0)  
  4.   }) 

  再看看效果:

尖角位置已經(jīng)發(fā)生了改變。

  標(biāo)注拖拽

  標(biāo)注支持拖拽,并且可以配置是否有動(dòng)畫(huà)效果,我們修改創(chuàng)建標(biāo)注的代碼:

  1.   varmkr =newBMap.Marker(newBMap.Point(116.38075,39.918986), {  
  2.   icon: icon,  
  3.   enableDragging: true,  
  4.   raiseOnDrag: true}); 

  這里開(kāi)啟了拖拽功能以及響應(yīng)的動(dòng)畫(huà)效果。如果此時(shí)拖拽地圖你會(huì)得到如下效果:

通過(guò)監(jiān)聽(tīng)標(biāo)注的dragend事件,你可以知道拖拽結(jié)束后標(biāo)注的地理位置:

  1.   mkr.addEventListener('dragend', function(e){  
  2.   alert(e.point.lng +', '+e.point.lat);  
  3.   }) 

  標(biāo)注陰影

  為了增加立體感,可以單獨(dú)給標(biāo)注添加陰影,當(dāng)然你也可以把陰影直接畫(huà)在icon所用的圖片上,但是由于陰影和標(biāo)注本身在一起,所以就不建議使用任何動(dòng)畫(huà)效果,否則會(huì)缺乏真實(shí)感。陰影可以通過(guò)MarkerOptions的shadow屬性配置,類(lèi)型也是一個(gè)Icon實(shí)例。具體使用方法和icon屬性一樣,這里就不贅述了。

原文鏈接:http://www.cnblogs.com/jz1108/archive/2011/09/15/2152122.html

【編輯推薦】

  1. 揭秘Google+技術(shù)架構(gòu)
  2. 硅谷“老黃忠”程序員:Google+設(shè)計(jì)者上榜
  3. 架構(gòu)師 如何從夢(mèng)想變成現(xiàn)實(shí)?
  4. 談?wù)剬?duì)于企業(yè)級(jí)系統(tǒng)架構(gòu)的理解
  5. 怎么成為一個(gè)軟件架構(gòu)師
責(zé)任編輯:彭凡 來(lái)源: 博客園
相關(guān)推薦

2011-09-29 11:00:54

百度地圖API

2011-09-26 10:05:19

百度地圖API

2011-10-09 11:07:40

百度地圖API

2011-10-21 10:16:25

百度地圖API

2021-06-15 14:33:00

高德百度騰訊

2011-10-21 09:28:25

百度地圖API

2011-10-24 14:01:29

API

2011-09-16 14:39:02

百度地圖API

2012-02-01 09:33:36

百度地圖API

2013-04-08 14:59:54

Android學(xué)習(xí)筆記百度地圖Overlay

2022-03-27 10:04:23

Angular8項(xiàng)目vue

2011-12-29 16:18:14

API

2012-02-03 14:01:15

地圖

2011-05-25 14:36:17

2013-04-08 14:46:42

Android學(xué)習(xí)筆記百度地圖

2011-10-21 09:11:41

百度地圖API

2020-12-11 22:02:00

百度地圖Apollo

2020-11-26 15:09:49

數(shù)據(jù)安全百度地圖機(jī)器學(xué)習(xí)

2010-09-03 09:28:30

2012-03-08 14:20:05

HTML 5
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)