前言
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" style='{{type=="1"?"border-bottom: 2px solid red":""}}' bindtap='changeType'>周边站点</view>
<view class="danghang3" 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 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;
}