Commit 458fba9e42931c8d1565232215d53b1273f3dbba
1 parent
42bae254
Exists in
master
and in
7 other branches
Opção para abrir com o Cesium o kml gerado na ferramenta TME
Showing
5 changed files
with
935 additions
and
893 deletions
Show diff stats
ferramentas/cesium/kml3d.php
... | ... | @@ -3,48 +3,73 @@ include("../../classesphp/pega_variaveis.php"); |
3 | 3 | ?> |
4 | 4 | <!DOCTYPE html> |
5 | 5 | <html lang="en"> |
6 | - <head> | |
7 | - <title>Hello World!</title> | |
8 | - <script src="../../pacotes/cesium/Build/Cesium/Cesium.js"></script> | |
9 | - <style> | |
10 | - @import url(../../pacotes/cesium/Build/Cesium/Widgets/widgets.css); | |
11 | - #cesiumContainer { | |
12 | - position: absolute; | |
13 | - top: 0; | |
14 | - left: 0; | |
15 | - height: 100%; | |
16 | - width: 100%; | |
17 | - margin: 0; | |
18 | - overflow: hidden; | |
19 | - padding: 0; | |
20 | - font-family: sans-serif; | |
21 | - } | |
6 | +<head> | |
7 | +<title>KML 3d</title> | |
8 | +<script src="../../pacotes/cesium/Build/Cesium/Cesium.js"></script> | |
9 | +<style> | |
10 | +@import url(../../pacotes/cesium/Build/Cesium/Widgets/widgets.css); | |
22 | 11 | |
23 | - html { | |
24 | - height: 100%; | |
25 | - } | |
12 | +#cesiumContainer { | |
13 | + position: absolute; | |
14 | + top: 0; | |
15 | + left: 0; | |
16 | + height: 100%; | |
17 | + width: 100%; | |
18 | + margin: 0; | |
19 | + overflow: hidden; | |
20 | + padding: 0; | |
21 | + font-family: sans-serif; | |
22 | +} | |
26 | 23 | |
27 | - body { | |
28 | - padding: 0; | |
29 | - margin: 0; | |
30 | - overflow: hidden; | |
31 | - height: 100%; | |
32 | - } | |
33 | - </style> | |
34 | - </head> | |
24 | +html { | |
25 | + height: 100%; | |
26 | +} | |
27 | + | |
28 | +body { | |
29 | + padding: 0; | |
30 | + margin: 0; | |
31 | + overflow: hidden; | |
32 | + height: 100%; | |
33 | +} | |
34 | + | |
35 | +#legenda { | |
36 | + margin-bottom: 5px; | |
37 | + margin-left: 5px; | |
38 | + margin-right: 5px; | |
39 | + margin-top: 5px; | |
40 | + padding-bottom: 2px; | |
41 | + padding-left: 5px; | |
42 | + padding-right: 5px; | |
43 | + padding-top: 2px; | |
44 | + position: absolute; | |
45 | + top: 10px; | |
46 | + left: 10px; | |
47 | + color: white; | |
48 | + font-family: Verdana, Arial, Helvetica, sans-serif; | |
49 | +} | |
50 | +</style> | |
51 | +</head> | |
35 | 52 | <body> |
36 | - <div id="cesiumContainer"></div> | |
37 | - <script> | |
38 | - var viewer = new Cesium.Viewer( | |
53 | + <div id="cesiumContainer"></div> | |
54 | + <div id="legenda"> | |
55 | + <img src='<?php echo $legenda;?>' /> | |
56 | + </div> | |
57 | + <script> | |
58 | + var viewer = new Cesium.Viewer( | |
39 | 59 | 'cesiumContainer', |
40 | 60 | { |
41 | 61 | timeline : false |
42 | 62 | } |
43 | - ); | |
44 | - // Add a WMS imagery layer | |
45 | - | |
46 | - var imageryLayers = viewer.imageryLayers; | |
47 | - viewer.dataSources.add(Cesium.KmlDataSource.load('<?php echo $kmlurl;?>')) | |
48 | - </script> | |
63 | + ); | |
64 | + // Add a WMS imagery layer | |
65 | + | |
66 | + var imageryLayers = viewer.imageryLayers; | |
67 | + if('<?php echo $kmlurl;?>' != ''){ | |
68 | + viewer.dataSources.add(Cesium.KmlDataSource.load('<?php echo $kmlurl;?>')) | |
69 | + } | |
70 | + viewer.camera.lookAt(Cesium.Cartesian3.fromDegrees(-55.0, -13.0), new Cesium.Cartesian3(0.0, -4790000.0, 3930000.0)); | |
71 | + viewer.camera.lookAtTransform(Cesium.Matrix4.IDENTITY); | |
72 | + //viewer.extend(Cesium.viewerCesiumInspectorMixin); | |
73 | +</script> | |
49 | 74 | </body> |
50 | 75 | </html> | ... | ... |
ferramentas/tme/index.js
... | ... | @@ -311,7 +311,9 @@ i3GEOF.tme = |
311 | 311 | + "' target='new' >" |
312 | 312 | + url |
313 | 313 | + "</a><br>"; |
314 | - url = i3GEO.configura.locaplic + "/ferramentas/cesium/kml3d.php?kmlurl=" + retorno.data.url; | |
314 | + url = i3GEO.configura.locaplic + "/ferramentas/cesium/kml3d.php?kmlurl=" | |
315 | + + retorno.data.url | |
316 | + + "&legenda=" + retorno.data.legenda; | |
315 | 317 | ins += |
316 | 318 | "<br>" + $trad('abreNoCesium', i3GEOF.tme.dicionario) |
317 | 319 | + "<br><a href='" | ... | ... |
pacotes/tme/TME_Engine.php
... | ... | @@ -21,672 +21,663 @@ |
21 | 21 | |
22 | 22 | class ThematicMap |
23 | 23 | { |
24 | - public $dataStore; | |
25 | - public $coordDecimals = 2; | |
26 | - public $engine = ""; | |
27 | - public $logoline = "files/balloonlogo.png"; | |
28 | - public $logo = 'files/logo.png'; | |
29 | - | |
30 | - // Parameters | |
31 | - public $mapType = 'choropleth'; // choropleth / prism / symbol | |
32 | - public $symbolType; // image / polygon // collada | |
33 | - public $symbolShape; | |
34 | - public $mapTitle; | |
35 | - public $mapDescription; | |
36 | - public $mapSource; | |
37 | - public $showTitle = true; | |
38 | - public $showLegend = true; | |
39 | - public $showValues = false; | |
40 | - public $showNames = false; | |
41 | - public $timeType = 'year'; // year / series / slider | |
42 | - public $maxHeight = 2000000; // Prism / Bar | |
24 | + public $dataStore; | |
25 | + public $coordDecimals = 2; | |
26 | + public $engine = ""; | |
27 | + public $logoline = "files/balloonlogo.png"; | |
28 | + public $logo = 'files/logo.png'; | |
29 | + | |
30 | + // Parameters | |
31 | + public $mapType = 'choropleth'; // choropleth / prism / symbol | |
32 | + public $symbolType; // image / polygon // collada | |
33 | + public $symbolShape; | |
34 | + public $mapTitle; | |
35 | + public $mapDescription; | |
36 | + public $mapSource; | |
37 | + public $showTitle = true; | |
38 | + public $showLegend = true; | |
39 | + public $showValues = false; | |
40 | + public $showNames = false; | |
41 | + public $timeType = 'year'; // year / series / slider | |
42 | + public $maxHeight = 2000000; // Prism / Bar | |
43 | 43 | public $symbolMaxSize; // Symbol$imgBrand |
44 | - public $barSize = 50000; | |
45 | - public $maxValue; | |
46 | - public $minValue; | |
47 | - | |
48 | - public $indicatorID; | |
49 | - public $indicator; | |
50 | - public $year; | |
51 | - private $yearArray; | |
52 | - | |
53 | - // Colour parameters | |
54 | - public $colourType = 'scale'; // scale / single | |
55 | - public $startColour = 'FFFF99'; | |
56 | - public $endColour = 'FF6600'; | |
57 | - public $noDataColour = 'CCCCCC'; | |
58 | - public $colour = 'FF6600'; | |
59 | - public $opacity = 90; | |
60 | - | |
61 | - public $classification = 'unclassed'; // unclassed / equal / quantile | |
62 | - public $numClasses = 5; | |
63 | - | |
64 | - private $myColourScale; // Only choropleth/prism | |
65 | - private $startColourRGB; // Array | |
66 | - private $endColourRGB; // Array | |
67 | - private $deltaColour; // Array | |
68 | - private $kmlAlphaColour = 220; | |
69 | - private $colourLegendHeight = 350; | |
70 | - private $colourLegendWidth = 30; | |
71 | - | |
72 | - private $symbolVertices = 30; // Circle | |
73 | - private $showLabel = false; | |
74 | - | |
75 | - private $classBreaks; // Array | |
76 | - private $classColours; // Array | |
77 | - | |
78 | - | |
79 | - private $precision = 0; // Number of decimals | |
80 | - | |
81 | - // | |
82 | - // Constructor | |
83 | - // @access protected | |
84 | - // | |
85 | - function __construct($dataStore, $paramArray) | |
86 | - { | |
87 | - $this->dataStore = $dataStore; | |
44 | + public $barSize = 50000; | |
45 | + public $maxValue; | |
46 | + public $minValue; | |
47 | + | |
48 | + public $indicatorID; | |
49 | + public $indicator; | |
50 | + public $year; | |
51 | + private $yearArray; | |
52 | + | |
53 | + // Colour parameters | |
54 | + public $colourType = 'scale'; // scale / single | |
55 | + public $startColour = 'FFFF99'; | |
56 | + public $endColour = 'FF6600'; | |
57 | + public $noDataColour = 'CCCCCC'; | |
58 | + public $colour = 'FF6600'; | |
59 | + public $opacity = 90; | |
60 | + | |
61 | + public $classification = 'unclassed'; // unclassed / equal / quantile | |
62 | + public $numClasses = 5; | |
63 | + public $nomeArquivo = ""; | |
64 | + public $nomeTemp = ""; //prefixo para as imagens | |
65 | + | |
66 | + private $myColourScale; // Only choropleth/prism | |
67 | + private $startColourRGB; // Array | |
68 | + private $endColourRGB; // Array | |
69 | + private $deltaColour; // Array | |
70 | + private $kmlAlphaColour = 220; | |
71 | + private $colourLegendHeight = 350; | |
72 | + private $colourLegendWidth = 30; | |
73 | + | |
74 | + private $symbolVertices = 30; // Circle | |
75 | + private $showLabel = false; | |
76 | + | |
77 | + private $classBreaks; // Array | |
78 | + private $classColours; // Array | |
79 | + | |
80 | + | |
81 | + private $precision = 0; // Number of decimals | |
82 | + | |
83 | + // | |
84 | + // Constructor | |
85 | + // @access protected | |
86 | + // | |
87 | + function __construct($dataStore, $paramArray, $nomeTemp = "") | |
88 | + { | |
89 | + $this->dataStore = $dataStore; | |
90 | + if($nomeTemp == ""){ | |
91 | + $this->nomeTemp = time(); | |
92 | + }else{ | |
93 | + $this->nomeTemp = $nomeTemp; | |
94 | + } | |
88 | 95 | |
89 | - // Mandatory parameters | |
96 | + // Mandatory parameters | |
90 | 97 | $this->mapType = $paramArray['mapType']; // Mapping technique |
91 | 98 | $this->indicatorID = $paramArray['indicator']; // Main indicator |
92 | 99 | $this->year = $paramArray['year']; // Year |
93 | 100 | $this->dirtmp = $paramArray['dirtmp']; |
94 | - // Extract indicator metadata and values from dataStore | |
95 | - $this->indicator = $this->dataStore['indicators'][$this->indicatorID]; | |
96 | - $this->minValue = $this->indicator['min']; | |
97 | - $this->maxValue = $this->indicator['max']; | |
98 | - $this->precision = $this->indicator['decimals']; | |
99 | - | |
100 | - // Optional parameters: mapTitle, mapDescription and source | |
101 | - if (isset($paramArray['mapTitle'])) $this->mapTitle = $paramArray['mapTitle']; | |
102 | - else $this->mapTitle = $this->indicator['name']; // Use default from indicator | |
103 | - | |
104 | - if (isset($paramArray['mapDescription'])) $this->mapDescription = $paramArray['mapDescription']; | |
105 | - else $this->mapDescription = $this->indicator['description']; // Use default from indicator | |
106 | - | |
107 | - if (isset($paramArray['mapSource'])) $this->mapSource = $paramArray['mapSource']; | |
108 | - else { | |
109 | - //$this->mapSource = 'Statistics from ' . $this->indicator['source']; // Use default from indicator | |
110 | - } | |
111 | - | |
112 | - // Other optional parameters | |
113 | - if (isset($paramArray['timeType'])) $this->timeType = $paramArray['timeType']; | |
114 | - if (isset($paramArray['showTitle'])) $this->showTitle = $paramArray['showTitle']; | |
115 | - if (isset($paramArray['showLegend'])) $this->showLegend = $paramArray['showLegend']; | |
116 | - if (isset($paramArray['colourType'])) $this->colourType = $paramArray['colourType']; | |
117 | - if (isset($paramArray['colour'])) $this->colour = $paramArray['colour']; | |
118 | - if (isset($paramArray['startColour'])) $this->startColour = $paramArray['startColour']; | |
119 | - if (isset($paramArray['endColour'])) $this->endColour = $paramArray['endColour']; | |
120 | - if (isset($paramArray['noDataColour'])) $this->noDataColour = $paramArray['noDataColour']; | |
121 | - if (isset($paramArray['showValues'])) $this->showValues = $paramArray['showValues']; | |
122 | - if (isset($paramArray['showNames'])) $this->showNames = $paramArray['showNames']; | |
123 | - if (isset($paramArray['symbolType'])) $this->symbolType = $paramArray['symbolType']; | |
124 | - if (isset($paramArray['symbolShape'])) $this->symbolShape = $paramArray['symbolShape']; | |
125 | - if (isset($paramArray['symbolMaxSize'])) $this->symbolMaxSize = $paramArray['symbolMaxSize']; | |
126 | - if (isset($paramArray['maxHeight'])) $this->maxHeight = $paramArray['maxHeight']; | |
127 | - if (isset($paramArray['barSize'])) $this->barSize = $paramArray['barSize']; | |
128 | - if (isset($paramArray['classification'])) $this->classification = $paramArray['classification']; | |
129 | - if (isset($paramArray['numClasses'])) $this->numClasses = $paramArray['numClasses']; | |
130 | - | |
131 | - if ($this->showValues || $this->showNames) { | |
132 | - $this->showLabel = true; | |
133 | - } | |
134 | - | |
135 | - if (isset($paramArray['opacity'])) { | |
136 | - $this->opacity = $paramArray['opacity']; | |
137 | - $this->kmlAlphaColour = 255 * $this->opacity / 100; | |
138 | - } | |
101 | + // Extract indicator metadata and values from dataStore | |
102 | + if($dataStore != ""){ | |
103 | + $this->indicator = $this->dataStore['indicators'][$this->indicatorID]; | |
104 | + } | |
105 | + $this->minValue = $this->indicator['min']; | |
106 | + $this->maxValue = $this->indicator['max']; | |
107 | + $this->precision = $this->indicator['decimals']; | |
139 | 108 | |
140 | - // Make an array of available years | |
141 | - if ($this->timeType != 'year') $this->yearArray = $this->indicator['years']; | |
142 | - else $this->yearArray = array($this->year); // Only one year | |
109 | + // Optional parameters: mapTitle, mapDescription and source | |
110 | + if (isset($paramArray['mapTitle'])) $this->mapTitle = $paramArray['mapTitle']; | |
111 | + else $this->mapTitle = $this->indicator['name']; // Use default from indicator | |
143 | 112 | |
113 | + if (isset($paramArray['mapDescription'])) $this->mapDescription = $paramArray['mapDescription']; | |
114 | + else $this->mapDescription = $this->indicator['description']; // Use default from indicator | |
144 | 115 | |
116 | + if (isset($paramArray['mapSource'])) $this->mapSource = $paramArray['mapSource']; | |
117 | + else { | |
118 | + //$this->mapSource = 'Statistics from ' . $this->indicator['source']; // Use default from indicator | |
145 | 119 | } |
146 | 120 | |
121 | + // Other optional parameters | |
122 | + if (isset($paramArray['timeType'])) $this->timeType = $paramArray['timeType']; | |
123 | + if (isset($paramArray['showTitle'])) $this->showTitle = $paramArray['showTitle']; | |
124 | + if (isset($paramArray['showLegend'])) $this->showLegend = $paramArray['showLegend']; | |
125 | + if (isset($paramArray['colourType'])) $this->colourType = $paramArray['colourType']; | |
126 | + if (isset($paramArray['colour'])) $this->colour = $paramArray['colour']; | |
127 | + if (isset($paramArray['startColour'])) $this->startColour = $paramArray['startColour']; | |
128 | + if (isset($paramArray['endColour'])) $this->endColour = $paramArray['endColour']; | |
129 | + if (isset($paramArray['noDataColour'])) $this->noDataColour = $paramArray['noDataColour']; | |
130 | + if (isset($paramArray['showValues'])) $this->showValues = $paramArray['showValues']; | |
131 | + if (isset($paramArray['showNames'])) $this->showNames = $paramArray['showNames']; | |
132 | + if (isset($paramArray['symbolType'])) $this->symbolType = $paramArray['symbolType']; | |
133 | + if (isset($paramArray['symbolShape'])) $this->symbolShape = $paramArray['symbolShape']; | |
134 | + if (isset($paramArray['symbolMaxSize'])) $this->symbolMaxSize = $paramArray['symbolMaxSize']; | |
135 | + if (isset($paramArray['maxHeight'])) $this->maxHeight = $paramArray['maxHeight']; | |
136 | + if (isset($paramArray['barSize'])) $this->barSize = $paramArray['barSize']; | |
137 | + if (isset($paramArray['classification'])) $this->classification = $paramArray['classification']; | |
138 | + if (isset($paramArray['numClasses'])) $this->numClasses = $paramArray['numClasses']; | |
139 | + | |
140 | + if ($this->showValues || $this->showNames) { | |
141 | + $this->showLabel = true; | |
142 | + } | |
147 | 143 | |
148 | - // | |
149 | - // Constructor | |
150 | - // @access protected | |
151 | - // | |
152 | - function __deconstruct() | |
153 | - { | |
154 | - // What goes here? | |
144 | + if (isset($paramArray['opacity'])) { | |
145 | + $this->opacity = $paramArray['opacity']; | |
146 | + $this->kmlAlphaColour = 255 * $this->opacity / 100; | |
155 | 147 | } |
156 | 148 | |
149 | + // Make an array of available years | |
150 | + if ($this->timeType != 'year') $this->yearArray = $this->indicator['years']; | |
151 | + else $this->yearArray = array($this->year); // Only one year | |
157 | 152 | |
158 | - // | |
159 | - // Function | |
160 | - // @access protected | |
161 | - // | |
162 | - public function getKML($url,$download = false) | |
163 | - { | |
164 | 153 | |
165 | - // Create KMZ archieve | |
166 | - $file = $this->dirtmp."/tme". time(). ".kmz"; | |
154 | + } | |
167 | 155 | |
168 | - /* | |
169 | - $zip = new ZipArchive(); | |
170 | - if ($zip->open($file, ZIPARCHIVE::CREATE)!==TRUE) { | |
171 | - exit("cannot open <$file>\n"); | |
172 | - } | |
173 | - */ | |
174 | - include(dirname(__FILE__)."/../kmlmapserver/classes/zip.class.php"); | |
175 | - $zip = new zipfile(); | |
176 | - // Add balloon logo to archieve (300 x 30 px) | |
177 | - $zip->addFile($this->logoline, 'files/balloonlogo.png'); | |
178 | - | |
179 | - // KML header | |
180 | - $kml = "<?xml version='1.0' encoding='UTF-8'?>" . PHP_EOL | |
181 | - . "<kml xmlns='http://www.opengis.net/kml/2.2' xmlns:atom='http://www.w3.org/2005/Atom'>" . PHP_EOL | |
182 | - . " <Document>" . PHP_EOL | |
183 | - . " <atom:author>" . PHP_EOL | |
184 | - . " <atom:name>Thematic Mapping Engine</atom:name>" . PHP_EOL | |
185 | - . " </atom:author>" . PHP_EOL | |
186 | - . " <atom:link href='http://thematicmapping.org' rel='related' />" . PHP_EOL | |
187 | - . " <name>$this->mapTitle</name>" . PHP_EOL | |
188 | - . " <open>1</open>" . PHP_EOL | |
189 | - . " <Snippet maxLines='1'>$this->mapSource</Snippet>" . PHP_EOL | |
190 | - . " <description><![CDATA[ $this->mapDescription <p>$this->mapSource</p>$this->engine ]]></description>" . PHP_EOL; | |
191 | - // Add style for indicator balloon | |
192 | - $kmlStyles = " <Style id='balloonStyle'>" . PHP_EOL | |
193 | - . " <BalloonStyle>" . PHP_EOL | |
194 | - . " <text><![CDATA[" . PHP_EOL | |
195 | - . " <a href='http://thematicmapping.org'><img src='http://thematicmapping.org/engine/files/balloonlogo.png'></a>" . PHP_EOL | |
196 | - . " <p><b><font size='+2'>$[name]</font></b></p>" . PHP_EOL | |
197 | - . " <p>$[description]</p>" . PHP_EOL | |
198 | - . " ]]></text>" . PHP_EOL | |
199 | - . " </BalloonStyle>" . PHP_EOL | |
200 | - . " </Style>" . PHP_EOL | |
201 | - . " <styleUrl>#balloonStyle</styleUrl>" . PHP_EOL; | |
202 | - | |
203 | - | |
204 | - if ($this->colourType == 'scale') { | |
205 | - // Need to run before getColourValue / getColourLegend / makeClasses | |
206 | - self::makeColourScale(); | |
207 | - | |
208 | - if ($this->classification != 'unclassed') { | |
209 | - self::makeClasses($this->classification, $this->numClasses); | |
210 | - } | |
211 | 156 | |
212 | - // Add colour legend to KMZ archieve | |
213 | - if ($this->showLegend) { | |
214 | - $imgLegenda = self::getColourLegend(); | |
215 | - $zip->addFile($imgLegenda,'files/legend.png'); | |
216 | - } | |
217 | - $kmlSingleColour = ''; // Colours needs to be defined for each feature | |
218 | - //$kmlColour = self::rgb2bgr($this->noDataColour); // Not in use, only so the variable has a value | |
219 | - } | |
220 | - else { | |
221 | - $kmlSingleColour = '<color>' . self::rgb2bgr($this->colour) . '</color>'; | |
222 | - //$kmlColour = self::rgb2bgr($this->colour); | |
223 | - } | |
157 | + // | |
158 | + // Constructor | |
159 | + // @access protected | |
160 | + // | |
161 | + function __deconstruct() | |
162 | + { | |
163 | + // What goes here? | |
164 | + } | |
224 | 165 | |
225 | 166 | |
226 | - // Add style for value placemarks | |
227 | - if ($this->showLabel) { | |
228 | - $kmlStyles .= " <Style id='labelPlacemark'>" . PHP_EOL | |
229 | - . " <IconStyle>" . PHP_EOL | |
230 | - . " <scale>0.0</scale>" . PHP_EOL | |
231 | - . " </IconStyle>" . PHP_EOL | |
232 | - . " <LabelStyle>" . PHP_EOL | |
233 | - . " <scale>1</scale>" . PHP_EOL | |
234 | - . " </LabelStyle>" . PHP_EOL | |
235 | - . " </Style>" . PHP_EOL; | |
167 | + // | |
168 | + // Function | |
169 | + // @access protected | |
170 | + // | |
171 | + public function getKML($url,$download = false, $file = "") | |
172 | + { | |
173 | + // Create KMZ archieve | |
174 | + if($file == ""){ | |
175 | + $file = $this->dirtmp."/tme". $this->nomeTemp. ".kmz"; | |
176 | + } | |
177 | + $this->nomeArquivo = $file; | |
178 | + if(!file_exists($file)){ | |
179 | + include(dirname(__FILE__)."/../kmlmapserver/classes/zip.class.php"); | |
180 | + $zip = new zipfile(); | |
181 | + // Add balloon logo to archieve (300 x 30 px) | |
182 | + $zip->addFile($this->logoline, 'files/balloonlogo.png'); | |
183 | + | |
184 | + // KML header | |
185 | + $kml = "<?xml version='1.0' encoding='UTF-8'?>" . PHP_EOL | |
186 | + . "<kml xmlns='http://www.opengis.net/kml/2.2' xmlns:atom='http://www.w3.org/2005/Atom'>" . PHP_EOL | |
187 | + . " <Document>" . PHP_EOL | |
188 | + . " <atom:author>" . PHP_EOL | |
189 | + . " <atom:name>Thematic Mapping Engine</atom:name>" . PHP_EOL | |
190 | + . " </atom:author>" . PHP_EOL | |
191 | + . " <atom:link href='http://thematicmapping.org' rel='related' />" . PHP_EOL | |
192 | + . " <name>$this->mapTitle</name>" . PHP_EOL | |
193 | + . " <open>1</open>" . PHP_EOL | |
194 | + . " <Snippet maxLines='1'>$this->mapSource</Snippet>" . PHP_EOL | |
195 | + . " <description><![CDATA[ $this->mapDescription <p>$this->mapSource</p>$this->engine ]]></description>" . PHP_EOL; | |
196 | + // Add style for indicator balloon | |
197 | + $kmlStyles = " <Style id='balloonStyle'>" . PHP_EOL | |
198 | + . " <BalloonStyle>" . PHP_EOL | |
199 | + . " <text><![CDATA[" . PHP_EOL | |
200 | + . " <a href='http://thematicmapping.org'><img src='http://thematicmapping.org/engine/files/balloonlogo.png'></a>" . PHP_EOL | |
201 | + . " <p><b><font size='+2'>$[name]</font></b></p>" . PHP_EOL | |
202 | + . " <p>$[description]</p>" . PHP_EOL | |
203 | + . " ]]></text>" . PHP_EOL | |
204 | + . " </BalloonStyle>" . PHP_EOL | |
205 | + . " </Style>" . PHP_EOL | |
206 | + . " <styleUrl>#balloonStyle</styleUrl>" . PHP_EOL; | |
207 | + | |
208 | + | |
209 | + if ($this->colourType == 'scale') { | |
210 | + // Need to run before getColourValue / getColourLegend / makeClasses | |
211 | + self::makeColourScale(); | |
212 | + | |
213 | + if ($this->classification != 'unclassed') { | |
214 | + self::makeClasses($this->classification, $this->numClasses); | |
236 | 215 | } |
237 | 216 | |
238 | - // Define shared styles and legend | |
239 | - $kmlStyles .= " <Style id='sharedStyle'>" . PHP_EOL; | |
240 | - switch ($this->mapType) { | |
241 | - | |
242 | - case "choropleth": | |
243 | - case "prism": | |
217 | + // Add colour legend to KMZ archieve | |
218 | + if ($this->showLegend) { | |
219 | + $imgLegenda = self::getColourLegend(); | |
220 | + $zip->addFile($imgLegenda,'files/legend.png'); | |
221 | + } | |
222 | + $kmlSingleColour = ''; // Colours needs to be defined for each feature | |
223 | + //$kmlColour = self::rgb2bgr($this->noDataColour); // Not in use, only so the variable has a value | |
224 | + } | |
225 | + else { | |
226 | + $kmlSingleColour = '<color>' . self::rgb2bgr($this->colour) . '</color>'; | |
227 | + //$kmlColour = self::rgb2bgr($this->colour); | |
228 | + } | |
229 | + | |
230 | + | |
231 | + // Add style for value placemarks | |
232 | + if ($this->showLabel) { | |
233 | + $kmlStyles .= " <Style id='labelPlacemark'>" . PHP_EOL | |
234 | + . " <IconStyle>" . PHP_EOL | |
235 | + . " <scale>0.0</scale>" . PHP_EOL | |
236 | + . " </IconStyle>" . PHP_EOL | |
237 | + . " <LabelStyle>" . PHP_EOL | |
238 | + . " <scale>1</scale>" . PHP_EOL | |
239 | + . " </LabelStyle>" . PHP_EOL | |
240 | + . " </Style>" . PHP_EOL; | |
241 | + } | |
242 | + | |
243 | + // Define shared styles and legend | |
244 | + $kmlStyles .= " <Style id='sharedStyle'>" . PHP_EOL; | |
245 | + switch ($this->mapType) { | |
246 | + | |
247 | + case "choropleth": | |
248 | + case "prism": | |
249 | + | |
250 | + $kmlStyles .= " <PolyStyle>" . PHP_EOL | |
251 | + . " <fill>1</fill>" . PHP_EOL | |
252 | + . " <outline>1</outline>" . PHP_EOL | |
253 | + . " $kmlSingleColour" . PHP_EOL | |
254 | + . " </PolyStyle>" . PHP_EOL | |
255 | + . " <LineStyle>" . PHP_EOL | |
256 | + . " <color>cc000000</color>" . PHP_EOL | |
257 | + . " </LineStyle>" . PHP_EOL; | |
258 | + break; | |
259 | + | |
260 | + case "bar": | |
261 | + | |
262 | + $kmlStyles .= " <PolyStyle>" . PHP_EOL | |
263 | + . " <fill>1</fill>" . PHP_EOL | |
264 | + . " <outline>0</outline>" . PHP_EOL | |
265 | + . " $kmlSingleColour" . PHP_EOL | |
266 | + . " </PolyStyle>" . PHP_EOL; | |
267 | + break; | |
268 | + | |
269 | + | |
270 | + | |
271 | + // Proportional symbol | |
272 | + case "symbol": | |
273 | + | |
274 | + switch($this->symbolType){ | |
275 | + | |
276 | + case 'image': | |
277 | + $zip->addFile("files/$this->symbolShape.png", 'files/symbol.png'); | |
278 | + $kmlStyles .= " <IconStyle>" . PHP_EOL | |
279 | + . " $kmlSingleColour" . PHP_EOL | |
280 | + . " <Icon>" . PHP_EOL | |
281 | + . " <href>".$url."/symbol.png</href>" . PHP_EOL | |
282 | + . " </Icon>" . PHP_EOL | |
283 | + . " </IconStyle>" . PHP_EOL; | |
284 | + break; | |
244 | 285 | |
245 | - $kmlStyles .= " <PolyStyle>" . PHP_EOL | |
246 | - . " <fill>1</fill>" . PHP_EOL | |
247 | - . " <outline>1</outline>" . PHP_EOL | |
248 | - . " $kmlSingleColour" . PHP_EOL | |
249 | - . " </PolyStyle>" . PHP_EOL | |
250 | - . " <LineStyle>" . PHP_EOL | |
251 | - . " <color>cc000000</color>" . PHP_EOL | |
252 | - . " </LineStyle>" . PHP_EOL; | |
286 | + case 'polygon': | |
287 | + if ($this->symbolShape == 'square') { | |
288 | + $this->symbolVertices = 4; | |
289 | + } | |
290 | + $kmlStyles .= " <PolyStyle>" . PHP_EOL | |
291 | + . " $kmlSingleColour" . PHP_EOL | |
292 | + . " <fill>1</fill>" . PHP_EOL | |
293 | + . " <outline>1</outline>" . PHP_EOL | |
294 | + . " </PolyStyle>" . PHP_EOL | |
295 | + . " <LineStyle>" . PHP_EOL | |
296 | + . " <color>cc000000</color>" . PHP_EOL | |
297 | + . " </LineStyle>" . PHP_EOL; | |
253 | 298 | break; |
254 | 299 | |
255 | - case "bar": | |
300 | + case 'collada': | |
301 | + if ($this->colourType == 'scale') { | |
302 | + // Limit number of collada objects (one for each colour) | |
303 | + if ($this->classification == 'unclassed') { | |
304 | + self::makeClasses('equal', 12); | |
305 | + } | |
256 | 306 | |
257 | - $kmlStyles .= " <PolyStyle>" . PHP_EOL | |
258 | - . " <fill>1</fill>" . PHP_EOL | |
259 | - . " <outline>0</outline>" . PHP_EOL | |
260 | - . " $kmlSingleColour" . PHP_EOL | |
261 | - . " </PolyStyle>" . PHP_EOL; | |
262 | - break; | |
307 | + foreach($this->classColours as $class => $classColour){ | |
308 | + $colladaColour = self::rgb2collada($classColour); | |
263 | 309 | |
310 | + // Read collada model | |
311 | + $filename = "files/$this->symbolShape.dae"; | |
312 | + $handle = fopen($filename, "r"); | |
313 | + $collada = fread($handle, filesize($filename)); | |
314 | + fclose($handle); | |
264 | 315 | |
316 | + // Search and replace colour | |
317 | + $pos = strpos($collada, '<effect id="material0-effect" name="material0-effect">'); | |
318 | + $pos = strpos($collada, "<diffuse>", $pos); | |
319 | + $pos = strpos($collada, "<color>", $pos); | |
320 | + $collada = substr_replace($collada, $colladaColour, $pos+7, 28); | |
265 | 321 | |
266 | - // Proportional symbol | |
267 | - case "symbol": | |
322 | + // Add collada object to kmz archieve | |
323 | + $zip->addFromString("files/object$class.dae", $collada); | |
324 | + } | |
325 | + } | |
268 | 326 | |
269 | - switch($this->symbolType){ | |
327 | + // Single colour | |
328 | + else { | |
329 | + $colladaColour = self::rgb2collada($this->colour); | |
270 | 330 | |
271 | - case 'image': | |
272 | - $zip->addFile("files/$this->symbolShape.png", 'files/symbol.png'); | |
273 | - $kmlStyles .= " <IconStyle>" . PHP_EOL | |
274 | - . " $kmlSingleColour" . PHP_EOL | |
275 | - . " <Icon>" . PHP_EOL | |
276 | - . " <href>".$url."/symbol.png</href>" . PHP_EOL | |
277 | - . " </Icon>" . PHP_EOL | |
278 | - . " </IconStyle>" . PHP_EOL; | |
279 | - break; | |
280 | - | |
281 | - case 'polygon': | |
282 | - if ($this->symbolShape == 'square') { | |
283 | - $this->symbolVertices = 4; | |
284 | - } | |
285 | - $kmlStyles .= " <PolyStyle>" . PHP_EOL | |
286 | - . " $kmlSingleColour" . PHP_EOL | |
287 | - . " <fill>1</fill>" . PHP_EOL | |
288 | - . " <outline>1</outline>" . PHP_EOL | |
289 | - . " </PolyStyle>" . PHP_EOL | |
290 | - . " <LineStyle>" . PHP_EOL | |
291 | - . " <color>cc000000</color>" . PHP_EOL | |
292 | - . " </LineStyle>" . PHP_EOL; | |
293 | - break; | |
294 | - | |
295 | - case 'collada': | |
296 | - if ($this->colourType == 'scale') { | |
297 | - // Limit number of collada objects (one for each colour) | |
298 | - if ($this->classification == 'unclassed') { | |
299 | - self::makeClasses('equal', 12); | |
300 | - } | |
301 | - | |
302 | - foreach($this->classColours as $class => $classColour){ | |
303 | - $colladaColour = self::rgb2collada($classColour); | |
304 | - | |
305 | - // Read collada model | |
306 | - $filename = "files/$this->symbolShape.dae"; | |
307 | - $handle = fopen($filename, "r"); | |
308 | - $collada = fread($handle, filesize($filename)); | |
309 | - fclose($handle); | |
310 | - | |
311 | - // Search and replace colour | |
312 | - $pos = strpos($collada, '<effect id="material0-effect" name="material0-effect">'); | |
313 | - $pos = strpos($collada, "<diffuse>", $pos); | |
314 | - $pos = strpos($collada, "<color>", $pos); | |
315 | - $collada = substr_replace($collada, $colladaColour, $pos+7, 28); | |
316 | - | |
317 | - // Add collada object to kmz archieve | |
318 | - $zip->addFromString("files/object$class.dae", $collada); | |
319 | - } | |
320 | - } | |
321 | - | |
322 | - // Single colour | |
323 | - else { | |
324 | - $colladaColour = self::rgb2collada($this->colour); | |
325 | - | |
326 | - // Read collada model | |
327 | - $filename = "files/$this->symbolShape.dae"; | |
328 | - $handle = fopen($filename, "r"); | |
329 | - $collada = fread($handle, filesize($filename)); | |
330 | - fclose($handle); | |
331 | - | |
332 | - // Search and replace colour | |
333 | - $pos = strpos($collada, '<effect id="material0-effect" name="material0-effect">'); | |
334 | - $pos = strpos($collada, "<diffuse>", $pos); | |
335 | - $pos = strpos($collada, "<color>", $pos); | |
336 | - $collada = substr_replace($collada, $colladaColour, $pos+7, 28); | |
337 | - | |
338 | - // Add collada object to kmz archieve | |
339 | - $zip->addFromString("files/object.dae", $collada); | |
340 | - } | |
341 | - | |
342 | - $kmlstyle = ''; // Not possible to define style for collada objects | |
343 | - | |
344 | - } // switch symbol | |
345 | - } // switch type | |
346 | - | |
347 | - $kmlStyles .= " <BalloonStyle>" . PHP_EOL | |
348 | - . " <text><![CDATA[" . PHP_EOL | |
349 | - . " <a href='http://thematicmapping.org'><img src='http://thematicmapping.org/engine/files/balloonlogo.png'></a>" . PHP_EOL | |
350 | - . " <p><b><font size='+2'>$[name]</font></b></p>" . PHP_EOL | |
351 | - . " <p>$this->mapTitle: $[Snippet]</p>" . PHP_EOL | |
352 | - . " <p>$this->mapDescription</p>" . PHP_EOL | |
353 | - . " <p>$this->mapSource</p>" . PHP_EOL | |
354 | - . " <p>$this->engine</p>" . PHP_EOL | |
355 | - . " ]]></text>" . PHP_EOL | |
356 | - . " </BalloonStyle>" . PHP_EOL | |
357 | - . " </Style>" . PHP_EOL; // End of shared style | |
358 | - | |
359 | - $kmlFolder = " <Folder>" . PHP_EOL | |
360 | - . " <name>Colunas</name>" . PHP_EOL | |
361 | - . " <open>1</open>" . PHP_EOL; | |
362 | - | |
363 | - if ($this->timeType == 'series') { | |
364 | - $kmlFolder .= " <Style>" . PHP_EOL | |
365 | - . " <ListStyle>" . PHP_EOL | |
366 | - . " <listItemType>radioFolder</listItemType>" . PHP_EOL | |
367 | - . " </ListStyle>" . PHP_EOL | |
368 | - . " </Style>" . PHP_EOL; | |
369 | - } | |
331 | + // Read collada model | |
332 | + $filename = "files/$this->symbolShape.dae"; | |
333 | + $handle = fopen($filename, "r"); | |
334 | + $collada = fread($handle, filesize($filename)); | |
335 | + fclose($handle); | |
370 | 336 | |
371 | - // Loop thorough all years | |
372 | - foreach ($this->yearArray as $key => $year) { | |
337 | + // Search and replace colour | |
338 | + $pos = strpos($collada, '<effect id="material0-effect" name="material0-effect">'); | |
339 | + $pos = strpos($collada, "<diffuse>", $pos); | |
340 | + $pos = strpos($collada, "<color>", $pos); | |
341 | + $collada = substr_replace($collada, $colladaColour, $pos+7, 28); | |
373 | 342 | |
374 | - $kmlFeatures = ''; | |
343 | + // Add collada object to kmz archieve | |
344 | + $zip->addFromString("files/object.dae", $collada); | |
345 | + } | |
375 | 346 | |
376 | - if (($this->timeType == 'slider') OR ($year == $this->year)) $visibility = 1; | |
377 | - else $visibility = 0; | |
347 | + $kmlstyle = ''; // Not possible to define style for collada objects | |
378 | 348 | |
379 | - $kmlFolder .= " <Folder>" . PHP_EOL | |
380 | - . " <name>$year</name>" . PHP_EOL | |
381 | - . " <visibility>$visibility</visibility>" . PHP_EOL; | |
349 | + } // switch symbol | |
350 | + } // switch type | |
382 | 351 | |
383 | - if ($this->showLabel) { | |
384 | - $kmlLabels = " <Folder>" . PHP_EOL | |
385 | - . " <name>Show/hide labels</name>" . PHP_EOL | |
386 | - . " <visibility>$visibility</visibility>" . PHP_EOL | |
387 | - . " <Style>" . PHP_EOL | |
388 | - . " <ListStyle>" . PHP_EOL | |
389 | - . " <listItemType>checkHideChildren</listItemType>" . PHP_EOL | |
390 | - . " </ListStyle>" . PHP_EOL | |
391 | - . " </Style>" . PHP_EOL; | |
392 | - } | |
352 | + $kmlStyles .= " <BalloonStyle>" . PHP_EOL | |
353 | + . " <text><![CDATA[" . PHP_EOL | |
354 | + . " <a href='http://thematicmapping.org'><img src='http://thematicmapping.org/engine/files/balloonlogo.png'></a>" . PHP_EOL | |
355 | + . " <p><b><font size='+2'>$[name]</font></b></p>" . PHP_EOL | |
356 | + . " <p>$this->mapTitle: $[Snippet]</p>" . PHP_EOL | |
357 | + . " <p>$this->mapDescription</p>" . PHP_EOL | |
358 | + . " <p>$this->mapSource</p>" . PHP_EOL | |
359 | + . " <p>$this->engine</p>" . PHP_EOL | |
360 | + . " ]]></text>" . PHP_EOL | |
361 | + . " </BalloonStyle>" . PHP_EOL | |
362 | + . " </Style>" . PHP_EOL; // End of shared style | |
393 | 363 | |
394 | - // Add timespan if time animation | |
395 | - if ($this->timeType == 'slider') { | |
364 | + $kmlFolder = " <Folder>" . PHP_EOL | |
365 | + . " <name>Colunas</name>" . PHP_EOL | |
366 | + . " <open>1</open>" . PHP_EOL; | |
396 | 367 | |
397 | - $end = ''; | |
398 | - // Check if there is more years | |
399 | - if (array_key_exists($key+1, $this->yearArray)) { | |
400 | - $end = '<end>' . intval($this->yearArray[$key+1]-1) . '-12-31</end>'; | |
401 | - } | |
402 | - $kmlFolder .= " <TimeSpan>" . PHP_EOL | |
403 | - . " <begin>$year-01-01</begin>$end" . PHP_EOL | |
404 | - . " </TimeSpan>" . PHP_EOL; | |
368 | + if ($this->timeType == 'series') { | |
369 | + $kmlFolder .= " <Style>" . PHP_EOL | |
370 | + . " <ListStyle>" . PHP_EOL | |
371 | + . " <listItemType>radioFolder</listItemType>" . PHP_EOL | |
372 | + . " </ListStyle>" . PHP_EOL | |
373 | + . " </Style>" . PHP_EOL; | |
374 | + } | |
405 | 375 | |
406 | - } | |
376 | + // Loop thorough all years | |
377 | + foreach ($this->yearArray as $key => $year) { | |
407 | 378 | |
408 | - // Loop thorough all features (values without features will not be shown) | |
409 | - foreach ($this->dataStore['features'] as $featureID => $feature) | |
410 | - { | |
411 | - $name = $feature['name']; | |
412 | - //if (!mb_detect_encoding($name,"UTF-8",true)) | |
413 | - //{$name = mb_convert_encoding($name,"UTF-8","ISO-8859-1");} | |
414 | - $name = "<![CDATA[ ".$name." ]]>"; | |
415 | - $value = ''; // use null? | |
416 | - $valueText = 'no data'; | |
417 | - $valueLabel = ''; | |
418 | - $kmlFeature = ''; | |
419 | - $altitude = 0; | |
420 | - $symbolSize = 0; | |
421 | - $colladaCount = 0; | |
422 | - //$kmlColour = self::rgb2bgr($this->noDataColour); | |
423 | - $kmlColour = ''; | |
424 | - | |
425 | - $longitude = $feature['lon']; | |
426 | - $latitude = $feature['lat']; | |
379 | + $kmlFeatures = ''; | |
427 | 380 | |
428 | - // Check if value exists for this feature | |
429 | - if (isset($this->indicator['values'][$year][$featureID])) { | |
430 | - // Extract value from dataStore | |
431 | - $value = $this->indicator['values'][$year][$featureID]; | |
432 | - $valueText = $valueLabel = number_format($value, 2, ',', '.'); | |
433 | - // Colour scale | |
434 | - if ($this->colourType == 'scale') { | |
435 | - if ($this->classification != 'unclassed') { | |
436 | - $class = self::getClass($value); | |
437 | - $kmlColour = self::rgb2bgr($this->classColours[$class]); | |
438 | - } | |
439 | - else { | |
440 | - $kmlColour = self::getColourValue($value, 'kml'); | |
441 | - } | |
442 | - } | |
443 | - // Single colour | |
444 | - //else { | |
445 | - // $kmlColour = self::rgb2bgr($this->colour); | |
446 | - //} | |
447 | - } | |
448 | - else { | |
449 | - $kmlColour = self::rgb2bgr($this->noDataColour); | |
450 | - } | |
381 | + if (($this->timeType == 'slider') OR ($year == $this->year)) $visibility = 1; | |
382 | + else $visibility = 0; | |
451 | 383 | |
384 | + $kmlFolder .= " <Folder>" . PHP_EOL | |
385 | + . " <name>$year</name>" . PHP_EOL | |
386 | + . " <visibility>$visibility</visibility>" . PHP_EOL; | |
452 | 387 | |
453 | - switch ($this->mapType) { | |
454 | - | |
455 | - case "choropleth": | |
456 | - | |
457 | - $kmlFeature = " <Style>" . PHP_EOL | |
458 | - . " <PolyStyle>" . PHP_EOL | |
459 | - . " <color>$kmlColour</color>" . PHP_EOL | |
460 | - . " </PolyStyle>" . PHP_EOL | |
461 | - . " </Style>" . PHP_EOL; | |
462 | - | |
463 | - $kmlFeature .= self::wkt2kml($feature['wkt'], 0); | |
464 | - break; | |
465 | - | |
466 | - case "prism": | |
467 | - $altitude = intval($value * ($this->maxHeight / $this->maxValue)); | |
468 | - | |
469 | - if ($this->colourType == 'scale') { | |
470 | - $kmlFeature = " <Style>" . PHP_EOL | |
471 | - . " <PolyStyle>" . PHP_EOL | |
472 | - . " <color>$kmlColour</color>" . PHP_EOL | |
473 | - . " </PolyStyle>" . PHP_EOL | |
474 | - . " </Style>" . PHP_EOL; | |
475 | - } | |
476 | - | |
477 | - $kmlFeature .= self::wkt2kml($feature['wkt'], $altitude) . PHP_EOL; | |
478 | - break; | |
479 | - | |
480 | - case "bar": | |
481 | - if ($value != null) { | |
482 | - $altitude = intval($value * ($this->maxHeight / $this->maxValue)); | |
483 | - | |
484 | - if ($this->colourType == 'scale') { | |
485 | - $kmlFeature = " <Style>" . PHP_EOL | |
486 | - . " <PolyStyle>" . PHP_EOL | |
487 | - . " <color>$kmlColour</color>" . PHP_EOL | |
488 | - . " </PolyStyle>" . PHP_EOL | |
489 | - . " </Style>" . PHP_EOL; | |
490 | - } | |
491 | - | |
492 | - $kmlFeature .= self::kmlSymbolCalculator($longitude, $latitude, $this->barSize, 15, $altitude); | |
493 | - } | |
494 | - break; | |
495 | - | |
496 | - case "symbol": | |
497 | - if ($value != null) { | |
498 | - | |
499 | - switch($this->symbolType){ | |
500 | - | |
501 | - case 'im$z = new ZipArchive(); | |
502 | -$z->open("test.zip", ZIPARCHIVE::CREATE); | |
503 | -folderToZip("storeThisFolder", $z); | |
504 | -$z->close();age': | |
505 | - //$symbolSize = round(self::getSymbolSize($value, $this->symbolShape),2); | |
506 | - $symbolSize = round($this->symbolMaxSize * sqrt($value/$this->maxValue), 2); | |
507 | - | |
508 | - $kmlFeature = " <Style>" . PHP_EOL | |
509 | - . " <IconStyle>" . PHP_EOL | |
510 | - . " <scale>$symbolSize</scale>" . PHP_EOL | |
511 | - . " <color>$kmlColour</color>" . PHP_EOL | |
512 | - . " </IconStyle>" . PHP_EOL | |
513 | - . " </Style>" . PHP_EOL; | |
514 | - | |
515 | - $kmlFeature .= " <LookAt>" . PHP_EOL | |
516 | - . " <longitude>$longitude</longitude>" . PHP_EOL | |
517 | - . " <latitude>$latitude</latitude>" . PHP_EOL | |
518 | - . " <altitude>0</altitude>" . PHP_EOL | |
519 | - . " <range>3200000</range>" . PHP_EOL | |
520 | - . " <altitudeMode>clampToGround</altitudeMode>" . PHP_EOL | |
521 | - . " </LookAt>" . PHP_EOL | |
522 | - . " <Point>" . PHP_EOL | |
523 | - . " <coordinates>$longitude,$latitude,0</coordinates>" . PHP_EOL | |
524 | - . " </Point>" . PHP_EOL; | |
525 | - break; | |
526 | - | |
527 | - case 'polygon': | |
528 | - //$symbolSize = intval(self::getSymbolSize($value, $this->symbolShape)); | |
529 | - $symbolSize = intval($this->symbolMaxSize * sqrt($value/$this->maxValue) * 70000); | |
530 | - if ($this->colourType == 'scale') { | |
531 | - $kmlFeature = " <Style>" . PHP_EOL | |
532 | - . " <PolyStyle>" . PHP_EOL | |
533 | - . " <color>$kmlColour</color>" . PHP_EOL | |
534 | - . " </PolyStyle>" . PHP_EOL | |
535 | - . " </Style>" . PHP_EOL; | |
536 | - } | |
537 | - $kmlFeature .= self::kmlSymbolCalculator($longitude, $latitude, $symbolSize, $this->symbolVertices, 0); | |
538 | - break; | |
539 | - | |
540 | - case 'collada': | |
541 | - | |
542 | - //$symbolSize = intval(self::getSymbolSize($value, $this->symbolShape)); | |
543 | - $symbolSize = intval($this->symbolMaxSize * pow($value/$this->maxValue, 1/3) * 20000); | |
544 | - | |
545 | - $class = ''; // Single colour | |
546 | - if ($this->colourType == 'scale') $class = self::getClass($value); | |
547 | - | |
548 | - $altitude = $symbolSize; // Used for label placement | |
549 | - $kmlFeature = " <Model>" . PHP_EOL | |
550 | - . " <altitudeMode>absolute</altitudeMode>" . PHP_EOL | |
551 | - . " <Location>" . PHP_EOL | |
552 | - . " <longitude>$longitude</longitude>" . PHP_EOL | |
553 | - . " <latitude>$latitude</latitude>" . PHP_EOL | |
554 | - . " <altitude>0</altitude>" . PHP_EOL | |
555 | - . " </Location>" . PHP_EOL | |
556 | - . " <Scale>" . PHP_EOL | |
557 | - . " <x>$symbolSize</x>" . PHP_EOL | |
558 | - . " <y>$symbolSize</y>" . PHP_EOL | |
559 | - . " <z>$symbolSize</z>" . PHP_EOL | |
560 | - . " </Scale>" . PHP_EOL | |
561 | - . " <Link>" . PHP_EOL | |
562 | - . " <href>files/object$class.dae</href>" . PHP_EOL | |
563 | - . " </Link>" . PHP_EOL | |
564 | - . " </Model>" . PHP_EOL; | |
565 | - } // switch | |
566 | - } // if | |
567 | - } // switch | |
388 | + if ($this->showLabel) { | |
389 | + $kmlLabels = " <Folder>" . PHP_EOL | |
390 | + . " <name>Show/hide labels</name>" . PHP_EOL | |
391 | + . " <visibility>$visibility</visibility>" . PHP_EOL | |
392 | + . " <Style>" . PHP_EOL | |
393 | + . " <ListStyle>" . PHP_EOL | |
394 | + . " <listItemType>checkHideChildren</listItemType>" . PHP_EOL | |
395 | + . " </ListStyle>" . PHP_EOL | |
396 | + . " </Style>" . PHP_EOL; | |
397 | + } | |
568 | 398 | |
399 | + // Add timespan if time animation | |
400 | + if ($this->timeType == 'slider') { | |
569 | 401 | |
570 | - $kmlFeatures .= " <Placemark>" . PHP_EOL | |
571 | - . " <name>$name</name>" . PHP_EOL | |
572 | - . " <visibility>$visibility</visibility>" . PHP_EOL | |
573 | - . " <Snippet>$valueText ($year)</Snippet>" . PHP_EOL | |
574 | - . " <styleUrl>#sharedStyle</styleUrl>" . PHP_EOL | |
575 | - . $kmlFeature | |
576 | - . " </Placemark>" . PHP_EOL; | |
577 | - | |
578 | - if ($this->showLabel) { | |
579 | - $label = ''; | |
580 | - if ($this->showNames) $label = $name; | |
581 | - if ($this->showValues) $label .= ' ' . $valueLabel; | |
582 | - $kmlLabels .= " <Placemark>" . PHP_EOL | |
583 | - . " <name>$label</name>" . PHP_EOL | |
584 | - . " <visibility>$visibility</visibility>" . PHP_EOL | |
585 | - . " <styleUrl>#labelPlacemark</styleUrl>" . PHP_EOL | |
586 | - . " <Point>" . PHP_EOL | |
587 | - . " <altitudeMode>absolute</altitudeMode>" . PHP_EOL | |
588 | - . " <coordinates>$longitude, $latitude, $altitude</coordinates>" . PHP_EOL | |
589 | - . " </Point>" . PHP_EOL | |
590 | - . " </Placemark>" . PHP_EOL; | |
591 | - } | |
402 | + $end = ''; | |
403 | + // Check if there is more years | |
404 | + if (array_key_exists($key+1, $this->yearArray)) { | |
405 | + $end = '<end>' . intval($this->yearArray[$key+1]-1) . '-12-31</end>'; | |
406 | + } | |
407 | + $kmlFolder .= " <TimeSpan>" . PHP_EOL | |
408 | + . " <begin>$year-01-01</begin>$end" . PHP_EOL | |
409 | + . " </TimeSpan>" . PHP_EOL; | |
592 | 410 | |
593 | - } // foreach features | |
411 | + } | |
594 | 412 | |
595 | - if ($this->showLabel) { | |
596 | - $kmlLabels .= " </Folder>"; | |
597 | - $kmlFolder .= $kmlLabels; | |
598 | - } | |
413 | + // Loop thorough all features (values without features will not be shown) | |
414 | + foreach ($this->dataStore['features'] as $featureID => $feature) | |
415 | + { | |
416 | + $name = $feature['name']; | |
417 | + //if (!mb_detect_encoding($name,"UTF-8",true)) | |
418 | + //{$name = mb_convert_encoding($name,"UTF-8","ISO-8859-1");} | |
419 | + $name = "<![CDATA[ ".$name." ]]>"; | |
420 | + $value = ''; // use null? | |
421 | + $valueText = 'no data'; | |
422 | + $valueLabel = ''; | |
423 | + $kmlFeature = ''; | |
424 | + $altitude = 0; | |
425 | + $symbolSize = 0; | |
426 | + $colladaCount = 0; | |
427 | + //$kmlColour = self::rgb2bgr($this->noDataColour); | |
428 | + $kmlColour = ''; | |
429 | + | |
430 | + $longitude = $feature['lon']; | |
431 | + $latitude = $feature['lat']; | |
599 | 432 | |
600 | - $kmlFolder .= $kmlFeatures; | |
433 | + // Check if value exists for this feature | |
434 | + if (isset($this->indicator['values'][$year][$featureID])) { | |
435 | + // Extract value from dataStore | |
436 | + $value = $this->indicator['values'][$year][$featureID]; | |
437 | + $valueText = $valueLabel = number_format($value, 2, ',', '.'); | |
438 | + // Colour scale | |
439 | + if ($this->colourType == 'scale') { | |
440 | + if ($this->classification != 'unclassed') { | |
441 | + $class = self::getClass($value); | |
442 | + $kmlColour = self::rgb2bgr($this->classColours[$class]); | |
443 | + } | |
444 | + else { | |
445 | + $kmlColour = self::getColourValue($value, 'kml'); | |
446 | + } | |
447 | + } | |
448 | + // Single colour | |
449 | + //else { | |
450 | + // $kmlColour = self::rgb2bgr($this->colour); | |
451 | + //} | |
452 | + } | |
453 | + else { | |
454 | + $kmlColour = self::rgb2bgr($this->noDataColour); | |
455 | + } | |
601 | 456 | |
602 | - $kmlFolder .= " </Folder>" . PHP_EOL; | |
603 | - } // foreach years | |
604 | 457 | |
458 | + switch ($this->mapType) { | |
605 | 459 | |
460 | + case "choropleth": | |
606 | 461 | |
607 | - // Close Years folder | |
608 | - $kmlFolder .= " </Folder>" . PHP_EOL; | |
462 | + $kmlFeature = " <Style>" . PHP_EOL | |
463 | + . " <PolyStyle>" . PHP_EOL | |
464 | + . " <color>$kmlColour</color>" . PHP_EOL | |
465 | + . " </PolyStyle>" . PHP_EOL | |
466 | + . " </Style>" . PHP_EOL; | |
609 | 467 | |
610 | - // Create logo with title and source and add to archieve | |
611 | - if ($this->showTitle) { | |
612 | - $imgBrand = self::mapTitleImage(); | |
613 | - $zip->addFile($imgBrand, 'files/brand.png'); | |
614 | - } | |
615 | - else { | |
616 | - $zip->addFile($this->logo, 'files/brand.png'); | |
617 | - } | |
618 | - // Add title | |
619 | - $kml .= " <ScreenOverlay>" . PHP_EOL | |
620 | - . " <name>Titulo</name>" . PHP_EOL | |
621 | - . " <Icon>" . PHP_EOL | |
622 | - . " <href>".$url."/".basename($imgBrand)."</href>" . PHP_EOL | |
623 | - . " </Icon>" . PHP_EOL | |
624 | - . " <overlayXY x='0.01' y='0.99' xunits='fraction' yunits='fraction'/>" . PHP_EOL | |
625 | - . " <screenXY x='0.01' y='0.99' xunits='fraction' yunits='fraction'/>" . PHP_EOL | |
626 | - . " <size x='-1' y='-1' xunits='pixels' yunits='pixels'/>" . PHP_EOL | |
627 | - . " </ScreenOverlay>" . PHP_EOL; | |
628 | - | |
629 | - // Add legend | |
630 | - if ($this->showLegend && $this->colourType == 'scale') { | |
631 | - $kml .= " <ScreenOverlay>" . PHP_EOL | |
632 | - . " <name>Legenda</name>" . PHP_EOL | |
633 | - . " <Icon>" . PHP_EOL | |
634 | - . " <href>".$url."/".basename($imgLegenda)."</href>" . PHP_EOL | |
635 | - . " </Icon>" . PHP_EOL | |
636 | - . " <overlayXY x='0.01' y='0.14' xunits='fraction' yunits='fraction'/>" . PHP_EOL | |
637 | - . " <screenXY x='0.01' y='0.14' xunits='fraction' yunits='fraction'/>" . PHP_EOL | |
638 | - . " <size x='-1' y='-1' xunits='pixels' yunits='pixels'/>" . PHP_EOL | |
639 | - . " </ScreenOverlay>" . PHP_EOL; | |
640 | - } | |
468 | + $kmlFeature .= self::wkt2kml($feature['wkt'], 0); | |
469 | + break; | |
641 | 470 | |
642 | - $kml .= $kmlStyles . $kmlFolder; | |
471 | + case "prism": | |
472 | + $altitude = intval($value * ($this->maxHeight / $this->maxValue)); | |
473 | + | |
474 | + if ($this->colourType == 'scale') { | |
475 | + $kmlFeature = " <Style>" . PHP_EOL | |
476 | + . " <PolyStyle>" . PHP_EOL | |
477 | + . " <color>$kmlColour</color>" . PHP_EOL | |
478 | + . " </PolyStyle>" . PHP_EOL | |
479 | + . " </Style>" . PHP_EOL; | |
480 | + } | |
643 | 481 | |
644 | - // Add basemap | |
645 | - //if (isset($paramArray['basemap'])) { | |
646 | - // $kml .= "<NetworkLink> | |
647 | - // <name>Basemap</name> | |
648 | - // <Link><href>$basemap</href></Link> | |
649 | - // </NetworkLink>" . PHP_EOL; | |
650 | - //} | |
482 | + $kmlFeature .= self::wkt2kml($feature['wkt'], $altitude) . PHP_EOL; | |
483 | + break; | |
651 | 484 | |
652 | - $kml .= " </Document>" . PHP_EOL | |
653 | - . "</kml>" . PHP_EOL; | |
485 | + case "bar": | |
486 | + if ($value != null) { | |
487 | + $altitude = intval($value * ($this->maxHeight / $this->maxValue)); | |
488 | + | |
489 | + if ($this->colourType == 'scale') { | |
490 | + $kmlFeature = " <Style>" . PHP_EOL | |
491 | + . " <PolyStyle>" . PHP_EOL | |
492 | + . " <color>$kmlColour</color>" . PHP_EOL | |
493 | + . " </PolyStyle>" . PHP_EOL | |
494 | + . " </Style>" . PHP_EOL; | |
495 | + } | |
654 | 496 | |
497 | + $kmlFeature .= self::kmlSymbolCalculator($longitude, $latitude, $this->barSize, 15, $altitude); | |
498 | + } | |
499 | + break; | |
655 | 500 | |
656 | -// Open archive if collada | |
501 | + case "symbol": | |
502 | + if ($value != null) { | |
657 | 503 | |
504 | + switch($this->symbolType){ | |
658 | 505 | |
659 | - // Add kml to archieve | |
660 | - //$zip->addFromString("doc.kml", $kml); | |
661 | - $zip->addFile($kml, 'doc.kml');//edmar | |
506 | + case 'im$z = new ZipArchive(); | |
507 | + $z->open("test.zip", ZIPARCHIVE::CREATE); | |
508 | + folderToZip("storeThisFolder", $z); | |
509 | + $z->close();age': | |
510 | + //$symbolSize = round(self::getSymbolSize($value, $this->symbolShape),2); | |
511 | + $symbolSize = round($this->symbolMaxSize * sqrt($value/$this->maxValue), 2); | |
512 | + | |
513 | + $kmlFeature = " <Style>" . PHP_EOL | |
514 | + . " <IconStyle>" . PHP_EOL | |
515 | + . " <scale>$symbolSize</scale>" . PHP_EOL | |
516 | + . " <color>$kmlColour</color>" . PHP_EOL | |
517 | + . " </IconStyle>" . PHP_EOL | |
518 | + . " </Style>" . PHP_EOL; | |
519 | + | |
520 | + $kmlFeature .= " <LookAt>" . PHP_EOL | |
521 | + . " <longitude>$longitude</longitude>" . PHP_EOL | |
522 | + . " <latitude>$latitude</latitude>" . PHP_EOL | |
523 | + . " <altitude>0</altitude>" . PHP_EOL | |
524 | + . " <range>3200000</range>" . PHP_EOL | |
525 | + . " <altitudeMode>clampToGround</altitudeMode>" . PHP_EOL | |
526 | + . " </LookAt>" . PHP_EOL | |
527 | + . " <Point>" . PHP_EOL | |
528 | + . " <coordinates>$longitude,$latitude,0</coordinates>" . PHP_EOL | |
529 | + . " </Point>" . PHP_EOL; | |
530 | + break; | |
531 | + | |
532 | + case 'polygon': | |
533 | + //$symbolSize = intval(self::getSymbolSize($value, $this->symbolShape)); | |
534 | + $symbolSize = intval($this->symbolMaxSize * sqrt($value/$this->maxValue) * 70000); | |
535 | + if ($this->colourType == 'scale') { | |
536 | + $kmlFeature = " <Style>" . PHP_EOL | |
537 | + . " <PolyStyle>" . PHP_EOL | |
538 | + . " <color>$kmlColour</color>" . PHP_EOL | |
539 | + . " </PolyStyle>" . PHP_EOL | |
540 | + . " </Style>" . PHP_EOL; | |
541 | + } | |
542 | + $kmlFeature .= self::kmlSymbolCalculator($longitude, $latitude, $symbolSize, $this->symbolVertices, 0); | |
543 | + break; | |
544 | + | |
545 | + case 'collada': | |
546 | + | |
547 | + //$symbolSize = intval(self::getSymbolSize($value, $this->symbolShape)); | |
548 | + $symbolSize = intval($this->symbolMaxSize * pow($value/$this->maxValue, 1/3) * 20000); | |
549 | + | |
550 | + $class = ''; // Single colour | |
551 | + if ($this->colourType == 'scale') $class = self::getClass($value); | |
552 | + | |
553 | + $altitude = $symbolSize; // Used for label placement | |
554 | + $kmlFeature = " <Model>" . PHP_EOL | |
555 | + . " <altitudeMode>absolute</altitudeMode>" . PHP_EOL | |
556 | + . " <Location>" . PHP_EOL | |
557 | + . " <longitude>$longitude</longitude>" . PHP_EOL | |
558 | + . " <latitude>$latitude</latitude>" . PHP_EOL | |
559 | + . " <altitude>0</altitude>" . PHP_EOL | |
560 | + . " </Location>" . PHP_EOL | |
561 | + . " <Scale>" . PHP_EOL | |
562 | + . " <x>$symbolSize</x>" . PHP_EOL | |
563 | + . " <y>$symbolSize</y>" . PHP_EOL | |
564 | + . " <z>$symbolSize</z>" . PHP_EOL | |
565 | + . " </Scale>" . PHP_EOL | |
566 | + . " <Link>" . PHP_EOL | |
567 | + . " <href>files/object$class.dae</href>" . PHP_EOL | |
568 | + . " </Link>" . PHP_EOL | |
569 | + . " </Model>" . PHP_EOL; | |
570 | + } // switch | |
571 | + } // if | |
572 | + } // switch | |
573 | + | |
574 | + | |
575 | + $kmlFeatures .= " <Placemark>" . PHP_EOL | |
576 | + . " <name>$name</name>" . PHP_EOL | |
577 | + . " <visibility>$visibility</visibility>" . PHP_EOL | |
578 | + . " <Snippet>$valueText ($year)</Snippet>" . PHP_EOL | |
579 | + . " <styleUrl>#sharedStyle</styleUrl>" . PHP_EOL | |
580 | + . $kmlFeature | |
581 | + . " </Placemark>" . PHP_EOL; | |
582 | + | |
583 | + if ($this->showLabel) { | |
584 | + $label = ''; | |
585 | + if ($this->showNames) $label = $name; | |
586 | + if ($this->showValues) $label .= ' ' . $valueLabel; | |
587 | + $kmlLabels .= " <Placemark>" . PHP_EOL | |
588 | + . " <name>$label</name>" . PHP_EOL | |
589 | + . " <visibility>$visibility</visibility>" . PHP_EOL | |
590 | + . " <styleUrl>#labelPlacemark</styleUrl>" . PHP_EOL | |
591 | + . " <Point>" . PHP_EOL | |
592 | + . " <altitudeMode>absolute</altitudeMode>" . PHP_EOL | |
593 | + . " <coordinates>$longitude, $latitude, $altitude</coordinates>" . PHP_EOL | |
594 | + . " </Point>" . PHP_EOL | |
595 | + . " </Placemark>" . PHP_EOL; | |
596 | + } | |
597 | + | |
598 | + } // foreach features | |
662 | 599 | |
600 | + if ($this->showLabel) { | |
601 | + $kmlLabels .= " </Folder>"; | |
602 | + $kmlFolder .= $kmlLabels; | |
603 | + } | |
663 | 604 | |
664 | - //$zip->close(); | |
665 | - $zip->output($file);//edmar | |
666 | - if($download){ | |
667 | - ob_end_clean(); | |
668 | - //header('Content-Type: application/vnd.google-earth.kml+xml'); | |
669 | - header('Content-Disposition: attachment; filename='.basename($file)); | |
605 | + $kmlFolder .= $kmlFeatures; | |
606 | + | |
607 | + $kmlFolder .= " </Folder>" . PHP_EOL; | |
608 | + } // foreach years | |
609 | + | |
610 | + | |
611 | + | |
612 | + // Close Years folder | |
613 | + $kmlFolder .= " </Folder>" . PHP_EOL; | |
614 | + | |
615 | + // Create logo with title and source and add to archieve | |
616 | + if ($this->showTitle) { | |
617 | + $imgBrand = self::mapTitleImage(); | |
618 | + $zip->addFile($imgBrand, 'files/brand.png'); | |
619 | + } | |
620 | + else { | |
621 | + $zip->addFile($this->logo, 'files/brand.png'); | |
622 | + } | |
623 | + // Add title | |
624 | + $kml .= " <ScreenOverlay>" . PHP_EOL | |
625 | + . " <name>Titulo</name>" . PHP_EOL | |
626 | + . " <Icon>" . PHP_EOL | |
627 | + . " <href>".$url."/".basename($imgBrand)."</href>" . PHP_EOL | |
628 | + . " </Icon>" . PHP_EOL | |
629 | + . " <overlayXY x='0.01' y='0.99' xunits='fraction' yunits='fraction'/>" . PHP_EOL | |
630 | + . " <screenXY x='0.01' y='0.99' xunits='fraction' yunits='fraction'/>" . PHP_EOL | |
631 | + . " <size x='-1' y='-1' xunits='pixels' yunits='pixels'/>" . PHP_EOL | |
632 | + . " </ScreenOverlay>" . PHP_EOL; | |
633 | + | |
634 | + // Add legend | |
635 | + if ($this->showLegend && $this->colourType == 'scale') { | |
636 | + $kml .= " <ScreenOverlay>" . PHP_EOL | |
637 | + . " <name>Legenda</name>" . PHP_EOL | |
638 | + . " <Icon>" . PHP_EOL | |
639 | + . " <href>".$url."/".basename($imgLegenda)."</href>" . PHP_EOL | |
640 | + . " </Icon>" . PHP_EOL | |
641 | + . " <overlayXY x='0.01' y='0.14' xunits='fraction' yunits='fraction'/>" . PHP_EOL | |
642 | + . " <screenXY x='0.01' y='0.14' xunits='fraction' yunits='fraction'/>" . PHP_EOL | |
643 | + . " <size x='-1' y='-1' xunits='pixels' yunits='pixels'/>" . PHP_EOL | |
644 | + . " </ScreenOverlay>" . PHP_EOL; | |
645 | + } | |
646 | + | |
647 | + $kml .= $kmlStyles . $kmlFolder; | |
648 | + $kml .= " </Document>" . PHP_EOL | |
649 | + . "</kml>" . PHP_EOL; | |
650 | + | |
651 | + // Add kml to archieve | |
652 | + //$zip->addFromString("doc.kml", $kml); | |
653 | + $zip->addFile($kml, 'doc.kml');//edmar | |
654 | + $zip->output($file);//edmar | |
655 | + } | |
656 | + | |
657 | + if($download){ | |
658 | + ob_end_clean(); | |
659 | + //header('Content-Type: application/vnd.google-earth.kml+xml'); | |
660 | + header('Content-Disposition: attachment; filename='.basename($file)); | |
670 | 661 | print $file; |
671 | 662 | exit; |
672 | - } | |
673 | - else{ | |
674 | - return $url.basename($file); | |
675 | - } | |
676 | 663 | } |
664 | + else{ | |
665 | + return $url.basename($file); | |
666 | + } | |
667 | + } | |
677 | 668 | |
678 | 669 | |
679 | 670 | |
680 | 671 | |
681 | - // | |
682 | - // Function | |
683 | - // @access protected | |
684 | - // | |
685 | - // This function is based on code developed by "TJ": | |
686 | - // http://bbs.keyhole.com/ubb/showflat.php?Cat=&Board=SupportKML&Number=166379&Searchpage=1&Main=166379&Words=calculate+TJ1&topic=&Search=true | |
687 | - // | |
688 | - function kmlSymbolCalculator( $longitude, $latitude, $distance, $points, $altitude ) | |
689 | - { | |
672 | + // | |
673 | + // Function | |
674 | + // @access protected | |
675 | + // | |
676 | + // This function is based on code developed by "TJ": | |
677 | + // http://bbs.keyhole.com/ubb/showflat.php?Cat=&Board=SupportKML&Number=166379&Searchpage=1&Main=166379&Words=calculate+TJ1&topic=&Search=true | |
678 | + // | |
679 | + function kmlSymbolCalculator( $longitude, $latitude, $distance, $points, $altitude ) | |
680 | + { | |
690 | 681 | $EARTH_RADIUS_EQUATOR = 6378140.0; |
691 | 682 | $RADIAN = 180 / pi(); |
692 | 683 | |
... | ... | @@ -698,14 +689,14 @@ $z->close();age': |
698 | 689 | $f = 1/298.257; |
699 | 690 | $e = 0.08181922; |
700 | 691 | |
701 | - $kml = ' <Polygon>' . PHP_EOL | |
702 | - . ' <outerBoundaryIs>' . PHP_EOL | |
703 | - . ' <LinearRing>' . PHP_EOL | |
704 | - . ' <coordinates>'; | |
692 | + $kml = ' <Polygon>' . PHP_EOL | |
693 | + . ' <outerBoundaryIs>' . PHP_EOL | |
694 | + . ' <LinearRing>' . PHP_EOL | |
695 | + . ' <coordinates>'; | |
705 | 696 | |
706 | 697 | //for ( $bearing = 0; $bearing <= 360; $bearing += 360/$points) { |
707 | 698 | // Changed start bearing beacuse of square orientation |
708 | - for ( $bearing = 45; $bearing <= 405; $bearing += 360/$points) { | |
699 | + for ( $bearing = 45; $bearing <= 405; $bearing += 360/$points) { | |
709 | 700 | |
710 | 701 | $b = $bearing / $RADIAN; |
711 | 702 | |
... | ... | @@ -722,311 +713,311 @@ $z->close();age': |
722 | 713 | if ($altitude) $kml .= ",".$altitude; |
723 | 714 | } |
724 | 715 | |
725 | - $kml .= ' </coordinates>' . PHP_EOL | |
726 | - . ' </LinearRing>' . PHP_EOL | |
727 | - . ' </outerBoundaryIs>' . PHP_EOL; | |
728 | - | |
729 | - if ($altitude) | |
730 | - { | |
731 | - $kml .= ' <extrude>1</extrude>' . PHP_EOL | |
732 | - . ' <altitudeMode>absolute</altitudeMode>' . PHP_EOL; | |
733 | - } | |
734 | - | |
735 | - $kml .= ' </Polygon>' . PHP_EOL; | |
736 | - | |
737 | - return $kml; | |
738 | - } | |
739 | - | |
716 | + $kml .= ' </coordinates>' . PHP_EOL | |
717 | + . ' </LinearRing>' . PHP_EOL | |
718 | + . ' </outerBoundaryIs>' . PHP_EOL; | |
740 | 719 | |
741 | - // | |
742 | - // Function | |
743 | - // @access protected | |
744 | - // | |
745 | - public function wkt2kml($wkt, $altitude) | |
720 | + if ($altitude) | |
746 | 721 | { |
747 | - | |
748 | - // Change coordinate format | |
749 | - $wkt = preg_replace("/([0-9\.\-]+) ([0-9\.\-]+),*/e", "round('$1',2).','.round('$2',2).',$altitude '", $wkt); | |
750 | - | |
751 | - $wkt = substr($wkt, 15); // Remove 'MULTIPOLYGON(((' at the beginning | |
752 | - $wkt = substr($wkt, 0, -3); // Remove ')))' at the end | |
753 | - $polygons = explode(')),((', $wkt); // Find all polygons | |
754 | - $kml = ' <MultiGeometry>' . PHP_EOL; | |
755 | - | |
756 | - foreach ($polygons as $polygon) { | |
757 | - $kml .= ' <Polygon>' . PHP_EOL; | |
758 | - $boundary = explode('),(', $polygon); // Find all polygon boundaries | |
759 | - $kml .= ' <outerBoundaryIs>' . PHP_EOL | |
760 | - . ' <LinearRing>' . PHP_EOL | |
761 | - . ' <coordinates>' . self::kmlReverseCoordinates($boundary[0]) . ' </coordinates>' . PHP_EOL | |
762 | - . ' </LinearRing>' . PHP_EOL | |
763 | - . ' </outerBoundaryIs>' . PHP_EOL; | |
764 | - | |
765 | - for ($i=1; $i < count($boundary); $i++) { // If inner boundaries | |
766 | - $kml .= ' <innerBoundaryIs>' . PHP_EOL | |
767 | - . ' <LinearRing>' . PHP_EOL | |
768 | - . ' <coordinates>' . self::kmlReverseCoordinates($boundary[$i]) . ' </coordinates>' . PHP_EOL | |
769 | - . ' </LinearRing>' . PHP_EOL | |
770 | - . ' </innerBoundaryIs>' . PHP_EOL; | |
771 | - } | |
772 | - $kml .= ' </Polygon>' . PHP_EOL; | |
773 | - } | |
774 | - $kml .= ' </MultiGeometry>' . PHP_EOL; | |
775 | - | |
776 | - if ($altitude) | |
777 | - { | |
778 | - $kml = str_replace('<Polygon>', '<Polygon><extrude>1</extrude><tessellate>1</tessellate><altitudeMode>absolute</altitudeMode>', $kml); | |
779 | - } | |
780 | - | |
781 | - return $kml; | |
722 | + $kml .= ' <extrude>1</extrude>' . PHP_EOL | |
723 | + . ' <altitudeMode>absolute</altitudeMode>' . PHP_EOL; | |
782 | 724 | } |
783 | 725 | |
784 | - // | |
785 | - // Function | |
786 | - // @access protected | |
787 | - // | |
788 | - function kmlReverseCoordinates($coordinates) | |
789 | - { | |
790 | - $coordinates = explode(" ", $coordinates); | |
791 | - $coordinates = array_reverse($coordinates); | |
792 | - $coordinates = implode(" ", $coordinates); | |
793 | - return $coordinates; | |
794 | - } | |
726 | + $kml .= ' </Polygon>' . PHP_EOL; | |
795 | 727 | |
796 | - // Generates KML colour | |
797 | - function rgb2bgr($rgb) | |
798 | - { | |
799 | - $colour = dechex($this->kmlAlphaColour) . substr($rgb, -2) . substr($rgb, 2, 2) . substr($rgb, 0, 2); | |
800 | - return $colour; | |
728 | + return $kml; | |
729 | + } | |
730 | + | |
731 | + | |
732 | + // | |
733 | + // Function | |
734 | + // @access protected | |
735 | + // | |
736 | + public function wkt2kml($wkt, $altitude) | |
737 | + { | |
738 | + | |
739 | + // Change coordinate format | |
740 | + $wkt = preg_replace("/([0-9\.\-]+) ([0-9\.\-]+),*/e", "round('$1',2).','.round('$2',2).',$altitude '", $wkt); | |
741 | + | |
742 | + $wkt = substr($wkt, 15); // Remove 'MULTIPOLYGON(((' at the beginning | |
743 | + $wkt = substr($wkt, 0, -3); // Remove ')))' at the end | |
744 | + $polygons = explode(')),((', $wkt); // Find all polygons | |
745 | + $kml = ' <MultiGeometry>' . PHP_EOL; | |
746 | + | |
747 | + foreach ($polygons as $polygon) { | |
748 | + $kml .= ' <Polygon>' . PHP_EOL; | |
749 | + $boundary = explode('),(', $polygon); // Find all polygon boundaries | |
750 | + $kml .= ' <outerBoundaryIs>' . PHP_EOL | |
751 | + . ' <LinearRing>' . PHP_EOL | |
752 | + . ' <coordinates>' . self::kmlReverseCoordinates($boundary[0]) . ' </coordinates>' . PHP_EOL | |
753 | + . ' </LinearRing>' . PHP_EOL | |
754 | + . ' </outerBoundaryIs>' . PHP_EOL; | |
755 | + | |
756 | + for ($i=1; $i < count($boundary); $i++) { // If inner boundaries | |
757 | + $kml .= ' <innerBoundaryIs>' . PHP_EOL | |
758 | + . ' <LinearRing>' . PHP_EOL | |
759 | + . ' <coordinates>' . self::kmlReverseCoordinates($boundary[$i]) . ' </coordinates>' . PHP_EOL | |
760 | + . ' </LinearRing>' . PHP_EOL | |
761 | + . ' </innerBoundaryIs>' . PHP_EOL; | |
762 | + } | |
763 | + $kml .= ' </Polygon>' . PHP_EOL; | |
801 | 764 | } |
765 | + $kml .= ' </MultiGeometry>' . PHP_EOL; | |
802 | 766 | |
803 | - // Generates COLLADA colour | |
804 | - function rgb2collada($rgb) | |
767 | + if ($altitude) | |
805 | 768 | { |
806 | - $red = number_format(hexdec(substr($rgb, 0, 2)) / 255, 6); | |
807 | - $green = number_format(hexdec(substr($rgb, 2, 2)) / 255, 6); | |
808 | - $blue = number_format(hexdec(substr($rgb, -2)) / 255, 6); | |
809 | - | |
810 | - $colour = "$red $green $blue 1"; // Transparency not supported in GE? | |
811 | - return $colour; | |
769 | + $kml = str_replace('<Polygon>', '<Polygon><extrude>1</extrude><tessellate>1</tessellate><altitudeMode>absolute</altitudeMode>', $kml); | |
812 | 770 | } |
813 | 771 | |
814 | - | |
815 | - // Generates a colour scale | |
816 | - function makeColourScale(){ | |
817 | - | |
818 | - // Extract red/green/blue decimal values from hexadecimal colours | |
819 | - $this->startColourRGB = array(hexdec(substr($this->startColour, 0, 2)), | |
820 | - hexdec(substr($this->startColour, 2, 2)), | |
821 | - hexdec(substr($this->startColour, 4, 2))); | |
822 | - | |
823 | - $this->endColourRGB = array(hexdec(substr($this->endColour, 0, 2)), | |
824 | - hexdec(substr($this->endColour, 2, 2)), | |
825 | - hexdec(substr($this->endColour, 4, 2))); | |
826 | - | |
827 | - // Calculate the change value for red/green/blue | |
828 | - $this->deltaColourRGB = array($this->endColourRGB[0] - $this->startColourRGB[0], | |
829 | - $this->endColourRGB[1] - $this->startColourRGB[1], | |
830 | - $this->endColourRGB[2] - $this->startColourRGB[2]); | |
772 | + return $kml; | |
773 | + } | |
774 | + | |
775 | + // | |
776 | + // Function | |
777 | + // @access protected | |
778 | + // | |
779 | + function kmlReverseCoordinates($coordinates) | |
780 | + { | |
781 | + $coordinates = explode(" ", $coordinates); | |
782 | + $coordinates = array_reverse($coordinates); | |
783 | + $coordinates = implode(" ", $coordinates); | |
784 | + return $coordinates; | |
785 | + } | |
786 | + | |
787 | + // Generates KML colour | |
788 | + function rgb2bgr($rgb) | |
789 | + { | |
790 | + $colour = dechex($this->kmlAlphaColour) . substr($rgb, -2) . substr($rgb, 2, 2) . substr($rgb, 0, 2); | |
791 | + return $colour; | |
792 | + } | |
793 | + | |
794 | + // Generates COLLADA colour | |
795 | + function rgb2collada($rgb) | |
796 | + { | |
797 | + $red = number_format(hexdec(substr($rgb, 0, 2)) / 255, 6); | |
798 | + $green = number_format(hexdec(substr($rgb, 2, 2)) / 255, 6); | |
799 | + $blue = number_format(hexdec(substr($rgb, -2)) / 255, 6); | |
800 | + | |
801 | + $colour = "$red $green $blue 1"; // Transparency not supported in GE? | |
802 | + return $colour; | |
803 | + } | |
804 | + | |
805 | + | |
806 | + // Generates a colour scale | |
807 | + function makeColourScale(){ | |
808 | + | |
809 | + // Extract red/green/blue decimal values from hexadecimal colours | |
810 | + $this->startColourRGB = array(hexdec(substr($this->startColour, 0, 2)), | |
811 | + hexdec(substr($this->startColour, 2, 2)), | |
812 | + hexdec(substr($this->startColour, 4, 2))); | |
813 | + | |
814 | + $this->endColourRGB = array(hexdec(substr($this->endColour, 0, 2)), | |
815 | + hexdec(substr($this->endColour, 2, 2)), | |
816 | + hexdec(substr($this->endColour, 4, 2))); | |
817 | + | |
818 | + // Calculate the change value for red/green/blue | |
819 | + $this->deltaColourRGB = array($this->endColourRGB[0] - $this->startColourRGB[0], | |
820 | + $this->endColourRGB[1] - $this->startColourRGB[1], | |
821 | + $this->endColourRGB[2] - $this->startColourRGB[2]); | |
822 | + } | |
823 | + | |
824 | + function getColourValue($value, $format){ | |
825 | + $red = $this->startColourRGB[0] + ($this->deltaColourRGB[0] / ($this->maxValue - $this->minValue)) * ($value - $this->minValue); | |
826 | + $green = $this->startColourRGB[1] + ($this->deltaColourRGB[1] / ($this->maxValue - $this->minValue)) * ($value - $this->minValue); | |
827 | + $blue = $this->startColourRGB[2] + ($this->deltaColourRGB[2] / ($this->maxValue - $this->minValue)) * ($value - $this->minValue); | |
828 | + | |
829 | + if ($format == 'kml') { | |
830 | + $colour = sprintf('%02X%02X%02X%02X', $this->kmlAlphaColour, $blue, $green, $red); | |
831 | 831 | } |
832 | - | |
833 | - function getColourValue($value, $format){ | |
834 | - $red = $this->startColourRGB[0] + ($this->deltaColourRGB[0] / ($this->maxValue - $this->minValue)) * ($value - $this->minValue); | |
835 | - $green = $this->startColourRGB[1] + ($this->deltaColourRGB[1] / ($this->maxValue - $this->minValue)) * ($value - $this->minValue); | |
836 | - $blue = $this->startColourRGB[2] + ($this->deltaColourRGB[2] / ($this->maxValue - $this->minValue)) * ($value - $this->minValue); | |
837 | - | |
838 | - if ($format == 'kml') { | |
839 | - $colour = sprintf('%02X%02X%02X%02X', $this->kmlAlphaColour, $blue, $green, $red); | |
840 | - } | |
841 | - else { // Hex colour | |
842 | - $colour = sprintf('%02X%02X%02X', $red, $green, $blue); | |
843 | - } | |
844 | - | |
845 | - return $colour; | |
832 | + else { // Hex colour | |
833 | + $colour = sprintf('%02X%02X%02X', $red, $green, $blue); | |
846 | 834 | } |
847 | 835 | |
848 | - function getColourLegend(){ | |
849 | - $height = $this->colourLegendHeight; | |
850 | - $width = $this->colourLegendWidth; | |
836 | + return $colour; | |
837 | + } | |
851 | 838 | |
852 | - // Create colour scale canvas | |
853 | - $legend = imagecreatetruecolor(150, $height+6); | |
839 | + function getColourLegend(){ | |
840 | + $height = $this->colourLegendHeight; | |
841 | + $width = $this->colourLegendWidth; | |
854 | 842 | |
855 | - // Allocate colours | |
856 | - $bgColour = imagecolorallocatealpha($legend, 255, 255, 255, 127); | |
857 | - $white = $fontColour = imagecolorallocate($legend, 255, 255, 255); | |
858 | - imageSaveAlpha($legend, true); | |
843 | + // Create colour scale canvas | |
844 | + $legend = imagecreatetruecolor(150, $height+6); | |
859 | 845 | |
860 | - // Set background colour | |
861 | - imagefill($legend, 0, 0, $bgColour); | |
846 | + // Allocate colours | |
847 | + $bgColour = imagecolorallocatealpha($legend, 255, 255, 255, 127); | |
848 | + $white = $fontColour = imagecolorallocate($legend, 255, 255, 255); | |
849 | + imageSaveAlpha($legend, true); | |
862 | 850 | |
863 | - switch ($this->classification) { | |
851 | + // Set background colour | |
852 | + imagefill($legend, 0, 0, $bgColour); | |
864 | 853 | |
865 | - case 'unclassed': | |
866 | - for ($i = 0; $i <= $height; $i++) { | |
867 | - $red = intval($this->endColourRGB[0] - (($this->deltaColourRGB[0] / $height) * $i)); | |
868 | - $green = intval($this->endColourRGB[1] - (($this->deltaColourRGB[1] / $height) * $i)); | |
869 | - $blue = intval($this->endColourRGB[2] - (($this->deltaColourRGB[2] / $height) * $i)); | |
870 | - $myColourScale[] = imagecolorallocate($legend, $red, $green, $blue); | |
871 | - } | |
872 | - // Draw colour scale | |
873 | - imagesetstyle($legend, $myColourScale); | |
854 | + switch ($this->classification) { | |
874 | 855 | |
875 | - for ($i = 0; $i < $width; $i++) { | |
876 | - imageline($legend, 21+$i, 2, 21+$i, $height+2, IMG_COLOR_STYLED); | |
877 | - } | |
856 | + case 'unclassed': | |
857 | + for ($i = 0; $i <= $height; $i++) { | |
858 | + $red = intval($this->endColourRGB[0] - (($this->deltaColourRGB[0] / $height) * $i)); | |
859 | + $green = intval($this->endColourRGB[1] - (($this->deltaColourRGB[1] / $height) * $i)); | |
860 | + $blue = intval($this->endColourRGB[2] - (($this->deltaColourRGB[2] / $height) * $i)); | |
861 | + $myColourScale[] = imagecolorallocate($legend, $red, $green, $blue); | |
862 | + } | |
863 | + // Draw colour scale | |
864 | + imagesetstyle($legend, $myColourScale); | |
878 | 865 | |
879 | - // print min and max values | |
880 | - //number_format(($s / $ocorrencias),2,",",".") | |
881 | - //imagestring($legend, 3, $width+29, $height-6, number_format($this->minValue, $this->precision), $fontColour); | |
882 | - //imagestring($legend, 3, $width+29, -3, number_format($this->maxValue, $this->precision), $fontColour); | |
883 | - imagestring($legend, 3, $width+29, $height-6, number_format($this->minValue, 2,",","."), $fontColour); | |
884 | - imagestring($legend, 3, $width+29, -3, number_format($this->maxValue, 2,",","."), $fontColour); | |
866 | + for ($i = 0; $i < $width; $i++) { | |
867 | + imageline($legend, 21+$i, 2, 21+$i, $height+2, IMG_COLOR_STYLED); | |
868 | + } | |
885 | 869 | |
886 | - break; | |
870 | + // print min and max values | |
871 | + //number_format(($s / $ocorrencias),2,",",".") | |
872 | + //imagestring($legend, 3, $width+29, $height-6, number_format($this->minValue, $this->precision), $fontColour); | |
873 | + //imagestring($legend, 3, $width+29, -3, number_format($this->maxValue, $this->precision), $fontColour); | |
874 | + imagestring($legend, 3, $width+29, $height-6, number_format($this->minValue, 2,",","."), $fontColour); | |
875 | + imagestring($legend, 3, $width+29, -3, number_format($this->maxValue, 2,",","."), $fontColour); | |
887 | 876 | |
888 | - // classed (equal intervals / quantiles) | |
889 | - default: | |
890 | - $ypos = 0; | |
891 | - $interval = $height / $this->numClasses; | |
892 | - $v = $this->classColours; | |
893 | - foreach($v as $key => $colour){ | |
894 | - $red = hexdec(substr($colour, 0, 2)); | |
895 | - $green = hexdec(substr($colour, 2, 2)); | |
896 | - $blue = hexdec(substr($colour, 4, 2)); | |
877 | + break; | |
897 | 878 | |
898 | - $classColour = imagecolorallocate($legend, $red, $green, $blue); | |
899 | - imagefilledrectangle($legend, 21, $height-$ypos+2, $width+20, $height-$ypos-$interval, $classColour); | |
879 | + // classed (equal intervals / quantiles) | |
880 | + default: | |
881 | + $ypos = 0; | |
882 | + $interval = $height / $this->numClasses; | |
883 | + $v = $this->classColours; | |
884 | + foreach($v as $key => $colour){ | |
885 | + $red = hexdec(substr($colour, 0, 2)); | |
886 | + $green = hexdec(substr($colour, 2, 2)); | |
887 | + $blue = hexdec(substr($colour, 4, 2)); | |
900 | 888 | |
901 | - //imagestring($legend, 3, $width+29, $height-$ypos-5, number_format($this->classBreaks[$key], $this->precision), $fontColour); | |
902 | - imagestring($legend, 3, $width+29, $height-$ypos-5, number_format($this->classBreaks[$key], 2,",","."), $fontColour); | |
889 | + $classColour = imagecolorallocate($legend, $red, $green, $blue); | |
890 | + imagefilledrectangle($legend, 21, $height-$ypos+2, $width+20, $height-$ypos-$interval, $classColour); | |
903 | 891 | |
904 | - $ypos += $interval; | |
905 | - } | |
906 | - //imagestring($legend, 3, $width+29, -3, number_format($this->classBreaks[$key+1], $this->precision), $fontColour); | |
907 | - imagestring($legend, 3, $width+29, -3, number_format($this->classBreaks[$key+1], 2,",","."), $fontColour); | |
892 | + //imagestring($legend, 3, $width+29, $height-$ypos-5, number_format($this->classBreaks[$key], $this->precision), $fontColour); | |
893 | + imagestring($legend, 3, $width+29, $height-$ypos-5, number_format($this->classBreaks[$key], 2,",","."), $fontColour); | |
908 | 894 | |
895 | + $ypos += $interval; | |
909 | 896 | } |
897 | + //imagestring($legend, 3, $width+29, -3, number_format($this->classBreaks[$key+1], $this->precision), $fontColour); | |
898 | + imagestring($legend, 3, $width+29, -3, number_format($this->classBreaks[$key+1], 2,",","."), $fontColour); | |
910 | 899 | |
911 | - // Border around colour scale | |
912 | - imagerectangle($legend, 19, 0, $width+22, $height+4, $white); | |
913 | - imagerectangle($legend, 20, 1, $width+21, $height+3, $white); | |
900 | + } | |
914 | 901 | |
915 | - // Legend title | |
916 | - //imagestringup($legend, 3, 0, ($height/2)+(strlen($this->mapTitle)/2)*7, $this->mapTitle, $white); | |
902 | + // Border around colour scale | |
903 | + imagerectangle($legend, 19, 0, $width+22, $height+4, $white); | |
904 | + imagerectangle($legend, 20, 1, $width+21, $height+3, $white); | |
917 | 905 | |
918 | - // Save legend | |
919 | - $file = $this->dirtmp.'/legend'. time() .'.png'; | |
920 | - imagepng($legend, $file); | |
906 | + // Legend title | |
907 | + //imagestringup($legend, 3, 0, ($height/2)+(strlen($this->mapTitle)/2)*7, $this->mapTitle, $white); | |
921 | 908 | |
922 | - return $file; | |
923 | - } | |
909 | + // Save legend | |
910 | + $file = $this->dirtmp.'/legend'. $this->nomeTemp .'.png'; | |
911 | + imagepng($legend, $file); | |
924 | 912 | |
913 | + return $file; | |
914 | + } | |
925 | 915 | |
926 | - function getSymbolSize($value, $geometry) | |
927 | - { | |
928 | - switch ($geometry) { | |
929 | - case 'circle': // Returns radius of the circle | |
930 | - case 'square': // Returns length of a side | |
931 | - return sqrt($value/$this->maxValue)*$this->symbolMaxSize; | |
932 | - case 'column': // Returns height of the column | |
933 | - return ($value/$this->maxValue)*$this->symbolMaxSize; | |
934 | - case 'sphere': // Returns radius of the sphere | |
935 | - case 'cube': // Returns length of a side | |
936 | - return pow($value/$this->maxValue, 1/3)*$this->symbolMaxSize; | |
937 | - } | |
938 | - } | |
939 | 916 | |
940 | - function makeClasses($classification, $numClasses){ | |
941 | - $this->classBreaks = array(); | |
917 | + function getSymbolSize($value, $geometry) | |
918 | + { | |
919 | + switch ($geometry) { | |
920 | + case 'circle': // Returns radius of the circle | |
921 | + case 'square': // Returns length of a side | |
922 | + return sqrt($value/$this->maxValue)*$this->symbolMaxSize; | |
923 | + case 'column': // Returns height of the column | |
924 | + return ($value/$this->maxValue)*$this->symbolMaxSize; | |
925 | + case 'sphere': // Returns radius of the sphere | |
926 | + case 'cube': // Returns length of a side | |
927 | + return pow($value/$this->maxValue, 1/3)*$this->symbolMaxSize; | |
928 | + } | |
929 | + } | |
942 | 930 | |
943 | - switch ($classification) { | |
931 | + function makeClasses($classification, $numClasses){ | |
932 | + $this->classBreaks = array(); | |
944 | 933 | |
945 | - case 'equal': | |
946 | - $interval = ($this->maxValue - $this->minValue) / $numClasses; | |
947 | - for ($i = 0; $i < $numClasses; $i++) { | |
948 | - $position = $this->minValue + ($interval * $i); | |
949 | - $this->classBreaks[] = round($position, $this->precision); | |
950 | - } | |
951 | - $this->classBreaks[] = $this->maxValue; // Last class break = biggest value | |
952 | - break; | |
953 | - | |
954 | - case 'quantile': | |
955 | - $values = array_values($this->indicator['values'][$this->year]); | |
956 | - sort($values); | |
957 | - $numValues = count($values); | |
958 | - $classNum = $numValues / $numClasses; // Number in each class | |
959 | - for ($i = 0; $i < $numClasses; $i++) { | |
960 | - $position = (int)($classNum * $i); | |
961 | - $this->classBreaks[] = $values[$position]; | |
962 | - } | |
963 | - $this->classBreaks[] = $values[$numValues-1]; // Last class break = biggest value | |
964 | - } | |
934 | + switch ($classification) { | |
965 | 935 | |
966 | - // Make class colours (could be separate function) | |
936 | + case 'equal': | |
937 | + $interval = ($this->maxValue - $this->minValue) / $numClasses; | |
967 | 938 | for ($i = 0; $i < $numClasses; $i++) { |
968 | - $red = (int)($this->startColourRGB[0] + ($this->deltaColourRGB[0] / ($numClasses - 1)) * $i); | |
969 | - $green = (int)($this->startColourRGB[1] + ($this->deltaColourRGB[1] / ($numClasses - 1)) * $i); | |
970 | - $blue = (int)($this->startColourRGB[2] + ($this->deltaColourRGB[2] / ($numClasses - 1)) * $i); | |
971 | - | |
972 | - $this->classColours[$i] = sprintf('%02X%02X%02X', $red, $green, $blue); | |
939 | + $position = $this->minValue + ($interval * $i); | |
940 | + $this->classBreaks[] = round($position, $this->precision); | |
941 | + } | |
942 | + $this->classBreaks[] = $this->maxValue; // Last class break = biggest value | |
943 | + break; | |
944 | + | |
945 | + case 'quantile': | |
946 | + $values = array_values($this->indicator['values'][$this->year]); | |
947 | + sort($values); | |
948 | + $numValues = count($values); | |
949 | + $classNum = $numValues / $numClasses; // Number in each class | |
950 | + for ($i = 0; $i < $numClasses; $i++) { | |
951 | + $position = (int)($classNum * $i); | |
952 | + $this->classBreaks[] = $values[$position]; | |
973 | 953 | } |
954 | + $this->classBreaks[] = $values[$numValues-1]; // Last class break = biggest value | |
974 | 955 | } |
975 | 956 | |
957 | + // Make class colours (could be separate function) | |
958 | + for ($i = 0; $i < $numClasses; $i++) { | |
959 | + $red = (int)($this->startColourRGB[0] + ($this->deltaColourRGB[0] / ($numClasses - 1)) * $i); | |
960 | + $green = (int)($this->startColourRGB[1] + ($this->deltaColourRGB[1] / ($numClasses - 1)) * $i); | |
961 | + $blue = (int)($this->startColourRGB[2] + ($this->deltaColourRGB[2] / ($numClasses - 1)) * $i); | |
976 | 962 | |
977 | - function getClass($value){ | |
978 | - $class = 0; | |
979 | - //var_dump($this->classBreaks);exit; | |
980 | - for ($i = 1; $i < count($this->classBreaks); $i++) { | |
981 | - if ($value > $this->classBreaks[$i] && $value <= $this->classBreaks[$i+1]) { | |
982 | - $class = $i; | |
983 | - } | |
984 | - } | |
985 | - return $class; | |
963 | + $this->classColours[$i] = sprintf('%02X%02X%02X', $red, $green, $blue); | |
986 | 964 | } |
965 | + } | |
987 | 966 | |
988 | - function mapTitleImage(){ | |
989 | - $title = explode('|', wordwrap($this->mapTitle, 25, "|", true)); | |
990 | - $source = explode('|', wordwrap($this->mapSource, 25, "|", true)); | |
991 | 967 | |
992 | - // Calculate text height (15px for each text line) | |
993 | - $textSize = (count($title) + count($source)) * 15; | |
968 | + function getClass($value){ | |
969 | + $class = 0; | |
970 | + //var_dump($this->classBreaks);exit; | |
971 | + for ($i = 1; $i < count($this->classBreaks); $i++) { | |
972 | + if ($value > $this->classBreaks[$i] && $value <= $this->classBreaks[$i+1]) { | |
973 | + $class = $i; | |
974 | + } | |
975 | + } | |
976 | + return $class; | |
977 | + } | |
994 | 978 | |
995 | - // Create new legend canvas | |
996 | - $legend = imagecreatetruecolor(200, 56 + $textSize); | |
979 | + function mapTitleImage(){ | |
980 | + $title = explode('|', wordwrap($this->mapTitle, 25, "|", true)); | |
981 | + $source = explode('|', wordwrap($this->mapSource, 25, "|", true)); | |
997 | 982 | |
998 | - // Allocate colours | |
999 | - $bgColour = imagecolorallocatealpha($legend, 255, 255, 255, 10); | |
1000 | - $black = $fontColour = imagecolorallocate($legend, 0, 0, 0); | |
1001 | - imageSaveAlpha($legend, true); | |
983 | + // Calculate text height (15px for each text line) | |
984 | + $textSize = (count($title) + count($source)) * 15; | |
1002 | 985 | |
1003 | - // Set background colour | |
1004 | - imagefill($legend, 0, 0, $bgColour); | |
986 | + // Create new legend canvas | |
987 | + $legend = imagecreatetruecolor(200, 56 + $textSize); | |
1005 | 988 | |
1006 | - // Add logo | |
1007 | - $legendTop = imagecreatefrompng($this->logo); | |
1008 | - imagecopy($legend, $legendTop, 0, 0, 0, 0, 200, 30); | |
989 | + // Allocate colours | |
990 | + $bgColour = imagecolorallocatealpha($legend, 255, 255, 255, 10); | |
991 | + $black = $fontColour = imagecolorallocate($legend, 0, 0, 0); | |
992 | + imageSaveAlpha($legend, true); | |
1009 | 993 | |
1010 | - // Print title | |
1011 | - $ypos = 37; | |
1012 | - foreach($title as $line){ | |
994 | + // Set background colour | |
995 | + imagefill($legend, 0, 0, $bgColour); | |
1013 | 996 | |
1014 | - imagestring($legend, 3, 100-(strlen($line)*7)/2, $ypos, $line, $fontColour); | |
1015 | - $ypos += 15; | |
1016 | - } | |
997 | + // Add logo | |
998 | + $legendTop = imagecreatefrompng($this->logo); | |
999 | + imagecopy($legend, $legendTop, 0, 0, 0, 0, 200, 30); | |
1017 | 1000 | |
1018 | - // Print source | |
1019 | - foreach($source as $line){ | |
1020 | - $ypos += 15; | |
1021 | - imagestring($legend, 2, 192-(strlen($line)*6), $ypos, $line, $fontColour); | |
1022 | - } | |
1001 | + // Print title | |
1002 | + $ypos = 37; | |
1003 | + foreach($title as $line){ | |
1023 | 1004 | |
1024 | - // Save legend | |
1025 | - $file = $this->dirtmp.'/logo'. time() .'.png'; | |
1026 | - imagepng($legend, $file); | |
1005 | + imagestring($legend, 3, 100-(strlen($line)*7)/2, $ypos, $line, $fontColour); | |
1006 | + $ypos += 15; | |
1007 | + } | |
1027 | 1008 | |
1028 | - return $file; | |
1009 | + // Print source | |
1010 | + foreach($source as $line){ | |
1011 | + $ypos += 15; | |
1012 | + imagestring($legend, 2, 192-(strlen($line)*6), $ypos, $line, $fontColour); | |
1029 | 1013 | } |
1014 | + | |
1015 | + // Save legend | |
1016 | + $file = $this->dirtmp.'/logo'. $this->nomeTemp .'.png'; | |
1017 | + imagepng($legend, $file); | |
1018 | + | |
1019 | + return $file; | |
1020 | + } | |
1030 | 1021 | } // class ThematicMap |
1031 | 1022 | |
1032 | 1023 | ... | ... |
pacotes/tme/TME_i3geo.php
... | ... | @@ -75,18 +75,39 @@ if(!isset($parametersTME)){ |
75 | 75 | 'maxHeight' => $maxHeight |
76 | 76 | ); |
77 | 77 | } |
78 | +$nomeTemp = array_merge($_GET,$_POST); | |
79 | +$nomeTemp = md5(implode("",$nomeTemp)); | |
80 | + | |
81 | +$nomeFile = $dir_tmp."/tme".$nomeTemp.".kmz"; | |
82 | + | |
83 | +//sesion e aberto com isso | |
78 | 84 | $dataConnector = new DataConnector($_GET["sid"],$verificaSID); |
79 | -$dataStore = $dataConnector->getDataStore($_GET["nomelayer"],$colunas,$_GET["colunanomeregiao"],$_GET["titulo"],$_GET["descricao"],""); | |
85 | + | |
86 | +if(!file_exists($nomeFile)){ | |
87 | + $dataStore = $dataConnector->getDataStore($_GET["nomelayer"],$colunas,$_GET["colunanomeregiao"],$_GET["titulo"],$_GET["descricao"],""); | |
88 | +} | |
89 | +else{ | |
90 | + $dataStore = ""; | |
91 | +} | |
92 | +$url = $_SESSION["tmpurl"]."/tme".$nomeTemp.".kmz"; | |
80 | 93 | // Create thematic map object |
81 | -$map = new ThematicMap($dataStore, $parametersTME); | |
94 | +$map = new ThematicMap($dataStore, $parametersTME, $nomeTemp); | |
95 | + | |
96 | +$file = $map->getKML($dataConnector->url,$download,$nomeFile); | |
97 | + | |
98 | +$nomeArquivo = $map->nomeArquivo; | |
99 | + | |
100 | +$legenda = str_replace("kmz","png",basename($nomeArquivo)); | |
101 | +$legenda = str_replace("tme","legend",$legenda); | |
102 | +$legenda = str_replace(basename($nomeArquivo),$legenda,$file); | |
103 | + | |
82 | 104 | |
83 | -$file = $map->getKML($dataConnector->url,$download); | |
84 | 105 | if(!$download){ |
85 | 106 | if(!function_exists("cpjson")) |
86 | 107 | { |
87 | 108 | require(dirname(__FILE__)."/../../classesphp/funcoes_gerais.php"); |
88 | 109 | } |
89 | - cpjson(array('url' => $file)); | |
110 | + cpjson(array('url' => $url, 'arquivo' => $nomeArquivo, 'legenda'=>$legenda)); | |
90 | 111 | } |
91 | 112 | //echo "<p><a href='$file'>$file</a>"; |
92 | 113 | ?> |
93 | 114 | \ No newline at end of file | ... | ... |