summaryrefslogtreecommitdiff
path: root/plugins/Mapstraction/js/mxn.cloudmade.core.js
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/Mapstraction/js/mxn.cloudmade.core.js')
-rw-r--r--plugins/Mapstraction/js/mxn.cloudmade.core.js357
1 files changed, 357 insertions, 0 deletions
diff --git a/plugins/Mapstraction/js/mxn.cloudmade.core.js b/plugins/Mapstraction/js/mxn.cloudmade.core.js
new file mode 100644
index 000000000..b6ee70b8f
--- /dev/null
+++ b/plugins/Mapstraction/js/mxn.cloudmade.core.js
@@ -0,0 +1,357 @@
+mxn.register('cloudmade', {
+
+ Mapstraction: {
+
+ init: function(element, api) {
+ var me = this;
+ var cloudmade = new CM.Tiles.CloudMade.Web({key: cloudmade_key});
+ this.maps[api] = new CM.Map(element, cloudmade);
+ this.loaded[api] = true;
+
+ CM.Event.addListener(this.maps[api], 'click', function(location,marker) {
+ if ( marker && marker.mapstraction_marker ) {
+ marker.mapstraction_marker.click.fire();
+ }
+ else if ( location ) {
+ me.click.fire({'location': new mxn.LatLonPoint(location.lat(), location.lng())});
+ }
+
+ // If the user puts their own Google markers directly on the map
+ // then there is no location and this event should not fire.
+ if ( location ) {
+ me.clickHandler(location.lat(),location.lng(),location,me);
+ }
+ });
+ },
+
+ applyOptions: function(){
+ var map = this.maps[this.api];
+ if(this.options.enableScrollWheelZoom){
+ map.enableScrollWheelZoom();
+ }
+ },
+
+ resizeTo: function(width, height){
+ this.maps[this.api].checkResize();
+ },
+
+ addControls: function( args ) {
+ var map = this.maps[this.api];
+
+ var c = this.addControlsArgs;
+ switch (c.zoom) {
+ case 'large':
+ this.addLargeControls();
+ break;
+ case 'small':
+ this.addSmallControls();
+ break;
+ }
+
+ if (c.map_type) {
+ this.addMapTypeControls();
+ }
+ if (c.scale) {
+ map.addControl(new CM.ScaleControl());
+ this.addControlsArgs.scale = true;
+ }
+ },
+
+ addSmallControls: function() {
+ var map = this.maps[this.api];
+ map.addControl(new CM.SmallMapControl());
+ this.addControlsArgs.zoom = 'small';
+ },
+
+ addLargeControls: function() {
+ var map = this.maps[this.api];
+ map.addControl(new CM.LargeMapControl());
+ this.addControlsArgs.zoom = 'large';
+ },
+
+ addMapTypeControls: function() {
+ var map = this.maps[this.api];
+
+ map.addControl(new CM.TileLayerControl());
+ this.addControlsArgs.map_type = true;
+ },
+
+ dragging: function(on) {
+ var map = this.maps[this.api];
+
+ if (on) {
+ map.enableDragging();
+ } else {
+ map.disableDragging();
+ }
+ },
+
+ setCenterAndZoom: function(point, zoom) {
+ var map = this.maps[this.api];
+ var pt = point.toProprietary(this.api);
+ map.setCenter(pt, zoom);
+
+ },
+
+ addMarker: function(marker, old) {
+ var map = this.maps[this.api];
+ var pin = marker.toProprietary(this.api);
+ map.addOverlay(pin);
+ return pin;
+ },
+
+ removeMarker: function(marker) {
+ var map = this.maps[this.api];
+ marker.proprietary_marker.closeInfoWindow();
+ map.removeOverlay(marker.proprietary_marker);
+ },
+
+ removeAllMarkers: function() {
+ // Done in mxn.core.js
+ },
+
+ declutterMarkers: function(opts) {
+ var map = this.maps[this.api];
+
+ // TODO: Add provider code
+ },
+
+ 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.getCenter();
+
+ return new mxn.LatLonPoint(pt.lat(), pt.lng());
+ },
+
+ setCenter: function(point, options) {
+ var map = this.maps[this.api];
+ var pt = point.toProprietary(this.api);
+ if(options !== null && options.pan) { map.panTo(pt); }
+ else { map.setCenter(pt); }
+ },
+
+ setZoom: function(zoom) {
+ var map = this.maps[this.api];
+ map.setZoom(zoom);
+ },
+
+ getZoom: function() {
+ var map = this.maps[this.api];
+ return map.getZoom();
+ },
+
+ getZoomLevelForBoundingBox: function( bbox ) {
+ var map = this.maps[this.api];
+ // NE and SW points from the bounding box.
+ var ne = bbox.getNorthEast();
+ var sw = bbox.getSouthWest();
+
+ var zoom = map.getBoundsZoomLevel(new CM.LatLngBounds(sw.toProprietary(this.api), ne.toProprietary(this.api)));
+ return zoom;
+ },
+
+ setMapType: function(type) {
+ var map = this.maps[this.api];
+
+ // TODO: Are there any MapTypes for Cloudmade?
+
+ switch(type) {
+ case mxn.Mapstraction.ROAD:
+ // TODO: Add provider code
+ break;
+ case mxn.Mapstraction.SATELLITE:
+ // TODO: Add provider code
+ break;
+ case mxn.Mapstraction.HYBRID:
+ // TODO: Add provider code
+ break;
+ default:
+ // TODO: Add provider code
+ }
+ },
+
+ getMapType: function() {
+ var map = this.maps[this.api];
+
+ // TODO: Are there any MapTypes for Cloudmade?
+
+ return mxn.Mapstraction.ROAD;
+ //return mxn.Mapstraction.SATELLITE;
+ //return mxn.Mapstraction.HYBRID;
+
+ },
+
+ getBounds: function () {
+ var map = this.maps[this.api];
+
+ var box = map.getBounds();
+ var sw = box.getSouthWest();
+ var ne = box.getNorthEast();
+
+ return new mxn.BoundingBox(sw.lat(), sw.lng(), ne.lat(), ne.lng());
+ },
+
+ setBounds: function(bounds){
+ var map = this.maps[this.api];
+ var sw = bounds.getSouthWest();
+ var ne = bounds.getNorthEast();
+
+ map.zoomToBounds(new CM.LatLngBounds(sw.toProprietary(this.api), ne.toProprietary(this.api)));
+ },
+
+ addImageOverlay: function(id, src, opacity, west, south, east, north, oContext) {
+ var map = this.maps[this.api];
+
+ // TODO: Add provider code
+ },
+
+ setImagePosition: function(id, oContext) {
+ var map = this.maps[this.api];
+ var topLeftPoint; var bottomRightPoint;
+
+ // TODO: Add provider code
+
+ },
+
+ addOverlay: function(url, autoCenterAndZoom) {
+ var map = this.maps[this.api];
+
+ // TODO: Add provider code
+
+ },
+
+ addTileLayer: function(tile_url, opacity, copyright_text, min_zoom, max_zoom) {
+ var map = this.maps[this.api];
+
+ // TODO: Add provider code
+ },
+
+ toggleTileLayer: function(tile_url) {
+ var map = this.maps[this.api];
+
+ // TODO: Add provider code
+ },
+
+ getPixelRatio: function() {
+ var map = this.maps[this.api];
+
+ // TODO: Add provider code
+ },
+
+ mousePosition: function(element) {
+ var map = this.maps[this.api];
+
+ // TODO: Add provider code
+ }
+ },
+
+ LatLonPoint: {
+
+ toProprietary: function() {
+ var cll = new CM.LatLng(this.lat,this.lon);
+ return cll;
+ },
+
+ fromProprietary: function(point) {
+ return new mxn.LatLonPoint(point.lat(),point.lng());
+ }
+
+ },
+
+ Marker: {
+
+ toProprietary: function() {
+ var pt = this.location.toProprietary(this.api);
+ var options = {};
+
+ if (this.iconUrl) {
+ var cicon = new CM.Icon();
+ cicon.image = this.iconUrl;
+ if (this.iconSize) {
+ cicon.iconSize = new CM.Size(this.iconSize[0], this.iconSize[1]);
+ if (this.iconAnchor) {
+ cicon.iconAnchor = new CM.Point(this.iconAnchor[0], this.iconAnchor[1]);
+ }
+ }
+ if (this.iconShadowUrl) {
+ cicon.shadow = this.iconShadowUrl;
+ if (this.iconShadowSize) {
+ cicon.shadowSize = new CM.Size(this.iconShadowSize[0], this.iconShadowSize[1]);
+ }
+ }
+ options.icon = cicon;
+ }
+ if (this.labelText) {
+ options.title = this.labelText;
+ }
+ var cmarker = new CM.Marker(pt, options);
+
+ if (this.infoBubble) {
+ cmarker.bindInfoWindow(this.infoBubble);
+ }
+
+
+ return cmarker;
+ },
+
+ openBubble: function() {
+ var pin = this.proprietary_marker;
+ pin.openInfoWindow(this.infoBubble);
+ },
+
+ hide: function() {
+ var pin = this.proprietary_marker;
+ pin.hide();
+ },
+
+ show: function() {
+ var pin = this.proprietary_marker;
+ pin.show();
+ },
+
+ update: function() {
+ // TODO: Add provider code
+ }
+
+ },
+
+ Polyline: {
+
+ toProprietary: function() {
+ var pts = [];
+ var poly;
+
+ for (var i = 0, length = this.points.length ; i< length; i++){
+ pts.push(this.points[i].toProprietary(this.api));
+ }
+ if (this.closed || pts[0].equals(pts[pts.length-1])) {
+ poly = new CM.Polygon(pts, this.color, this.width, this.opacity, this.fillColor || "#5462E3", this.opacity || "0.3");
+ } else {
+ poly = new CM.Polyline(pts, this.color, this.width, this.opacity);
+ }
+ return poly;
+ },
+
+ show: function() {
+ this.proprietary_polyline.show();
+ },
+
+ hide: function() {
+ this.proprietary_polyline.hide();
+ }
+
+ }
+
+});