百度地圖API使用講解

       最近項目中用到了百度地圖API開發了一些小功能。總結下,和大家分享。在這裏我拿JS的API來講解。要是實際開發還請詳細閱讀百度地圖API官方手冊。地址:http://developer.baidu.com/map/index.html。在這裏

        百度地圖JavaScript API是一套由JavaScript語言編寫的應用程序接口,可幫助您在網站中構建功能豐富、交互性強的地圖應用,支持PC端和移動端基於瀏覽器的地圖應用開發,且支持HTML5特性的地圖開發。另外,2014年1月9日,極速版JavaScript API全新上線,此版本專門針對移動端瀏覽器開發提供。該套API免費對外開放。自v1.5版本起,您需先申請密鑰(ak)纔可使用,接口(除發送短信功能外)無使用次數限制。

申請方式地址:http://lbsyun.baidu.com/apiconsole/key  如下圖:


創建好應用後,會得到應用信息:


接下來就可以開發啦!我們先一個小的demo引入,展示一張無控件的簡單百度地圖。

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
 <script type="text/javascript" src="http://api.map.baidu.com/api?type=quick&ak=您的密鑰&v=1.0"></script>
<title>百度地圖的Hello, World</title>
<style type="text/css">
body, html,#allmap {width: 100%;height: 100%;overflow: hidden;margin:0;} @media (max-device-width: 780px){#golist{display: block!important;}}#golist {display: none;}
</style>
</head>
<body>
<a id="golist" href="../demolist.htm">返回demo列表頁</a>
<div id="allmap"></div>
</body>
</html>
<script type="text/javascript">

// 百度地圖API功能
var map = new BMap.Map("allmap");            // 創建Map實例
var point = new BMap.Point(116.404, 39.915);    // 創建點座標
map.centerAndZoom(point,15);                     // 初始化地圖,設置中心點座標和地圖級別。
map.addControl(new BMap.ZoomControl());          //添加地圖縮放控件
</script>
更多實例還請參考官方demo實例,不在多說。

http://developer.baidu.com/map/jsdemo-mobile.htm#a1_1


接下來我分享下我做的一個應用。

