mirror of
				https://github.com/jiawanlong/Cesium-Examples.git
				synced 2025-11-03 16:54:16 +00:00 
			
		
		
		
	
		
			
	
	
		
			308 lines
		
	
	
		
			7.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			308 lines
		
	
	
		
			7.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								RainbowVis-JS 
							 | 
						||
| 
								 | 
							
								Released under Eclipse Public License - v 1.0
							 | 
						||
| 
								 | 
							
								*/
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function Rainbow()
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									"use strict";
							 | 
						||
| 
								 | 
							
									var gradients = null;
							 | 
						||
| 
								 | 
							
									var minNum = 0;
							 | 
						||
| 
								 | 
							
									var maxNum = 100;
							 | 
						||
| 
								 | 
							
									var colours = ['ff0000', 'ffff00', '00ff00', '0000ff']; 
							 | 
						||
| 
								 | 
							
									setColours(colours);
							 | 
						||
| 
								 | 
							
									
							 | 
						||
| 
								 | 
							
									function setColours (spectrum) 
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										if (spectrum.length < 2) {
							 | 
						||
| 
								 | 
							
											throw new Error('Rainbow must have two or more colours.');
							 | 
						||
| 
								 | 
							
										} else {
							 | 
						||
| 
								 | 
							
											var increment = (maxNum - minNum)/(spectrum.length - 1);
							 | 
						||
| 
								 | 
							
											var firstGradient = new ColourGradient();
							 | 
						||
| 
								 | 
							
											firstGradient.setGradient(spectrum[0], spectrum[1]);
							 | 
						||
| 
								 | 
							
											firstGradient.setNumberRange(minNum, minNum + increment);
							 | 
						||
| 
								 | 
							
											gradients = [ firstGradient ];
							 | 
						||
| 
								 | 
							
											
							 | 
						||
| 
								 | 
							
											for (var i = 1; i < spectrum.length - 1; i++) {
							 | 
						||
| 
								 | 
							
												var colourGradient = new ColourGradient();
							 | 
						||
| 
								 | 
							
												colourGradient.setGradient(spectrum[i], spectrum[i + 1]);
							 | 
						||
| 
								 | 
							
												colourGradient.setNumberRange(minNum + increment * i, minNum + increment * (i + 1)); 
							 | 
						||
| 
								 | 
							
												gradients[i] = colourGradient; 
							 | 
						||
| 
								 | 
							
											}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
											colours = spectrum;
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									this.setSpectrum = function () 
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										setColours(arguments);
							 | 
						||
| 
								 | 
							
										return this;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									this.setSpectrumByArray = function (array)
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										setColours(array);
							 | 
						||
| 
								 | 
							
										return this;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									this.colourAt = function (number)
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										if (isNaN(number)) {
							 | 
						||
| 
								 | 
							
											throw new TypeError(number + ' is not a number');
							 | 
						||
| 
								 | 
							
										} else if (gradients.length === 1) {
							 | 
						||
| 
								 | 
							
											return gradients[0].colourAt(number);
							 | 
						||
| 
								 | 
							
										} else {
							 | 
						||
| 
								 | 
							
											var segment = (maxNum - minNum)/(gradients.length);
							 | 
						||
| 
								 | 
							
											var index = Math.min(Math.floor((Math.max(number, minNum) - minNum)/segment), gradients.length - 1);
							 | 
						||
| 
								 | 
							
											return gradients[index].colourAt(number);
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									this.colorAt = this.colourAt;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									this.setNumberRange = function (minNumber, maxNumber)
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										if (maxNumber > minNumber) {
							 | 
						||
| 
								 | 
							
											minNum = minNumber;
							 | 
						||
| 
								 | 
							
											maxNum = maxNumber;
							 | 
						||
| 
								 | 
							
											setColours(colours);
							 | 
						||
| 
								 | 
							
										} else {
							 | 
						||
| 
								 | 
							
											throw new RangeError('maxNumber (' + maxNumber + ') is not greater than minNumber (' + minNumber + ')');
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
										return this;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function ColourGradient() 
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									"use strict";
							 | 
						||
| 
								 | 
							
									var startColour = 'ff0000';
							 | 
						||
| 
								 | 
							
									var endColour = '0000ff';
							 | 
						||
| 
								 | 
							
									var minNum = 0;
							 | 
						||
| 
								 | 
							
									var maxNum = 100;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									this.setGradient = function (colourStart, colourEnd)
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										startColour = getHexColour(colourStart);
							 | 
						||
| 
								 | 
							
										endColour = getHexColour(colourEnd);
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									this.setNumberRange = function (minNumber, maxNumber)
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										if (maxNumber > minNumber) {
							 | 
						||
| 
								 | 
							
											minNum = minNumber;
							 | 
						||
| 
								 | 
							
											maxNum = maxNumber;
							 | 
						||
| 
								 | 
							
										} else {
							 | 
						||
| 
								 | 
							
											throw new RangeError('maxNumber (' + maxNumber + ') is not greater than minNumber (' + minNumber + ')');
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									this.colourAt = function (number)
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										return calcHex(number, startColour.substring(0,2), endColour.substring(0,2)) 
							 | 
						||
| 
								 | 
							
											+ calcHex(number, startColour.substring(2,4), endColour.substring(2,4)) 
							 | 
						||
| 
								 | 
							
											+ calcHex(number, startColour.substring(4,6), endColour.substring(4,6));
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									
							 | 
						||
| 
								 | 
							
									function calcHex(number, channelStart_Base16, channelEnd_Base16)
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										var num = number;
							 | 
						||
| 
								 | 
							
										if (num < minNum) {
							 | 
						||
| 
								 | 
							
											num = minNum;
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
										if (num > maxNum) {
							 | 
						||
| 
								 | 
							
											num = maxNum;
							 | 
						||
| 
								 | 
							
										} 
							 | 
						||
| 
								 | 
							
										var numRange = maxNum - minNum;
							 | 
						||
| 
								 | 
							
										var cStart_Base10 = parseInt(channelStart_Base16, 16);
							 | 
						||
| 
								 | 
							
										var cEnd_Base10 = parseInt(channelEnd_Base16, 16); 
							 | 
						||
| 
								 | 
							
										var cPerUnit = (cEnd_Base10 - cStart_Base10)/numRange;
							 | 
						||
| 
								 | 
							
										var c_Base10 = Math.round(cPerUnit * (num - minNum) + cStart_Base10);
							 | 
						||
| 
								 | 
							
										return formatHex(c_Base10.toString(16));
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									function formatHex(hex) 
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										if (hex.length === 1) {
							 | 
						||
| 
								 | 
							
											return '0' + hex;
							 | 
						||
| 
								 | 
							
										} else {
							 | 
						||
| 
								 | 
							
											return hex;
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
									} 
							 | 
						||
| 
								 | 
							
									
							 | 
						||
| 
								 | 
							
									function isHexColour(string)
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										var regex = /^#?[0-9a-fA-F]{6}$/i;
							 | 
						||
| 
								 | 
							
										return regex.test(string);
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									function getHexColour(string)
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										if (isHexColour(string)) {
							 | 
						||
| 
								 | 
							
											return string.substring(string.length - 6, string.length);
							 | 
						||
| 
								 | 
							
										} else {
							 | 
						||
| 
								 | 
							
											var name = string.toLowerCase();
							 | 
						||
| 
								 | 
							
											if (colourNames.hasOwnProperty(name)) {
							 | 
						||
| 
								 | 
							
												return colourNames[name];
							 | 
						||
| 
								 | 
							
											}
							 | 
						||
| 
								 | 
							
											throw new Error(string + ' is not a valid colour.');
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									
							 | 
						||
| 
								 | 
							
									// Extended list of CSS colornames s taken from
							 | 
						||
| 
								 | 
							
									// http://www.w3.org/TR/css3-color/#svg-color
							 | 
						||
| 
								 | 
							
									var colourNames = {
							 | 
						||
| 
								 | 
							
										aliceblue: "F0F8FF",
							 | 
						||
| 
								 | 
							
										antiquewhite: "FAEBD7",
							 | 
						||
| 
								 | 
							
										aqua: "00FFFF",
							 | 
						||
| 
								 | 
							
										aquamarine: "7FFFD4",
							 | 
						||
| 
								 | 
							
										azure: "F0FFFF",
							 | 
						||
| 
								 | 
							
										beige: "F5F5DC",
							 | 
						||
| 
								 | 
							
										bisque: "FFE4C4",
							 | 
						||
| 
								 | 
							
										black: "000000",
							 | 
						||
| 
								 | 
							
										blanchedalmond: "FFEBCD",
							 | 
						||
| 
								 | 
							
										blue: "0000FF",
							 | 
						||
| 
								 | 
							
										blueviolet: "8A2BE2",
							 | 
						||
| 
								 | 
							
										brown: "A52A2A",
							 | 
						||
| 
								 | 
							
										burlywood: "DEB887",
							 | 
						||
| 
								 | 
							
										cadetblue: "5F9EA0",
							 | 
						||
| 
								 | 
							
										chartreuse: "7FFF00",
							 | 
						||
| 
								 | 
							
										chocolate: "D2691E",
							 | 
						||
| 
								 | 
							
										coral: "FF7F50",
							 | 
						||
| 
								 | 
							
										cornflowerblue: "6495ED",
							 | 
						||
| 
								 | 
							
										cornsilk: "FFF8DC",
							 | 
						||
| 
								 | 
							
										crimson: "DC143C",
							 | 
						||
| 
								 | 
							
										cyan: "00FFFF",
							 | 
						||
| 
								 | 
							
										darkblue: "00008B",
							 | 
						||
| 
								 | 
							
										darkcyan: "008B8B",
							 | 
						||
| 
								 | 
							
										darkgoldenrod: "B8860B",
							 | 
						||
| 
								 | 
							
										darkgray: "A9A9A9",
							 | 
						||
| 
								 | 
							
										darkgreen: "006400",
							 | 
						||
| 
								 | 
							
										darkgrey: "A9A9A9",
							 | 
						||
| 
								 | 
							
										darkkhaki: "BDB76B",
							 | 
						||
| 
								 | 
							
										darkmagenta: "8B008B",
							 | 
						||
| 
								 | 
							
										darkolivegreen: "556B2F",
							 | 
						||
| 
								 | 
							
										darkorange: "FF8C00",
							 | 
						||
| 
								 | 
							
										darkorchid: "9932CC",
							 | 
						||
| 
								 | 
							
										darkred: "8B0000",
							 | 
						||
| 
								 | 
							
										darksalmon: "E9967A",
							 | 
						||
| 
								 | 
							
										darkseagreen: "8FBC8F",
							 | 
						||
| 
								 | 
							
										darkslateblue: "483D8B",
							 | 
						||
| 
								 | 
							
										darkslategray: "2F4F4F",
							 | 
						||
| 
								 | 
							
										darkslategrey: "2F4F4F",
							 | 
						||
| 
								 | 
							
										darkturquoise: "00CED1",
							 | 
						||
| 
								 | 
							
										darkviolet: "9400D3",
							 | 
						||
| 
								 | 
							
										deeppink: "FF1493",
							 | 
						||
| 
								 | 
							
										deepskyblue: "00BFFF",
							 | 
						||
| 
								 | 
							
										dimgray: "696969",
							 | 
						||
| 
								 | 
							
										dimgrey: "696969",
							 | 
						||
| 
								 | 
							
										dodgerblue: "1E90FF",
							 | 
						||
| 
								 | 
							
										firebrick: "B22222",
							 | 
						||
| 
								 | 
							
										floralwhite: "FFFAF0",
							 | 
						||
| 
								 | 
							
										forestgreen: "228B22",
							 | 
						||
| 
								 | 
							
										fuchsia: "FF00FF",
							 | 
						||
| 
								 | 
							
										gainsboro: "DCDCDC",
							 | 
						||
| 
								 | 
							
										ghostwhite: "F8F8FF",
							 | 
						||
| 
								 | 
							
										gold: "FFD700",
							 | 
						||
| 
								 | 
							
										goldenrod: "DAA520",
							 | 
						||
| 
								 | 
							
										gray: "808080",
							 | 
						||
| 
								 | 
							
										green: "008000",
							 | 
						||
| 
								 | 
							
										greenyellow: "ADFF2F",
							 | 
						||
| 
								 | 
							
										grey: "808080",
							 | 
						||
| 
								 | 
							
										honeydew: "F0FFF0",
							 | 
						||
| 
								 | 
							
										hotpink: "FF69B4",
							 | 
						||
| 
								 | 
							
										indianred: "CD5C5C",
							 | 
						||
| 
								 | 
							
										indigo: "4B0082",
							 | 
						||
| 
								 | 
							
										ivory: "FFFFF0",
							 | 
						||
| 
								 | 
							
										khaki: "F0E68C",
							 | 
						||
| 
								 | 
							
										lavender: "E6E6FA",
							 | 
						||
| 
								 | 
							
										lavenderblush: "FFF0F5",
							 | 
						||
| 
								 | 
							
										lawngreen: "7CFC00",
							 | 
						||
| 
								 | 
							
										lemonchiffon: "FFFACD",
							 | 
						||
| 
								 | 
							
										lightblue: "ADD8E6",
							 | 
						||
| 
								 | 
							
										lightcoral: "F08080",
							 | 
						||
| 
								 | 
							
										lightcyan: "E0FFFF",
							 | 
						||
| 
								 | 
							
										lightgoldenrodyellow: "FAFAD2",
							 | 
						||
| 
								 | 
							
										lightgray: "D3D3D3",
							 | 
						||
| 
								 | 
							
										lightgreen: "90EE90",
							 | 
						||
| 
								 | 
							
										lightgrey: "D3D3D3",
							 | 
						||
| 
								 | 
							
										lightpink: "FFB6C1",
							 | 
						||
| 
								 | 
							
										lightsalmon: "FFA07A",
							 | 
						||
| 
								 | 
							
										lightseagreen: "20B2AA",
							 | 
						||
| 
								 | 
							
										lightskyblue: "87CEFA",
							 | 
						||
| 
								 | 
							
										lightslategray: "778899",
							 | 
						||
| 
								 | 
							
										lightslategrey: "778899",
							 | 
						||
| 
								 | 
							
										lightsteelblue: "B0C4DE",
							 | 
						||
| 
								 | 
							
										lightyellow: "FFFFE0",
							 | 
						||
| 
								 | 
							
										lime: "00FF00",
							 | 
						||
| 
								 | 
							
										limegreen: "32CD32",
							 | 
						||
| 
								 | 
							
										linen: "FAF0E6",
							 | 
						||
| 
								 | 
							
										magenta: "FF00FF",
							 | 
						||
| 
								 | 
							
										maroon: "800000",
							 | 
						||
| 
								 | 
							
										mediumaquamarine: "66CDAA",
							 | 
						||
| 
								 | 
							
										mediumblue: "0000CD",
							 | 
						||
| 
								 | 
							
										mediumorchid: "BA55D3",
							 | 
						||
| 
								 | 
							
										mediumpurple: "9370DB",
							 | 
						||
| 
								 | 
							
										mediumseagreen: "3CB371",
							 | 
						||
| 
								 | 
							
										mediumslateblue: "7B68EE",
							 | 
						||
| 
								 | 
							
										mediumspringgreen: "00FA9A",
							 | 
						||
| 
								 | 
							
										mediumturquoise: "48D1CC",
							 | 
						||
| 
								 | 
							
										mediumvioletred: "C71585",
							 | 
						||
| 
								 | 
							
										midnightblue: "191970",
							 | 
						||
| 
								 | 
							
										mintcream: "F5FFFA",
							 | 
						||
| 
								 | 
							
										mistyrose: "FFE4E1",
							 | 
						||
| 
								 | 
							
										moccasin: "FFE4B5",
							 | 
						||
| 
								 | 
							
										navajowhite: "FFDEAD",
							 | 
						||
| 
								 | 
							
										navy: "000080",
							 | 
						||
| 
								 | 
							
										oldlace: "FDF5E6",
							 | 
						||
| 
								 | 
							
										olive: "808000",
							 | 
						||
| 
								 | 
							
										olivedrab: "6B8E23",
							 | 
						||
| 
								 | 
							
										orange: "FFA500",
							 | 
						||
| 
								 | 
							
										orangered: "FF4500",
							 | 
						||
| 
								 | 
							
										orchid: "DA70D6",
							 | 
						||
| 
								 | 
							
										palegoldenrod: "EEE8AA",
							 | 
						||
| 
								 | 
							
										palegreen: "98FB98",
							 | 
						||
| 
								 | 
							
										paleturquoise: "AFEEEE",
							 | 
						||
| 
								 | 
							
										palevioletred: "DB7093",
							 | 
						||
| 
								 | 
							
										papayawhip: "FFEFD5",
							 | 
						||
| 
								 | 
							
										peachpuff: "FFDAB9",
							 | 
						||
| 
								 | 
							
										peru: "CD853F",
							 | 
						||
| 
								 | 
							
										pink: "FFC0CB",
							 | 
						||
| 
								 | 
							
										plum: "DDA0DD",
							 | 
						||
| 
								 | 
							
										powderblue: "B0E0E6",
							 | 
						||
| 
								 | 
							
										purple: "800080",
							 | 
						||
| 
								 | 
							
										red: "FF0000",
							 | 
						||
| 
								 | 
							
										rosybrown: "BC8F8F",
							 | 
						||
| 
								 | 
							
										royalblue: "4169E1",
							 | 
						||
| 
								 | 
							
										saddlebrown: "8B4513",
							 | 
						||
| 
								 | 
							
										salmon: "FA8072",
							 | 
						||
| 
								 | 
							
										sandybrown: "F4A460",
							 | 
						||
| 
								 | 
							
										seagreen: "2E8B57",
							 | 
						||
| 
								 | 
							
										seashell: "FFF5EE",
							 | 
						||
| 
								 | 
							
										sienna: "A0522D",
							 | 
						||
| 
								 | 
							
										silver: "C0C0C0",
							 | 
						||
| 
								 | 
							
										skyblue: "87CEEB",
							 | 
						||
| 
								 | 
							
										slateblue: "6A5ACD",
							 | 
						||
| 
								 | 
							
										slategray: "708090",
							 | 
						||
| 
								 | 
							
										slategrey: "708090",
							 | 
						||
| 
								 | 
							
										snow: "FFFAFA",
							 | 
						||
| 
								 | 
							
										springgreen: "00FF7F",
							 | 
						||
| 
								 | 
							
										steelblue: "4682B4",
							 | 
						||
| 
								 | 
							
										tan: "D2B48C",
							 | 
						||
| 
								 | 
							
										teal: "008080",
							 | 
						||
| 
								 | 
							
										thistle: "D8BFD8",
							 | 
						||
| 
								 | 
							
										tomato: "FF6347",
							 | 
						||
| 
								 | 
							
										turquoise: "40E0D0",
							 | 
						||
| 
								 | 
							
										violet: "EE82EE",
							 | 
						||
| 
								 | 
							
										wheat: "F5DEB3",
							 | 
						||
| 
								 | 
							
										white: "FFFFFF",
							 | 
						||
| 
								 | 
							
										whitesmoke: "F5F5F5",
							 | 
						||
| 
								 | 
							
										yellow: "FFFF00",
							 | 
						||
| 
								 | 
							
										yellowgreen: "9ACD32"
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								if (typeof module !== 'undefined') {
							 | 
						||
| 
								 | 
							
								  module.exports = Rainbow;
							 | 
						||
| 
								 | 
							
								}
							 |