Commit 458fba9e42931c8d1565232215d53b1273f3dbba

Authored by Edmar Moretti
1 parent 42bae254

Opção para abrir com o Cesium o kml gerado na ferramenta TME

.settings/org.eclipse.wst.jsdt.ui.prefs 0 → 100644
... ... @@ -0,0 +1,3 @@
  1 +eclipse.preferences.version=1
  2 +formatter_profile=_edmar
  3 +formatter_settings_version=11
... ...
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-&gt;close();age&#39;:
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-&gt;close();age&#39;:
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
... ...