/**********************************************************************************/
$(function(){
userPosition      = eval(userPosition);
branchData        = eval(branchData);

showMap(userPosition['position'], branchData);

if ( ! userPosition['status'] && navigator.geolocation) { //若API未獲取到用戶座標則通過瀏覽器獲取
    navigator.geolocation.getCurrentPosition(success);
}

/******************************************************************************/

/**
 * 通過瀏覽器獲取用戶所在位置成功後回調函數
 * @author bob <[email protected]> 
 */
function success(position)
{
    var coords = position.coords;
    var userPosition = {longitude:coords.longitude, latitude:coords.latitude};

    $.ajax({
      type: "POST",
      url: XXX,
      data: userPosition,
      timeout: 1000,
      dataType: 'html',
      error: function(){showDefaultMap()},
      success: function(result){showMap(userPosition, result);}
      
    });
}

/**
 * 顯示地圖
 * @author bob <[email protected]> 
 */
function showMap(userPosition, branchData)
{

    getAddressDetail(userPosition);

    if (typeof(branchData) == 'string') {
        branchData = eval(branchData);
    }

    var userLongitude = userPosition['longitude'];
    var userLatitude  = userPosition['latitude'];

    var map = new BMap.Map("allmap");          // 創建Map實例
    var point = new BMap.Point(userLongitude, userLatitude);   // 創建點座標  

    /************************/
     var myIcon = new BMap.Icon(baseHost+"/images/user.png",   
        new BMap.Size(22, 27), {
         anchor: new BMap.Size(7, 25),        
        }); 

    var marker = new BMap.Marker(point, {icon: myIcon});

    map.centerAndZoom(point, 12); // 初始化地圖,設置中心點座標和地圖級別。
    map.addOverlay(marker);
    /************************/
    map.addControl(new BMap.ZoomControl());        //添加地圖縮放控件

    if (typeof(branchData) != 'nudefined') {
      for (var i = 0; i < branchData.length; i++) {
        var point = new BMap.Point(branchData[i]['geo']['longitude'], branchData[i]['geo']['latitude']);

        addMarker(map, point, branchData[i], i, userPosition);
      }
    }  
}

/**
 * 若地理位置獲取失敗則加載默認地圖
 * @author bob <[email protected]> 
 */
function showDefaultMap()
{
    //TODO
}

/**
 * 創建圖標對象
 * @author bob <[email protected]> 
 */
function addMarker(map, point, branchData, index, userPosition)
{      
    var myIcon = new BMap.Icon("http://api.map.baidu.com/mapCard/img/location.gif",   
        new BMap.Size(14, 23), {
         anchor: new BMap.Size(7, 25),        
        }); 

    var marker = new BMap.Marker(point, {icon: myIcon});

    map.addOverlay(marker);

    addMessage(marker, branchData, userPosition);
}

/**
 * 根據座標獲取點的詳細地址
 * @author bob <[email protected]>
 */
function getAddressDetail(point)
{
    var gc = new BMap.Geocoder();
    var pt = new BMap.Point(point['longitude'], point['latitude']);

    var a = gc.getLocation(pt, function(rs){
        var addComp = rs.addressComponents;
        var address = addComp.district + "," + addComp.street;
        $("#userAddress").attr("value", address);
        
    });
}

/**
 * 顯示路線圖
 *
 *{name:string, latlng:Lnglat}
 * opts:
 * mode:導航模式,固定爲
 * BMAP_MODE_TRANSIT、BMAP_MODE_DRIVING、
 * BMAP_MODE_WALKING、BMAP_MODE_NAVIGATION
 * 分別表示公交、駕車、步行和導航,(必選)
 * region:城市名或縣名  當給定region時,認爲起點和終點都在同一城市,除非單獨給定起點或終點的城市
 * origin_region/destination_region:同上
 *
 * @author bob <[email protected]> 
 */
function showLine(userPosition, branchData)
{
    $('.gohere').click(function(){
    var userAddress = $("#userAddress").attr("value");

    var start = {  
          latlng: new BMap.Point(userPosition['longitude'], userPosition['latitude']),  
          name: userAddress
    }

    var end = {
         latlng: new BMap.Point(branchData['geo']['longitude'], branchData['geo']['latitude']),  
         name: branchData['station_address'] 
    }

    var opts = {  
         mode: BMAP_MODE_TRANSIT,//公交、駕車、導航均修改該參數  
         region: branchData['city']  
    }

    var routeSearch=new BMap.RouteSearch();
    routeSearch.routeCall(start,end,opts);  
    })
    
}
/**
 * 創建浮層對象
 * @author bob <[email protected]> 
 */
function addMessage(marker, branchData, userPosition)
{
    var phone = '';
    var phonenumber = branchData['phone_number'];
   
    for (var i = 0; i < phonenumber.length; i++) {
        phone += "<div class='telInc'><a href='tel:"+phonenumber[i]+"'>"+phonenumber[i]+"</a></div>";
    }

    var content = "<article class='wrap wdcx'>"+
      "<div class='tips' width='80%' style='color:#000000;'>"+
        "<h3 class='title'>"+branchData['station_name']+"</h3>"+
        "<p class='con'><font>地址:"+branchData['station_address']+"</p>"+
        "<div class='con'>"+
          "<span class='floatLeft'>電話:</span>"+
          "<span class='phoneList'>"+phone+"</span>"+
        "</div>"+
        "<div class='gobutton'>"+
          "<span class='gobutton'><a class='gohere' href='javascript:void(0)'>去這裏</a></span>"+
        "</div>"+
      "</div>"+
    "</article>";

    var infoWindow = new BMap.InfoWindow(content);  // 創建信息窗口對象
    
    marker.addEventListener("click", function(){
        this.openInfoWindow(infoWindow);
        showLine(userPosition, branchData);
        infoWindow.redraw();
  });
}

});




發佈了25 篇原創文章 · 獲贊 6 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章