1 mxn.register('cloudmade', {
5 init: function(element, api) {
7 var cloudmade = new CM.Tiles.CloudMade.Web({key: cloudmade_key});
8 this.maps[api] = new CM.Map(element, cloudmade);
9 this.loaded[api] = true;
11 CM.Event.addListener(this.maps[api], 'click', function(location,marker) {
12 if ( marker && marker.mapstraction_marker ) {
13 marker.mapstraction_marker.click.fire();
15 else if ( location ) {
16 me.click.fire({'location': new mxn.LatLonPoint(location.lat(), location.lng())});
19 // If the user puts their own markers directly on the map
20 // then there is no location and this event should not fire.
22 me.clickHandler(location.lat(),location.lng(),location,me);
27 applyOptions: function(){
28 var map = this.maps[this.api];
29 if(this.options.enableScrollWheelZoom){
30 map.enableScrollWheelZoom();
34 resizeTo: function(width, height){
35 this.maps[this.api].checkResize();
38 addControls: function( args ) {
39 var map = this.maps[this.api];
41 var c = this.addControlsArgs;
44 this.addLargeControls();
47 this.addSmallControls();
52 this.addMapTypeControls();
55 map.addControl(new CM.ScaleControl());
56 this.addControlsArgs.scale = true;
60 addSmallControls: function() {
61 var map = this.maps[this.api];
62 map.addControl(new CM.SmallMapControl());
63 this.addControlsArgs.zoom = 'small';
66 addLargeControls: function() {
67 var map = this.maps[this.api];
68 map.addControl(new CM.LargeMapControl());
69 this.addControlsArgs.zoom = 'large';
72 addMapTypeControls: function() {
73 var map = this.maps[this.api];
75 map.addControl(new CM.TileLayerControl());
76 this.addControlsArgs.map_type = true;
79 dragging: function(on) {
80 var map = this.maps[this.api];
85 map.disableDragging();
89 setCenterAndZoom: function(point, zoom) {
90 var map = this.maps[this.api];
91 var pt = point.toProprietary(this.api);
92 map.setCenter(pt, zoom);
96 addMarker: function(marker, old) {
97 var map = this.maps[this.api];
98 var pin = marker.toProprietary(this.api);
103 removeMarker: function(marker) {
104 var map = this.maps[this.api];
105 marker.proprietary_marker.closeInfoWindow();
106 map.removeOverlay(marker.proprietary_marker);
109 removeAllMarkers: function() {
110 // Done in mxn.core.js
113 declutterMarkers: function(opts) {
114 var map = this.maps[this.api];
116 // TODO: Add provider code
119 addPolyline: function(polyline, old) {
120 var map = this.maps[this.api];
121 var pl = polyline.toProprietary(this.api);
126 removePolyline: function(polyline) {
127 var map = this.maps[this.api];
128 map.removeOverlay(polyline.proprietary_polyline);
131 getCenter: function() {
132 var map = this.maps[this.api];
133 var pt = map.getCenter();
135 return new mxn.LatLonPoint(pt.lat(), pt.lng());
138 setCenter: function(point, options) {
139 var map = this.maps[this.api];
140 var pt = point.toProprietary(this.api);
141 if(options !== null && options.pan) { map.panTo(pt); }
142 else { map.setCenter(pt); }
145 setZoom: function(zoom) {
146 var map = this.maps[this.api];
150 getZoom: function() {
151 var map = this.maps[this.api];
152 return map.getZoom();
155 getZoomLevelForBoundingBox: function( bbox ) {
156 var map = this.maps[this.api];
157 // NE and SW points from the bounding box.
158 var ne = bbox.getNorthEast();
159 var sw = bbox.getSouthWest();
161 var zoom = map.getBoundsZoomLevel(new CM.LatLngBounds(sw.toProprietary(this.api), ne.toProprietary(this.api)));
165 setMapType: function(type) {
166 var map = this.maps[this.api];
168 // TODO: Are there any MapTypes for Cloudmade?
171 case mxn.Mapstraction.ROAD:
172 // TODO: Add provider code
174 case mxn.Mapstraction.SATELLITE:
175 // TODO: Add provider code
177 case mxn.Mapstraction.HYBRID:
178 // TODO: Add provider code
181 // TODO: Add provider code
185 getMapType: function() {
186 var map = this.maps[this.api];
188 // TODO: Are there any MapTypes for Cloudmade?
190 return mxn.Mapstraction.ROAD;
191 //return mxn.Mapstraction.SATELLITE;
192 //return mxn.Mapstraction.HYBRID;
196 getBounds: function () {
197 var map = this.maps[this.api];
199 var box = map.getBounds();
200 var sw = box.getSouthWest();
201 var ne = box.getNorthEast();
203 return new mxn.BoundingBox(sw.lat(), sw.lng(), ne.lat(), ne.lng());
206 setBounds: function(bounds){
207 var map = this.maps[this.api];
208 var sw = bounds.getSouthWest();
209 var ne = bounds.getNorthEast();
211 map.zoomToBounds(new CM.LatLngBounds(sw.toProprietary(this.api), ne.toProprietary(this.api)));
214 addImageOverlay: function(id, src, opacity, west, south, east, north, oContext) {
215 var map = this.maps[this.api];
217 // TODO: Add provider code
220 setImagePosition: function(id, oContext) {
221 var map = this.maps[this.api];
222 var topLeftPoint; var bottomRightPoint;
224 // TODO: Add provider code
228 addOverlay: function(url, autoCenterAndZoom) {
229 var map = this.maps[this.api];
231 // TODO: Add provider code
235 addTileLayer: function(tile_url, opacity, copyright_text, min_zoom, max_zoom) {
236 var map = this.maps[this.api];
238 // TODO: Add provider code
241 toggleTileLayer: function(tile_url) {
242 var map = this.maps[this.api];
244 // TODO: Add provider code
247 getPixelRatio: function() {
248 var map = this.maps[this.api];
250 // TODO: Add provider code
253 mousePosition: function(element) {
254 var map = this.maps[this.api];
256 // TODO: Add provider code
262 toProprietary: function() {
263 var cll = new CM.LatLng(this.lat,this.lon);
267 fromProprietary: function(point) {
268 return new mxn.LatLonPoint(point.lat(),point.lng());
275 toProprietary: function() {
276 var pt = this.location.toProprietary(this.api);
280 var cicon = new CM.Icon();
281 cicon.image = this.iconUrl;
283 cicon.iconSize = new CM.Size(this.iconSize[0], this.iconSize[1]);
284 if (this.iconAnchor) {
285 cicon.iconAnchor = new CM.Point(this.iconAnchor[0], this.iconAnchor[1]);
288 if (this.iconShadowUrl) {
289 cicon.shadow = this.iconShadowUrl;
290 if (this.iconShadowSize) {
291 cicon.shadowSize = new CM.Size(this.iconShadowSize[0], this.iconShadowSize[1]);
294 options.icon = cicon;
296 if (this.labelText) {
297 options.title = this.labelText;
299 var cmarker = new CM.Marker(pt, options);
301 if (this.infoBubble) {
302 cmarker.bindInfoWindow(this.infoBubble);
309 openBubble: function() {
310 var pin = this.proprietary_marker;
311 pin.openInfoWindow(this.infoBubble);
315 var pin = this.proprietary_marker;
320 var pin = this.proprietary_marker;
325 // TODO: Add provider code
332 toProprietary: function() {
336 for (var i = 0, length = this.points.length ; i< length; i++){
337 pts.push(this.points[i].toProprietary(this.api));
339 if (this.closed || pts[0].equals(pts[pts.length-1])) {
340 poly = new CM.Polygon(pts, this.color, this.width, this.opacity, this.fillColor || "#5462E3", this.opacity || "0.3");
342 poly = new CM.Polyline(pts, this.color, this.width, this.opacity);
348 this.proprietary_polyline.show();
352 this.proprietary_polyline.hide();