1. 程式人生 > >web前端PC端 百度地圖的開發指導

web前端PC端 百度地圖的開發指導

先看效果圖片:

百度地圖開發效果圖

最終效果描述:

      1.搜尋:有搜尋提示,並且可以根據選擇進行定位;

      2.獲取經緯度:點選地圖中某點,在文字框中獲取當前點的經緯度的值;

      3.獲取詳細地址:點選地圖中某點時,將該點的詳細地址 顯示在文字框中;

      4.支援滑鼠滾輪控制地圖縮放;

      5.支援比例尺控制元件;

      6.支援城市列表查詢,定確定地圖中心點;

     7.支援為地圖新增文字標籤;

===========================================================================

 *基於百度地圖API開發 地圖類應用,最重要的是 要有自己的或者說可以用的 ‘百度API金鑰 ’。百度地圖所有的功能,都基於這個金鑰為前提。

一、首先 我們先嚐試一下,獲取 百度API金鑰(web前端開發示例)。

  1、根據網址:http://api.map.baidu.com/lbsapi/    找到要操作的頁面,點選API控制檯


2、進行開發版本選擇,並提交。



3、提交後,得到剛剛註冊的祕鑰


      

 


  


   2、程式碼詳情:

  <!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>地圖定位</title>
<link rel="stylesheet" type="text/css" href="__ROOT__css/bootstrap.min.css">
<link rel="stylesheet" type="text/css" href="__ROOT__css/index.css">
<script type="text/javascript" src="__ROOT__js/jquery-1.11.1.min.js"></script>
<script type="text/javascript" src="__ROOT__js/bootstrap.min.js"></script>
<script type="text/javascript" src="__ROOT__js/index.js"></script>
<style type="text/css">
body, html,#allmap {
width:87.5%;
height:600px;
margin:0px auto;
font-family:"微軟雅黑";
}
a{ cursor: pointer;}
#staff_city{
width: 100%;
height:33px;
color:blue;
margin: 35px 91px;
padding-top: 10px;
}
.ui_city_change_inner{
margin-left:500px;
border:2px solid blue;
}
.citylist_popup_main{
margin-left:250px;
}
.BMap_mask{
border: 3px solid #ABB1BA;


}
.show_p_l{
font-weight: bold;
position: relative;
top:20px;
left: 90px;
}
.show_p_l>.address1{
margin-left: 90px;
}
</style>
<!-- 引入百度API金鑰 -->
<script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=Pw0FQ4H50yIEKD7hR3Pha1KqkqFd63Yo"></script>
</head>
<body>

<!-- 保留使用者當前經緯度和位置名稱的值到頁面上 -->
<div class="show_p_l">
<span  class="position1" ></span>
<span  class="location1"></span>
<span class="address1"></span>
</div>


<!-- 使用者地理位置操作相關 -->
<div id="staff_city">
<input type="text" name="suggestId" id="suggestId" size="20" style="width:300px" placeholder="位置搜尋">
<span  id="searchResultPanel" style="border:1px solid #c0c0c0;width:150px;height:auto;display: none;"></span>
 <span style="margin-left:10px;">&gt;&gt;</span>
 <input type="text" name="l-map" id="l-map" style="width:200px;margin-left:30px" value="您當前位置經度資訊" >
 <input type="text"  name="r-result" id="r-result" style="width:200px" value="您當前位置緯度資訊" >
 <input type="button" name="staff_ensure" id="staff_ensure" value="確定">
 <input type="text" name="" id="staff_toponymy" value="詳細地址" style="width:296px;height:26px;font-size:8px;margin-left: 30px">
</div>






 <!--  顯示地圖 -->
<div id="allmap"></div>



<script type="text/javascript">


// 獲取url的某個欄位
function GetQueryString(name){
   var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)");
   var r = window.location.search.substr(1).match(reg);
   if(r!=null)return  unescape(r[2]); return null;
}
var id=GetQueryString('staff_id');
var cur=GetQueryString('c');
    //頁面剛載入時就傳送請求。
$(function(){
$.post('http://123.57.45.74/feiybg1/public/index.php/admin/Testnumber/default_address',{staff_id:id},function(data){
// console.log(data);
if(data.infor.position==0){
$('.show_p_l').css('display','none');
}else{
//載入後臺傳遞過來的 經緯度
$(".position1").html("經度座標:"+data.infor.position+"、");
$(".location1").html("緯度座標:"+data.infor.location);
//載入後臺傳遞過來的 地理位置資料
$('.address1').html("位置名稱:"+data.infor.address+"。");
$('.show_p_l').css('display','block');
//打樁測試
// console.log(data.infor.position,data.infor.location,data.infor.address);


}




})
})
// 百度地圖API功能
// 建立Map例項
var map = new BMap.Map("allmap");   
// 初始化地圖,設定中心點座標和地圖級別
map.centerAndZoom(new BMap.Point(116.404, 39.915), 11); 
//將map變數儲存在全域性
window.map = map;
 //新增地圖型別控制元件
map.addControl(new BMap.MapTypeControl({
mapTypes:[
            BMAP_NORMAL_MAP,
            BMAP_HYBRID_MAP
        ]})); 
