• 地图查询


    通过api实例了解一些接口功能。比如常用的动态查询信息加载,地图搜索查询地址。自动查询通过["AMap.Autocomplete"]插件实现,并监听一个回调函数autocomplete_CallBack,查询成功后,执行函数显示查询信息。

     1 //输入提示 
     2 function autoSearch() { 
     3     var keywords = document.getElementById("keyword").value; 
     4     var auto; 
     5     //加载输入提示插件 
     6     mapObj.plugin(["AMap.Autocomplete"], function() { 
     7         var autoOptions = { 
     8             city: "" //城市,默认全国 
     9         }; 
    10         auto = new AMap.Autocomplete(autoOptions); 
    11         //查询成功时返回查询结果 
    12         if ( keywords.length > 0) { 
    13             AMap.event.addListener(auto,"complete",autocomplete_CallBack); 
    14             auto.search(keywords); 
    15         } 
    16         else { 
    17             document.getElementById("result1").style.display = "none"; 
    18         } 
    19     }); 
    20 } 

    回调函数autocomplete_CallBack:

     1 //输出输入提示结果的回调函数 
     2 function autocomplete_CallBack(data) { 
     3     var resultStr = ""; 
     4     var tipArr = []; 
     5     tipArr = data.tips; 
     6     if (tipArr.length>0) {                   
     7         for (var i = 0; i < tipArr.length; i++) { 
     8             resultStr += "<div id='divid" + (i + 1) + "' onmouseover='openMarkerTipById(" + (i + 1) 
     9                         + ",this)' onclick='selectResult(" + i + ")' onmouseout='onmouseout_MarkerStyle(" + (i + 1) 
    10                         + ",this)' style="font-size: 13px;cursor:pointer;padding:5px 5px 5px 5px;">" + tipArr[i].name + "<span style='color:#C1C1C1;'>"+ tipArr[i].district + "</span></div>"; 
    11         } 
    12     } 
    13     else  { 
    14         resultStr = " π__π 亲,人家找不到结果!<br />要不试试:<br />1.请确保所有字词拼写正确<br />2.尝试不同的关键字<br />3.尝试更宽泛的关键字"; 
    15     } 
    16       
    17     document.getElementById("result1").innerHTML = resultStr; 
    18     document.getElementById("result1").style.display = "block"; 
    19 } 

    回调函数中,data的数据格式为:

    其中tips节点展开格式为:adcode、district、name

    函数调用tips数据tipArr = data.tips; tipArr[i].name等用于显示自动查询的结果。效果如图,在查询框中输入地址后,自动加载一系列相关地址:

    让地图加载我们要查询的地理信息,通过["AMap.PlaceSearch"]插件实现,同样需要一个回调函数,在完成查询后执行图层的清除,重新加载,新图层和标记。绑定在按钮点击事件:

    1 function search_place(){
    2     var text = $('#keyword').val();
    3      //根据选择的输入提示关键字查询 
    4     mapObj.plugin(["AMap.PlaceSearch"], function() {         
    5         var msearch = new AMap.PlaceSearch();  //构造地点查询类 
    6         AMap.event.addListener(msearch, "complete", placeSearch_CallBack); //查询成功时的回调函数 
    7         msearch.search(text);  //关键字查询查询 
    8     });
    9 }

    回调函数placeSearch_CallBack:

    添加新标记addmarker(i, poiArr[i]); 其中poiArr[i]为pois里的object

     1 //输出关键字查询结果的回调函数 
     2 function placeSearch_CallBack(data) { 
     3     //清空地图上的InfoWindow和Marker 
     4     windowsArr = []; 
     5     marker     = []; 
     6     mapObj.clearMap(); 
     7     var resultStr1 = ""; 
     8     var poiArr = data.poiList.pois; 
     9     var resultCount = poiArr.length; 
    10     for (var i = 0; i < resultCount; i++) { 
    11         resultStr1 += "<div id='divid" + (i + 1) + "' onmouseover='openMarkerTipById1(" + i + ",this)' onmouseout='onmouseout_MarkerStyle(" + (i + 1) + ",this)' style="font-size: 12px;cursor:pointer;padding:0px 0 4px 2px; border-bottom:1px solid #C1FFC1;"><table><tr><td><img src="http://webapi.amap.com/images/" + (i + 1) + ".png"></td>" + "<td><h3><font color="#00a6ac">名称: " + poiArr[i].name + "</font></h3>"; 
    12             resultStr1 += TipContents(poiArr[i].type, poiArr[i].address, poiArr[i].tel) + "</td></tr></table></div>"; 
    13             addmarker(i, poiArr[i]); 
    14     } 
    15     mapObj.setFitView(); 
    16     document.getElementById("result").innerHTML = resultStr1; 
    17     document.getElementById("result").style.display = "block"; 
    18 } 

    其中data的格式为:

    效果如图:

    全部代码:

      1 <!DOCTYPE html>
      2 <html>
      3   <head>
      4     <title>Bootstrap 101 Template</title>
      5     <meta name="viewport" content="width=device-width, initial-scale=1.0">
      6     <!-- Bootstrap -->
      7     <link rel="stylesheet" href="/css/bootstrap.min.css">
      8     <link rel="stylesheet" type="text/css" href="http://developer.amap.com/Public/css/demo.Default.css" />  
      9     <script language="javascript" src="http://webapi.amap.com/maps?v=1.2&key=5c6f2fc9074238d31a5ec24d8c0146f2"></script> 
     10 
     11     <!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
     12     <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
     13     <!--[if lt IE 9]>
     14         <script src="http://cdn.bootcss.com/html5shiv/3.7.0/html5shiv.min.js"></script>
     15         <script src="http://cdn.bootcss.com/respond.js/1.3.0/respond.min.js"></script>
     16     <![endif]-->
     17   </head>
     18   <body>
     19       <div class="container">
     20     <p class="text-muted">LBS</p>
     21   <div class="row">
     22     
     23     <div class="col-lg-6">
     24       <div class="input-group">
     25         <input type="text" id="keyword" class="form-control">
     26         <span class="input-group-btn">
     27           <button class="btn btn-info" type="button" onclick="search_place();">LBSearch!</button>
     28         </span>
     29       </div><!-- /input-group -->
     30       <div id="result1" name="result1" style="overflow: auto;  95%; border: 1px solid gray;display: none;"></div> 
     31     </div><!-- /.col-lg-6 -->
     32     </div>
     33     <div class="row">
     34       <div class="col-xs-12 col-sm-6 col-md-4 ">
     35         <p class="text-muted">查询结果:</p>
     36         <div id="result"></div> 
     37      </div>
     38       <div class="col-sm-6 col-md-8 ">
     39         <div id="iCenter" ></div>
     40     </div>
     41 </div>
     42   </div><!-- /.row -->
     43  
     44     <!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
     45     <script src="http://cdn.bootcss.com/jquery/1.10.2/jquery.min.js"></script>
     46     <!-- Include all compiled plugins (below), or include individual files as needed -->
     47     <script src="/js/bootstrap.min.js"></script>
     48   </body>
     49 </html>
     50 <script>
     51 var mapObj; 
     52 mapInit();
     53 //地图加载 
     54 function mapInit() { 
     55     var opt = { 
     56         level: 13, //设置地图缩放级别   
     57         center: new AMap.LngLat(121.455214,31.248771) //设置地图中心点  
     58     } 
     59     mapObj = new AMap.Map("iCenter", opt); 
     60    //判断浏览器类型,加载函数
     61     if (navigator.userAgent.indexOf("MSIE") > 0) { 
     62         document.getElementById("keyword").onpropertychange = autoSearch; 
     63     } 
     64     else { 
     65         document.getElementById("keyword").oninput = autoSearch; 
     66     } 
     67 } 
     68 //输入提示 
     69 function autoSearch() { 
     70     var keywords = $("#keyword").val(); 
     71     var auto; 
     72     //加载输入提示插件 
     73     mapObj.plugin(["AMap.Autocomplete"], function() { 
     74         var autoOptions = { 
     75             city: "" //城市,默认全国 
     76         }; 
     77         auto = new AMap.Autocomplete(autoOptions); 
     78         //查询成功时返回查询结果 
     79         if ( keywords.length > 0) { 
     80             AMap.event.addListener(auto,"complete",autocomplete_CallBack); 
     81             auto.search(keywords); 
     82         } 
     83         else { 
     84             document.getElementById("result1").style.display = "none"; 
     85         } 
     86     }); 
     87 } 
     88 
     89 //输出输入提示结果的回调函数 
     90 function autocomplete_CallBack(data) { 
     91     var resultStr = ""; 
     92     var tipArr = []; 
     93     tipArr = data.tips; 
     94     if (tipArr.length>0) {                   
     95         for (var i = 0; i < tipArr.length; i++) { 
     96             resultStr += "<div id='divid" + (i + 1) + "' onmouseover='openMarkerTipById(" + (i + 1) 
     97                         + ",this)' onclick='selectResult(" + i + ")' onmouseout='onmouseout_MarkerStyle(" + (i + 1) 
     98                         + ",this)' style="font-size: 13px;cursor:pointer;padding:5px 5px 5px 5px;">" + tipArr[i].name + "<span style='color:#C1C1C1;'>"+ tipArr[i].district + "</span></div>"; 
     99         } 
    100     } 
    101     else  { 
    102         resultStr = " π__π 亲,人家找不到结果!<br />要不试试:<br />1.请确保所有字词拼写正确<br />2.尝试不同的关键字<br />3.尝试更宽泛的关键字"; 
    103     } 
    104       
    105     document.getElementById("result1").innerHTML = resultStr; 
    106     document.getElementById("result1").style.display = "block"; 
    107 } 
    108    
    109 //输入提示框鼠标滑过时的样式 
    110 function openMarkerTipById(pointid, thiss) {  //根据id打开搜索结果点tip   
    111     thiss.style.background = '#CAE1FF'; 
    112 } 
    113    
    114 //输入提示框鼠标移出时的样式 
    115 function onmouseout_MarkerStyle(pointid, thiss) {  //鼠标移开后点样式恢复   
    116     thiss.style.background = ""; 
    117 } 
    118    
    119 //从输入提示框中选择关键字并查询 
    120 function selectResult(index) { 
    121     if (navigator.userAgent.indexOf("MSIE") > 0) { 
    122         document.getElementById("keyword").onpropertychange = null; 
    123         document.getElementById("keyword").onfocus = focus_callback; 
    124     } 
    125     //截取输入提示的关键字部分 
    126     var text = document.getElementById("divid" + (index + 1)).innerHTML.replace(/<[^>].*?>.*</[^>].*?>/g,"");; 
    127     document.getElementById("keyword").value = text; 
    128     document.getElementById("result1").style.display = "none"; 
    129     // //根据选择的输入提示关键字查询 
    130     // mapObj.plugin(["AMap.PlaceSearch"], function() {         
    131     //     var msearch = new AMap.PlaceSearch();  //构造地点查询类 
    132     //     AMap.event.addListener(msearch, "complete", placeSearch_CallBack); //查询成功时的回调函数 
    133     //     msearch.search(text);  //关键字查询查询 
    134     // });
    135     
    136 } 
    137 
    138 function search_place(){
    139     var text = $('#keyword').val();
    140      //根据选择的输入提示关键字查询 
    141     mapObj.plugin(["AMap.PlaceSearch"], function() {         
    142         var msearch = new AMap.PlaceSearch();  //构造地点查询类 
    143         AMap.event.addListener(msearch, "complete", placeSearch_CallBack); //查询成功时的回调函数 
    144         msearch.search(text);  //关键字查询查询 
    145     });
    146 }
    147    
    148 //定位选择输入提示关键字 
    149 function focus_callback() { 
    150     if (navigator.userAgent.indexOf("MSIE") > 0) { 
    151         document.getElementById("keyword").onpropertychange = autoSearch; 
    152    } 
    153 } 
    154    
    155 //输出关键字查询结果的回调函数 
    156 function placeSearch_CallBack(data) { 
    157     //清空地图上的InfoWindow和Marker 
    158     windowsArr = []; 
    159     marker     = []; 
    160     mapObj.clearMap(); 
    161     var resultStr1 = ""; 
    162     var poiArr = data.poiList.pois; 
    163     var resultCount = poiArr.length; 
    164     for (var i = 0; i < resultCount; i++) { 
    165         resultStr1 += "<div id='divid" + (i + 1) + "' onmouseover='openMarkerTipById1(" + i + ",this)' onmouseout='onmouseout_MarkerStyle(" + (i + 1) + ",this)' style="font-size: 12px;cursor:pointer;padding:0px 0 4px 2px; border-bottom:1px solid #C1FFC1;"><table><tr><td><img src="http://webapi.amap.com/images/" + (i + 1) + ".png"></td>" + "<td><h3><font color="#00a6ac">名称: " + poiArr[i].name + "</font></h3>"; 
    166             resultStr1 += TipContents(poiArr[i].type, poiArr[i].address, poiArr[i].tel) + "</td></tr></table></div>"; 
    167             addmarker(i, poiArr[i]); 
    168     } 
    169     mapObj.setFitView(); 
    170     document.getElementById("result").innerHTML = resultStr1; 
    171     document.getElementById("result").style.display = "block"; 
    172 } 
    173    
    174 //鼠标滑过查询结果改变背景样式,根据id打开信息窗体 
    175 function openMarkerTipById1(pointid, thiss) { 
    176     thiss.style.background = '#CAE1FF'; 
    177     windowsArr[pointid].open(mapObj, marker[pointid]); 
    178 } 
    179    
    180 //添加查询结果的marker&infowindow     
    181 function addmarker(i, d) { 
    182     var lngX = d.location.getLng(); 
    183     var latY = d.location.getLat(); 
    184     var markerOption = { 
    185         map:mapObj, 
    186         icon:"http://webapi.amap.com/images/" + (i + 1) + ".png", 
    187         position:new AMap.LngLat(lngX, latY) 
    188     }; 
    189     var mar = new AMap.Marker(markerOption);           
    190     marker.push(new AMap.LngLat(lngX, latY)); 
    191    
    192     var infoWindow = new AMap.InfoWindow({ 
    193         content:"<h3><font color="#00a6ac">  " + (i + 1) + ". " + d.name + "</font></h3>" + TipContents(d.type, d.address, d.tel), 
    194         size:new AMap.Size(300, 0),  
    195         autoMove:true,   
    196         offset:new AMap.Pixel(0,-30) 
    197     }); 
    198     windowsArr.push(infoWindow);  
    199     var aa = function (e) {infoWindow.open(mapObj, mar.getPosition());}; 
    200     AMap.event.addListener(mar, "click", aa); 
    201 } 
    202    
    203 //infowindow显示内容 
    204 function TipContents(type, address, tel) {  //窗体内容 
    205     if (type == "" || type == "undefined" || type == null || type == " undefined" || typeof type == "undefined") { 
    206         type = "暂无"; 
    207     } 
    208     if (address == "" || address == "undefined" || address == null || address == " undefined" || typeof address == "undefined") { 
    209         address = "暂无"; 
    210     } 
    211     if (tel == "" || tel == "undefined" || tel == null || tel == " undefined" || typeof address == "tel") { 
    212         tel = "暂无"; 
    213     } 
    214     var str = "  地址:" + address + "<br />  电话:" + tel + " <br />  类型:" + type; 
    215     return str; 
    216 }    
    217 
    218 </script>
    View Code
  • 相关阅读:
    Python学习杂记_2_格式化字符串的一些操作
    Python学习杂记_1_PyCharm使用的一些收获
    autolayout sizeclass 资料集锦
    据说这个是获得当前的控制器方法,没试过
    Mac下搭建php开发环境【转】
    搜索栏会消失 uisearchbar 狂点消失的问题解决
    mac下XAMPP服务器配置多站点配置局域网配置 (转)
    在 Xcode 6 中使用矢量图( iPhone 6 置配 UI)
    收到远程通知,怎么区分是点击通知栏提醒进去的还是在foreground收到的通知?
    开发经验之状态机思想,分别使用了swift,OC,C,PHP语言实现
  • 原文地址:https://www.cnblogs.com/dluf/p/3805992.html
Copyright © 2020-2023  润新知