您现在的位置: 晨光科技 >> 文章 >> 技术 >> IT >> 正文  
  百度地图API公交线路绘制           
百度地图API公交线路绘制
[ 作者:佚名    转贴自:https://www.jianshu.com/p/27106066fe71    点击数:24    更新时间:2022/8/9    文章录入:LA ]
[注:本站登载的某些文章并不代表本站支持或反对其观点或肯定其真实性]

百度地图API公交线路绘制

wzbus 字数 197阅读 5,743

由于百度地图搜索结果仅能显示单条公交线路,不利于对公交线网的研究,于是我写了这个基于百度地图javascript API V3.0的公交线路绘制网站(http://www.84ditu.com)。本文主要介绍绘制公交的基础功能,其中部分代码涉及jQuery。

 成品图

申请API密钥

首先要有一个百度账号,并且申请成为百度开发者,然后才能申请ak,应用类型选择浏览器端,必须勾选javascript API,最后将申请到的ak作为script链接的一部分在html中的head部分引入。

ak申请

生成地图并自动定位

var map = new BMap.Map("map"); //"map"为用于展示地图的div的id
var city;
var myCity = new BMap.LocalCity();
myCity.get(getCity);
function getCity (res) {
  if (res) {
    city = res.name;
    map.centerAndZoom(city, 13);
  } else {
    city = "温州市"; //默认城市
  }
}

判断路线是否已添加

function addLine (line) {
  if ($.inArray(line, readyAdd) == -1) {
    bus.getBusList(line);
    readyAdd.push(line); //readyAdd为空数组,用于存储已添加的线路名
  } else {
    alert("该路线已添加");
  }
}

检索并生成路线

var getPolylineOptions = function getPolylineOptions () { //线路样式配置
  return {
    strokeColor: $("#strokeColor").val(),
    strokeWeight: $("#strokeWeight").val(),
    strokeOpacity: $("#strokeOpacity").val(),
    strokeStyle: $("#strokeStyle").val()
  }
};
var bus = new BMap.BusLineSearch(map, {
  onGetBusListComplete: function onGetBusListComplete (result) {
    let busListItem = $("#busListItem").val(); //公交上下行
    let fstLine = result.getBusListItem(busListItem);
    bus.getBusLine(fstLine);
  },
  onGetBusLineComplete: function onGetBusLineComplete (busline) {
    polyline = new BMap.Polyline(busline.getPath(), getPolylineOptions());
    let lineName = busline.name.substr(0, busline.name.indexOf("(")); //提取线路名
    map.addOverlay(polyline); //添加折线覆盖物
    let stationList = []; //获取站点
    for (let i = 0, len = busline.getNumBusStations(); i < len; i++) {
      let busStation = busline.getBusStation(i);
      let marker = new BMap.Marker(busStation.position, {
        icon: stationIcon
      });
      stationList.push(new BMap.Point(busStation.position.lng, busStation.position.lat));
      if ($("#strokeStation").val() == "true") { //显示站点
        map.addOverlay(marker);
        marker.setTitle(lineName + ":" + busStation.name);
        marker.addEventListener("click", function (e) { //单击站点显示信息
          let opts = {
            width: 250,
            height: 80,
            title: e.target.getTitle().substr(e.target.getTitle().indexOf(":") + 1)
          };
          let content = busline.name;
          let infoWindow = new BMap.InfoWindow(content, opts);
          let point = new BMap.Point(e.target.getPosition().lng, e.target.getPosition().lat);
          map.openInfoWindow(infoWindow, point);
        });
      }
    }
    if (enableAutoViewport) {
      let view = map.getViewport(eval(stationList));
      map.centerAndZoom(view.center, view.zoom);
    }
    polyline.addEventListener("dblclick", function (e) { //双击线路删除路径
      let allOverlay = map.getOverlays();
      for (let i = 0, len = allOverlay.length; i < len; i++) {
        if (allOverlay[i].toString() == "[object Marker]") {
          if (allOverlay[i].getTitle().substr(0, allOverlay[i].getTitle().indexOf(":")) == lineName) {
            allOverlay[i].enableMassClear();
          } else {
            allOverlay[i].disableMassClear();
          }
        } else {
          allOverlay[i].disableMassClear();
        }
      }
      e.target.enableMassClear();
      map.clearOverlays();
      let index = readyAdd.indexOf(lineName);
      readyAdd.splice(index, 1);
    });
    polyline.addEventListener("mouseover", function (e) { //移向线路高亮路径
      if (e.target == currentPolyline) {
        return false;
      }
      currentPolyline = e.target;
      lineOpacity = currentPolyline.getStrokeOpacity();
      currentPolyline.setStrokeOpacity("1");
    });
    polyline.addEventListener("mouseout", function (e) {
      e.target.setStrokeOpacity(lineOpacity);
    })
  }
});
  • 上一篇文章: ArcGIS Pro数据编辑学习总结

  • 下一篇文章: OFFICE | EXCEL强制清除工作表保护密码的两种方法
  •    
    [注:标题搜索比内容搜索快]
    发表评论】【告诉好友】【打印此文】【关闭窗口
     最新5篇热点文章
  • 轨道钢承重计算公式及应用[109]

  • 【选型】如何为变频器选取阻值…[82]

  • AIS2023参展厂商名录[343]

  • AGV综合选型[170]

  • APIE 2023第4届亚太国际智能装…[138]

  •  
     最新5篇推荐文章
  • 外媒:正在唤醒中国的习近平[305]

  • 中国反伪科学运动背后的CIA黑手…[494]

  • [转载]袁隆平真言:中国最大的…[667]

  • 台专家:当年我们造IDF时 大陆…[572]

  • 旅日华人:中国严重误判日本民…[577]

  •  
     相 关 文 章
  • ArcMap和ArcGIS Pro加载百度地…[20]


  •   网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
        没有任何评论
    设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | 管理登录 | 
    版权所有 Copyright© 2003 晨光科技        站长:璀璨星辰        页面执行时间:503.91毫秒
    Powered by:MyPower Ver3.5