1. 程式人生 > >高德地圖Web端JavaScript API開發(二)---在地圖上繪製(點標註)

高德地圖Web端JavaScript API開發(二)---在地圖上繪製(點標註)

使用高德地圖在很多時候需要在地圖上標記位置,並且很多時候需要用到自定義的圖示去完成這種位置的標記。

當然,這些功能高德地圖都為我們準備了,比如常用的地圖覆蓋物Marker和資訊窗體等。這裡就先說一下點標記的Marker。

Marker是一個用來往地圖上新增點標記的類。使用它將任何你希望使用者看到的興趣點標註在地圖上,你可以為標註指定任意的Icon或者內容,以及文字Label。下面向大家介紹如何使用Marker來構建一個豐富的地圖應用。

建立一個最簡單的Marker標記,我們只需要設定兩個引數,分別是他的經緯度位置和所要新增到的map物件

position是要新增的marker的經緯度,可以使用LngLat物件,如 new AMap.LngLat(116.39,39.9);

也可以直接使用經度和緯度構成的一次二元陣列,如[116.39,39.9]。

一、首先還是要載入地圖;

 var map = new AMap.Map('container',{
			resizeEnable: true,		//可縮放
			zoom:12,			//縮放級別
			center:[119.1664,29.02523] 	//位置中心點
		}); 

