欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

百度地图jsapi

程序员文章站 2022-06-11 20:37:13
...

项目需求:根据客户所在城市显示体检机构。
首先要定位到客户所在城市,然后把此城市的所有体检机构显示出来供用户选择。
过程中遇到的问题,百度不到,但是慢慢的就解决了,比如初始化后地图的中心点并不在屏幕的中心,批量地址解析行不通等。
百度地图jsapi

1.申请百度ak

<script src="http://api.map.baidu.com/api?v=2.0&ak=PeBUf5626HGDsEWw2Hk8e6sw6TrsRv32"></script>

2.创建地图实例,初始化地图

var map = new BMap.Map("container");// 创建地图实例  
var point = new BMap.Point(116.404, 39.915);// 创建点坐标  
map.centerAndZoom(point, 11);// 初始化地图,设置中心点坐标和地图级别  

3.将后台传的城市转化为百度地图识别的经纬度point实例(地址解析)

var myGeo = new BMap.Geocoder();
    // 将地址解析结果显示在地图上,并调整地图视野
    myGeo.getPoint("北京市海淀区上地10街", function(point){
        if (point) {
            map.centerAndZoom(point, 16);
            map.addOverlay(new BMap.Marker(point));
        }else{
            alert("您选择地址没有解析到结果!");
        }
    }, "北京市");             

4.将多个后台传过来的机构转化为经纬度标注在地图上(批量地址解析)

var map = new BMap.Map("l-map");
    map.centerAndZoom(new BMap.Point(117.269945,31.86713), 13);
    map.enableScrollWheelZoom(true);
    var index = 0;
    var myGeo = new BMap.Geocoder();
    var adds = [
        "包河区金寨路1号(金寨路与望江西路交叉口)",
        "庐阳区凤台路209号(凤台路与蒙城北路交叉口)",
        "蜀山区金寨路217号(近安医附院公交车站)",
        "蜀山区梅山路10号(近安徽饭店) ",
        "蜀山区 长丰南路159号铜锣湾广场312室",
        "合肥市寿春路93号钱柜星乐町KTV(逍遥津公园对面)",
        "庐阳区长江中路177号",
        "新站区胜利路89"
    ];
    function bdGEO(){
        var add = adds[index];
        geocodeSearch(add);
        index++;
    }
    function geocodeSearch(add){
        if(index < adds.length){
            setTimeout(window.bdGEO,400);
        } 
        myGeo.getPoint(add, function(point){
            if (point) {
                document.getElementById("result").innerHTML +=  index + "、" + add + ":" + point.lng + "," + point.lat + "</br>";
                var address = new BMap.Point(point.lng, point.lat);
                addMarker(address,new BMap.Label(index+":"+add,{offset:new BMap.Size(20,-10)}));
            }
        }, "合肥市");
    }
    // 编写自定义函数,创建标注
    function addMarker(point,label){
        var marker = new BMap.Marker(point);
        map.addOverlay(marker);
        marker.setLabel(label);
    }

5.项目代码

var height =  document.body.clientHeight;
      $('.box').height(height-54);
      var map = new BMap.Map("container");// 创建地图实例  
      var point = new BMap.Point(116.404, 39.915);// 创建点坐标  
      map.centerAndZoom(point, 11);// 初始化地图,设置中心点坐标和地图级别  

      //设置屏幕中心点为point
      // var loadCount = 1;  
      // map.addEventListener("tilesloaded",function(){  
      //     if(loadCount == 1){  
      //         map.setCenter(point);  
      //     }         
      //         loadCount = loadCount + 1;  
      // });  
      //添加控件
      map.addControl(new BMap.NavigationControl());    
      map.addControl(new BMap.ScaleControl());    
      map.addControl(new BMap.OverviewMapControl());
      //默认进入的城市
      getMedical('北京');
     //获取当前城市的医院
     function getMedical(newCity){
      $.ajax({
          type: 'POST',
          url: '/schedule/getInfo',
          data:{city:newCity},
          dataType: "json",
          success: function(data){
              $('.cover').hide();
              $('.mapImg').hide();
              var medical = [];
              var addr = [];
              var phone = [];
              for(var i=0;i<data.length;i++){
                medical.push(data[i].title);
                addr.push(data[i].addr);
                phone.push(data[i].phone);
              }
              //将城市转化为经纬度并且将地图中心点移到此城市
              var cityGeo = new BMap.Geocoder();
              cityGeo.getPoint(newCity,function(point){
                if(point){
                  map.setCenter(point);
                }
              }, newCity);
              //将指定城市的医院转化为经纬度并标注
              var medicalGeo = new BMap.Geocoder();
              var index = 0;
              function bdGEO(){
                  var add = medical[index];
                  var addAddr = addr[index];
                  var addPhone = phone[index];
                  geocodeSearch(add,addAddr,addPhone);
                  index++;
              }
              function geocodeSearch(add,addAddr,addPhone){
                if(index <= medical.length){
                  setTimeout(bdGEO,200);
                } 
                medicalGeo.getPoint(add, function(point){
                  if (point) {
                    addMarker(point, index,add,addAddr,addPhone);
                  }
                }, newCity);
              }
              function addMarker(point, index,add,addAddr,addPhone){  // 创建图标对象   
                var myIcon = new BMap.Icon("/public/dist/images/marker2.png", new BMap.Size(34, 94), {       
                });      
                // 创建标注对象并添加到地图   
                var marker = new BMap.Marker(point, {icon: myIcon});    
                map.addOverlay(marker);     
                marker.addEventListener("click", function(){   
                    var tapTitle = '<a  href="/schedule/home" style="font-size:.75rem;">'+add+'</a>'; 
                    var tapCont = '<p style="margin:.5rem 0;font-size: .7rem;">'+addAddr+' &nbsp; '+addPhone;
                    var opts = {    
                        width : 180,     //信息窗口宽度    
                        height: 90,     //信息窗口高度    
                        title : tapTitle  //信息窗口标题   
                    }    
                    var infoWindow = new BMap.InfoWindow(tapCont, opts);//创建信息窗口对象    
                    map.openInfoWindow(infoWindow, point);//打开信息窗口   
                });
              } 
              bdGEO();
          }
      });
    }