1 mxn.register('googlev3', {
\r
5 init: function(element, api){
\r
7 if ( google && google.maps ){
\r
8 // by default no controls and road map
\r
10 disableDefaultUI: true,
\r
11 mapTypeId: google.maps.MapTypeId.ROADMAP
\r
13 var map = new google.maps.Map(element, myOptions);
\r
16 google.maps.event.addListener(map, 'click', function(location){
\r
17 me.clickHandler(location.latLng.lat(),location.latLng.lng(),location,me);
\r
20 // deal with zoom change
\r
21 google.maps.event.addListener(map, 'zoom_changed', function(){
\r
22 me.changeZoom.fire();
\r
24 // deal with map movement
\r
25 google.maps.event.addListener(map, 'dragend', function(){
\r
26 me.moveendHandler(me);
\r
29 this.maps[api] = map;
\r
30 this.loaded[api] = true;
\r
34 alert(api + ' map script not imported');
\r
38 applyOptions: function(){
\r
39 var map = this.maps[this.api];
\r
41 if (this.options.enableDragging) {
\r
42 myOptions.draggable = true;
\r
44 if (this.options.enableScrollWheelZoom){
\r
45 myOptions.scrollwheel = true;
\r
47 map.setOptions(myOptions);
\r
50 resizeTo: function(width, height){
\r
51 this.currentElement.style.width = width;
\r
52 this.currentElement.style.height = height;
\r
53 var map = this.maps[this.api];
\r
54 google.maps.event.trigger(map,'resize');
\r
57 addControls: function( args ) {
\r
58 var map = this.maps[this.api];
\r
59 // remove old controls
\r
61 // Google has a combined zoom and pan control.
\r
62 if (args.zoom || args.pan) {
\r
63 if (args.zoom == 'large'){
\r
64 this.addLargeControls();
\r
66 this.addSmallControls();
\r
72 scaleControlOptions: {style:google.maps.ScaleControlStyle.DEFAULT}
\r
74 map.setOptions(myOptions);
\r
75 this.addControlsArgs.scale = true;
\r
79 addSmallControls: function() {
\r
80 var map = this.maps[this.api];
\r
82 navigationControl: true,
\r
83 navigationControlOptions: {style: google.maps.NavigationControlStyle.SMALL}
\r
85 map.setOptions(myOptions);
\r
87 this.addControlsArgs.pan = false;
\r
88 this.addControlsArgs.scale = false;
\r
89 this.addControlsArgs.zoom = 'small';
\r
92 addLargeControls: function() {
\r
93 var map = this.maps[this.api];
\r
95 navigationControl:true,
\r
96 navigationControlOptions: {style:google.maps.NavigationControlStyle.DEFAULT}
\r
98 map.setOptions(myOptions);
\r
99 this.addControlsArgs.pan = true;
\r
100 this.addControlsArgs.zoom = 'large';
\r
103 addMapTypeControls: function() {
\r
104 var map = this.maps[this.api];
\r
106 mapTypeControl: true,
\r
107 mapTypeControlOptions: {style: google.maps.MapTypeControlStyle.DEFAULT}
\r
109 map.setOptions(myOptions);
\r
110 this.addControlsArgs.map_type = true;
\r
113 setCenterAndZoom: function(point, zoom) {
\r
114 var map = this.maps[this.api];
\r
115 var pt = point.toProprietary(this.api);
\r
120 addMarker: function(marker, old) {
\r
121 return marker.toProprietary(this.api);
\r
124 removeMarker: function(marker) {
\r
125 // doesn't really remove them, just hides them
\r
129 removeAllMarkers: function() {
\r
130 var map = this.maps[this.api];
\r
131 // TODO: Add provider code
\r
134 declutterMarkers: function(opts) {
\r
135 var map = this.maps[this.api];
\r
136 // TODO: Add provider code
\r
139 addPolyline: function(polyline, old) {
\r
140 var map = this.maps[this.api];
\r
141 return polyline.toProprietary(this.api);
\r
144 removePolyline: function(polyline) {
\r
145 var map = this.maps[this.api];
\r
146 // TODO: Add provider code
\r
149 getCenter: function() {
\r
150 var map = this.maps[this.api];
\r
151 var pt = map.getCenter();
\r
152 return new mxn.LatLonPoint(pt.lat(),pt.lng());
\r
155 setCenter: function(point, options) {
\r
156 var map = this.maps[this.api];
\r
157 var pt = point.toProprietary(this.api);
\r
158 if(options && options.pan) {
\r
166 setZoom: function(zoom) {
\r
167 var map = this.maps[this.api];
\r
171 getZoom: function() {
\r
172 var map = this.maps[this.api];
\r
173 return map.getZoom();
\r
176 getZoomLevelForBoundingBox: function( bbox ) {
\r
177 var map = this.maps[this.api];
\r
178 var sw = bbox.getSouthWest().toProprietary(this.api);
\r
179 var ne = bbox.getNorthEast().toProprietary(this.api);
\r
180 var gLatLngBounds = new google.maps.LatLngBounds(sw, ne);
\r
181 map.fitBounds(gLatLngBounds);
\r
182 return map.getZoom();
\r
185 setMapType: function(type) {
\r
186 var map = this.maps[this.api];
\r
188 case mxn.Mapstraction.ROAD:
\r
189 map.setMapTypeId(google.maps.MapTypeId.ROADMAP);
\r
191 case mxn.Mapstraction.SATELLITE:
\r
192 map.setMapTypeId(google.maps.MapTypeId.SATELLITE);
\r
194 case mxn.Mapstraction.HYBRID:
\r
195 map.setMapTypeId(google.maps.MapTypeId.HYBRID);
\r
198 map.setMapTypeId(google.maps.MapTypeId.ROADMAP);
\r
202 getMapType: function() {
\r
203 var map = this.maps[this.api];
\r
204 var type = map.getMapTypeId();
\r
206 case google.maps.MapTypeId.ROADMAP:
\r
207 return mxn.Mapstraction.ROAD;
\r
208 case google.maps.MapTypeId.SATELLITE:
\r
209 return mxn.Mapstraction.SATELLITE;
\r
210 case google.maps.MapTypeId.HYBRID:
\r
211 return mxn.Mapstraction.HYBRID;
\r
212 //case google.maps.MapTypeId.TERRAIN:
\r
213 // return something;
\r
219 getBounds: function () {
\r
220 var map = this.maps[this.api];
\r
221 var gLatLngBounds = map.getBounds();
\r
222 var sw = gLatLngBounds.getSouthWest();
\r
223 var ne = gLatLngBounds.getNorthEast();
\r
224 return new mxn.BoundingBox(sw.lat(), sw.lng(), ne.lat(), ne.lng());
\r
227 setBounds: function(bounds){
\r
228 var map = this.maps[this.api];
\r
229 var sw = bounds.getSouthWest().toProprietary(this.api);
\r
230 var ne = bounds.getNorthEast().toProprietary(this.api);
\r
231 var gLatLngBounds = new google.maps.LatLngBounds(sw, ne);
\r
232 map.fitBounds(gLatLngBounds);
\r
235 addImageOverlay: function(id, src, opacity, west, south, east, north, oContext) {
\r
236 var map = this.maps[this.api];
\r
238 // TODO: Add provider code
\r
241 setImagePosition: function(id, oContext) {
\r
242 var map = this.maps[this.api];
\r
243 var topLeftPoint; var bottomRightPoint;
\r
245 // TODO: Add provider code
\r
247 //oContext.pixels.top = ...;
\r
248 //oContext.pixels.left = ...;
\r
249 //oContext.pixels.bottom = ...;
\r
250 //oContext.pixels.right = ...;
\r
253 addOverlay: function(url, autoCenterAndZoom) {
\r
254 var map = this.maps[this.api];
\r
256 // TODO: Add provider code
\r
260 addTileLayer: function(tile_url, opacity, copyright_text, min_zoom, max_zoom, map_type) {
\r
261 var map = this.maps[this.api];
\r
263 // TODO: Add provider code
\r
266 toggleTileLayer: function(tile_url) {
\r
267 var map = this.maps[this.api];
\r
269 // TODO: Add provider code
\r
272 getPixelRatio: function() {
\r
273 var map = this.maps[this.api];
\r
275 // TODO: Add provider code
\r
278 mousePosition: function(element) {
\r
279 var map = this.maps[this.api];
\r
281 // TODO: Add provider code
\r
287 toProprietary: function() {
\r
288 return new google.maps.LatLng(this.lat, this.lon);
\r
291 fromProprietary: function(googlePoint) {
\r
292 this.lat = googlePoint.lat();
\r
293 this.lon = googlePoint.lng();
\r
300 toProprietary: function() {
\r
303 // do we have an Anchor?
\r
304 var ax = 0; // anchor x
\r
305 var ay = 0; // anchor y
\r
307 if (this.iconAnchor) {
\r
308 ax = this.iconAnchor[0];
\r
309 ay = this.iconAnchor[1];
\r
311 var gAnchorPoint = new google.maps.Point(ax,ay);
\r
313 if (this.iconUrl) {
\r
314 options.icon = new google.maps.MarkerImage(
\r
316 new google.maps.Size(this.iconSize[0],
\r
318 new google.maps.Point(0,0),
\r
322 // do we have a Shadow?
\r
323 if (this.iconShadowUrl) {
\r
324 if (this.iconShadowSize) {
\r
325 var x = this.iconShadowSize[0];
\r
326 var y = this.iconShadowSize[1];
\r
327 options.shadow = new google.maps.MarkerImage(
\r
328 this.iconShadowUrl,
\r
329 new google.maps.Size(x,y),
\r
330 new google.maps.Point(0,0),
\r
335 options.shadow = new google.maps.MarkerImage(this.iconShadowUrl);
\r
339 if (this.draggable){
\r
340 options.draggable = this.draggable;
\r
342 if (this.labelText){
\r
343 options.title = this.labelText;
\r
345 if (this.imageMap){
\r
347 coord: this.imageMap,
\r
352 options.position = this.location.toProprietary(this.api);
\r
353 options.map = this.map;
\r
355 var marker = new google.maps.Marker(options);
\r
357 if (this.infoBubble){
\r
358 var infowindow = new google.maps.InfoWindow({
\r
359 content: this.infoBubble
\r
362 var event_action = "click";
\r
364 event_action = "mouseover";
\r
366 google.maps.event.addListener(marker, event_action, function() { infowindow.open(this.map,marker); });
\r
369 if (this.hoverIconUrl){
\r
370 var gSize = new google.maps.Size(this.iconSize[0],
\r
372 var zerozero = new google.maps.Point(0,0);
\r
373 var hIcon = new google.maps.MarkerImage(
\r
379 var Icon = new google.maps.MarkerImage(
\r
385 google.maps.event.addListener(
\r
389 marker.setIcon(hIcon);
\r
392 google.maps.event.addListener(
\r
395 function(){ marker.setIcon(Icon); }
\r
399 google.maps.event.addListener(marker, 'click', function() {
\r
400 marker.mapstraction_marker.click.fire();
\r
406 openBubble: function() {
\r
407 var infowindow = new google.maps.InfoWindow({
\r
408 content: this.infoBubble
\r
410 infowindow.open(this.map,this.proprietary_marker);
\r
414 this.proprietary_marker.setOptions({visible:false});
\r
418 this.proprietary_marker.setOptions({visible:true});
\r
421 update: function() {
\r
422 // TODO: Add provider code
\r
429 toProprietary: function() {
\r
430 throw 'Not implemented';
\r
434 throw 'Not implemented';
\r
438 throw 'Not implemented';
\r