#yyds干货盘点#愚公系列2022年12月 微信小程序-项目篇(公交查询)-01周边站点

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了#yyds干货盘点#愚公系列2022年12月 微信小程序-项目篇(公交查询)-01周边站点相关的知识,希望对你有一定的参考价值。

前言

1.公交车站的意义

  • 转变现有出行模式,倡导公共交通和混合动力汽车、电动车、自行车等低碳或无碳方式,同时也丰富出行生活,增加出行项目。
  • 扭转奢华浪费之风,强化清洁、方便、舒适的功能性,提升文化的品牌性。
  • 加强出行智能化发展,提高运行效率,同时及时全面引进节能减排技术,降低碳消耗,最终形成全产业链的循环经济模式。

2.公交车站的作用

  • 对老百姓来说,公共汽车出行,成本低廉。
  • 对国家来说,公共汽车可以减少私家车的出行,对大自然来说是环保的。
  • 公共汽车可以减少交通压力。
  • 公共汽车往往能涵盖这个城市的绝大多数地区,对偏远地区来说是很方便的。

一、周边站点

小程序的周边站点是实时获取当前登录用户的位置信息,进而给出附件公交车站信息,以便用户选择乘车方案。

1.wxml

<!--pages/research/research.wxml-->
<view class="zhenggeyemian">
  <view class=ttop>
    <view class="topsearch">
      <view class="topsearchtitle">
        <view class="leftspan">
          locationInfo.city
        </view>
        <image src="../../imgs/search.png">
        </image>
        <view bindtap="jumpSearch" style=color:grey;font-size:13px;>
          请输入搜索线路
        </view>
      </view>
    </view>
    <view class="danghang">
      <view class="danghang2" data-type="1" style=type=="1"?"border-bottom: 2px solid red":"" bindtap=changeType>周边站点</view>
      <view class="danghang3" data-type="2" style=type=="2"?"border-bottom: 2px solid red":"" bindtap=changeType>地图</view>
    </view>
  </view>
  <view class=middles>
    <view class="middle" wx:if="type==1" wx:for="stationList" wx:key="" wx:for-index="idx1" wx:for-item="station">
      <view class=middlesingle>
        <view class=middlesingletop bindtap=jumpLinesShow data-station="station.station">
          <view class=middlesingletopleft>station.station</view>
          <view class=middlesingletopright>
            <view class=mi>米</view>
            <view class=middlesingletoprightredfont>
              station.distance
            </view>
            <view class=mi> 距离你</view>
            <view class="imagess">
              <image src="../../imgs/distance.png"></image>
            </view>
          </view>
        </view>
        <view class=middlesinglebottom wx:for="station.lines" wx:key="" wx:for-index="idx2" wx:for-item="line" bindtap=jumpLineDetail data-line=line data-station="station.station">
          <view class=ditiemz>line</view>
        </view>
      </view>
    </view>
    <view class="map" wx:if="type==2">
      <map id="map" longitude="locationInfo.longitude" latitude="locationInfo.latitude" scale="16" markers=markers bindcallouttap=callouttap show-location style="width: 100%;height:430px;"></map>
    </view>
  </view>
</view>

2.js