二、載入Marker
 marker = new AMap.Marker({
			position: [lng,lat],//點標記在地圖上顯示的位置,預設為地圖中心點
			offset: new AMap.Pixel(-16,-45),//位置偏移量,預設值為Pixel(-10,-34),(0,0)時marker左上角對準position的位置
title: data[i].number,//滑鼠滑過標記時的文字提示,不設定則滑鼠滑過時沒有文字提示 map: map//要顯示該Marker的地圖物件 });

這樣就完成了基本的的點標記

介紹一下關於Marker的一些方法:

引數名稱

型別

說明

map

Map

要顯示該marker的地圖物件

position

LngLat

點標記在地圖上顯示的位置,預設為地圖中心點

offset

Pixel

位置偏移量,預設值為Pixel(-10,-34)。(0,0)時marker左上角對準position的位置,

該屬性表示將marker移動多少畫素之後,可以使錨點對準position

icon

String/Icon

需在點標記中顯示的圖示。可以是一個本地圖示地址,或者Icon物件。有合法的content內容時,此屬性無效

content

String/Object

點標記顯示內容,可以是HTML要素字串或者HTML DOM物件。content有效時,icon屬性將被覆蓋

topWhenClick

Boolean

滑鼠點選時marker是否置頂,預設false ,不置頂(自v1.3 新增)

topWhenMouseOver

Boolean

滑鼠移進時marker是否置頂,預設false,不置頂(自v1.3 新增)

draggable

Boolean

設定點標記是否可拖拽移動,預設為false

raiseOnDrag

Boolean

設定拖拽點標記時是否開啟點標記離開地圖的效果

cursor

String

指定滑鼠懸停時的滑鼠樣式,自定義cursor,IE僅支援cur/ani/ico格式,Opera不支援自定義cursor

visible

Boolean

點標記是否可見,預設為true

zIndex

Number

點標記的疊加順序。地圖上存在多個點標記疊加時,通過該屬性使級別較高的點標記在上層顯示,預設100

angle

Number

點標記的旋轉角度支援IE9及以上版本

autoRotation

Boolean

是否自動旋轉。點標記在使用moveAlong動畫時,路徑方向若有變化,點標記是否自動調整角度,預設false,

IE8以下不支援

animation

String

點標記的動畫效果,預設值:“AMAP_ANIMATION_NONE”。

可選值:

“AMAP_ANIMATION_NONE”,無動畫效果;

“AMAP_ANIMATION_DROP”,點標掉落效果;

“AMAP_ANIMATION_BOUNCE”,點標彈跳效果

shadow

Icon

點標記陰影,不設定該屬性則點標記無陰影

title

String

滑鼠滑過點標記時的文字提示,不設定則滑鼠滑過點標無文字提示

clickable

Boolean

點標記是否可點選

bubble

Boolean

預設false,true的時候事件可以穿透到地圖

shape

MarkerShape

設定Marker的可點選區域,在定義的區域內可觸發Marker的滑鼠點選事件

extData

Any

使用者自定義屬性,支援JavaScript API任意資料型別,如Marker的id等


方法

返回值

說明

getOffset( )

Pixel

獲取Marker偏移量(自v1.3 新增)

setOffset(offset:Pixel)

設定Marker偏移量(自v1.3 新增)

setAnimation(animate:String )

設定點標記的動畫效果

getAnimation( )

String

獲取點標記的動畫效果型別

setClickable(clickable:Boolean )

設定點標記是支援滑鼠單擊事件

getClickable( )

Boolean

獲取點標記是否支援滑鼠單擊事件

getPosition( )

LngLat

獲取點標記的位置

setPosition(lnglat:LngLat)

設定點標記位置

setAngle(angle:Number)

設定點標記的旋轉角度

getAngle()

Number

獲取點標記的旋轉角度

setzIndex(index:Number)

設定點標記的疊加順序,預設最先新增的點標記在最底層

setIcon(content:String/Icon)

設定點標記的顯示圖示

getIcon( )

String /Icon

當點標記未自定義圖示時,獲取Icon內容

setDraggable(draggable:Boolean)

設定點標記物件是否可拖拽移動

getDraggable( )

Boolean

獲取點標記物件是否可拖拽移動

hide( )

點標記隱藏

show( )

點標記顯示

setCursor(Cursor)

String

設定滑鼠懸停時的游標。 引數cur可為CSS標註中的游標樣式

setContent(html:String|htmlDOM)

設定點標記顯示內容,可以是HTML要素字串或者HTML DOM物件

getContent( )

String

獲取點標記內容

moveAlong(lnglatlist,speed,f,circlable)

以指定的速度,點標記沿指定的路徑移動。

引數lnglats為路徑座標串;speed為指定速度,單位:千米/小時;

回撥函式f中可新增自定義功能;引數loop表明是否迴圈執行動畫,預設為false

moveTo(lnglat,speed,Function)

以給定速度移動點標記到指定位置。

引數lnglat為指定位置,必設;speed為指定速度,單位:千米/小時;

回撥函式f中新增自定義功能

stopMove( )

點標記停止動畫

setMap(map:Map)

為Marker指定目標顯示地圖。當引數值取null時,地圖上移除當前Marker:setMap(null)

getMap()

Map

獲取Marker所在地圖物件

setTitle(title:String)

滑鼠滑過點標時的文字提示

getTitle( )

String

獲取點標記的文字提示

setTop(isTop:Boolean)

地圖上有多個marker時,當isTop為true時,marker將顯示在最前面;當為false時,marker取消置頂

getTop( )

Boolean

setShadow(icon:Icon)

為marker設定陰影效果

getShadow( )

Icon

獲取marker的陰影圖示

setShape(shape:MarkerShape)

設定marker的可點選區域

getShape( )

MarkerShape

獲取marker的可點選區域

setExtData(ext:Any)

設定使用者自定義屬性,支援JavaScript API任意資料型別,如Marker的id等

getExtData( )

Any

獲取使用者自定義屬性


接下來就說一下使用自定義圖示的方法,就是上述第二步稍微修改一下即可。

使用自定義Marker需要自定義Icon

marker = new AMap.Marker({
			icon: "http://vdata.amap.com/icons/b18/1/2.png",//自定義Icon在專案中的位置
			position: [lng,lat],
			offset: new AMap.Pixel(-16,-45),
			title: data[i].number,
			map: map
			});

但是通常我們使用Icon類來設定marker的icon,因為icon的大小通常和預設marker的大小不一致,對於使用組合圖片的開發的來說,這種當時是最合適的,可以通過imageOffset屬性來調整圖片的顯示區域。

這是官方的Demo

var icon = new AMap.Icon({
        image : 'http://vdata.amap.com/icons/b18/1/2.png',//圖片大小為24px*24px
        //icon可預設,預設時為預設的藍色水滴圖示,
        size : new AMap.Size(24,24)
});
var marker = new AMap.Marker({
        icon : icon,//24px*24px
        position : provinces[i].center.split(','),
        offset : new AMap.Pixel(-12,-12),
        map : map
});

這是我自己專案裡面寫的程式碼,根據不同的需求,載入不同的圖示,僅供參考
if(operNum < 0.2*maxNumber){
				var icon = new AMap.Icon({
    				image: 'images/bike/green.png',
    				size: new AMap.Size(32, 45)
    				});
}
marker = new AMap.Marker({
				icon: icon,
				position: [lng,lat],
				offset: new AMap.Pixel(-16,-45),
				title: data[i].number+":"+data[i].name+":總數"+data[i].restorecount+":在架"+data[i].rentcount,
				map: map
			});

這樣就可以使用迴圈去載入地圖上的多個Marker

引數說明

引數名稱

型別

說明

size

Size

圖示尺寸,預設值(36,36)

imageOffset

Pixel

圖示取圖偏移量。當image使用了圖片精靈時,可通過size和imageOffset配合,顯示圖示的指定範圍

image

String

圖示的取圖地址。預設為藍色圖釘圖片

imageSize

Size

修改原始圖片的大小,將拉伸或壓縮圖片,等同於CSS中的background-size屬性。可用於實現高清屏的高清效果


使用Content方式標記

content屬性用來指定作為標記的dom節點或者dom節點的outerHTML,這裡使用一個div作為content來為marker多新增一個標記

var content= "<div classname="taiwan">寶島臺灣</div>";
//或者
var content = document.createElement('div');
content.innerHTML = '寶島臺灣';
content.className = 'taiwan';

marker = new AMap.Marker({
content: content,
position: provinces[i].center.split(','),
title: provinces[i].name,
offset: new AMap.Pixel(-10,0),
map: map
    });