实现位置检索 在系统开发中我们经常需要确定一个单位或者是机器的地理位置,如果自己在地图上查找是比较小号时间的,这里可以根据百度地图的本地搜索服务根据关键字对于需要定位位置进行检索。
引入相关资源 1 2 <script type ="text/javascript" src ="http://api.map.baidu.com/api?v=2.0&ak=对应的密钥" > </script >
初始化地图容器 1 2 3 4 5 6 7 8 9 10 11 12 13 14 <div class ="watchPage" > <div class ="col-md-12" > <h3 align ="center" > 地位位置选择页面 </h3 > </div > 要定位的地址: <input id ="text_" type ="text" style ="margin-right: 100px;" /> <a class ="btn btn-primary" onclick ="searchLocationInfo();" > 查询</a > <div id ="container" style ="position: absolute; width: 96%; padding: 20px; height: 86%; top: 88; left: 20; border: 1px solid gray; overflow: hidden;" > </div > </div > </div >
初始化的的图配置 1 2 3 4 5 6 7 8 9 10 11 12 13 14 var moid;var poi;var map = new BMap.Map("container" );var poi = new BMap.Point(112.560091 , 37.879703 );map.centerAndZoom(poi, 12 ); map.enableScrollWheelZoom(); map.enableContinuousZoom(); map.addControl(new BMap.NavigationControl()); map.addControl(new BMap.OverviewMapControl()); map.addControl(new BMap.OverviewMapControl( { isOpen : true , anchor : BMAP_ANCHOR_BOTTOM_RIGHT }));
定义本地检索服务 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 local = new BMap.LocalSearch(map, { renderOptions : { map : map, autoViewport : true , selectFirstResult : false }, pageCapacity : 10 }); myIcon = new BMap.Icon("http://api.map.baidu.com/img/markers.png" , new BMap.Size(23 , 25 ), { offset : new BMap.Size(10 , 25 ), imageOffset : new BMap.Size(0 , 0 - 10 * 25 ) }); loca.setMarkersSetCallback(function (pois ) { for ( var i = 0 ; i < pois.length; i++) { var markerInfo = pois[i]; var marker = pois[i].marker; var address = markerInfo.address; var lng = markerInfo.point.lng; var lat = markerInfo.point.lat; var contents = "【" + markerInfo.title + "】, <a target='_blank' style='color:blue' href='" + markerInfo.detailUrl + "'>详情</a><br/><div style='color:gray;'>地址:" + address + "</div>" + "<br/><a class='btn btn-info btn-block' onclick='chooselocation(\"" + address + "\",\"" + lng + "\",\"" + lat + "\")'>选择</a>" ; marker.addEventListener("click" , function (e ) { var infoWindow = new BMap.InfoWindow( "<p style='font-size:14px;'>" + contents + "</p>" ); this .openInfoWindow(infoWindow); },false ); } }); local.setSearchCompleteCallback(function (searchResults ) { if (typeof (searchResults) == "undefined" || searchResults.Br.length<=0 ) { com_div_msg("百度API没有搜索到该地址,建议手动选择地点进行设置" ); return ; } if (searchResults.length > 0 ) { var searchResult = searchResults[0 ]; } else { var searchResult = searchResults; } var poi = searchResult.getPoi(0 ); if (poi) { map.centerAndZoom(poi.point, 13 ); } });
设置地图点击事件 这里设置地图的点击事件,主要是为了如果百度地图检索不出来对应的地理位置的话,用户可以自己在地图上查找。
1 2 3 4 5 6 7 map.addEventListener("click" , function (event ) { if (!event.overlay){ com_div_msg("温馨提示:请您自己输入安装位置" ); chooselocation("" , event.point.lng, event.point.lat); } });
这里需要注意的一点是因为地图上添加了点击事件,同时地图上的覆盖物marker也有点击事件,如果在map的点击事件中不进行判断的话,会首先执行map的点击事件,然后再执覆盖物的点击事件,所以在这里进行判断,如果点击事件中的event的overlay为空的话执行具体的逻辑,否则不执行。
查询方法 1 2 3 function searchLocationInfo ( ) { local.search($("#text_" ).val()); }
选择位置 1 2 3 4 5 6 7 8 var chooselocation = function (address, lng, lat ) { if (confirm("确定选择这里吗?" )) { $("#machineAddress" ).val(address); $("#machineLongtitude" ).val(lng); $("#machineLatitude" ).val(lat); $("#closeMapBtn" ).click(); } }
结果展示
常见问题 https访问的问题 公司一直用的http的方式,当更换成https之后发现,原本在网页内显示的百度地图不见了。
【原因】https影响。
【解决办法】
将原来的http://api.map.baidu.com/api?v=2.0&ak= 你的秘钥
变成:https://api.map.baidu.com/api?v=2.0&ak=你的秘钥&s=1就可以正常显示啦。