123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358 |
- 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 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();
- }
- }
- });
|