百度地图国家城市二级联动服务网点查询
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title>百度地图</title> <link href="css/style.css" rel="stylesheet" type="text/css"> <style> .ipt { border: 1px solid #ddd; box-shadow: 0 0 3px rgba(0, 0, 0, 0.17) inset; transition: border 0.2s linear 0s, box-shadow 0.2s linear 0s; border-radius: 0 !important; -moz-border-radius: 0 !important; -webkit-border-radius: 0 !important; height: 34px; padding: 0px 5px; line-height: 30px\9; } * { box-sizing: border-box; } .map { width: 500px; height: 300px; border: 1px solid #999; margin-left: 100px; margin-top: 10px; } /*备注:去掉百度copyright*/ #map_container.map .BMap_cpyCtrl.BMap_noprint.anchorBL { display: none; } #btn { width: 100px; height: 50px; cursor: pointer; } </style> </head> <body> <div class="w1150"> <div class="video-wrapper"> <select id="province" name="province" class="ipt areaLists" style="width:150px;"></select> <select id="city" name="city" class="ipt areaLists" style="width:150px;"></select> <input type="button" id="btn" value="搜索" /> <div class="location-main"> <div class="fl location-shop-con"> <div class="location-shop-detail"> <ul class="location-list js-store" id="store-list" style="height:450px;overflow: scroll"> </ul> <div class="xm-controls xm-controls-small js-pager-controls" page="1" style="float: left;"> </div> </div> </div> <div class="location-map"> <div id="container" style="width: 100%; height: 100%; overflow: hidden; position: relative; z-index: 0; background-color: rgb(243, 241, 236); color: rgb(0, 0, 0); text-align:left;"> </div> </div> </div> </div> </div> <ul> <li> <span>国家/省</span> <div class="liSpan"></div> </li> </ul> <ul id="initData"> </ul> </body> </html> <script src="https://www.jq22.com/jquery/jquery-1.10.2.js"></script> <script src="js/area.js" type="text/javascript" charset="utf-8"></script> <script type="text/javascript" src="http://api.map.baidu.com/api?v=1.4"></script> <script> var map = new BMap.Map("container"); // 创建地图实例 // 初始化地图,设置中心点坐标和地图级别 var point = new BMap.Point(116.331398, 39.897445); // map.centerAndZoom(point, 15); map.enableScrollWheelZoom(true); //开启鼠标滚轮缩放 map.addControl(new BMap.NavigationControl()); map.addControl(new BMap.NavigationControl()); map.addControl(new BMap.ScaleControl()); map.addControl(new BMap.OverviewMapControl()); map.addControl(new BMap.MapTypeControl()); //地址解析类 var gc = new BMap.Geocoder(); //显示地址信息窗口 function showLocationInfo(pt, rs) { var addComp = rs.addressComponents; $("#longitude").val(pt.lng); $("#latitude").val(pt.lat); console.log('经纬度:' + pt.lng + ' ' + pt.lat); } $(function() { var provinceName = $(this).val(); getNowPos(); getLocal("province=" + provinceName); }); //搜索框按键查询 $(document).keyup(function(e) { //捕获文档对象的按键弹起事件 if(e.keyCode == 13) { //按键信息对象以参数的形式传递进来了 //此处编写用户敲回车后的代码 $("span.search-icon").click(); } }); function getNowPos() { var geolocation = new BMap.Geolocation(); geolocation.getCurrentPosition(function(r) { if(this.getStatus() == BMAP_STATUS_SUCCESS) { var marker = new BMap.Marker(r.point); map.addOverlay(marker); //标出所在地 map.panTo(r.point); //地图中心移动 var point = new BMap.Point(r.point.lng, r.point.lat); //用所定位的经纬度查找所在地省市街道等信息 var gc = new BMap.Geocoder(); gc.getLocation(point, function(rs) { var addComp = rs.addressComponents; $("#province,#city,#county").html("【" + addComp['province'] + "】"); console.log("【" + addComp['province'] + "】") $("#province option[value='" + addComp['province'] + "']").attr("selected", true); getLocal("province=" + addComp['province']); }); } else { // alert("信息错误") } }, { enableHighAccuracy: true }) } var marker; function deletePoint() { var allOverlay = map.getOverlays(); for(var i = 0; i < allOverlay.length; i++) { map.removeOverlay(allOverlay[i]); } } function getLocal(urlData) { //Ajax.call('/Marketing2.php?act=getlocal',urlData,returnToCartResponse,'POST', 'TEXT', true, true); // function returnToCartResponse(result){ result = [{ "id": "522", "province": "美国", "areaLists": "", "shopname": "11111111111(上海)有限公司", "shopaddr": "上海市嘉定区曹安公路", "name": "张老师1", "dianhua": "123465464", "location": "-77.036871,38.907192" }, { "id": "516", "province": "中国", "areaLists": "上海市", "shopname": "22222222222(上海)有限公司", "shopaddr": "上海市嘉定区曹安公路", "name": "张老师2", "dianhua": "123465464", "location": "121.223968,31.281952" }, { "id": "516", "province": "中国", "areaLists": "湖北省", "shopname": "3333333333(上海)有限公司", "shopaddr": "上海市嘉定区曹安公路", "name": "张老师3", "dianhua": "123465464", "location": "114.27613872848,30.587851596764" }, { "id": "517", "province": "中国", "areaLists": "湖北省", "shopname": "444444444444(上海)有限公司", "shopaddr": "上海市嘉定区曹安公路", "name": "张老师4", "dianhua": "123465464", "location": "114.40624298256,30.510448272271" }, { "id": "518", "province": "", "areaLists": "", "shopname": "555555555(上海)有限公司", "shopaddr": "上海市嘉定区曹安公路", "name": "张老师", "dianhua": "123465464", "location": "112.14366834884,32.058976142962" }, { "id": "519", "province": "", "areaLists": "", "shopname": "6666666666(上海)有限公司", "shopaddr": "上海市嘉定区曹安公路", "name": "张老师", "dianhua": "123465464", "location": "110.7906542215,32.661244015944" }, { "id": "520", "province": "", "areaLists": "", "shopname": "77777777777777(上海)有限公司", "shopaddr": "上海市嘉定区曹安公路", "name": "张老师", "dianhua": "123465464", "location": "109.4926968993,30.278629959823" }, { "id": "521", "province": "中国", "areaLists": "湖南省", "shopname": "88888888888(上海)有限公司", "shopaddr": "上海市嘉定区曹安公路", "name": "张老师8", "dianhua": "123465464", "location": "112.26757444672,30.312061976048" } ]; reg = eval(result); console.log(reg) if(reg.length < 1) { $("#store-list").children().remove(); return false; } var storeList = ""; $("#store-num").html(reg.length); map.clearOverlays(); var pointsView = []; for(var i = 0; i < reg.length; i++) { var n = i + 1; var p = reg[i]['location'].split(','); var point = new BMap.Point(p[0], p[1]); pointsView.push(point); var content = "<p style='font-weight:600'>" + reg[i].shopname + "</p><p style='line-height: 20px;'>地址:" + reg[i].shopaddr + "</p><p style='line-height: 20px;'>联系人:" + reg[i].name + "</p><p style='line-height: 20px;'>联系电话:" + reg[i].dianhua + "</p>"; var myIcon = new BMap.Icon("bd1.png", new BMap.Size(21, 33), { offset: new BMap.Size(10, 25), // 指定定位位置 }); var marker = new BMap.Marker(point, { icon: myIcon }); // 创建标注 var label = new BMap.Label(n, { offset: new BMap.Size(0, 3) }); label.setStyle({ width: '21px', background: 'none', color: '#fff', border: 'none', textAlign: 'center' //只要对label样式进行设置就可达到在标注图标上显示数字的效果 }); marker.setLabel(label); //显示地理名称 a map.addOverlay(marker); addClickHandler(content, marker); storeList += '<li onclick="to(this,' + i + ',' + p[0] + ',' + p[1] + ',\'' + reg[i].shopname + '\',\'' + reg[i].shopaddr + '\',\'' + reg[i].name + '\')"><span class="location-num">' + n + '</span><div class="location-addr">' + '<h3>' + reg[i].shopname + '</h3> <p class="addr-info">' + reg[i].shopaddr + '</p></div>' + '</li>'; } //让所有点在视野范围内 map.setViewport(pointsView); $("#store-list").children().remove(); $("#store-list").append(storeList); // } } var opts = { width: 250, // 信息窗口宽度 height: 50, // 信息窗口高度 title: "<p style='color: red;'></p>", // 信息窗口标题 enableMessage: true //设置允许信息窗发送短息 }; //点击将信息内容加入白标注中 function addClickHandler(content, marker) { marker.addEventListener("click", function(e) { marker.setAnimation(null); openInfo(content, e); }); } function openInfo(content, e) { var p = e.target; var point = new BMap.Point(p.getPosition().lng, p.getPosition().lat); var infoWindow = new BMap.InfoWindow(content, opts); // 创建信息窗口对象 map.openInfoWindow(infoWindow, point); //开启信息窗口 } //移动到某一坐标点 function to(obj, i, x, y, shopname, shopaddr) { var allOverlay = map.getOverlays(); var last = allOverlay.length - 1; map.removeOverlay(allOverlay[last]); $(obj).addClass("addMove"); $(obj).siblings().removeClass("addMove"); var point = new BMap.Point(x, y); map.centerAndZoom(point, 15); var myIcon = new BMap.Icon("bd2.png", new BMap.Size(21, 33), { offset: new BMap.Size(10, 25), // 指定定位位置 }); var marker = new BMap.Marker(point, { icon: myIcon }); // 创建标注 var n = i + 1; var label = new BMap.Label(n, { offset: new BMap.Size(0, 3) }); label.setStyle({ width: '21px', background: 'none', color: '#fff', border: 'none', textAlign: 'center' //只要对label样式进行设置就可达到在标注图标上显示数字的效果 }); marker.setLabel(label); //显示地理名称 a map.addOverlay(marker); var content = "<p style='font-weight:600'>" + shopname + "</p><p style='line-height: 20px;'>地址:" + shopaddr + "</p><p style='line-height: 20px;'>联系人:" + name + "</p>"; addClickHandler(content, marker); } var _area = { //keyword:'', _areaLists: $(".areaLists"), _address: $("#address"), unChecked: function(val) { return(val == '' || typeof(val) == 'undefined' || val == null || val == '国家' || val == '地级市') ? false : true; }, list: function() { var _joinArea = ''; for(var i = 0; i < this._areaLists.length; i++) { if(_area.unChecked(this._areaLists[i].value)) { _joinArea += this._areaLists[i].value; } } if(_area.unChecked(this._address.val())) { _joinArea += ' ' + this._address.val(); _joinArea = this._address.val(); console.log('here'); } //console.log(_joinArea); return _joinArea; }, init: function() { //绑定百度地图 var _this = _area.list(); $('.liSpan').html(_area.list()) console.log('_this=' + _this); //定义local var local = new BMap.LocalSearch(map, { renderOptions: { map: map, autoViewport: true } }); local.setSearchCompleteCallback(function(searchResult) { var poi = searchResult.getPoi(0); // document.getElementById("result_").value = poi.point.lng + "," + poi.point.lat; map.centerAndZoom(poi.point, 11); gc.getLocation(poi.point, function(rs) { showLocationInfo(poi.point, rs); }); }); local.search(_this); } } //搜索地址并赋值给form $("#province,#city").change(function() { deletePoint(); _area.init(); }); //全局变量:存储address字符串长度做判断 var _thisLength = ''; $("#address").keydown(function() { _thisLength = $(this).val().length; // console.log('鼠标按下之前:' + _thisLength); }) $("#address").keyup(function() { var _newLength = $(this).val().length; // console.log('鼠标按下之后:' + _thisLength); var timer = setTimeout(function() { if(_thisLength <= _newLength) { deletePoint(); _area.init(); } else { clearTimeout(timer); } }, 1000); }) $("#address").blur(function() { deletePoint(); _area.init(); }) //搜索 $("#btn").click(function() { //循环数据 var html = ''; for(let j = 0; j < result.length; j++) { var es = result[j]; console.log(es.province) console.log($('#province').val()) //判断是否是中国 if($('#province').val() !== '中国') { if($('#province').val() == es.province) { // var html = ''; html += `<li>${es.name}/${es.dianhua}</li>`; $("#initData").html(html) } } else { if($('#city').val() == es.areaLists) { html += `<li>${es.name}/${es.dianhua}</li>`; $("#initData").html(html) } } } }) </script>
area.js
/* * 联动 js版 */ function Dsy() { this.Items = {}; } Dsy.prototype.add = function(id, iArray) { this.Items[id] = iArray; // console.log(this.Items[id]) } Dsy.prototype.Exists = function(id) { if(typeof(this.Items[id]) == "undefined") return false; return true; } function change(v) { var str = "0"; for(var i = 0; i < v; i++) { str += ("_" + (document.getElementById(s[i]).selectedIndex - 1)); }; var ss = document.getElementById(s[v]); with(ss) { length = 0; options[0] = new Option(opt0[v], opt0[v]); if(v && document.getElementById(s[v - 1]).selectedIndex > 0 || !v) { if(dsy.Exists(str)) { ar = dsy.Items[str]; for(var i = 0; i < ar.length; i++) { options[length] = new Option(ar[i], ar[i]); } //end for if(v) { options[0].selected = true; } } } //end if v if(++v < s.length) { change(v); } } //End with } var dsy = new Dsy(); dsy.add("0_0", ["北京市", "天津市", "上海市", "重庆市", "河北省", "山西省", "内蒙古", "辽宁省", "吉林省", "黑龙江省", "江苏省", "浙江省", "安徽省", "福建省", "江西省", "山东省", "河南省", "湖北省", "湖南省", "广东省", "广西", "海南省", "四川省", "贵州省", "云南省", "西藏", "陕西省", "甘肃省", "青海省", "宁夏", "新疆", "香港", "澳门", "台湾省"]); dsy.add("0", ["中国", "阿尔巴尼亚", "阿尔及利亚", "阿富汗", "阿根廷", "阿拉伯联合酋长国", "阿鲁巴", "阿曼", "阿塞拜疆", "阿森松岛", "埃及", "埃塞俄比亚", "爱尔兰", "爱沙尼亚", "安道尔", "安哥拉", "安圭拉", "安提瓜岛和巴布达", "澳大利亚", "奥地利", "奥兰群岛", "巴巴多斯岛", "巴布亚新几内亚", "巴哈马", "巴基斯坦", "巴拉圭", "巴勒斯坦", "巴林", "巴拿马", "巴西", "白俄罗斯", "百慕大", "保加利亚", "北马里亚纳群岛", "贝宁", "比利时", "冰岛", "波多黎各", "波兰", "玻利维亚", "波斯尼亚和黑塞哥维那", "博茨瓦纳", "伯利兹", "不丹", "布基纳法索", "布隆迪", "布韦岛", "朝鲜", "丹麦", "德国", "东帝汶", "多哥", "多米尼加", "多米尼加共和国", "俄罗斯", "厄瓜多尔", "厄立特里亚", "法国", "法罗群岛", "法属波利尼西亚", "法属圭亚那", "法属南部领地", "梵蒂冈", "菲律宾", "斐济", "芬兰", "佛得角", "弗兰克群岛", "冈比亚", "刚果", "刚果民主共和国", "哥伦比亚", "哥斯达黎加", "格恩西岛", "格林纳达", "格陵兰", "古巴", "瓜德罗普", "关岛", "圭亚那", "哈萨克斯坦", "海地", "韩国", "荷兰", "荷属安地列斯", "赫德和麦克唐纳群岛", "洪都拉斯", "基里巴斯", "吉布提", "吉尔吉斯斯坦", "几内亚", "几内亚比绍", "加拿大", "加纳", "加蓬", "柬埔寨", "捷克共和国", "津巴布韦", "喀麦隆", "卡塔尔", "开曼群岛", "科科斯群岛", "科摩罗", "科特迪瓦", "科威特", "克罗地亚", "肯尼亚", "库克群岛", "拉脱维亚", "莱索托", "老挝", "黎巴嫩", "利比里亚", "利比亚", "立陶宛", "列支敦士登", "留尼旺岛", "卢森堡", "卢旺达", "罗马尼亚", "马达加斯加", "马尔代夫", "马耳他", "马拉维", "马来西亚", "马里", "马其顿", "马绍尔群岛", "马提尼克", "马约特岛", "曼岛", "毛里求斯", "毛里塔尼亚", "美国", "美属萨摩亚", "美属外岛", "蒙古", "蒙特塞拉特", "孟加拉", "密克罗尼西亚", "秘鲁", "缅甸", "摩尔多瓦", "摩洛哥", "摩纳哥", "莫桑比克", "墨西哥", "纳米比亚", "南非", "南极洲", "南乔治亚和南桑德威奇群岛", "瑙鲁", "尼泊尔", "尼加拉瓜", "尼日尔", "尼日利亚", "纽埃", "挪威", "诺福克", "帕劳群岛", "皮特凯恩", "葡萄牙", "乔治亚", "日本", "瑞典", "瑞士", "萨尔瓦多", "萨摩亚", "塞尔维亚,黑山", "塞拉利昂", "塞内加尔", "塞浦路斯", "塞舌尔", "沙特阿拉伯", "圣诞岛", "圣多美和普林西比", "圣赫勒拿", "圣基茨和尼维斯", "圣卢西亚", "圣马力诺", "圣皮埃尔和米克隆群岛", "圣文森特和格林纳丁斯", "斯里兰卡", "斯洛伐克", "斯洛文尼亚", "斯瓦尔巴和扬马廷", "斯威士兰", "苏丹", "苏里南", "所罗门群岛", "索马里", "塔吉克斯坦", "泰国", "坦桑尼亚", "汤加", "特克斯和凯克特斯群岛", "特里斯坦达昆哈", "特立尼达和多巴哥", "突尼斯", "图瓦卢", "土耳其", "土库曼斯坦", "托克劳", "瓦利斯和福图纳", "瓦努阿图", "危地马拉", "维尔京群岛,美属", "维尔京群岛,英属", "委内瑞拉", "文莱", "乌干达", "乌克兰", "乌拉圭", "乌兹别克斯坦", "西班牙", "希腊", "新加坡", "新喀里多尼亚", "新西兰", "匈牙利", "叙利亚", "牙买加", "亚美尼亚", "也门", "伊拉克", "伊朗", "以色列", "意大利", "印度", "印度尼西亚", "英国", "英属印度洋领地", "约旦", "越南", "赞比亚", "泽西岛", "乍得", "直布罗陀", "智利", "中非共和国" ]); //三个select的name var s = ["province", "city", "county"]; //初始值 var opt0 = ["国家", "地级市", "市、县级市"]; //新增//初始化函数 function _init_area() { for(var i = 0; i < s.length - 1; i++) { document.getElementById(s[i]).onchange = new Function("change(" + (i + 1) + ")"); } change(0); } _init_area();