这就是我正在尝试做的事情,但惨遭失败:
我有一个 MongoDB,里面装满了来自连接到汽车的设备的 GPS 读数。读数带有时间戳并具有纬度/经度。
对于每个读数,我想创建一个包含位置、时间戳和其他一些信息的 Position 类。
为了在 Google 地图上绘制它,我想创建一个 Route 类,它由一组 Positions 对象组成。
顶部的主要功能从示例 JSON 文件加载路由(以避免 CSRF 问题......另一个故事),创建 Position 对象和路由对象很好。当我尝试绘制路线时,问题就开始了。
var positions = this.getPositions();
如果我输入
console.log(positions);
在该行的正下方,它将很好地打印位置数组。这样做需要一点时间,因为它很大,但它确实有效。
但是,如果我输入
console.log(positions[0]);
它不会工作,因为位置还没有加载。
我该怎么办?
我正在使用来自http://classy.pocoo.org的 classy.js,但我已经验证这不是问题。
function main()
{
var route = Route('20120928_025650_0');
route.plot();
}
var Route = Class.$extend({
__init__ : function(imaging_run_id) {
this.imaging_run_id = imaging_run_id;
this.positions = [];
this.load();
},
getPositions : function() {
return (this.positions);
},
load : function() {
//var url='http://localhost:5001/gps/by_imaging_run_id/' + this.imaging_run_id;
var test_url = '/static/20120928_025650_0.json';
var me = this;
$.getJSON(test_url, function(route) {
for(var position in route) {
var obj = route[position];
var new_position = Position(obj['_id'], obj['lat'], obj['lng'], obj['timestamp'], obj['epoch_timestamp'], obj['is_valid']);
me.pushPositions(new_position);
}
me.orderPositions();
})
.error(function(jqXhr, textStatus, error) {
alert("ERROR: " + textStatus + ", " + error);
});
},
orderPositions : function() {
var unsorted_array = this.getPositions();
var sorted = unsorted_array.sort(function(a,b){ //Custom sort function
return a['timestamp'] - b['timestamp']; //Sort ascending
});
this.setPositions(sorted);
},
plot : function() {
var positions = this.getPositions();
var points = [];
var bounds = new google.maps.LatLngBounds();
for(var i=0; i<positions.length; i++)
{
var obj = positions[i];
var point = new google.maps.LatLng(obj['location'][0], obj['location'][1]);
points.push(point);
bounds.extend(point);
}
// Create the polyline.
var route = new google.maps.Polyline({
path: points,
strokeColor: '#e81971',
strokeOpacity: 1.0,
strokeWeight: 4
});
map.fitBounds(bounds);
route.setMap(map);
}
});
var Position = Class.$extend({
__init__ : function(id, lat, lng, timestamp, epoch_timestamp, valid) {
this.id = id;
this.location = [lat, lng];
this.timestamp = new Date(timestamp);
this.epoch_timestamp = new Date(epoch_timestamp);
this.valid = valid;
this.anchor_location;
},.....