借助百度地图api下载公交信息

来源:互联网 发布:数值型数据的分组方法 编辑:程序博客网 时间:2024/04/30 14:21

     GIS中数据的获取非常重要,有好的想法却因为数据缺失不得不夭折非常可惜,由此也可以深刻理解数据是gis的血液。

     参考菩提老王和酸奶小妹的博客,这两天实现了百度地图api下载南京市市区的的公交信息,相关注意点如下:

    1.下载json2.js包,可以在javascript中将对象序列化为 json字符串

    2.百度地图中的公交线路名称并不全是标准的,比如公交线路名称为"110路支线“,但是在百度地图中的名称是”110支线“,不能通过统一的处理方式来处理,需要将某些路线进行特殊处理,这也体现出数据格式标准规范化是多么重要。

    3.程序中使用DispatcherTimer,每隔一定时间间隔(1秒、2秒等)进行一次路线查询,实验地区为南京市市区,总共239条路线,应该获取476条路线(路线是往返的,有的是单线、环线等),不同的时间间隔对获取路线的条数有影响,但是即使将间隔设置的足够大,也不一定得到全部的路线,要看运气了

    4.最后的公交路线txt文件,内容格式为[{公交路线1的json字符串},{公交路线2的json字符串},……]  ,需要使用Notepad++软件,在菜单的”格式“中设置为”以UTF-8无BOM格式编码“

      javascript代码如下,想下载程序的可到资源中下载,使用了silverlight5开发,思路参考菩提老王的博客:

 

<script type="text/javascript">    var busName;    var count1 = 0, count2 = 0 ;    var array2=new Array();    function BusLinePoint() {        this.lng = "";        this.lat = "";    }    function BusStopPosition() {        this.lng = "";        this.lat = "";    }    function BusStop() {        this.name = "";        this.position = "";    }    function BusLineInfo() {        this.name = "";        this.startTime = "";        this.endTime = "";        this.company = "";        this.stopsCount = "";        this.points = new Array();        this.stops = new Array();    }    var busline = new BMap.BusLineSearch("南京", {        // renderOptions: { map: map, panel: "results" },        onGetBusListComplete: function (busListResult) {            if (busListResult) {                for (var i = 0, num = busListResult.getNumBusList(); i < num; i++) {                    var item = busListResult.getBusListItem(i);                    var busLineName = item.name.substring(0, item.name.indexOf('('));                    if (busLineName.indexOf(busName) == 0 || busLineName == "110支线") {                        if ((busName.indexOf("路") + 1) == busName.length) {                            if ((busName.indexOf("路") + 1) == busLineName.length || busLineName == "3路内环" || busLineName == "3路外环" || busLineName == "48路空调" ||busLineName == "54路空调" || busLineName == "64路空调" || busLineName == "150路空调"|| busLineName == "185路环线")                             {                                busline.getBusLine(item);                                count2++;                            }                        }                        else {                            busline.getBusLine(item);                            count2++;                        }                    }                }                busline.setGetBusLineCompleteCallback(function (lineResults) {                    var jsonObj = lineResults;                    // console.log(jsonObj.Be.R[0].lat);                    var busLineInfo = new BusLineInfo();                    busLineInfo.name = jsonObj.name;                    busLineInfo.startTime = jsonObj.startTime;                    busLineInfo.endTime = jsonObj.endTime;                    busLineInfo.company = jsonObj.company;                    busLineInfo.stopsCount = jsonObj.stopsCount;                    for (var obj in jsonObj.Be.R) {                        var busLinePoint = new BusLinePoint();                        busLinePoint.lat = jsonObj.Be.R[obj].lat;                        busLinePoint.lng = jsonObj.Be.R[obj].lng;                        busLineInfo.points[obj] = busLinePoint;                    }                    for (var obj in jsonObj.kn) {                        var busStopPositon = new BusStopPosition();                        var busStop = new BusStop();                        busStopPositon.lat = jsonObj.kn[obj].position.lat;                        busStopPositon.lng = jsonObj.kn[obj].position.lng;                        busStop.name = jsonObj.kn[obj].name;                        busStop.position = busStopPositon;                        busLineInfo.stops[obj] = busStop;                    }                    busLineInfo.stopsCount = jsonObj.kn.length;                    // console.log(JSON.stringify(busLineInfo));                    var jsonInfo = JSON.stringify(busLineInfo);                    var slHost = document.all("slObject");                    var page = slHost.Content.BuilderPage;                    page.Show(jsonInfo);                    count1++;                });            }        }    });    function busSearch(name) {        busName = name;        busline.getBusList(busName);    }    function num1() {        return count1;    }    function num2() {        return count2;    }    function name() {        return busName;     }</script>