zoukankan      html  css  js  c++  java
  • 基于高德地图实现的公交线路查询功能

    高德地图支持公交线程查询功能。线上示例;

    线上示例说明

    接口返回的数据结构:

    公交线路查询接口返回的数据结构

    path和via_stops字段详情:

    ...
    path: [
        {
            Q: 39.97741, R: 116.39788099999998, lng: 116.397881, lat: 39.97741
        },
        ...
    ],
    via_stops: [
        {
            id: "BV10424760",
            location: {
                Q: 39.97741,
                R: 116.39788099999998,
                lat: 39.97741,
                lng: 116.397881
            },
            name: "北土城公交场站",
            sequence: 1
        },
        ...
    ]
    ...
    

    流程:

    1. 实例化Map组件

    2. 获取要查询的公交线路

    3. 检查是否存在LineSearch的实例,不存在则创建一个。在实例化时需要的参数如下:

       linesearch = new AMap.LineSearch({
          pageIndex: 1,
          city: '北京',
          pageSize: 1,
          extensions: 'all'
      });
      
    4. 调用LineSearch实例的search方法,第一个参数为公交站点名称,第二个参数是请求成功的回调。

    5. 执行上一步的回调,第一个参数是接口返回的数据。数据的结构在上面已经贴出来了。

    接入说明

    1. 与示例相同通过script标签直接引入,参考示例代码操作。
    2. 通过react-amap接入react项目。

    下面详细说明第二种接入方式。

    ps:当前接入的react-amap版本为v1.2.7

    按照github项目中接入高德地图插件的文档说明,发现无法成功添加LineSearch组件。仔细查看源码发现当前版本仅支持了一下几个插件。

    //node_modules/react-amap/lib/map/index.js
    function installPlugin(name, opts) {
      opts = opts || {};
      switch (name) {
        case 'Scale':
        case 'ToolBar':
        case 'OverView':
        case 'MapType':
          this.setMapPlugin(name, opts);
          break;
        case 'ControlBar':
          this.setControlBar(opts);
          break;
        default:
        // do nothing
      }
    }
    

    因此需要采用其他形式引入该插件。示例代码如下:

    import { Map, Marker } from 'react-amap';
    ...
    constructor() {
        this.mapPlugins = [];
        this.state = {
            position: {//121.624604,29.85988
                longitude: '121.624604',
                latitude: '29.85988'
            }
        };
        this.lineSearchOpts = {
            pageIndex: 1,
            city: '宁波',
            pageSize: 1,
            extensions: 'all'
        };
        let that = this;
        this.mapEvents = {
          created(m){
            console.log('这里的 m 就是创建好的高德地图实例')
            console.log(m)
            m.plugin(['AMap.LineSearch'], () => {
                //公交线路查询插件
                const defaultSearchName = '515路';
                if(!linesearch){
                    linesearch = new AMap.LineSearch(that.lineSearchOpts);
                }
                that.lineSearch(defaultSearchName);
            });
          }
        };
    }
    lineSearch = (busLineName) => {
        let that = this;
        linesearch.search(busLineName, function(status, result) {
            map.clearMap()
            if (status === 'complete' && result.info === 'OK') {
                that.dealWithBusPathResult(result);
            } else {
                alert(result);
            }
        });
    }
    
    dealWithBusPathResult = (data) => {
        console.log('查询到的公交线路数据为', data);
    }
    ...
    render() {
        return (
            <div>
                <MAp
                    amapkey=""
                    plugins={this.mapPlugins}
                    center={this.state.position}
                    events={this.mapEvents}
                    zoom={15}
                >
                    //这里根据需要放各个公交站点的maker、始发站maker、终点站maker
                </Map>
            </div>
        )
    }
    ...
    
    

    jsfiddle在线代码示例

  • 相关阅读:
    Ubuntu 12.10 安装 jdk-7u10-linux-x64.tar.gz(转载)
    Android-- FragmentStatePagerAdapter分页(转载)
    Windows下安装Cygwin及包管理器apt-cyg(转)
    Androidi性能优化之多线程和同步
    Androidi性能优化之高效使用内存
    综合面试---常问知识点
    路由器
    域名系统
    IP地址与子网掩码
    网络层使用的协议
  • 原文地址:https://www.cnblogs.com/foxNike/p/10288023.html
Copyright © 2011-2022 走看看