百度地图Api进阶教程-用户自定义数据(标记和搜索)7.html

转载:http://blog.csdn.net/sd0902/article/details/8478427


[html]  view plain copy
  1. <!DOCTYPE html>  
  2. <html>  
  3. <head>  
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
  5. <style type="text/css">  
  6. body, html,#allmap {width: 100%;height: 100%;overflow: hidden;}  
  7. #l-map{height:100%;width:78%;float:left;border-right:2px solid #bcbcbc;}  
  8. #r-result{height:100%;width:20%;float:left;}  
  9. </style>  
  10. <script type="text/javascript" src="http://api.map.baidu.com/api?v=1.4"></script>  
  11. <title>检索用户静态数据</title>  
  12. </head>  
  13. <body>  
  14. <div id="l-map"></div>  
  15. <div id="r-result">  
  16.     <input id="type1" type="radio" name="type" value="single" /><label for="type1">精准查找</label>  
  17.     <input id="type2" type="radio" name="type" value="more" checked="checked" /><label for="type2">模糊查找</label><br />  
  18.     <input type="button" onclick="reset()" value="重置数据" /></br>  
  19.     <input id="keyword" type="text" style="width:150px;" value=""/>   
  20.     <input type="button" value="搜索" onclick="search('type','keyword')"/>  
  21. </div>  
  22. </body>  
  23. </html>  
  24. <script type="text/javascript">  
  25. //  标注点数组  
  26. var BASEDATA = [  
  27.         {title:"奥亚酒店",content:"北苑路169号",point:"116.422792|40.009471",isOpen:0,icon:"http://static.blog.csdn.net/images/medal/holdon_s.gif"},  
  28.         {title:"珀丽酒店",content:"将台西路8号",point:"116.484289|39.97936",isOpen:0,icon:"http://static.blog.csdn.net/images/medal/holdon_s.gif"},  
  29.         {title:"贵国酒店",content:"左家庄1号",point:"116.454494|39.964011",isOpen:0,icon:"http://static.blog.csdn.net/images/medal/holdon_s.gif"},  
  30.         {title:"科通酒店",content:"民族园路8号院2号楼",point:"116.394601|39.987925",isOpen:0,icon:"http://static.blog.csdn.net/images/medal/holdon_s.gif"},  
  31.         {title:"将台酒店",content:"酒仙桥路甲12号",point:"116.496024|39.976864",isOpen:0,icon:"http://static.blog.csdn.net/images/medal/holdon_s.gif"},  
  32.         {title:"成宏酒店",content:"北四环东路惠新东桥西北侧",point:"116.429445|39.995392",isOpen:0,icon:"http://static.blog.csdn.net/images/medal/holdon_s.gif"},  
  33.         {title:"华商酒店",content:"延静西里2号",point:"116.488962|39.921939",isOpen:0,icon:"http://static.blog.csdn.net/images/medal/holdon_s.gif"},  
  34.         {title:"标华酒店",content:"北京市 朝阳区红庙路柴家湾1号",point:"116.489284|39.92104",isOpen:0,icon:"http://static.blog.csdn.net/images/medal/holdon_s.gif"},  
  35.         {title:"万程酒店",content:"天坛路89号",point:"116.411762|39.89457",isOpen:0,icon:"http://static.blog.csdn.net/images/medal/holdon_s.gif"},  
  36.         {title:"黎昌酒店",content:"永定门外彭庄乙58号",point:"116.393532|39.876272",isOpen:0,icon:"http://static.blog.csdn.net/images/medal/holdon_s.gif"},  
  37.         {title:"北京图书馆",content:"北京市海淀区白石桥路39号",point:"116.329593|39.952398",isOpen:0,icon:"http://static.blog.csdn.net/images/medal/holdon_s.gif"},  
  38.         {title:"海淀图书馆",content:"丹棱街16西门",point:"116.315551|39.984388",isOpen:0,icon:"http://static.blog.csdn.net/images/medal/holdon_s.gif"},  
  39.         {title:"北京图书馆",content:"北京市西城区文津街附近",point:"116.391713|39.929007",isOpen:0,icon:"http://static.blog.csdn.net/images/medal/holdon_s.gif"},  
  40.         {title:"首都图书馆",content:"东三环南路88号",point:"116.469899|39.87684",isOpen:0,icon:"http://static.blog.csdn.net/images/medal/holdon_s.gif"},  
  41.         {title:"国家图书馆",content:"中关村南大街33号",point:"116.331292|39.949031",isOpen:0,icon:"http://static.blog.csdn.net/images/medal/holdon_s.gif"},  
  42.         {title:"崇文区图书馆",content:"北京市崇文区花市大街113号(乐天玛特超市旁)的敕建火德真君庙内",point:"116.427671|39.903568",isOpen:0,icon:"http://static.blog.csdn.net/images/medal/holdon_s.gif"},  
  43.         {title:"朝阳区图书馆",content:"北京市朝阳区朝外小庄金台里17号",point:"116.47766|39.922295",isOpen:0,icon:"http://static.blog.csdn.net/images/medal/holdon_s.gif"},  
  44.         {title:"宣武区图书馆",content:"教子胡同8号",point:"116.374561|39.894302",isOpen:0,icon:"http://static.blog.csdn.net/images/medal/holdon_s.gif"},  
  45.         {title:"东城区图书馆",content:"交道口东大街85号",point:"116.41927|39.9474",isOpen:0,icon:"http://static.blog.csdn.net/images/medal/holdon_s.gif"},  
  46.         {title:"西城区图书馆",content:"北京市西城区后广平胡同26号",point:"116.368099|39.942332",isOpen:0,icon:"http://static.blog.csdn.net/images/medal/holdon_s.gif"}  
  47.      ]  
  48.        
  49. //创建和初始化地图函数:  
  50. function initMap(){  
  51.     window.map = new BMap.Map("l-map");  
  52.     map.centerAndZoom(new BMap.Point(116.412318,39.887037),12);  
  53.     map.enableScrollWheelZoom();  
  54.     map.addControl(new BMap.NavigationControl());  
  55.     //创建自定义搜索类  
  56.     window.searchClass = new SearchClass();  
  57.     searchClass.setData(BASEDATA)  
  58.     reset();  
  59. }  
  60.   
  61. //搜索方法 param{searchTypeRadio_name:搜索radio的名字,keyword_name:搜索文本框的id}  
  62. window.search = function(searchTypeRadio_name,keyword_name){  
  63.     //获取页面dom  
  64.     var searchType = document.getElementsByName(searchTypeRadio_name);  
  65.     var keyword = document.getElementById(keyword_name).value;  
  66.     //获取dom的值  
  67.     var isLikeSearch;  
  68.     for(var i = 0; i < searchType.length; i++){  
  69.         if(searchType[i].checked){  
  70.             isLikeSearch = searchType[i].value;  
  71.         }  
  72.     }  
  73.     //开始搜索  
  74.     searchClass.trim(isLikeSearch) == "" && (t_v = "single"); //去掉搜索关键字的html标签  
  75.     var dd = searchClass.search({k:"title",d:keyword,t:isLikeSearch,s:""});  
  76.     addMarker(dd);//向地图中添加marker  
  77. }  
  78. //重置返回所有结果  
  79. window.reset = function(){  
  80.     //s:{''只返回找到的结果|all返回所有的}   
  81.     var dd = searchClass.search({k:"title",d:"显示全部",t:"single",s:"all"});  
  82.     addMarker(dd);//向地图中添加marker  
  83. }  
  84.   
  85. //创建marker  
  86. window.addMarker = function (data){  
  87.     map.clearOverlays();  
  88.     for(var i=0;i<data.length;i++){  
  89.         var json = data[i];  
  90.         var p0 = json.point.split("|")[0];  
  91.         var p1 = json.point.split("|")[1];  
  92.         var point = new BMap.Point(p0,p1);  
  93.         var iconImg = new BMap.Icon(json.icon, new BMap.Size(22, 22));    
  94.         var marker = new BMap.Marker(point,{icon:iconImg});  
  95.         var iw = createInfoWindow(i);  
  96.         var label = new BMap.Label(json.title,{"offset":new BMap.Size(22, 22)});  
  97.         marker.setLabel(label);  
  98.         map.addOverlay(marker);  
  99.         label.setStyle({  
  100.                     borderColor:"#808080",  
  101.                     color:"#333",  
  102.                     cursor:"pointer"  
  103.         });  
  104.   
  105.         (function(){  
  106. var _json = json;  
  107. var _iw = createInfoWindow(_json);  
  108. var _marker = marker;  
  109. _marker.addEventListener("click",function(){  
  110.     this.openInfoWindow(_iw);  
  111.    });  
  112.    _iw.addEventListener("open",function(){  
  113.     _marker.getLabel().hide();  
  114.    })  
  115.    _iw.addEventListener("close",function(){  
  116.     _marker.getLabel().show();  
  117.    })  
  118. label.addEventListener("click",function(){  
  119.     _marker.openInfoWindow(_iw);  
  120.    })  
  121. if(!!json.isOpen){  
  122.  label.hide();  
  123.  _marker.openInfoWindow(_iw);  
  124. }  
  125. })()  
  126.     }  
  127. }  
  128. //创建InfoWindow  
  129. function createInfoWindow(json){  
  130.     var iw = new BMap.InfoWindow("<b class='iw_poi_title' title='" + json.title + "'>" + json.title + "</b><div class='iw_poi_content'>"+json.content+"</div>");  
  131.     return iw;  
  132. }  
  133. //创建一个Icon  
  134. function createIcon(json){  
  135.     var icon = new BMap.Icon("http://dev.baidu.com/wiki/static/map/API/img/ico-marker.gif", new BMap.Size(json.w,json.h),{imageOffset: new BMap.Size(-json.l,-json.t),infoWindowAnchor:new BMap.Size(json.lb+5,1),offset:new BMap.Size(json.x,json.h)})  
  136.     return icon;  
  137. }  
  138.   
  139. function SearchClass(data){  
  140.     this.datas = data;  
  141. }  
  142. // rule = {k:"title",d:"酒店",s:"all",t:"single"}=>t{single:(key=?),more:(key like[%?%])}//t:{single|more},s{all|!all}  
  143. // rule = {k:"名字",d:"搜索关键字",t:{single名字精确查找|more名字模糊匹配查找},s{''只返回找到的结果|all返回所有的}   
  144. SearchClass.prototype.search = function(rule){  
  145.     if(this.datas == null){alert("数据不存在!");return false;}  
  146.     if(this.trim(rule) == "" || this.trim(rule.d) == "" || this.trim(rule.k) == "" || this.trim(rule.t) == ""){alert("请指定要搜索内容!");return false;}  
  147.     var reval = [];  
  148.     var datas = this.datas;  
  149.     var len = datas.length;  
  150.     var me = this;  
  151.     var ruleReg = new RegExp(this.trim(rule.d));  
  152.     var hasOpen = false;  
  153.       
  154.     var addData = function(data,isOpen){  
  155.         // 第一条数据打开信息窗口  
  156.         if(isOpen && !hasOpen){  
  157.             hasOpen = true;  
  158.             data.isOpen = 1;  
  159.         }else{  
  160.             data.isOpen = 0;  
  161.         }  
  162.         reval.push(data);  
  163.     }  
  164.     var getData = function(data,key){  
  165.         var ks = me.trim(key).split(/\./);  
  166.         var i = null,s = "data";  
  167.         if(ks.length == 0){  
  168.             return data;  
  169.         }else{  
  170.             for(var i = 0; i < ks.length; i++){  
  171.                 s += '["' + ks[i] + '"]';  
  172.             }  
  173.             return eval(s);  
  174.         }  
  175.     }  
  176.     for(var cnt = 0; cnt < len; cnt++){  
  177.         var data = datas[cnt];  
  178.         var d = getData(data,rule.k);  
  179.         if(rule.t == "single" && rule.d == d){  
  180.             addData(data,true);  
  181.         }else if(rule.t != "single" && ruleReg.test(d)){  
  182.             addData(data,true);  
  183.         }else if(rule.s == "all"){  
  184.             addData(data,false);  
  185.         }  
  186.     }  
  187.     return reval;  
  188. }  
  189. SearchClass.prototype.setData = function(data){  
  190.     this.datas = data;  
  191. }  
  192. SearchClass.prototype.trim = function(str){  
  193.  if(str == null){str = "";}else{ str = str.toString();}  
  194.     return str.replace(/(^[\s\t\xa0\u3000]+)|([\u3000\xa0\s\t]+$)/g, "");  
  195. }     
  196.   
  197. initMap();//创建和初始化地图  
  198. </script>  

你可能感兴趣的:(百度地图Api进阶教程-用户自定义数据(标记和搜索)7.html)