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

本文详细介绍了如何利用JavaScript和百度地图API下载南京市市区的公交信息,并提供了下载过程中的注意事项,包括处理非标准路线名称、使用DispatcherTimer定时查询路线、以及最终将公交路线信息保存为JSON格式文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

     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>

  

  

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值