zoukankan      html  css  js  c++  java
  • 百度地图API(三)

    HTML

      调用百度地图API,始终需要在html上展示,所以需要定义一个html来呈现地图,具体定义

     1 <!DOCTYPE html>
     2 <html>
     3 <head>
     4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     5 <meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
     6 <style type="text/css">
     7 body, html,#allmap {width: 100%;height: 100%;overflow: hidden;margin:0;}
     8 #l-map{height:100%;width:78%;float:left;border-right:2px solid #bcbcbc;}
     9 #r-result{height:100%;width:20%;float:left;}
    10 </style>
    11 <script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=XX"></script>
    12 <script type="text/javascript" src="http://api.map.baidu.com/library/DistanceTool/1.2/src/DistanceTool_min.js"></script>
    13 <script type="text/javascript" src="http://api.map.baidu.com/library/DrawingManager/1.4/src/DrawingManager_min.js"></script>
    14 <script type="text/javascript" src="api.js"></script>
    15 <link rel="stylesheet" href="http://api.map.baidu.com/library/DrawingManager/1.4/src/DrawingManager_min.css" />
    16 <title>百度地图</title>
    17 </head>
    18 <body>
    19 <div id="geo" style="display:none"></div>
    20 <div id="lng" style="display:none"></div>
    21 <div id="lat" style="display:none"></div>
    22 <div id="allmap" ></div>
    23 </body>
    24 </html>
    25 <script type="text/javascript">
    26 //显示一个地图
    27 var map = new BMap.Map("allmap");          
    28 map.addControl(new BMap.NavigationControl());
    29 map.addControl(new BMap.MapTypeControl());
    30 map.addControl(new BMap.ScaleControl());       
    31 map.addControl(new BMap.OverviewMapControl()); 
    32 map.enableScrollWheelZoom();          
    33 map.centerAndZoom(new BMap.Point(116.404, 39.915), 11);
    34 
    35 
    36 //地址的图标
    37 var addrIcon = new BMap.Symbol(BMap_Symbol_SHAPE_POINT,{scale: 1,fillColor: "blue",fillOpacity: 0.8});
    38     
    39 //绑定鼠标单击事件
    40 map.addEventListener("click", function(e)
    41 {  
    42     document.getElementById("lng").innerText = e.point.lng;
    43     document.getElementById("lat").innerText = e.point.lat;
    44     map.enableScrollWheelZoom();    
    45 });
    46 </script>
    • 第一个script中ak是百度地图的密钥,需要申请账号才会有的,可以去百度官方申请一个,这是需要注意的
    • 剩下的几个script是百度地图的样式和js文件
    • body里面的div定义一个地理编码,经度,纬度,还有一个地图控件,还没有赋值
    • 在最下面的script中,定义了一个BMap,然后在BMap上添加控件(对应MapControl中的AddControl方法)
    • enableScrollWheelZoom方法是鼠标滚动轮放大缩小地图功能可用
    • centerAndZoom方法是地图的中心和地图的尺寸,地图尺寸一共是18种
    • addrIcon定义了一个地址的图标,一些百度地图上的图标定义,在js中是无效的,所以只能定义在html中
    • 最后一个是鼠标的点击事件,给经度纬度赋值,并设鼠标滑动轮可用

    API.js

      首先,定义一些必要的公共变量

     1 //*定义必要的公共变量
     2 var maker;//标注对象
     3 var distance;//测距对象
     4 var drawingManager;//绘图对象
     5 var drag;//拖框缩放对象
     6 //绘制工具栏外观设定
     7 var styleOptions = {
     8     strokeColor: "red",    //边线颜色。
     9     fillColor: "red",      //填充颜色。当参数为空时,圆形将没有填充效果。
    10     strokeWeight: 3,       //边线的宽度,以像素为单位。
    11     strokeOpacity: 0.8,       //边线透明度,取值范围0 - 1。
    12     fillOpacity: 0.6,      //填充的透明度,取值范围0 - 1。
    13     strokeStyle: 'solid' //边线的样式,solid或dashed。
    14 }
    15 //*
    16 //*结束16行//

      以下这些是基本的方法,上面都有解释说明每个方法的作用

     1 //*地图基础方法*//
     2 //地图平移
     3 function PanTo(lng, lat)
     4 {
     5     map.panTo(new BMap.Point(lng, lat));
     6 }
     7 //返回当前地图中心坐标
     8 function GetCenter()
     9 {
    10     document.getElementById("lng").innerText = map.getCenter().lng;
    11     document.getElementById("lat").innerText =map.getCenter().lat;
    12 }
    13 //地图移到指定位置
    14 function MoveMapTo(lng, lat, mapSize)
    15 {
    16     var point = new BMap.Point(lng, lat);
    17     map.centerAndZoom(point, mapSize);
    18     map.enableScrollWheelZoom(); 
    19 }
    20 //设置当前地图所在城市
    21 function SetCity(CityName)
    22 {
    23     map.setCenter(CityName);
    24 }
    25 //将地图放大一级
    26 function ZoomIn()
    27 {
    28     map.zoomIn();
    29 }
    30 //将地图缩小一级
    31 function ZoomOut() {
    32     map.zoomOut();
    33 }
    34 //添加版权控件
    35 function AddCopyrightControl()
    36 {
    37     map.addControl(new BMap.CopyrightControl());
    38 }
    39 //添加地图类型控件
    40 function AddMapTypeControl()
    41 {
    42     map.addControl(new BMap.MapTypeControl());
    43 }
    44 //添加比例尺控件
    45 function AddScaleControl()
    46 {
    47     map.addControl(new BMap.ScaleControl());
    48 }
    49 //添加缩略图控件
    50 function AddOverviewMapControl()
    51 {
    52     map.addControl(new BMap.OverviewMapControl());
    53 }
    54 //开启滚轮调节地图
    55 function EnableScrollWheelZoom()
    56 {
    57     map.enableScrollWheelZoom();
    58 }
    59 //关闭滚轮调节地图
    60 function DisableScrollWheelZoom() 
    61 {
    62     map.disableScrollWheelZoom();
    63 }
    64 //*
    65 //*结束*//

      添加覆盖物

      1 //*覆盖物方法*//
      2 //添加路线
      3 function AddUserRoute(allArray)
      4 {
      5     var item = allArray.split(',');
      6     var polylinePointsArray = [];
      7     var latAry = new Array();
      8     var lngAry = new Array();
      9     var j = 0;
     10     for(var i = 0; i<item.length;i=i+2)
     11     {
     12         polylinePointsArray[j] = new BMap.Point(item[i],item[i+1]);
     13             j++;
     14     }
     15     var polyline = new BMap.Polyline(
     16     polylinePointsArray, 
     17     {strokeColor:"blue", strokeWeight:2, strokeOpacity:1}); 
     18     map.addOverlay(polyline);
     19     map.enableScrollWheelZoom();
     20 }
     21 
     22 //添加用户图标
     23 function AddUserMarker(lng, lat,userName,content)
     24 {
     25     var point = new BMap.Point(lng, lat);
     26     var label = new BMap.Label(userName,{offset:new BMap.Size(20,-10)});
     27     //var myIcon = new BMap.Icon("person3.png", new BMap.Size(50,30));
     28     var marker = new BMap.Marker(point);  // 添加用户图标
     29     marker.setLabel(label);
     30     map.addOverlay(marker);
     31     // 创建信息窗口对象
     32     var opts = {
     33       width : 250,     // 信息窗口宽度
     34       //height: 120,     // 信息窗口高度
     35       title : "<h4 style='margin:0 0 5px 0;padding:0.2em 0'>"+ userName +"</h4>", // 信息窗口标题
     36       //title : '<span style="font-size:14px;color:#0A8021"> +userName + </span>',
     37       enableMessage:false,//设置允许信息窗发送短息
     38       message:""
     39     }
     40     var info = new BMap.InfoWindow(content,opts);
     41     marker.addEventListener("click", function () 
     42     {
     43         map.openInfoWindow(info,point);
     44     });
     45 }
     46 //添加一个圆
     47 function AddCirle(lng, lat, r)
     48 {
     49     var circle = new BMap.Circle(new BMap.Point(lng, lat), r);
     50     map.addOverlay(circle);
     51 }
     52 //添加交通流图层
     53 function AddTrafficLayer()
     54 {
     55     var traffic = new BMap.TrafficLayer();   
     56     map.addTileLayer(traffic);
     57 }
     58 //添加普通标注
     59 function AddNormalMaker(lng, lat) 
     60 {
     61     var marker = new BMap.Marker(new BMap.Point(lng, lat));  // 创建标注
     62     map.addOverlay(marker);
     63 }
     64 //标注开启拖拽
     65 function OpenMakerDraging()
     66 {
     67     marker.enableDragging(true);
     68 }
     69 //标注关闭拖拽
     70 function CloseMakerDraging()
     71 {
     72     marker.disableDragging(true);
     73 }
     74 //添加动画标注
     75 function AddAnimationMaker(lng, lat)
     76 {
     77     var userIcon = new BMap.Icon("http://developer.baidu.com/map/jsdemo/img/fox.gif", new BMap.Size
     78 
     79 (300,157));
     80     var marker = new BMap.Marker(new BMap.Point(lng, lat),{icon:userIcon});  // 创建标注
     81     
     82     // var marker = new BMap.Marker(new BMap.Point(lng, lat));  // 创建标注
     83     map.addOverlay(marker);
     84     marker.setAnimation(BMAP_ANIMATION_BOUNCE);
     85 }
     86 //添加包含一个标签的标注
     87 function AddLabelMaker(lng, lat, content)
     88 {
     89     var userIcon = new BMap.Icon("http://developer.baidu.com/map/jsdemo/img/fox.gif", new BMap.Size
     90 
     91 (300,157));
     92     var marker = new BMap.Marker(new BMap.Point(lng, lat),{icon:userIcon});  // 创建标注
     93     var label = new BMap.Label(content,{offset:new BMap.Size(20,-10)});
     94     marker.setLabel(label);
     95     map.addOverlay(marker);
     96 }
     97 //添加包含一个信息窗口的标注marker.openInfoWindow(infoWindow);
     98 function AddWindowMaker(lng, lat, content)
     99 {
    100     var point = new BMap.Point(lng, lat);
    101     var marker = new BMap.Marker(point);  // 创建标注
    102     map.addOverlay(marker);
    103     var opts = {
    104       width : 200,     // 信息窗口宽度
    105       height: 100,     // 信息窗口高度
    106       title : "外访某某",  // 信息窗口标题
    107       enableMessage:false
    108     }
    109         // 创建信息窗口对象
    110         var info = new BMap.InfoWindow(content);
    111     marker.addEventListener("click", function () {
    112     
    113         map.openInfoWindow(info,point);
    114     });
    115 }
    116 //添加城市边界
    117 function SetBoundary(city)
    118 {
    119     var bdary = new BMap.Boundary();
    120     bdary.get(city, function (rs) {       //获取行政区域
    121         map.clearOverlays();        //清除地图覆盖物       
    122         var count = rs.boundaries.length; //行政区域的点有多少个
    123         for (var i = 0; i < count; i++) {
    124             var ply = new BMap.Polygon(rs.boundaries[i], { strokeWeight: 2, strokeColor: "#ff0000" }); 
    125 
    126 //建立多边形覆盖物
    127             map.addOverlay(ply);  //添加覆盖物
    128             map.setViewport(ply.getPath());    //调整视野         
    129         }
    130     });
    131 }
    132 //添加一个信息窗口
    133 function AddInfoWindow(lng,lat,content)
    134 {
    135     var point=new BMap.Point(lng, lat);
    136     var info = new BMap.InfoWindow(content);
    137     map.openInfoWindow(info,point);
    138 }
    139 //添加一个标注
    140 function AddLabel(lng, lat, content)
    141 {
    142     var point = new BMap.Point(lng, lat);
    143     var opts =
    144     {
    145         position: point,
    146         offset: new BMap.Size(0, -0)
    147     }
    148     var label = new BMap.Label(content, opts);
    149     label.setStyle({
    150         color: "red",
    151         fontSize: "10px",
    152         height: "10px",
    153         lineHeight: "10px",
    154         fontFamily: "微软雅黑"
    155     });
    156     map.addOverlay(label);
    157 }
    158 //*
    159 //*结束*//
    View Code

      添加地图服务

      1 //*地图服务*//
      2 //本地搜索
      3 function LocalSearch(keywords)
      4 {
      5     var local = new BMap.LocalSearch(map, {
      6         renderOptions: { 
      7             map: map,
      8             autoViewport: true
      9         }  
     10     });
     11     local.search(keywords);
     12 }
     13 //周边搜索
     14 function SearchNearby(keywords, center)
     15 {
     16     var local = new BMap.LocalSearch(map, {
     17         renderOptions: {
     18             map: map,
     19             autoViewport: true
     20         }
     21     });
     22     local.searchNearby(keywords, center);
     23 }
     24 //范围搜索
     25 function SearchInBounds(keywords)
     26 {
     27     var local = new BMap.LocalSearch(map, {  
     28         renderOptions: {
     29             map: map
     30         }
     31     });  
     32     local.searchInBounds(keywords, map.getBounds());
     33 }
     34 //公交导航
     35 function GetTransitRoute(start, end)
     36 {
     37     var transit = new BMap.TransitRoute(map, {
     38         renderOptions: {
     39             map: map,
     40             autoViewport: true
     41         }
     42     });
     43     transit.search(start, end);
     44 }
     45 //步行导航
     46 function GetWalkingRoute(start, end)
     47 {
     48     var walking = new BMap.WalkingRoute(map, {
     49         renderOptions: {
     50             map: map,
     51             autoViewport: true
     52         }
     53     });
     54     walking.search(start, end);
     55 }
     56 //驾车导航
     57 function GetDrivingRoute(start, end)
     58 {
     59     var driving = new BMap.DrivingRoute(map, {
     60         renderOptions: {
     61             map: map,
     62             autoViewport: true
     63         }
     64     });
     65     driving.search(start, end);
     66 }
     67 //返回指定坐标所在地址
     68 function GetByPoint(lng, lat)
     69 {
     70     var gc = new BMap.Geocoder();
     71     pt = new BMap.Point(lng, lat);
     72     gc.getLocation(pt, function (rs) {
     73         var addComp = rs.addressComponents;
     74         document.getElementById("geo").innerText = addComp.province + ", " + addComp.city + ", " + 
     75 
     76 addComp.district + ", " + addComp.street + ", " + addComp.streetNumber;
     77     });
     78 }
     79 //返回指定地址的坐标
     80 function GetByAddress(geo)
     81 {
     82     //通过IP定位获取当前城市名称
     83     IP();
     84     var cityName=document.getElementById("geo").innerText
     85     var myGeo = new BMap.Geocoder();
     86     // 将地址解析结果显示在地图上,并调整地图视野
     87     myGeo.getPoint(geo, function (point) {
     88         if (point) {
     89             map.centerAndZoom(point, 16);
     90             map.addOverlay(new BMap.Marker(point));
     91             document.getElementById("lng").innerText = point.lng;
     92             document.getElementById("lat").innerText = point.lat;
     93         }
     94     }, cityName);
     95 }
     96 //IP定位
     97 function IP() {
     98     var myCity = new BMap.LocalCity();
     99     myCity.get(myFun);
    100     function myFun(result) {
    101         var cityName = result.name;
    102         document.getElementById("geo").innerText = cityName;
    103         map.setCenter(cityName);
    104     }
    105 
    106 }
    107 //*
    108 //*结束*//
    View Code

      添加地图工具

     1 //*地图工具*//
     2 //开启地图测距工具
     3 function DistanceToolOpen()
     4 {
     5     var distance = new BMapLib.DistanceTool(map);//测距组件
     6     distance.open();
     7 }
     8 //关闭地图测距工具
     9 function DistanceToolOpen()
    10 {
    11     distance.close();
    12 }
    13 //开启地图拖拽放大工具
    14 function DragAndZoomOpen()
    15 {
    16     var drag = new BMap.DragAndZoomTool(map);
    17     drag.open();
    18 }
    19 //关闭地图拖拽放大工具
    20 function DragAndZoomOpen()
    21 {
    22     drag.close();
    23 }
    24 //开启地图绘制工具
    25 function DrawingManagerOpen()
    26 {
    27 
    28     //实例化鼠标绘制工具
    29     var drawingManager = new BMapLib.DrawingManager(map, {
    30         isOpen: true, //是否开启绘制模式
    31         enableDrawingTool: true, //是否显示工具栏
    32         drawingToolOptions: {
    33             anchor: BMAP_ANCHOR_BOTTOM_RIGHT, //位置
    34             offset: new BMap.Size(5, 5), //偏离值
    35             scale: 0.8 //工具栏缩放比例
    36         },
    37         circleOptions: styleOptions, //圆的样式
    38         polylineOptions: styleOptions, //线的样式
    39         polygonOptions: styleOptions, //多边形的样式
    40         rectangleOptions: styleOptions //矩形的样式
    41     });
    42 }
    43 //关闭地图绘制工具
    44 function DrawingManagerClose()
    45 {
    46     drawingManager.close();
    47 }
    48 //*
    49 //*结束*//
    View Code

      剩下的几个function是根据业务写的,不过也许会用到,像清空所有覆盖物等,就一块写上

      1 //*Add By Phil*//
      2 
      3 //清空所有路线if(allOverlay[i].getLabel() == null)
      4 function ClearAllUserRoute(userCount)
      5 {
      6     var allOverlay = map.getOverlays();
      7     for(var i = userCount;i < allOverlay.length ; i++)
      8     {        
      9      {
     10           map.removeOverlay(allOverlay[i]);
     11      }
     12     }
     13 }
     14 
     15 //清除所有覆盖物
     16 function ClearAllOverlay()
     17 {
     18     map.clearOverlays();
     19 }
     20 
     21 //选择人员
     22 function SelectedUserMarker(userName)
     23 {
     24     var allOverlay = map.getOverlays();
     25     for(var i = 0; i < allOverlay.length ; i++)
     26     {
     27         if(allOverlay[i].getLabel().content == userName)
     28         {
     29         allOverlay[i].setAnimation(BMAP_ANIMATION_BOUNCE);
     30         break;
     31         }
     32     }
     33 }
     34 
     35 //多个地址  55行
     36 function GetAddresses(lng,lat,addressArray)
     37 {
     38     var userPoint = new BMap.Point(lng,lat);
     39     var myGeo = new BMap.Geocoder();
     40     var index = 0;
     41     for(var i = 0; i < addressArray.length ; i++)
     42     {
     43      myGeo.getPoint(addressArray[i],function(point)
     44      {
     45          if(point)
     46          {
     47         var address = new BMap.Point(point.lng,point.lat);
     48         AddAddressMarker(address,new BMap.Label(index + ":" + add,{offset:new BMap.Size(20,-
     49 
     50 10)}));
     51         ConnectTwoPoint(userPoint,point);
     52          }
     53      }
     54      )
     55     index++;
     56     }
     57 }
     58 
     59 //单独地址 
     60 function GetSingleAddress(lng,lat,addr,cityName)
     61 {
     62     var userPoint = new BMap.Point(lng,lat);
     63     var myGeo = new BMap.Geocoder();
     64     myGeo.getPoint(addr,function(point)
     65      {
     66          if(point)
     67          {        
     68         var address = new BMap.Point(point.lng,point.lat);
     69         AddAddressMarker(address,new BMap.Label(addr,{offset:new BMap.Size(20,-10)}));
     70         ConnectTwoPoint(userPoint,point);
     71          }
     72      },cityName
     73      );
     74 }
     75 
     76 //地图添加地址图标
     77 function AddAddressMarker(point,label)
     78 {
     79     var addrMarker = new BMap.Marker(point,{icon:addrIcon});
     80     map.addOverlay(addrMarker);
     81     addrMarker.setLabel(label);
     82 }
     83 
     84 //连接地图两点
     85 function ConnectTwoPoint(firstPoint,secondPoint)
     86 {
     87     //右键菜单事件
     88     //var removePoly = function(e,ee,polyline){map.removeOverlay(polyline);}
     89       //创建右键菜单
     90     //var polyMenu=new BMap.ContextMenu();
     91     //polyMenu.addItem(new BMap.MenuItem("删除",removePoly.bind(polyline)));
     92 
     93     var polyline = new BMap.Polyline(
     94     [firstPoint,secondPoint], 
     95     {strokeColor:"maroon", strokeWeight:2, strokeOpacity:1}); 
     96      map.addOverlay(polyline);
     97     //添加右键菜单
     98     //polyline.addContextMenu(polyMenu);
     99 }
    100 
    101 //*
    102 //*结束//
    View Code

    Waiting

      这篇对于做web的童鞋比较简单,对于cs来时就郁闷了,也算是摸索着做js,也许有不正确的地方,欢迎指出~

      下一篇,应该是具体应用~

  • 相关阅读:
    关于TileBrush中Viewbox,Viewport以及Stretch,AlignmentX/Y的详细研究
    ListBox数据绑定无效
    WPF---Effect效果
    wpf 画刷的分类
    LinearGradientBrush,RadialGradientBrush的样式说明
    改变ListBoxItem选中的颜色
    自定义的 ListBoxItem 自适应ListBox的宽度
    WPF ListBox数据绑定
    ItemsPanelTemplate的用法
    svn报错Item is not readable svn解决方案
  • 原文地址:https://www.cnblogs.com/shadow-fei/p/4682595.html
Copyright © 2011-2022 走看看