Code:
Ext.define('BayWatch.controller.Map', {
extend: 'Ext.app.Controller',
views: ['BayWatch.view.Map'],
refs: {
mainView : '#mainView',
mapView : '#mapView'
},
launch: function () {
BayWatch.app.tidesStore.on('load', this.onTidesLoad, this);
},
onTidesLoad: function(store, records, success) {
console.log('Map: store loaded - starting mapping markers');
this.removeTidesMarkers();
this.addTidesMarkers();
},
addTidesMarkers: function(){
var mv = Ext.getCmp('extmap');
var map = mv.getMap();
var sr = ' ';
BayWatch.app.tidesStore.each(function(record){
if (record.get("stationName") != sr){
sr = record.get("stationName");
console.log(sr);
var position = new google.maps.LatLng(record.get("latitude"), record.get("longitude"));
var iconType;
if (record.get('type') == 'H'){
iconType = 'up';
}else{
iconType='down';
};
var imageIconPath = 'app/resources/icons/' + iconType + '/marker-images';
var image = new google.maps.MarkerImage(
imageIconPath + '/image.png',
new google.maps.Size(24,24),
new google.maps.Point(0,0),
new google.maps.Point(12,24)
);
var shadow = new google.maps.MarkerImage(
imageIconPath + '/shadow.png',
new google.maps.Size(40,24),
new google.maps.Point(0,0),
new google.maps.Point(12,24)
);
var shape = {
coord: [16,0,18,1,19,2,20,3,21,4,22,5,23,6,23,7,23,8,23,9,23,10,23,11,23,12,23,13,23,14,23,15,23,16,23,17,22,18,21,19,21,20,20,21,18,22,17,23,6,23,5,22,4,21,3,20,2,19,1,18,1,17,0,16,0,15,0,14,0,13,0,12,0,11,0,10,0,9,0,8,0,7,1,6,1,5,2,4,3,3,4,2,5,1,7,0,16,0],
type: 'poly'
};
var marker = new google.maps.Marker({
icon: image,
shadow: shadow,
shape: shape,
map: map,
position: position,
title : record.get('stationName'),
visible: true
});
BayWatch.app.tidesMarkers.push(marker);
google.maps.event.addListener(marker, 'click', function() {
var time = record.get("time");
var waterType = record.get("type") == 'L'?
'<span style="color:red">low water</span>':
'<span style="color:green">high water</span>'
;
var one_hour=1000*60*60;
var now = new Date();
var deltaTime = Math.ceil((time.getTime()-now.getTime())/(one_hour));
infoWindow = new google.maps.InfoWindow({ content:
record.get("stationName") +
' - ' +
waterType +
' in ' + deltaTime + ' hours - ' +
record.get("waterLevel") + ' ' + BayWatch.app.units + '<br> on ' + time.toLocaleString()
}),map, marker;
if (BayWatch.app.openTidesInfoWindow){
BayWatch.app.openTidesInfoWindow.close();
};
infoWindow.open(map, marker);
BayWatch.app.openTidesInfoWindow = infoWindow;
});
};
});
console.log('Map : finished mapping');
},
removeTidesMarkers : function (){
markers = BayWatch.app.tidesMarkers;
for (var i = 0; i < markers.length; i++ ){
markers[i].setMap(null);
}
}
});
--------------------------------------------------
Ext.define('BayWatch.view.Map', {
id : 'mapView',
extend: 'Ext.Container',
requires: 'Ext.Map',
alias : 'widget.mapview',
config: {
layout: 'fit',
items: [
{
id : 'extmap',
xtype : 'map',
useCurrentLocation : false,
mapOptions : {
zoom: 10,
mapTypeId: google.maps.MapTypeId.ROADMAP
}
}
]
},
initialize : function (){
var emap = Ext.getCmp('extmap');
emap.setGeo(BayWatch.app.geo);
}
});