要使用百度地图的插件首先得有一个百度地图的账号,用这个账号到百度地图LBS开发平台(网址:http://lbsyun.baidu.com/apiconsole/key?application=key?from=developer)上申请一个ak值(2.0版本以上的使用ak值);

申请好ak值之后,在你的项目中引入

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

即可使用百度地图的插件啦!

 

先在html中创建一个div容器放置地图,如:

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

 

我们还需要一个地址框来输入地址:

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

 

在地址框下方增加一个div来放置关键字输入提示的信息

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

 

一个经度框和一个维度框来显示获取的经纬度:

经度:<input id="lng" name="lng" type="text"  readonly> - 纬度:<input id="lat" name="lat" type="text"  readonly>

 

还有一个查询按钮:

<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地址初始化了地图所在城市并创建标注;

接下来我们要创建一个有地址到经纬度的查询

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);
        }
    });
});