GoogleMapController.js
Summary
Garmin.MapController Overlays TrackPoint and WayPoint data on Google maps.
Version: 1.0
Author: Jason Holmes jason.holmes.at.garmin.com
if (Garmin == undefined) var Garmin = {};
Object.extend(Garmin.TrackPoint.prototype, {
getLatLon: function() {
return new GLatLng(this.getLat(), this.getLng());
}
});
Object.extend(Garmin.WayPoint.prototype, {
getLatLon: function() {
return new GLatLng(this.getLat(), this.getLng());
}
});
Garmin.MapController = function(mapString){};
Garmin.MapController = Class.create();
Garmin.MapController.prototype = {
initialize: function(mapString) {
this.mapElement = $(mapString);
this.usePositionMarker = true;
this.polylines = new Array();
this.markers = new Array();
this.tracks = new Array();
this.markerIndex = 0;
this.timeToCheck = false;
try {
this.map = new GMap2( $(mapString) );
this.map.addControl(new GSmallMapControl());
this.map.addControl(new GMapTypeControl());
new GKeyboardHandler(this.map);
} catch (e) {
alert("WARNING: application will not function properly with missing Google script element or invalid Google map key. Error: "+e);
}
window.onUnload = "GUnload()";
},
centerAndScale: function(lat, lon, scale) {
if(scale == null) scale = 13;
this.map.setCenter(new GLatLng(lat, lon), scale);
},
drawTrack: function(track, color) {
if(color == null) color = "#ff0000";
var drawAt = Math.ceil(track.getLength()/300);
var drawnPoints = new Array();
for(var h=0; h<track.getNumSegments(); h++) {
var trackSegment = track.getSegment(h);
for(var i=0; i<trackSegment.getLength(); i+=drawAt) {
try {
var point = trackSegment.findNearestValidLocationPoint(i, -1);
drawnPoints.push( point.getLatLon() );
} catch( e ) {
alert("GoogleMapControl.drawTrack: "+e.message);
}
}
try {
var point = trackSegment.findNearestValidLocationPoint(track.getLength()-1, -1);
drawnPoints.push( point.getLatLon() );
} catch( e ) {
alert("GoogleMapControl.drawTrack: "+e.message);
}
}
var polyline = new GPolyline(drawnPoints, color, 2, .8)
try {
this.map.addOverlay( polyline );
this.addStartFinishMarkers(track);
this.bounds = this.findAZoomLevel(drawnPoints);
this.setOnBounds( this.bounds );
} catch(e){ alert("GoogleMapControl.drawTrack, IE error on map.addOverlay("+polyline+") err: "+e); }
},
drawWayPoint: function(waypoint) {
this.addMarker( waypoint );
this.centerAndScale( waypoint.getLat(), waypoint.getLng(), 15 );
},
findAZoomLevel: function(points) {
var bounds = new GLatLngBounds(points[0], points[0]);
for(var i=1; i<points.length-1; i+=3) {
bounds.extend(points[i]);
}
return bounds;
},
sizeAndSetOnBounds: function() {
this.map.checkResize();
this.setOnBounds( this.bounds );
},
setOnBounds: function(bounds) {
this.map.setCenter( this.bounds.getCenter(), this.map.getBoundsZoomLevel(this.bounds) );
},
addMarker: function(point) {
this.addMarkerWithIcon( point, Garmin.MapIcons.getRedIcon() );
},
addMarkerWithIcon: function(point, icon) {
var gMarker = new GMarker( point.getLatLon(), icon );
this.markers.push( gMarker );
this.map.addOverlay( gMarker );
},
addStartFinishMarkers: function(track) {
this.addMarkerWithIcon(track.getStart(), Garmin.MapIcons.getGreenIcon());
this.addMarkerWithIcon(track.getEnd(), Garmin.MapIcons.getRedIcon());
},
toString: function() {
return "Google Based Map Controller, managing " + this.tracks.length + " track(s)";
}
};
Garmin.MapIcons = function(){};
Garmin.MapIcons = {
getRedIcon: function() {
var icon = new GIcon();
icon.image = "http://trail.motionbased.com/trail/site/images/marker_red.png";
return Garmin.MapIcons._applyShadowAndStuff(icon);
},
getGreenIcon: function() {
var icon = new GIcon();
icon.image = "http://trail.motionbased.com/trail/site/images/marker_green.png";
return Garmin.MapIcons._applyShadowAndStuff(icon);
},
getBaseIcon: function() {
var baseIcon = new GIcon();
baseIcon.shadow = "http://www.google.com/mapfiles/shadow50.png";
baseIcon.iconSize = new GSize(20, 34);
baseIcon.shadowSize = new GSize(37, 34);
baseIcon.iconAnchor = new GPoint(9, 34);
baseIcon.infoWindowAnchor = new GPoint(9, 2);
baseIcon.infoShadowAnchor = new GPoint(18, 25);
return baseIcon;
},
_applyShadowAndStuff: function(icon) {
icon.iconSize = new GSize(12, 20);
icon.shadow = "http://trail.motionbased.com/trail/site/images/marker_shadow.png";
icon.shadowSize = new GSize(22, 20);
icon.iconAnchor = new GPoint(6, 20);
icon.infoWindowAnchor = new GPoint(5, 1);
return icon;
}
}
Documentation generated by
JSDoc on Fri May 25 19:06:38 2007