// 設定地圖顯示的城市 此項是必須設定的
map.setCurrentCity("北京"); 
//開啟滑鼠滾輪縮放
map.enableScrollWheelZoom(true);
    //左上角新增比例尺
var top_left_control = new BMap.ScaleControl({anchor: BMAP_ANCHOR_TOP_LEFT});
map.addControl(top_left_control);
//左上角新增預設縮放平移控制元件
var top_left_navigation = new BMap.NavigationControl();
map.addControl(top_left_navigation);


//城市列表
map.enableInertialDragging();
map.enableContinuousZoom();
var size = new BMap.Size(10, 20);
map.addControl(new BMap.CityListControl({
   anchor: BMAP_ANCHOR_TOP_LEFT,
   offset: size,
   // 切換城市之間事件
   // onChangeBefore: function(){
   //    alert('before');
   // },
   // 切換城市之後事件
   // onChangeAfter:function(){
   //   alert('after');
   // }
}));


//為地圖新增文字標籤
var point = new BMap.Point(116.417854,39.921988);
map.centerAndZoom(point, 15);
var opts = {
// 指定文字標註所在的地理位置
 position : point,  
 //設定文字偏移量  
 offset   : new BMap.Size(30, -30)    
}

//單擊獲取點選的經緯度
map.addEventListener("click",function(e){
// alert(e.point.lng + "," + e.point.lat);
$("#l-map").val("經度座標:"+e.point.lng);
$("#r-result").val("緯度座標:"+e.point.lat);
});
 //獲取使用者當前詳細地址
 var geoc = new BMap.Geocoder();    


map.addEventListener("click", function(e){        
var pt = e.point;
geoc.getLocation(pt, function(rs){
var addComp = rs.addressComponents;
$('#staff_toponymy').val("詳細地址:"+addComp.province + ", " + addComp.city + ", " + addComp.district + ", " + addComp.street + ", " + addComp.streetNumber);
console.log("詳細地址:"+addComp.province + ", " + addComp.city + ", " + addComp.district + ", " + addComp.street + ", " + addComp.streetNumber);
});        
});


//輸入資訊提示
function G(id) {
return document.getElementById(id);
};
//建立一個自動完成的物件
var ac = new BMap.Autocomplete(   
{"input" : "suggestId"
,"location" : map
});
//滑鼠放在下拉列表上的事件
ac.addEventListener("onhighlight", function(e) {  
var str = "";
var _value = e.fromitem.value;
var value = "";
if (e.fromitem.index > -1) {
value = _value.province +  _value.city +  _value.district +  _value.street +  _value.business;
}    
str = "FromItem<br />index = " + e.fromitem.index + "<br />value = " + value;

value = "";
if (e.toitem.index > -1) {
_value = e.toitem.value;
value = _value.province +  _value.city +  _value.district +  _value.street +  _value.business;
}    
str += "<br />ToItem<br />index = " + e.toitem.index + "<br />value = " + value;
G("searchResultPanel").innerHTML = str;
});


var myValue;
//滑鼠點選下拉列表後的事件
ac.addEventListener("onconfirm", function(e) {    
var _value = e.item.value;
myValue = _value.province +  _value.city +  _value.district +  _value.street +  _value.business;
G("searchResultPanel").innerHTML ="onconfirm<br />index = " + e.item.index + "<br />myValue = " + myValue;

setPlace();
});


function setPlace(){
//清除地圖上所有覆蓋物
map.clearOverlays();   
function myFun(){
var pp=local.getResults().getPoi(0).point;
map.centerAndZoom(pp,18);
map.addOverlay(new BMap.Marker(pp));
}
var local=new BMap.LocalSearch(map,{onSearchComplete:myFun});
local.search(myValue);
}


//點選事件:向testnumber.html頁面 傳值
$("#staff_ensure").click(function(){
var $position=$("#l-map").val().split(":")[1];
var $location =$("#r-result").val().split(":")[1];
var $address=$("#staff_toponymy").val().split(":")[1];
$.ajax({
type:"post",
url:"http://123.57.45.74/feiybg1/public/index.php/admin/Testnumber/add_address",
data:{staff_id:id,position:$position,location:$location,address:$address},
success:function(data){
// 對位置資訊的點選更新
$('.position1').html("經度座標:"+$position+"、");
$('.location1').html("緯度座標:"+$location);
$('.address1').html("位置名稱"+$address+"。");
$('.show_p_l').css('display','block');
// alert('點選更新');



}

})
});
$('.back').click(function(){
window.location.href='http://123.57.45.74/feiybg1/public/index.php/admin/testnumber/testnumber?c='+cur;


})
</script>


</body>
</html>

  提示:如果要複製該程式碼到本地執行,請注意更換 ‘引用檔案地址’和埠號,否則會一起一系列跨域問題,及資源找不到的問題。文件內容最開始提起的 ‘最終效果描述’ 可能措辭不太嚴謹,但所提效果都以程式碼實現,程式碼開發與 效果描述也不是按順序來開發的,所以請不必再次處產生疑慮。由於水平有限,本文件僅供初學者或首次開發者提供 參考。如程式碼有錯誤之處,請見諒。如果有更好的開發經驗,感謝回覆。謝謝觀看!!!;