最近搗鼓了一下HBuilder的maps,也算爬了點(diǎn)坑,分享給需要的同學(xué)
首先說說定位
plus.geolocation.getCurrentPosition( function ( p ) {
console.info(JSON.stringify(p))
})
打印出來的就是獲取到的位置信息,重點(diǎn)說一下coordsType屬性芒率,很多同學(xué)只注意到經(jīng)緯度,而忽略了coordsType篙顺。coordsType是坐標(biāo)類型偶芍,安卓和iOS獲取到的類型都不同(iOS:wgs84, 安卓:gcj02)德玫,這很關(guān)鍵匪蟀,在后面會(huì)用到。
現(xiàn)在該創(chuàng)建地圖了宰僧,直接上代碼
var pcenter = new plus.maps.Point(point.longitude, point.latitude); // 地圖中心點(diǎn)
var map = new plus.maps.Map('map');
map.centerAndZoom(pcenter, 15); // 設(shè)置地圖的中心點(diǎn)和縮放級(jí)別
map.showUserLocation( true ); // 設(shè)置是否顯示用戶的位置
...... // 還有很多屬性可以設(shè)置材彪,請(qǐng)參考官方文檔
可能看到第一行代碼您就覺得有問題,point哪兒來的?
不少剛學(xué)maps的同學(xué)段化,可能直接把定位獲取的經(jīng)緯度放上去了嘁捷,那就錯(cuò)了。
因?yàn)閙aps默認(rèn)是使用百度地圖显熏,使用百度地圖需要將獲取到的坐標(biāo)轉(zhuǎn)換為百度地圖的坐標(biāo)雄嚣,所以我們最開始提到的coordsType就起作用了
var point = new plus.maps.Point(p.coords.longitude, p.coords.latitude); // 這里的p就是定位獲取的數(shù)據(jù)
plus.maps.Map.convertCoordinates(point, {coordType: p.coordsType}, function(event){
var point = event.coord; // 轉(zhuǎn)換后的坐標(biāo)值,上面創(chuàng)建地圖就是用的這個(gè)point
})
順便提一下位置監(jiān)聽API
plus.geolocation.watchPosition(function(a){ // 位置一旦發(fā)生變化喘蟆,就會(huì)觸發(fā)該回調(diào)方法
console.info(JSON.stringify(a));
}, function(e){
alert('Geolocation error: ' + e.message);
});
在地圖上添加覆蓋物
我們來做個(gè)例子现诀,先創(chuàng)建一個(gè)Marker,再將Marker添加到地圖上
var marker = new plus.maps.Marker(new plus.maps.Point(point.longitude, point.latitude)); // 這里的point是坐標(biāo)轉(zhuǎn)換之后的
marker.setIcon("/img/pic.png");//這里放你的圖片
marker.setLabel('測試');
var bubble = new plus.maps.Bubble(""); // 氣泡對(duì)象(點(diǎn)擊Marker之后顯示履肃,這里有點(diǎn)坑,只能添加字符串坐桩,不能添加html)
marker.setBubble(bubble);
map.addOverlay(marker);
marker.onclick = function ( marker ) {
// 點(diǎn)擊marker觸發(fā)
}
搜索并添加路線
有新同學(xué)想添加路線尺棋,就直接去創(chuàng)建Route對(duì)象,但是發(fā)現(xiàn)地圖上根本就沒有成功添加路線绵跷。很納悶兒到底是哪兒出錯(cuò)了膘螟?
其實(shí)添加路線并不是創(chuàng)建Route對(duì)象,而是根據(jù)兩點(diǎn)碾局,搜索路線荆残,然后通過添加覆蓋物的方式添加路線。
var searchObj = new plus.maps.Search( map ); // 創(chuàng)建地圖檢索對(duì)象
searchObj.onRouteSearchComplete = function ( state, result ) { // 線路檢索完成事件
console.log("onRouteSearchComplete: "+state+" , "+result.routeNumber);
if ( state == 0 ) {
if ( result.routeNumber <= 0 ) {
alert( "沒有檢索到結(jié)果" );
} else {
map.addOverlay( result.getRoute( 0 ) );
}
} else {
alert( "檢索失敗" );
}
}
searchObj.drivingSearch( point, "", new plus.maps.Point(Client.log,Client.lat), "" ); // drivingSearch是駕車路線(也有公交和步行路線净当,請(qǐng)自行查看官網(wǎng)文檔内斯,參數(shù)是1:起點(diǎn)(Point對(duì)象),2:起點(diǎn)城市(可不填), 3:終點(diǎn)(Point對(duì)象), 4:終點(diǎn)城市(可不填))
這些都是比較常用的maps API像啼,這些都搞懂了俘闯,再去看其他maps API都不是問題了,希望能幫到同學(xué)們忽冻。