Files
Lentolaskuri/app/scripts/libs/maps.js
Juho Teperi 8936480bce !
2013-05-15 09:36:03 +03:00

121 lines
2.2 KiB
JavaScript

'use strict';
define([
'require',
'jquery',
'lodash',
'backbone'
], function (require, $, _, Backbone) {
var gmaps;
function glatlng(latlng) {
if (_.isArray(latlng)) {
return new gmaps.LatLng(latlng[0], latlng[1]);
} else if (latlng instanceof Backbone.Model) {
return new gmaps.LatLng(latlng.get('lat'), latlng.get('long'));
} else {
return new gmaps.LatLng(latlng.lat, latlng.long);
}
}
var maps = {};
var deferred = $.Deferred();
var i = 0;
var Map = function (el, opts) {
var num = i;
deferred.done(function () {
maps[num] = new gmaps.Map(el, {
center: glatlng([0, 0]),
mapTypeId: gmaps.MapTypeId.ROADMAP,
zoom: 0,
streetViewControl: false,
mapTypeControl: false,
draggable: false,
scrollwheel: false,
zoomControl: false
});
});
return {
id: i++
};
};
var Line = function (attr) {
var data;
deferred.done(function () {
attr = attr || {};
attr.map = maps[attr.map.id];
data = new gmaps.Polyline(attr);
});
return {
clear: function () {
deferred.done(function () {
data.setPath([]);
});
},
add: function (latlng) {
deferred.done(function () {
data.getPath().push(glatlng(latlng));
});
}
};
};
var Bounds = function (map) {
var map;
var i;
var data;
var reset = function () {
i = 0;
map.setZoom(1);
map.setCenter(glatlng([0, 0]));
};
deferred.done(function () {
data = new gmaps.LatLngBounds();
map = maps[map.id];
reset();
});
return {
clear: function () {
deferred.done(function () {
reset();
});
},
add: function (latlng) {
deferred.done(function () {
data.extend(glatlng(latlng));
++i;
});
},
use: function () {
deferred.done(function () {
if (i >= 2) {
map.fitBounds(data);
}
});
}
};
};
require(['libs/gmaps'], function (_gmaps) {
gmaps = _gmaps;
deferred.resolve();
});
return {
Map: Map,
Line: Line,
Bounds: Bounds
};
});