GIS中数据的获取非常重要,有好的想法却因为数据缺失不得不夭折非常可惜,由此也可以深刻理解数据是gis的血液。
参考菩提老王和酸奶小妹的博客,这两天实现了百度地图api下载南京市市区的的公交信息,相关注意点如下:
1.下载json2.js包,可以在javascript中将对象序列化为 json字符串
2.百度地图中的公交线路名称并不全是标准的,比如公交线路名称为"110路支线“,但是在百度地图中的名称是”110支线“,不能通过统一的处理方式来处理,需要将某些路线进行特殊处理,这也体现出数据格式标准规范化是多么重要。
3.程序中使用DispatcherTimer,每隔一定时间间隔(1秒、2秒等)进行一次路线查询,实验地区为南京市市区,总共239条路线,应该获取476条路线(路线是往返的,有的是单线、环线等),不同的时间间隔对获取路线的条数有影响,但是即使将间隔设置的足够大,也不一定得到全部的路线,要看运气了
4.最后的公交路线txt文件,内容格式为[{公交路线1的json字符串},{公交路线2的json字符串},……] ,需要使用Notepad++软件,在菜单的”格式“中设置为”以UTF-8无BOM格式编码“
javascript代码如下,想下载程序的可到资源中下载,使用了silverlight5开发,思路参考菩提老王的博客:
<script type="text/javascript">
var busName;
var count1 = 0, count2 = 0 ;
var array2=new Array();
function BusLinePoint() {
this.lng = "";
this.lat = "";
}
function BusStopPosition() {
this.lng = "";
this.lat = "";
}
function BusStop() {
this.name = "";
this.position = "";
}
function BusLineInfo() {
this.name = "";
this.startTime = "";
this.endTime = "";
this.company = "";
this.stopsCount = "";
this.points = new Array();
this.stops = new Array();
}
var busline = new BMap.BusLineSearch("南京", {
// renderOptions: { map: map, panel: "results" },
onGetBusListComplete: function (busListResult) {
if (busListResult) {
for (var i = 0, num = busListResult.getNumBusList(); i < num; i++) {
var item = busListResult.getBusListItem(i);
var busLineName = item.name.substring(0, item.name.indexOf('('));
if (busLineName.indexOf(busName) == 0 || busLineName == "110支线") {
if ((busName.indexOf("路") + 1) == busName.length) {
if ((busName.indexOf("路") + 1) == busLineName.length || busLineName == "3路内环" || busLineName == "3路外环" || busLineName == "48路空调" ||busLineName == "54路空调" || busLineName == "64路空调" || busLineName == "150路空调"|| busLineName == "185路环线")
{
busline.getBusLine(item);
count2++;
}
}
else {
busline.getBusLine(item);
count2++;
}
}
}
busline.setGetBusLineCompleteCallback(function (lineResults) {
var jsonObj = lineResults;
// console.log(jsonObj.Be.R[0].lat);
var busLineInfo = new BusLineInfo();
busLineInfo.name = jsonObj.name;
busLineInfo.startTime = jsonObj.startTime;
busLineInfo.endTime = jsonObj.endTime;
busLineInfo.company = jsonObj.company;
busLineInfo.stopsCount = jsonObj.stopsCount;
for (var obj in jsonObj.Be.R) {
var busLinePoint = new BusLinePoint();
busLinePoint.lat = jsonObj.Be.R[obj].lat;
busLinePoint.lng = jsonObj.Be.R[obj].lng;
busLineInfo.points[obj] = busLinePoint;
}
for (var obj in jsonObj.kn) {
var busStopPositon = new BusStopPosition();
var busStop = new BusStop();
busStopPositon.lat = jsonObj.kn[obj].position.lat;
busStopPositon.lng = jsonObj.kn[obj].position.lng;
busStop.name = jsonObj.kn[obj].name;
busStop.position = busStopPositon;
busLineInfo.stops[obj] = busStop;
}
busLineInfo.stopsCount = jsonObj.kn.length;
// console.log(JSON.stringify(busLineInfo));
var jsonInfo = JSON.stringify(busLineInfo);
var slHost = document.all("slObject");
var page = slHost.Content.BuilderPage;
page.Show(jsonInfo);
count1++;
});
}
}
});
function busSearch(name) {
busName = name;
busline.getBusList(busName);
}
function num1() {
return count1;
}
function num2() {
return count2;
}
function name() {
return busName;
}
</script>