// 引入SDK核心类
var QQMapWX = require(../../libs/qqmap/qqmap-wx.js);
var qqmap;
var config = require(../../libs/config.js);
var app = getApp()
// pages/research/research.js
Page(

  /**
   * 页面的初始数据
   */
  data: 
    locationInfo: ,
    stationList: [],
    type: "1",
    markers: []
  ,

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) 
    var _this = this
    // 实例化API核心类
    qqmap = new QQMapWX(
      key: config.Config.qqmapkey
    )
    _this.getLocationInfo()
  ,

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () 
    wx.showNavigationBarLoading() //在标题栏中显示加载
    this.getLocationInfo()
  ,
  /**
   * 得到经纬度和城市
   */
  getLocationInfo() 
    var _this = this
    app.showLoading("拉取路线列表")
    wx.getLocation(
      type: gcj02,
      success: function (res) 
        var locationInfo = _this.data.locationInfo
        locationInfo.latitude = res.latitude
        locationInfo.longitude = res.longitude
        // 调用接口
        qqmap.reverseGeocoder(
          location: 
            latitude: locationInfo.latitude,
            longitude: locationInfo.longitude
          ,
          success: function (res) 
            locationInfo.city = res.result.address_component.city
            locationInfo.address = res.result.formatted_addresses.recommend
            _this.setData(
              locationInfo: locationInfo
            )
            _this.getStationList()
          ,
          fail: function (res) 
            console.log(res);
            app.hideLoading(locationInfo)
          ,
          complete: function (res) 
            // complete
            // console.log(_this.data.locationInfo)
          
        )
      
    )
  ,
  /**
   * 得到周边站址
   */
  getStationList() 
    var _this = this
    // 调用接口
    var locationInfo = _this.data.locationInfo
    console.log(locationInfo)
    wx.request(
      url: http://api.jisuapi.com/transit/nearby, //周围地址接口
      data: 
        appkey: config.Config.busappkey,
        city: locationInfo.city,
        address: locationInfo.address
      ,
      header: 
        content-type: application/json // 默认值
      ,
      success: function (res) 
        var stationList = res.data.result
        console.log(stationList)
        console.log(stationList.length)
        for (var i = 0; i < stationList.length; i++) 
          if(stationList[i].lines !=undefined)
            var temp = []
            for (var j = 0; j < stationList[i].lines.length; j++) 
              var line = stationList[i].lines[j]
              var newLine = line.substring(0, line.indexOf(())
              if (temp.indexOf(newLine) == -1) 
                temp.push(newLine)
              
            
            stationList[i].lines = temp
          
        
        _this.setData(
          stationList: stationList
        )
        //设置标记点
        _this.setMapMarkers()
        console.log(_this.data.stationList)
      ,
      fail: function (res) 
        console.log(res);
      ,
      complete: function (res) 
        app.hideLoading()
        // console.log(res);
        wx.hideNavigationBarLoading() //完成停止加载
        wx.stopPullDownRefresh() //停止下拉刷新
      
    )
  ,
  jumpLinesShow(e) 
    var _this = this
    console.log(e)
    var station = e.currentTarget.dataset.station
    var city = _this.data.locationInfo.city
    wx.navigateTo(
      url: ../linesShow/linesShow?station= + station + &city= + city
    )
  ,
  jumpLineDetail(e) 
    var _this = this
    var line = e.currentTarget.dataset.line
    var station = e.currentTarget.dataset.station
    var city = _this.data.locationInfo.city
    wx.navigateTo(
      url: ../lineDetail/lineDetail?line= + line + &city= + city + &station= + station
    )
  ,
  jumpSearch(e) 
    var _this = this
    var city = _this.data.locationInfo.city
    wx.navigateTo(
      url: ../search/search?city= + city
    )
  ,
  changeType(e) 
    var _this = this
    var type = e.currentTarget.dataset.type
    _this.setData(
      type: type
    )
  ,
  setMapMarkers() 
    var _this = this
    var stationList = _this.data.stationList
    for (var i = 0; i < stationList.length; i++) 
      (function (i) 
        wx.request(
          url: http://api.map.baidu.com/geoconv/v1/, //仅为示例,并非真实的接口地址
          data: 
            ak: config.Config.bmapkey,
            coords: stationList[i].lng + , + stationList[i].lat,
            from: 5, //百度地图采用的经纬度坐标;
            to: 3 //国测局(gcj02)坐标;
          ,
          header: 
            content-type: application/json // 默认值
          ,
          success: function (res) 
            // console.log(res)
            var lnglat = res.data.result[0]
            var marker = 
            marker.iconPath = ../../imgs/location.png
            marker.id = i
            marker.latitude = lnglat.y
            marker.longitude = lnglat.x
            marker.width = 20
            marker.height = 20
            marker.callout = 
              content: stationList[i].station,
              color: red,
              bgColor: #fcfcfc,
              padding: 3,
              fontSize: 18,
              borderRadius: 10,
              display: BYCLICK,
              textAlign: left
            
            var markers = _this.data.markers
            markers.push(marker)
            _this.setData(
              markers: markers
            )
          ,
          fail: function (res) 
            console.log(res);
          ,
          complete: function (res) 
            // console.log(res);
          
        )
      )(i)
    
  ,
  callouttap(e) 
    console.log(e)
    var _this = this
    var id = e.markerId
    var stationList = _this.data.stationList
    var station = stationList[id].station
    e.currentTarget.dataset.station = station
    _this.jumpLinesShow(e)
  
)

