【愚公系列】2022年06月 微信小程序-项目篇(公交查询)-05线路查询

231 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第20天,点击查看活动详情

前言

1.相关API

接口地址:api.jisuapi.com/transit/lin… 返回格式:JSON,JSONP 请求方法:GET POST 请求示例:

https://api.jisuapi.com/transit/line?cityid=382&transitno=86&appkey=yourappkey

请求参数:

参数名称类型必填说明
citystring城市 cityid city任选其一
cityidint城市ID
transitnostring车次 查询地铁加地铁2个字

返回参数:

参数名称类型说明
transitnostring车次
startstationstring始发站
endstationstring终点站
starttimestring最早发车时间
endtimestring最晚发车时间
pricestring票价
maxpricestring最高票价
sequencenostring顺序
stationstring站点
latstring纬度 百度坐标系
lngstring经度
buscompanystring所属公交公司
timetablestring排班表
subwaystring地铁换乘

API错误码:

代号说明
201公交车次为空
202城市ID为空
203起点为空
204终点为空
205城市为空
206公交站点为空
207地址为空
210没有信息

系统错误码:

代号说明
101APPKEY为空或不存在
102APPKEY已过期
103APPKEY无请求此数据权限
104请求超过次数限制
105IP被禁止
106IP请求超过限制
107接口维护中
108接口已停用

2.相关案例

请求API:api.jisuapi.com/transit/lin…

返回JSON:

{
    "status": 0,
    "msg": "ok",
    "result": [
        {
            "transitno": "86路",
            "startstation": "西溪竞舟苑",
            "endstation": "景芳小区",
            "starttime": "05:45",
            "endtime": "21:45",
            "price": "2",
            "maxprice": "2.00",
            "list": [
                {
                    "sequenceno": 1,
                    "station": "西溪竞舟苑",
                    "lat": "30.28806",
                    "lng": "120.06484"
                },                
                {
                    "sequenceno": 22,
                    "station": "和平广场",
                    "lat": "30.29524",
                    "lng": "120.18258"
                },
                {
                    "sequenceno": 25,
                    "station": "濮家新村",
                    "lat": "30.29059",
                    "lng": "120.20558"
                },                
                {
                    "sequenceno": 29,
                    "station": "景芳小区",
                    "lat": "30.27631",
                    "lng": "120.21277"
                }
            ]
        },
        {
            "transitno": "86路",
            "startstation": "景芳小区",
            "endstation": "西溪竞舟苑",
            "starttime": "05:45",
            "endtime": "21:45",
            "price": "2",
            "maxprice": "2.00",
            "list": [
                {
                    "sequenceno": 1,
                    "station": "景芳小区",
                    "lat": "30.27628",
                    "lng": "120.21274"
                },
                {
                    "sequenceno": 2,
                    "station": "濮家新村",
                    "lat": "30.28873",
                    "lng": "120.20592"
                },                
                {
                    "sequenceno": 25,
                    "station": "西溪竞舟苑",
                    "lat": "30.28807",
                    "lng": "120.06484"
                }
            ]
        }
    ]
}

一、站点搜索

1.wxml

<!--pages/search/search.wxml-->
<view class='all'>
  <view class='top'>
    <view class='topsearch'>
      <input type='text' placeholder='请搜索线路' bindinput="setLine" focus='true'></input>
    </view>
    <view class='searchbtn'>
      <image src="../../imgs/search-selected.png" bindtap='search'></image>
    </view>
  </view>
  <view class='mdle'>
    <view class='middle' wx:for="{{lines}}" wx:key="" wx:for-index="idx1" wx:for-item="line">
      <view bindtap='jumpLineDetail' data-line='{{line.transitno}}'>
        <view class='middletop'>{{line.transitno}}</view>
        <view class='middlebottom'>
          <view class='middlebottom1'>{{line.startstation}}</view>
          <view class='middlebottom2'>
            <image src="../../imgs/doublearrow.png"></image>
          </view>
          <view class='middlebottom1'>{{line.endstation}}</view>
        </view>
      </view>
    </view>
  </view>
</view>

2.js

// pages/search/search.js
var app = getApp()
var config = require('../../libs/config.js');
Page({

  /**
   * 页面的初始数据
   */
  data: {
    city: "",//当前城市
    line: "",//用户输入的线路
    lines: [] //搜索得到的线路集合
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    var _this = this
    _this.setData({
      city: options.city,
    })
  },

  getLine() {
    var _this = this
    app.showLoading("搜索数据中")
    wx.request({
      url: 'http://api.jisuapi.com/transit/line', 
      data: {
        appkey: config.Config.busappkey,
        city: _this.data.city,
        transitno	: _this.data.line
      },
      header: {
        'content-type': 'application/json' // 默认值
      },
      success: function (res) {
        console.log(res)
        var lines = res.data.result
        var temp = []
        var linesTemp = []
        if (lines.length > 0) {
          for (var i = 0; i < lines.length; i++) {
            if (temp.indexOf(lines[i].transitno) == -1) {
              lines[i].startstation = lines[i].list[0].station;
              lines[i].endstation = lines[i].list[lines[i].list.length - 1].station
              temp.push(lines[i].transitno)
              linesTemp.push(lines[i]);
            }
          }
        }
        _this.setData({
          lines: linesTemp
        })
        console.log("搜索数据", _this.data.lines)
      },
      fail: function (res) {
        console.log(res);
      },
      complete: function (res) {
        app.hideLoading()
      }
    })
  },
  setLine(e) {
    var _this = this
    var value = e.detail.value
    _this.setData({
      line: value
    })
  },
  search(e) {
    this.getLine()
  },
  jumpLineDetail(e) {
    var _this = this
    var line = e.currentTarget.dataset.line
    var station = e.currentTarget.dataset.station || ''
    var city = _this.data.city
    wx.navigateTo({
      url: '../lineDetail/lineDetail?line=' + line + '&city=' + city + '&station=' + station
    })
  },
})

3.效果

在这里插入图片描述

总结

本篇获取周边站址的API是第三方API,第三方API其实在应用中很常见比如:车牌识别、图片搜索、短信接口、语音识别、语音合成、天气数据、地铁查询、实时物流、飞机查询等等。

相关地图API接口:

  • 百度地图- 百度地图提供了Android, iOS版本的SDK和JavaScript API,可进行定位、地图、数据、出行、鹰眼轨迹和分析服务。
  • 高德地图- 高德地图提供了JavaScript和web服务API,Android和iOS SDK,支持地图,定位,搜索,路线规划,导航和室内地图等。
  • 腾讯地图- 腾讯地图提供了JavaScript API,Android和iOS SDK,支持定位,地图,地点搜索,路线和导航等。
  • 天地图- 天地图提供了H5 API和JavaScript API等web API,同时提供了Android和iOS SDK,支持基础地图服务,图层管理,地图覆盖物,地图工具,地名搜索和出行规划服务。
  • 图吧地图- 图吧提供了JavaScript和Flash API,Android和iOS SDK,支持定位,地址解析,位置标注,位置截图,路线规划,周边查询,兴趣点搜索和在线导航。