通过百度API获取城市公交线路坐标点及站点信息

您所在的位置:网站首页 百度地图推荐的路线都是最近的吗怎么设置 通过百度API获取城市公交线路坐标点及站点信息

通过百度API获取城市公交线路坐标点及站点信息

2024-07-11 02:19| 来源: 网络整理| 查看: 265

话不多说,先挂最后的数据结果,如果这是你想要的,我们再接着看:

公交线路坐标数据&公交站点坐标数据

    

 

 正文开始: 前期数据准备:获取城市所有公交线路名称

  使用python爬取,结果如下,代码参考:https://www.cnblogs.com/Qiuzhiyu/p/12183140.html 

 数据结果展示

  需要准备的js包: (非必须) (非必须,如果不需要导出数据到本地)   对爬取的数据进行处理: /*将爬取的广州公交信息进行转换*/ var line_data_list = [] var line_name_list = [] //获取公交线路名称 $.ajax( { url:encodeURI('guangzhou.txt'), //提前爬取的数据 async: false, success: function (guangzhou) { row_split = guangzhou.split('\n') for(var i in row_split){ line_data_list.push(JSON.parse(row_split[i])) var len = JSON.parse(row_split[i]).线路名称[0].length line_data_list[i].线路名称 = JSON.parse(row_split[i]).线路名称[0].substring(2,len-5) //’广州10路公交车路线‘->’10路‘ } for(var i in line_data_list){ line_name_list.push(line_data_list[i].线路名称) } } } ) 处理结果: line_name_list =["10路", "11路", "12路", "14路", "15路", "19路", "101路", "102路",……]

接下来非常简单,只需要进行公交列表查询,这一步执行会激发后续一系列操作,获取我们想要的数据。

// 数据导入数组开始 //slice for (var i in line_name_list) { busline.getBusList(line_name_list[i]); console.log(i) } console.log("done")

 

但要搞懂发生了什么,还需要理解接下来的其他部分:

  首先,实例化百度地图,用于页面上的单个线路的展示,当然如果不想展示的话,这一块可以省略:

/*获取百度地图实例*/ var map = new BMap.Map("container"); map.centerAndZoom(new BMap.Point(113.315224, 23.181452), 12); //广州市

  其次,创建百度地图公交信息获取类:

  在这一部分,我们设置了公交列表查询后的回调函数,公交列表查询后的回调函数中又进行了公交线路的查询,而公交线路的回调函数中进行了对公交线路数据的组织,这一系列操作最终使我们得到存储了公交线路信息的对象数组。

// 公交信息获取类 var busline = new BMap.BusLineSearch("广州",{ // 展示获取的公交线路,自动生成面板到id=results的element上,不必须使用 renderOptions:{map:map,panel:"results"}, // 设置公交列表查询后的回调函数,注意与公交线路查询区分:     //公交列表存储多个具体的公交对象,公交对象可理解为公交线路。 onGetBusListComplete: function(result){ if(result) {           /*获取查询出的公交列表中的对象 0代表上行 1代表下行,实际上还可能存在getBusListItem(2)、getBusListItem(3)等等, 代表的是模糊查询的结果,例如查询 10路 时,getBusListItem(0)、getBusListItem(1)返回的是10路的上下行的公交线路, 而getBusListItem(2)、getBusListItem(3)返回的是b10路,具体可参考代码块后的贴图*/           let up_Line = result.getBusListItem(0); //获取查询出的公交列表中的第一个对象,即上行线路 let down_Line = result.getBusListItem(1); //获取查询出的公交列表中的第一个对象,即下行线路 if(typeof up_Line === "object"){ //判断查询结果是否存在 busline.getBusLine(up_Line); //执行公交线路查询 }else{ console.log("查无此公交:"+result.keyword) //在控制台输出无法查询的线路名称,result.keyword 即在查询时输入的线路名 } if(typeof down_Line === "object"){ busline.getBusLine(down_Line); }else{ console.log("此公交无下行或不存在:"+result.keyword) //部分公交线路不存在下行线路,输出观察 } } }, //设置公交线路查询后的回调函数,即执行 busline.getBusLine(up_Line) 后执行的函数 onGetBusLineComplete : function (ret) { let line_name = ret.name; let line_point = ret.getPath(); //获取公交路线坐标 let i = ret.getNumBusStations(); let sta_info = []; for(j=0;j {} && 去除最后一个空数组 sta_info_ = sta_info.slice(0,sta_info.length - 1).map(function (re) { return re[0] }); //获取每一站点名称 sta_name = sta_info_.map(function (re) { return re.name.toString() }); // 获取站点坐标 sta_position = sta_info_.map(function (re) { return fromBd09ToWgs84([re.position.lng,re.position.lat]) // return [re.position.lng,re.position.lat] 若不需要转换坐标系,使用此行代码 }); line_data_ass.push( { name: line_name, line_point: line_point.map(function (re) { return fromBd09ToWgs84([re.lng, re.lat]) // return fromBd09ToWgs84([re.lng, re.lat]) 若不需要转换坐标系,使用此行代码 }), sta_name : sta_name, sta_point : sta_position, }); console.log(line_name); //在控制台输出成功获取的公交线路信息的名称 } 输出的line_data_ass格式形式如图:

   这是一个对象数组,每个对象存储了一条路线的所有信息,包括线路坐标点,站点名称,站点坐标,已经包含了我们需要的所有信息。可以看到,上下行线路在名称上是有区别的。

  如果只需要这一对象数组,上述代码足矣,完整代码整理如下: 获取公交信息

