陸向珍,楊麗霞
(1.甘肅省基礎(chǔ)地理信息中心,甘肅 蘭州 730000)
解決城市交通問題,關(guān)鍵是要樹立城市公共交通在城市交通體系中的主導(dǎo)地位,大力優(yōu)先發(fā)展城市的公共交通[1,2]。據(jù)統(tǒng)計(jì), 每20輛自行車或4輛小汽車所占用的道路面積與1 輛公共汽車所占的面積一樣, 而后者的載客量分別是每輛自行車、小汽車的100倍和30~40倍[1,3]。城市公共交通具有客運(yùn)量大、相對投資小、占有資源少、效率高、污染相對較少、人均占有道路少等優(yōu)點(diǎn)。
城市公交是各大城市市民及外來人員出行的首選交通工具,面對錯(cuò)綜復(fù)雜的交通網(wǎng)絡(luò),如何選擇最優(yōu)的乘車線路顯得尤為必要。因此,大力發(fā)展和建設(shè)公交查詢系統(tǒng)或者推行基于網(wǎng)絡(luò)電子地圖的公交查詢服務(wù)顯得越來越重要。
在我國城市的公交運(yùn)行中,公交線路有3種情況:①上下行路線,其往返路線的站點(diǎn)不完全相同;②往返路線, 所經(jīng)站點(diǎn)完全相同;③環(huán)行路線,公交車輛沿著線路環(huán)繞行駛。假設(shè)公交線路有n( n≥100)條,在n條線路中,公交票價(jià)劃分為單一票價(jià)與分段計(jì)價(jià)2種,單一票價(jià)統(tǒng)一為1元,分段計(jì)價(jià)的票價(jià)為:0~20站1元,21~40站2元,40站以上3元[4]。
公交換乘查詢就是要快速、準(zhǔn)確地搜索網(wǎng)絡(luò)上2點(diǎn)之間的最優(yōu)乘車路徑?,F(xiàn)有的很多公交換乘算法都是將公交站點(diǎn)、公交線路的地理位置作為屬性字段存到關(guān)系數(shù)據(jù)庫或文件中,然后采用最短路徑算法、矩陣算法、鏈表查詢甚至使用“圖論”和空間網(wǎng)路數(shù)據(jù)庫相結(jié)合的方法等計(jì)算[5,6]。在這些算法中,有的計(jì)算復(fù)雜、效率低下;有的沒有綜合考慮上下行路線、環(huán)形路線、最優(yōu)換乘點(diǎn)選擇、實(shí)際線路情況等問題,與實(shí)際情況不相符。基于以上原因,本文采用XML、XSD文件描述和公交站點(diǎn)、公交路線數(shù)據(jù)相結(jié)合的方式實(shí)現(xiàn)公交換乘,如圖1所示。
1)獲取最新公交線路信息。在蘭州公交集團(tuán)網(wǎng)站(http://www.lzbus.com)上獲取最新的公交站點(diǎn)信息,將信息按具體線路保存成一個(gè)獨(dú)立的txt文檔,文檔名稱以公交線路名命名,文檔內(nèi)容為具體某一公交線路的公交站點(diǎn),各站點(diǎn)之間用逗號隔開。如12路車,存為“12.txt”,經(jīng)過的所有站點(diǎn)用逗號隔開,如圖2所示。
2)公交站點(diǎn)入庫。編寫程序,將獲取的公交路線及站點(diǎn)信息批量入庫,并同時(shí)去重,形成公交站點(diǎn)表。由于一個(gè)站點(diǎn)經(jīng)過多路公交車,如培黎廣場站,經(jīng)過15路、103路、121路等公交車,讀取15.txt、72.txt、103.txt、121.txt時(shí)培黎廣場站都會被寫進(jìn)公交站點(diǎn)表里,這樣公交站點(diǎn)表里就有4個(gè)站。公交站點(diǎn)表里的站點(diǎn)都是唯一的,所以要將重復(fù)站點(diǎn)去重,最后形成的站點(diǎn)表如圖3所示。
3)獲取公交站點(diǎn)XY坐標(biāo)。利用百度地圖開放API編寫代碼,調(diào)用百度地圖上的蘭州公交車路線,獲取每個(gè)公交車站點(diǎn)的坐標(biāo),關(guān)鍵代碼如下:
-----獲取所需公交路線列表,如1~7路公交路線-----
… …
-----獲取列表中具體公交線路并在地圖上顯示-----
function searchBusline(){
var busline = new BMap.BusLineSearch(map,{
renderOptions:{map:map,panel:"results"},
onGetBusListComplete: function(result){
if(result) {var fstLine = result.getBusListItem(0);//獲取第一個(gè)公交列表顯示到map上
busline.getBusLine(fstLine); }
}
});
-----獲取具體站點(diǎn)坐標(biāo)-----
map.enableScrollWheelZoom();
map.addEventListener("click", function(e){
document.getElementById("info").innerHTML =e.point.lng + ", " + e.point.lat;
運(yùn)行界面如圖4所示。
4)公交站點(diǎn)空間化。點(diǎn)擊具體某路公交車線路,可獲取每個(gè)公交車站點(diǎn)的X、Y坐標(biāo)。獲得全部公交線路的站點(diǎn)坐標(biāo)后,在ArcMap里用X、Y字段將屬性坐標(biāo)空間化,定義空間參考系和投影,疊置蘭州市地理地圖做底圖,鏈接公交線路。
5)拓?fù)錂z查。首先在catolog中創(chuàng)建一個(gè)拓?fù)漕?;然后在ArcMap中打開拓?fù)鋵樱M(jìn)入編輯狀態(tài)。在創(chuàng)建過程中,拓?fù)湟?guī)則點(diǎn)都在線上point must be covered by line(即公交站點(diǎn)要在公交線上),不在線路上的公交站點(diǎn)會在圖上顯示出來。選擇Snap(捕捉)、Trim(修剪)、Extend(延伸)3個(gè)工具,對拓?fù)錂z查出來的問題進(jìn)行修正,保證每一個(gè)公交站點(diǎn)都在公交線路上,如圖5所示。
拓?fù)洳殄e(cuò)后,確定線路的上下行。如1路車,“蘭州車站—蘭州西站”,如果“蘭州車站—蘭州西站”是上行路線,那么“蘭州西站—蘭州車站”就是下行路線。上下行路線重合,方向相反,在ArcMap里設(shè)置路線的上下行[7]。
將公交點(diǎn)數(shù)據(jù)(lzBusPoint.shp)、公交線路數(shù)據(jù)(lzBusLine.shp)基于Geo MapWorld進(jìn)行公交模型建模,實(shí)現(xiàn)公交線路查詢、公交換乘查詢,關(guān)鍵代碼如下[7,8]:
-----公交線路查詢 -----
function(features){
var busStationInfo = getBusStationInfoByBusLine(feat ures[0]);
document.getElementById("queryLineResult").innerHTML = "
查詢到10路公交車經(jīng)過的站點(diǎn):" +busStationInfo.slice(0, busStationInfo.length - 1);};
公交線路查詢運(yùn)行結(jié)果如圖6所示,公交換乘查詢運(yùn)行結(jié)果如圖7所示。
[1]劉娜.優(yōu)先發(fā)展城市公共交通的必要性與措施[J].河北工程技術(shù)高等??茖W(xué)校學(xué)報(bào),2009,3(1):21-23
[2]公共交通連接世界 城市通卡走向國際[EB/OL].http://www.holichip.com/NewsDetail.aspx?i=166, 2013-06-28
[3]陳林菁.公交優(yōu)先!現(xiàn)代城市交通的選擇[J].城市道橋與防洪,2001 (4):52-53
[4]錢萌,彭張節(jié),程樹林,等.基于綜合評價(jià)指數(shù)的城市公交線路選擇優(yōu)化模型[J].吉林大學(xué)學(xué)報(bào):信息科學(xué)版,2008,l26 (2):180-185
[5]付仲良,張文元,孟慶祥.基于GIS的公交數(shù)據(jù)模型研究及換乘算法實(shí)現(xiàn)[J].測繪通報(bào),2010(7):15-18
[6]翁敏,毋河海,杜清運(yùn),等.基于公交網(wǎng)絡(luò)模型的最優(yōu)出行路徑選擇的研究[J].武漢大學(xué)學(xué)報(bào):信息科學(xué)版,2004,29 (6):500-503
[7]武大吉奧信息技術(shù)有限公司. GeoGlobe4.5_公交換乘數(shù)據(jù)要求[S].2011
[8]武大吉奧信息技術(shù)有限公司.C01 Geo MapWorld SDK開發(fā)指南[S].2011