| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151 | 
							- /*
 
- 	Copyright (c) 2004-2012, The Dojo Foundation All Rights Reserved.
 
- 	Available via Academic Free License >= 2.1 OR the modified BSD license.
 
- 	see: http://dojotoolkit.org/license for details
 
- */
 
- if(!dojo._hasResource["dojox.geo.charting.Map"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
 
- dojo._hasResource["dojox.geo.charting.Map"] = true;
 
- dojo.provide("dojox.geo.charting.Map");
 
- dojo.require("dojox.gfx");
 
- dojo.require("dojox.geo.charting._base");
 
- dojo.require("dojox.geo.charting._Feature");
 
- dojo.require("dojox.geo.charting._Marker");
 
- dojo.declare("dojox.geo.charting.Map", null, {
 
- 	//	summary:
 
- 	//		Map widget interacted with charting.
 
- 	//	description:
 
- 	//		Support rendering Americas, AsiaPacific, ContinentalEurope, EuropeMiddleEastAfrica,
 
- 	//		USStates, WorldCountries, and WorldCountriesMercator by default.
 
- 	//	example:
 
- 	//	|	var usaMap = new dojox.geo.charting.Map(srcNode, "dojotoolkit/dojox/geo/charting/resources/data/USStates.json");
 
- 	//	|	<div id="map" style="width:600px;height:400px;"></div>
 
- 	
 
- 	//	defaultColor: String
 
- 	//		Default map feature color, e.g: "#B7B7B7"
 
- 	defaultColor:"#B7B7B7",
 
- 	//	highlightColor: String
 
- 	//		Map feature color when mouse over it, e.g: "#"
 
- 	highlightColor:"#D5D5D5",
 
- 	//	series: Array
 
- 	//		stack to data range, e.g: [{name:'label 1', min:20, max:70, color:'#DDDDDD'},{...},...]
 
- 	series:[],
 
- 	constructor: function(/*HTML Node*/container, /*String*/shapeFile){
 
- 		//	container:
 
- 		//		map container html node/id
 
- 		//	shapeFile:
 
- 		//		map shape data url, handled as json style
 
- 		//		data format:
 
- 		
 
- 		// get map container coords
 
- 		dojo.style(container, "display", "block");
 
- 		this.containerSize = {
 
- 			x: dojo.coords(container).x,
 
- 			y: dojo.coords(container).y,
 
- 			w: dojo.coords(container).w || 100,
 
- 			h: dojo.coords(container).h || 100
 
- 		};
 
- 		this.surface = dojox.gfx.createSurface(container, this.containerSize.w, this.containerSize.h);
 
- 		this.container = container;
 
- 	    
 
- 		this._createZoomingCursor();
 
- 		
 
- 		this.mapObj = this.surface.createGroup();
 
- 		this.mapObj.features = {};
 
-         // load map shape file
 
- 		dojo.xhrGet({
 
- 			url: shapeFile,
 
- 			handleAs: "json",
 
- 			sync:true,
 
- 			load: dojo.hitch(this, "_init")
 
- 		});
 
- 	},
 
- 	setMarkerData: function(/*String*/ markerFile){
 
- 		//	summary:
 
- 		//		import markers from outside file, associate with map feature by feature id
 
- 		//		which identified in map shape file, e.g: "NY":"New York"
 
- 		//	markerFile:
 
- 		//		outside marker data url, handled as json style.
 
- 		//		data format: {"NY":"New York",.....}
 
- 		dojo.xhrGet({
 
- 			url: markerFile,
 
- 			handleAs: "json",
 
- 			handle: dojo.hitch(this, "_appendMarker")
 
- 		});
 
- 	},
 
- 	setDataStore: function(/*ItemFileReadStore*/ dataStore, /*Object*/ query){
 
- 		//	summary:
 
- 		//		populate data for each map feature from fetched data store
 
- 		this.dataStore = dataStore;
 
- 		var self = this;
 
- 		this.dataStore.fetch({
 
- 			query: query,
 
- 			onComplete: function(items){
 
- 				var item = items[0];
 
- 				var attributes = self.dataStore.getAttributes(item);
 
- 				dojo.forEach(attributes, function(name){
 
- 					if(self.mapObj.features[name]){
 
- 						self.mapObj.features[name].setValue(self.dataStore.getValue(item, name));
 
- 					}
 
- 				});
 
- 			}
 
- 		});
 
- 	},
 
- 	addSeries: function(series){
 
- 		this.series = series;
 
- 	},
 
- 	_init: function(shapeData){
 
- 		//transform map to fit container
 
- 		var mapWidth = shapeData.layerExtent[2] - shapeData.layerExtent[0];
 
- 		var mapHeight = shapeData.layerExtent[3] - shapeData.layerExtent[1];
 
- 		this.mapObj.scale = Math.min(this.containerSize.w / mapWidth, this.containerSize.h / mapHeight);
 
- 		this.mapObj.currentScale = this.mapObj.scale;
 
- 		this.mapObj.boundBox = shapeData.layerExtent;
 
- 		this.mapObj.currentBBox = {
 
- 			x: shapeData.layerExtent[0],
 
- 			y:shapeData.layerExtent[1]
 
- 		};
 
- 		this.mapObj.setTransform([
 
- 			dojox.gfx.matrix.scale(this.mapObj.scale),
 
- 			dojox.gfx.matrix.translate(-shapeData.layerExtent[0], -shapeData.layerExtent[1])
 
- 		]);
 
- 		//	if there are "features", then implement them now.
 
- 		dojo.forEach(shapeData.featureNames, function(item){
 
- 			var featureShape = shapeData.features[item];
 
- 			featureShape.bbox.x = featureShape.bbox[0];
 
- 			featureShape.bbox.y = featureShape.bbox[1];
 
- 			featureShape.bbox.w = featureShape.bbox[2];
 
- 			featureShape.bbox.h = featureShape.bbox[3];
 
- 			var feature = new dojox.geo.charting._Feature(this, item, featureShape);
 
- 			feature.init();
 
- 			this.mapObj.features[item] = feature;
 
- 		}, this);
 
- 		//	set up a marker.
 
- 		this.mapObj.marker = new dojox.geo.charting._Marker({}, this);
 
- 	},
 
- 	_appendMarker: function(markerData){
 
- 		this.mapObj.marker = new dojox.geo.charting._Marker(markerData, this);
 
- 	},
 
- 	_createZoomingCursor: function(){
 
- 		if(!dojo.byId("mapZoomCursor")){
 
- 			var mapZoomCursor = dojo.doc.createElement("div");
 
- 			dojo.attr(mapZoomCursor,"id","mapZoomCursor");
 
- 			dojo.addClass(mapZoomCursor,"mapZoomIn");
 
- 			dojo.style(mapZoomCursor,"display","none");
 
- 			dojo.body().appendChild(mapZoomCursor);
 
- 		}
 
- 	},
 
- 	onFeatureClick: function(feature){
 
- 	},
 
- 	onFeatureOver: function(feature){
 
- 	},
 
- 	onZoomEnd:function(feature){
 
- 	}
 
- });
 
- }
 
 
  |