;路公交;

/*将爬取的广州公交信息进行转换*/ var line_data_list = [] var line_name_list = [] //获取公交线路名称 $.ajax( { url:encodeURI('guangzhou.txt'), async: false, success: function (guangzhou) { row_split = guangzhou.split('\n') for(var i in row_split){ line_data_list.push(JSON.parse(row_split[i])) var len = JSON.parse(row_split[i]).线路名称[0].length line_data_list[i].线路名称 = JSON.parse(row_split[i]).线路名称[0].substring(2,len-5) //’广州10路公交车路线‘->’10路‘ } for(var i in line_data_list){ line_name_list.push(line_data_list[i].线路名称) } } } ) /*获取百度地图实例*/ var map = new BMap.Map("container"); map.centerAndZoom(new BMap.Point(113.315224, 23.181452), 12); //广州市 var line_data_ass = [] //存储最终数据的集合 function get_bus_line_data(line_name,line_point,sta_info) { var sta_info_,sta_name,sta_position; //更改数据结构 [{}] --> {} && 去除最后一个空数组 sta_info_ = sta_info.slice(0,sta_info.length - 1).map(function (re) { return re[0] }); //获取每一站点名称 sta_name = sta_info_.map(function (re) { return re.name.toString() }); // 获取站点坐标 sta_position = sta_info_.map(function (re) { return fromBd09ToWgs84([re.position.lng,re.position.lat]) // return [re.position.lng,re.position.lat] 若不需要转换坐标系,使用此行代码 }); line_data_ass.push( { name: line_name, line_point: line_point.map(function (re) { return fromBd09ToWgs84([re.lng, re.lat]) // return fromBd09ToWgs84([re.lng, re.lat]) 若不需要转换坐标系,使用此行代码 }), sta_name : sta_name, sta_point : sta_position, }); console.log(line_name); //在控制台输出成功获取的公交线路信息的名称 } // 公交信息获取类 var busline = new BMap.BusLineSearch("广州",{ // 展示获取的公交线路,自动生成面板到id=results的element上,不必须使用 renderOptions:{map:map,panel:"results"}, // 设置公交列表查询后的回调函数,注意与公交线路查询区分,公交列表存储多个具体的公交对象,公交对象可理解为公交线路。 onGetBusListComplete: function(result){ if(result) { /*获取查询出的公交列表中的对象 0代表上行 1代表下行, 实际上还可能存在getBusListItem(2)、getBusListItem(3)等等,代表的是模糊查询的结果, 例如查询 10路时,getBusListItem(0)、(1)返回的是10路的上下行的公交线路, 而(2)(3)返回的是b10路,具体可参考代码块后的贴图*/ //获取查询出的公交列表中的第一个对象,即下行线路 let up_Line = result.getBusListItem(0); //获取查询出的公交列表中的第一个对象,即下行线路 let down_Line = result.getBusListItem(1); if(typeof up_Line === "object"){ //判断查询结果是否存在 busline.getBusLine(up_Line); //执行公交线路查询 }else{ //在控制台输出无法查询的线路名称,result.keyword 即在查询时输入的线路名 console.log("查无此公交:"+result.keyword) } if(typeof down_Line === "object"){ busline.getBusLine(down_Line); }else{ //部分公交线路不存在下行线路,输出观察 console.log("此公交无下行或不存在:"+result.keyword) } } }, //设置公交线路查询后的回调函数,即执行 busline.getBusLine(up_Line) 后执行的函数 onGetBusLineComplete : function (ret) { let line_name = ret.name; let line_point = ret.getPath(); //获取公交路线坐标 let i = ret.getNumBusStations(); let sta_info = []; for(j=0;j


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3