391 lines
		
	
	
		
			9.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			391 lines
		
	
	
		
			9.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|   | mxn.register('yahoo', {	 | ||
|  | 
 | ||
|  | Mapstraction: { | ||
|  | 	 | ||
|  | 	init: function(element,api) {		 | ||
|  | 		var me = this; | ||
|  | 		if (YMap) { | ||
|  | 			this.maps[api] = new YMap(element); | ||
|  | 
 | ||
|  | 			YEvent.Capture(this.maps[api], EventsList.MouseClick, function(event,location) { | ||
|  | 				me.clickHandler(location.Lat, location.Lon, location, me); | ||
|  | 				me.click.fire({'location': new mxn.LatLonPoint(location.Lat, location.Lon)}); | ||
|  | 			}); | ||
|  | 			YEvent.Capture(this.maps[api], EventsList.changeZoom, function() { | ||
|  | 				me.moveendHandler(me); | ||
|  | 				me.changeZoom.fire(); | ||
|  | 			}); | ||
|  | 			YEvent.Capture(this.maps[api], EventsList.endPan, function() { | ||
|  | 				me.moveendHandler(me); | ||
|  | 				me.endPan.fire(); | ||
|  | 			}); | ||
|  | 			YEvent.Capture(this.maps[api], EventsList.endAutoPan, function() { | ||
|  | 				me.endPan.fire(); | ||
|  | 			}); | ||
|  | 			 | ||
|  | 			this.loaded[api] = true; | ||
|  | 			me.load.fire(); | ||
|  | 		} | ||
|  | 		else { | ||
|  | 			alert(api + ' map script not imported'); | ||
|  | 		}   | ||
|  | 	}, | ||
|  | 	 | ||
|  | 	applyOptions: function(){ | ||
|  | 		 | ||
|  | 		/* | ||
|  | 		if (this.options.enableDragging) { | ||
|  | 			map.enableDragMap(); | ||
|  | 		} else { | ||
|  | 			map.disableDragMap(); | ||
|  | 		}*/ | ||
|  | 		 | ||
|  | 	}, | ||
|  | 
 | ||
|  | 	resizeTo: function(width, height){	 | ||
|  | 		this.maps[this.api].resizeTo(new YSize(width,height)); | ||
|  | 	}, | ||
|  | 
 | ||
|  | 	addControls: function( args ) { | ||
|  | 		var map = this.maps[this.api]; | ||
|  | 		 | ||
|  | 		if (args.pan) { | ||
|  | 			map.addPanControl(); | ||
|  | 		} | ||
|  | 		else { | ||
|  | 			// Yahoo doesn't check the pan control is there before trying to remove it
 | ||
|  | 			// so throws an exception :(
 | ||
|  | 			map.addPanControl(); | ||
|  | 			map.removePanControl(); | ||
|  | 		} | ||
|  | 		 | ||
|  | 		if (args.zoom == 'large') { | ||
|  | 			map.addZoomLong(); | ||
|  | 		} | ||
|  | 		else if ( args.zoom == 'small' ) { | ||
|  | 			map.addZoomShort(); | ||
|  | 		} | ||
|  | 		else { | ||
|  | 			map.removeZoomScale(); | ||
|  | 		} | ||
|  | 	}, | ||
|  | 
 | ||
|  | 	addSmallControls: function() { | ||
|  | 		var map = this.maps[this.api]; | ||
|  | 		map.addPanControl(); | ||
|  | 		map.addZoomShort(); | ||
|  | 		this.addControlsArgs.pan = true; | ||
|  | 		this.addControlsArgs.zoom = 'small'; | ||
|  | 	}, | ||
|  | 
 | ||
|  | 	addLargeControls: function() { | ||
|  | 		var map = this.maps[this.api]; | ||
|  | 		map.addPanControl(); | ||
|  | 		map.addZoomLong(); | ||
|  | 		this.addControlsArgs.pan = true;  // keep the controls in case of swap
 | ||
|  | 		this.addControlsArgs.zoom = 'large'; | ||
|  | 	}, | ||
|  | 
 | ||
|  | 	addMapTypeControls: function() { | ||
|  | 		var map = this.maps[this.api]; | ||
|  | 		map.addTypeControl(); | ||
|  | 	}, | ||
|  | 
 | ||
|  | 	dragging: function(on) { | ||
|  | 		var map = this.maps[this.api]; | ||
|  | 		if (on) { | ||
|  | 			map.enableDragMap(); | ||
|  | 		} else { | ||
|  | 			map.disableDragMap(); | ||
|  | 		} | ||
|  | 	}, | ||
|  | 
 | ||
|  | 	setCenterAndZoom: function(point, zoom) {  | ||
|  | 		var map = this.maps[this.api]; | ||
|  | 		var pt = point.toProprietary(this.api); | ||
|  | 		 | ||
|  | 		var yzoom = 18 - zoom; // maybe?
 | ||
|  |         map.drawZoomAndCenter(pt,yzoom); | ||
|  | 	}, | ||
|  | 	 | ||
|  | 	addMarker: function(marker, old) { | ||
|  | 		var map = this.maps[this.api]; | ||
|  | 		var pin = marker.toProprietary(this.api); | ||
|  | 		map.addOverlay(pin); | ||
|  | 		YEvent.Capture(pin, EventsList.MouseClick, function() { | ||
|  | 			marker.click.fire(); | ||
|  | 		}); | ||
|  | 		YEvent.Capture(pin, EventsList.openSmartWindow, function() { | ||
|  | 			marker.openInfoBubble.fire(); | ||
|  | 		}); | ||
|  | 		YEvent.Capture(pin, EventsList.closeSmartWindow, function() { | ||
|  | 			marker.closeInfoBubble.fire(); | ||
|  | 		}); | ||
|  | 		return pin; | ||
|  | 	}, | ||
|  | 
 | ||
|  | 	removeMarker: function(marker) { | ||
|  | 		var map = this.maps[this.api]; | ||
|  | 		map.removeOverlay(marker.proprietary_marker); | ||
|  | 	}, | ||
|  | 
 | ||
|  | 	removeAllMarkers: function() { | ||
|  | 		var map = this.maps[this.api]; | ||
|  | 		map.removeMarkersAll(); | ||
|  | 	}, | ||
|  | 	 | ||
|  | 	declutterMarkers: function(opts) { | ||
|  | 		throw 'Not implemented'; | ||
|  | 	}, | ||
|  | 
 | ||
|  | 	addPolyline: function(polyline, old) { | ||
|  | 		var map = this.maps[this.api]; | ||
|  | 		var pl = polyline.toProprietary(this.api); | ||
|  | 		map.addOverlay(pl); | ||
|  | 		return pl; | ||
|  | 	}, | ||
|  | 
 | ||
|  | 	removePolyline: function(polyline) { | ||
|  | 		var map = this.maps[this.api]; | ||
|  | 		map.removeOverlay(polyline.proprietary_polyline); | ||
|  | 	}, | ||
|  | 	 | ||
|  | 	getCenter: function() { | ||
|  | 		var map = this.maps[this.api]; | ||
|  | 		var pt = map.getCenterLatLon(); | ||
|  |         var point = new mxn.LatLonPoint(pt.Lat, pt.Lon); | ||
|  | 		return point; | ||
|  | 	}, | ||
|  | 
 | ||
|  | 	setCenter: function(point, options) { | ||
|  | 		var map = this.maps[this.api]; | ||
|  | 		var pt = point.toProprietary(this.api); | ||
|  | 		map.panToLatLon(pt); | ||
|  | 	}, | ||
|  | 
 | ||
|  | 	setZoom: function(zoom) { | ||
|  | 		var map = this.maps[this.api]; | ||
|  | 		var yzoom = 18 - zoom; // maybe?
 | ||
|  | 		map.setZoomLevel(yzoom);		   | ||
|  | 	}, | ||
|  | 	 | ||
|  | 	getZoom: function() { | ||
|  | 		var map = this.maps[this.api]; | ||
|  | 		return 18 - map.getZoomLevel(); | ||
|  | 	}, | ||
|  | 
 | ||
|  | 	getZoomLevelForBoundingBox: function( bbox ) { | ||
|  | 		throw 'Not implemented'; | ||
|  | 	}, | ||
|  | 
 | ||
|  | 	setMapType: function(type) { | ||
|  | 		var map = this.maps[this.api]; | ||
|  | 		 | ||
|  | 		switch(type) { | ||
|  | 			case mxn.Mapstraction.ROAD: | ||
|  | 				map.setMapType(YAHOO_MAP_REG); | ||
|  | 				break; | ||
|  | 			case mxn.Mapstraction.SATELLITE: | ||
|  | 				map.setMapType(YAHOO_MAP_SAT); | ||
|  | 				break; | ||
|  | 			case mxn.Mapstraction.HYBRID: | ||
|  | 				map.setMapType(YAHOO_MAP_HYB); | ||
|  | 				break; | ||
|  | 			default: | ||
|  | 				map.setMapType(YAHOO_MAP_REG); | ||
|  | 		} | ||
|  | 	}, | ||
|  | 
 | ||
|  | 	getMapType: function() { | ||
|  | 		var map = this.maps[this.api]; | ||
|  | 		var type = map.getCurrentMapType(); | ||
|  | 		switch(type) { | ||
|  | 			case YAHOO_MAP_REG: | ||
|  | 				return mxn.Mapstraction.ROAD; | ||
|  | 			case YAHOO_MAP_SAT: | ||
|  | 				return mxn.Mapstraction.SATELLITE; | ||
|  | 			case YAHOO_MAP_HYB: | ||
|  | 				return mxn.Mapstraction.HYBRID; | ||
|  | 			default: | ||
|  | 				return null; | ||
|  | 		} | ||
|  | 	}, | ||
|  | 
 | ||
|  | 	getBounds: function () { | ||
|  | 		var map = this.maps[this.api]; | ||
|  | 		var ybox = map.getBoundsLatLon(); | ||
|  |         return new mxn.BoundingBox(ybox.LatMin, ybox.LonMin, ybox.LatMax, ybox.LonMax); | ||
|  | 	}, | ||
|  | 
 | ||
|  | 	setBounds: function(bounds){ | ||
|  | 		var map = this.maps[this.api]; | ||
|  | 		var sw = bounds.getSouthWest(); | ||
|  | 		var ne = bounds.getNorthEast(); | ||
|  | 						 | ||
|  | 		if(sw.lon > ne.lon) { | ||
|  | 			sw.lon -= 360; | ||
|  | 		} | ||
|  | 		var center = new YGeoPoint((sw.lat + ne.lat)/2, (ne.lon + sw.lon)/2); | ||
|  | 		 | ||
|  | 		var container = map.getContainerSize(); | ||
|  | 		for(var zoom = 1 ; zoom <= 17 ; zoom++){ | ||
|  | 			var sw_pix = mxn.util.convertLatLonXY_Yahoo(sw,zoom); | ||
|  | 			var ne_pix = mxn.util.convertLatLonXY_Yahoo(ne,zoom); | ||
|  | 			if(sw_pix.x > ne_pix.x) { | ||
|  | 				sw_pix.x -= (1 << (26 - zoom)); //earth circumference in pixel
 | ||
|  | 			} | ||
|  | 			if(Math.abs(ne_pix.x - sw_pix.x) <= container.width | ||
|  | 				&& Math.abs(ne_pix.y - sw_pix.y) <= container.height){ | ||
|  | 				map.drawZoomAndCenter(center, zoom); //Call drawZoomAndCenter here: OK if called multiple times anyway
 | ||
|  | 				break; | ||
|  | 			} | ||
|  | 		}		 | ||
|  | 	}, | ||
|  | 	 | ||
|  | 	addImageOverlay: function(id, src, opacity, west, south, east, north, oContext) { | ||
|  | 		throw 'Not implemented'; | ||
|  | 	}, | ||
|  | 
 | ||
|  | 	setImagePosition: function(id) { | ||
|  | 	   throw 'Not implemented'; | ||
|  | 	},	 | ||
|  | 	 | ||
|  | 	addOverlay: function(url, autoCenterAndZoom) { | ||
|  | 		var map = this.maps[this.api]; | ||
|  | 		map.addOverlay(new YGeoRSS(url)); | ||
|  | 	}, | ||
|  | 	 | ||
|  | 	addTileLayer: function(tile_url, opacity, copyright_text, min_zoom, max_zoom) { | ||
|  | 		throw 'Not implemented'; | ||
|  | 	}, | ||
|  | 
 | ||
|  | 	toggleTileLayer: function(tile_url) { | ||
|  | 		throw 'Not implemented'; | ||
|  | 	}, | ||
|  | 	 | ||
|  | 	getPixelRatio: function() { | ||
|  | 		throw 'Not implemented';	 | ||
|  | 	}, | ||
|  | 	 | ||
|  | 	mousePosition: function(element) { | ||
|  | 		throw 'Not implemented'; | ||
|  | 	} | ||
|  | 	 | ||
|  | }, | ||
|  | 
 | ||
|  | LatLonPoint: { | ||
|  | 	 | ||
|  | 	toProprietary: function() { | ||
|  | 		return new YGeoPoint(this.lat,this.lon); | ||
|  | 	}, | ||
|  | 
 | ||
|  | 	fromProprietary: function(yahooPoint) { | ||
|  | 		this.lat = yahooPoint.Lat; | ||
|  | 		this.lon = yahooPoint.Lon; | ||
|  | 	} | ||
|  | 	 | ||
|  | }, | ||
|  | 
 | ||
|  | Marker: { | ||
|  | 	 | ||
|  | 	toProprietary: function() { | ||
|  | 		var ymarker, size; | ||
|  | 		var infoBubble, event_action, infoDiv, div; | ||
|  | 		 | ||
|  | 	    if(this.iconSize) { | ||
|  | 	        size = new YSize(this.iconSize[0], this.iconSize[1]); | ||
|  | 	    } | ||
|  | 	    if(this.iconUrl) { | ||
|  | 	        if(this.iconSize){ | ||
|  | 	            ymarker = new YMarker(this.location.toProprietary('yahoo'), new YImage(this.iconUrl, size)); | ||
|  | 			} | ||
|  | 	        else { | ||
|  | 	            ymarker = new YMarker(this.location.toProprietary('yahoo'), new YImage(this.iconUrl)); | ||
|  | 			} | ||
|  | 	    } | ||
|  | 	    else { | ||
|  | 	        if(this.iconSize) { | ||
|  | 	            ymarker = new YMarker(this.location.toProprietary('yahoo'), null, size); | ||
|  | 			} | ||
|  | 	        else { | ||
|  | 	            ymarker = new YMarker(this.location.toProprietary('yahoo')); | ||
|  | 			} | ||
|  | 	    } | ||
|  | 
 | ||
|  | 	    if(this.labelText) { | ||
|  | 	        ymarker.addLabel(this.labelText); | ||
|  | 	    } | ||
|  | 
 | ||
|  | 	    if(this.infoBubble) { | ||
|  | 	        infoBubble = this.infoBubble; | ||
|  | 	        if(this.hover) { | ||
|  | 	            event_action = EventsList.MouseOver; | ||
|  | 	        } | ||
|  | 	        else { | ||
|  | 	            event_action = EventsList.MouseClick; | ||
|  | 	        } | ||
|  | 	        YEvent.Capture(ymarker, event_action, function() { | ||
|  | 	            ymarker.openSmartWindow(infoBubble); | ||
|  | 	        }); | ||
|  | 
 | ||
|  | 	    } | ||
|  | 
 | ||
|  | 	    if(this.infoDiv) { | ||
|  | 	        infoDiv = this.infoDiv; | ||
|  | 	        div = this.div; | ||
|  | 	        if(this.hover) { | ||
|  | 	            event_action = EventsList.MouseOver; | ||
|  | 	        } | ||
|  | 	        else { | ||
|  | 	            event_action = EventsList.MouseClick; | ||
|  | 	        } | ||
|  | 	        YEvent.Capture(ymarker, event_action, function() { | ||
|  | 	            document.getElementById(div).innerHTML = infoDiv; | ||
|  | 	        }); | ||
|  | 	    } | ||
|  | 
 | ||
|  | 	    return ymarker; | ||
|  | 	}, | ||
|  | 
 | ||
|  | 	openBubble: function() { | ||
|  | 		var ypin = this.proprietary_marker; | ||
|  |         ypin.openSmartWindow(this.infoBubble); | ||
|  | 	}, | ||
|  | 
 | ||
|  | 	hide: function() { | ||
|  | 		this.proprietary_marker.hide(); | ||
|  | 	}, | ||
|  | 
 | ||
|  | 	show: function() { | ||
|  | 		this.proprietary_marker.unhide(); | ||
|  | 	}, | ||
|  | 
 | ||
|  | 	update: function() { | ||
|  | 		throw 'Not implemented'; | ||
|  | 	} | ||
|  | 	 | ||
|  | }, | ||
|  | 
 | ||
|  | Polyline: { | ||
|  | 
 | ||
|  | 	toProprietary: function() {		 | ||
|  | 		var ypolyline; | ||
|  | 	    var ypoints = []; | ||
|  | 	    for (var i = 0, length = this.points.length ; i< length; i++){ | ||
|  | 	        ypoints.push(this.points[i].toProprietary('yahoo')); | ||
|  | 	    } | ||
|  | 	    ypolyline = new YPolyline(ypoints,this.color,this.width,this.opacity); | ||
|  | 	    return ypolyline; | ||
|  | 	}, | ||
|  | 	 | ||
|  | 	show: function() { | ||
|  | 		throw 'Not implemented'; | ||
|  | 	}, | ||
|  | 
 | ||
|  | 	hide: function() { | ||
|  | 		throw 'Not implemented'; | ||
|  | 	} | ||
|  | 	 | ||
|  | } | ||
|  | 
 | ||
|  | }); |