3.wxss

/* pages/research/research.wxss */

.uszhenggeyemianerinfo 
  float: left;
  width: 100%;

.zhenggeyemian
  float: left;
  width: 100%;
  height: 100px;

.topsearch 
  width: 100%;
  float: left;
  height: 40px;
  padding-top: 6px;
  background-color: white;


.topsearchtitle 
  width: 90%;
  float: left;
  height: 20px;
  line-height: 20px;
  padding: 8px 10px 5px 10px;
  background-color: #eee;
  border-radius: 30px;


.leftspan 
  float: left;
  width: 13%;
  height: 100%;
  background-color: #eee;
  border: 1px solid #eee;
  font-size: 12px;


.topsearchtitle image 
  float: left;
  width: 8%;
  height: 100%;
  background-color: #eee;
  border: 1px solid #eee;
  font-size: 12px;


.topsearchtitle input 
  float: left;
  width: 76%;
  height: 100%;
  background-color: #eee;
  border: 1px solid #eee;
  font-size: 12px;

.ttop
 position: fixed;
 float: left;
  width: 100%;
 z-index:1;


.danghang 
  float: left;
  width: 100%;
  height: 40px;
  line-height: 40px;
  background-color: white;
  border-bottom: 1px solid #eee;
  font-size: 12px;

.danghang2 
  float: left;
  width: 50%;
  height: 39px;
  line-height: 39px;
  background-color: white;
  text-align: center;

  font-size: 12px;


.danghang3 
  float: left;
  width: 50%;
  height: 40px;
  line-height: 40px;
  text-align: center;
  background-color: white;
  font-size: 12px;

.middles
  float: left;
  width: 100%;
    margin-top:88px;

.middle 
  float: left;
  width: 100%;
  

.middlesingle 
  margin-top: 10px;
  float: left;
  width: 99%;
  border: 1px solid #eee;


.middlesingletop 
  float: left;
  width: 100%;
  height: 35px;
  line-height: 35px;
  background-color: #eff;
  font-size: 12px;


.middlesingletopleft 
  float: left;
  width: 45%;
  height: 35px;
  line-height: 35px;
  background-color: #eff;
  font-size: 12px;
  padding: 0px 5px 0px 5px;


.middlesingletopright 
  float: left;
  width: 45%;
  text-align: right;
  height: 35px;
  line-height: 35px;
  background-color: #eff;
  font-size: 12px;

.imagess image
 height: 40%;
  width: 40%;

.imagess
 float: right;
  height: 35px;
  width: 30%;
  line-height:35px;

.middlesingletoprightredfont
    float: right;
    color: red;
    font-size: 14px;

.mi
  float: right;



.middlesinglebottom 
  float: left;


.ditiemz 
  margin: 5px 5px 5px 5px;
  padding: 5px 5px 5px 5px;
  font-size: 12px;
  border: 1px solid #eee;


.map
  position:fixed;
  float: left;
  width: 100%;
  height: 430px;
   z-index:1;

4.实际效果

以上是关于#yyds干货盘点#愚公系列2022年12月 微信小程序-项目篇(公交查询)-01周边站点的主要内容,如果未能解决你的问题,请参考以下文章

#yyds干货盘点#愚公系列2022年12月 微信小程序-WebGL纹理材质的使用

#yyds干货盘点#愚公系列2022年12月 微信小程序-项目篇(公交查询)-06站点查询

#yyds干货盘点#愚公系列2022年12月 微信小程序-three.js绘制球体

#yyds干货盘点#愚公系列2022年12月 微信小程序-WebGL画渐变色正方形

#yyds干货盘点#愚公系列2022年12月 微信小程序-图片加载和全屏适配问题

#yyds干货盘点#愚公系列2022年12月 微信小程序-项目篇(公交查询)-01周边站点