百度地圖經緯度轉換及關鍵字輸入提示

要使用百度地圖的插件首先得有一個百度地圖的帳號,用這個帳號到百度地圖LBS開發平臺(網址:http://lbsyun.baidu.com/apiconsole/key?application=key?from=developer)上申請一個ak值(2.0版本以上的使用ak值);javascript

申請好ak值以後,在你的項目中引入html

<script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=你的密碼"></script>

便可使用百度地圖的插件啦!java

 

先在html中建立一個div容器放置地圖,如:api

<div id="container" > </div>

 

咱們還須要一個地址框來輸入地址:app

<input id="address" name="address" type="text" value="" >

 

在地址框下方增長一個div來放置關鍵字輸入提示的信息函數

<div id="searchResultPanel" style="border:1px solid #C0C0C0;width:150px;height:auto; display:none;"></div>

 

一個經度框和一個維度框來顯示獲取的經緯度:this

經度:<input id="lng" name="lng" type="text"  readonly> - 緯度:<input id="lat" name="lat" type="text"  readonly>

 

還有一個查詢按鈕:spa

<a id="query_button" href="javascript:void(0);">查詢</a>

 

如今在js中就能夠調用地圖類了插件

/*調用地圖*/

var map = new BMap.Map("container");

//啓動地圖的縮小功能已及拖曳功能

map.enableScrollWheelZoom();//啓用滾輪放大縮小,默認禁用

map.enableContinuousZoom();//啓用慣性拖曳,默認禁用

//添加上縮放的平移控件,縮略圖控件以及設置顯示的位置

map.addControl(new BMap.NavigationControl());

map.addControl(new BMap.OverviewMapControl());

map.addControl(new BMap.OverviewMapControl({ isOpen:true, anchor:BMAP_ANCHOR_TOP_RIGHT}));//右下角打開
//根據IP定位城市
var myCity = new BMap.LocalCity();
myCity.get(myFun);
function myFun(result){
    map.centerAndZoom(result.name,15);
    var p = {'point':result.center};
    $("#lng").val(p.point.lng);
    $("#lat").val(p.point.lat);
    //建立逆向地址解析類
    var gc = new BMap.Geocoder();
    //獲取地址信息
    gc.getLocation(p.point, function(rs){
        var addComp = rs.addressComponents;
        addr = addComp.province + addComp.city ;
        ac.setInputValue(addr);//設置地址搜索框的默認值
        //建立標註
        var marker = new BMap.Marker(new BMap.Point(p.point.lng, p.point.lat)); // 建立標註,爲要查詢的地址對應的經緯度
        map.addOverlay(marker);
        var content = addr + "<br/><br/>經度:" + p.point.lng + "<br/>緯度:" + p.point.lat;
        var infoWindow = new BMap.InfoWindow("<p style='font-size:14px;'>" + content + "</p>");
        marker.addEventListener("click", function(){this.openInfoWindow(infoWindow);});
    });
}

 

如今咱們建立了地圖而且設置了地圖的一些屬性,以及根據ip地址初始化了地圖所在城市並建立標註;code

接下來咱們要建立一個有地址到經緯度的查詢

var localSearch = new BMap.LocalSearch(map);
localSearch.enableAutoViewport();
//查詢函數
function searchByStationName(keyword){
    localSearch.setSearchCompleteCallback(function(searchResult){
        var poi = searchResult.getPoi(0);
        if(poi){
            map.clearOverlays();
            $("#lng").val(poi.point.lng);
            $("#lat").val(poi.point.lat);
            map.centerAndZoom(poi.point, 15);
            var marker = new BMap.Marker(new BMap.Point(poi.point.lng, poi.point.lat)); // 建立標註,爲要查詢的地址對應的經緯度
            map.addOverlay(marker);
            var content = $("#location").val() + "<br/><br/>經度:" + poi.point.lng + "<br/>緯度:" + poi.point.lat;
            var infoWindow = new BMap.InfoWindow("<p style='font-size:14px;'>" + content + "</p>");
            marker.addEventListener("click", function(){this.openInfoWindow(infoWindow);});
        }else{
            alert("請您輸入正確可識別的地址!");
        }
    });
    localSearch.search(keyword);

}

 

建立了基本的從地址到經緯度的查詢之後,咱們要增添一個功能:即咱們在地址框輸入某個關鍵字如:東莞市 時,在地址框下方會出現一個

提示框

//創建一個提示自動完成的對象
var ac = new BMap.Autocomplete({
    "input" : "location",
    "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;
    $("#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;
    $("#searchResultPanel").innerHTML ="onconfirm<br />index = " + e.item.index + "<br />myValue = " + myValue;
    
    searchByStationName(myValue);

});

 

$(function(){
    //當單擊查詢按鈕時觸發查詢
    $("#query_button").bind('click', function(){
        var keyword = $("#location").val();
        if(keyword.length > 0){
            searchByStationName(keyword);
        }
    });
}); 
相關文章
相關標籤/搜索