Commit 97c797b31aead97e08cb1bf8adc7b641b4bd7603

Authored by Edmar Moretti
1 parent 9daae7a2

--no commit message

pacotes/gvsig/gvsig2mapfile/class.gvsig2mapfile.php~
@@ -1,338 +0,0 @@ @@ -1,338 +0,0 @@
1 -<?php  
2 -/**  
3 - * Manipula um arquivo GVP (projeto gvSIG) para construção de layers Mapserver  
4 - * @author Edmar Moretti  
5 - * @license GPL2  
6 - */  
7 -class gvsig2mapfile{  
8 - var $arquivoGvp;  
9 - var $xml;  
10 - var $nomesLayersAdicionados = array();  
11 - /**  
12 - * Construtor da classe  
13 - * @param string $gvp arquivo de projeto gvsig  
14 - * @example $gm = new gvsig2mapfile($gvsiggvp);  
15 - * @throws Exception  
16 - */  
17 - function __construct($gvp)  
18 - {  
19 - if(!file_exists($gvp))  
20 - {throw new Exception("Arquivo $gvp não existe");}  
21 - else{  
22 - $this->arquivoGvp = $gvp;  
23 - if(function_exists("dl")){  
24 - if (!function_exists('simplexml_load_file'))  
25 - {dl( 'php_simplexml.'.PHP_SHLIB_SUFFIX );}  
26 - }  
27 - if (!function_exists('simplexml_load_file'))  
28 - {throw new Exception("Função PHP simplexml_load_file não existe");}  
29 - $this->xml = simplexml_load_file($gvp);  
30 - }  
31 - }  
32 - /**  
33 - * Lista de vistas existentes no projeto gvsig  
34 - * @return array  
35 - **/  
36 - function getViewsNames(){  
37 - $names = array();  
38 - $this->xml->registerXPathNamespace("tag", "http://www.gvsig.gva.es");  
39 - $results = $this->xml->xpath("/tag:xml-tag/tag:xml-tag/tag:property[@value='ProjectView']/parent::*/tag:property[@key='name']");  
40 - foreach($results as $result){  
41 - $names[] = $this->findAttribute($result,"value");  
42 - }  
43 - return $names;  
44 - }  
45 -  
46 - /**  
47 - * Retorna uma vista  
48 - * @param string $nome  
49 - * @return $xml  
50 - */  
51 - function getViewByName($nome){  
52 - $this->xml->registerXPathNamespace("tag", "http://www.gvsig.gva.es");  
53 - $result = $this->xml->xpath("/tag:xml-tag/tag:xml-tag/tag:property[@value='ProjectView']/parent::*/tag:property[@value='".$nome."']/parent::*");  
54 - return $result;  
55 - }  
56 -  
57 - /**  
58 - * Obtem os dados descritivos de uma visao  
59 - * @param string $nome Nome da vista  
60 - * @return array (  
61 - "extent"=>array(xmin,ymin,xmax,ymax),  
62 - "proj"=>string projecao,  
63 - "layerNames"=>string lista de layers separados por virgula  
64 - )  
65 - */  
66 - function getViewData($nome){  
67 - $this->xml->registerXPathNamespace("tag", "http://www.gvsig.gva.es");  
68 - $path = "/tag:xml-tag/tag:xml-tag/tag:property[@value='ProjectView']/parent::*/tag:property[@value='".$nome."']/parent::*/tag:xml-tag/tag:xml-tag";  
69 -  
70 - $xmin = (float) $this->getValue($path,"adjustedExtentX");  
71 - $ymin = (float) $this->getValue($path,"adjustedExtentY");  
72 - $xmax = $xmin + (float) $this->getValue($path,"adjustedExtentW");  
73 - $ymax = $ymin + (float) $this->getValue($path,"adjustedExtentH");  
74 -  
75 - $proj = $this->getValue($path,"proj");  
76 - $nomes = $this->getValue($path,"LayerNames");  
77 - return array(  
78 - "extent"=>array($xmin,$ymin,$xmax,$ymax),  
79 - "proj"=>(string) $proj,  
80 - "layerNames"=>explode(",",str_replace(" ,",",",$nomes))  
81 - );  
82 - }  
83 - /**  
84 - * Obtem os dados de um layer  
85 - * @param string $viewNome  
86 - * @param string $layerNome  
87 - * @return array(  
88 - "minScale"=> string,  
89 - "maxScale"=>string,  
90 - "visible"=>string,  
91 - "proj"=>string,  
92 - "transparency"=>string,  
93 - "type"=>string,  
94 - "data"=>string,  
95 - "connection"=>string,  
96 - "connectiontype"=>string,  
97 - "driverName"=>string,  
98 - "isLabeled"=>string,  
99 - "legenda"=>array(  
100 - "tipoLegenda"=>string,  
101 - "classes"=>string  
102 - )  
103 - )  
104 - *  
105 - */  
106 - function getLayerData($viewNome,$layerNome){  
107 - $this->xml->registerXPathNamespace("tag", "http://www.gvsig.gva.es");  
108 - $path = "/tag:xml-tag/tag:xml-tag/tag:property[@value='ProjectView']/parent::*/tag:property[@value='".$viewNome."']/parent::*/tag:xml-tag/tag:xml-tag/tag:xml-tag/tag:xml-tag/parent::*/tag:property[@value='".$layerNome."']/parent::*";  
109 - $classes = array();  
110 - $render = 'com.iver.cit.gvsig.fmap.rendering';  
111 -  
112 - $path1 = $path."/tag:xml-tag/tag:property[@value='".$render.".VectorialUniqueValueLegend']/parent::*/tag:xml-tag";  
113 - $result = $this->xml->xpath($path1);  
114 - if($result != FALSE){  
115 - $coluna = (string) $this->getValue($path."/tag:xml-tag","fieldNames");  
116 - $valores = (string) $this->getValue($path."/tag:xml-tag","values");  
117 - $tipocoluna = (string) $this->getValue($path."/tag:xml-tag","fieldTypes");  
118 - $nomes = (string) $this->getValue($path."/tag:xml-tag","keys");  
119 -  
120 - $classes = $this->VectorialUniqueValueLegend($result,$path1,$coluna,$tipocoluna,$valores,$nomes);  
121 - }  
122 -  
123 - $path1 = $path."/tag:xml-tag/tag:property[@value='".$render.".SingleSymbolLegend']/parent::*/tag:xml-tag";  
124 - $result = $this->xml->xpath($path1);  
125 - if($result != FALSE)  
126 - {$classes = $this->SingleSymbolLegend($result,$path1);}  
127 -  
128 - //  
129 - //obtem a conexão  
130 - //a senha não pode ser obtida, então, é usado o mesmo nome de usuário em seu lugar. No i3Geo deve-se prever isso na variável de substituição de string.  
131 - $driverName = $this->getValue($path,"driverName");  
132 - if($driverName == "gvSIG shp driver"){  
133 - $data = (string) $this->getValue($path,"file");  
134 - $connection = "";  
135 - $connectiontype = "";  
136 - }  
137 - if($driverName == "PostGIS JDBC Driver"){  
138 - $path1 = $path."/tag:xml-tag/tag:property[@value='org.postgresql.Driver']/parent::*";  
139 - $tabela = "";  
140 - if($this->getValue($path1,"schema") != "")  
141 - {$tabela = (string) $this->getValue($path1,"schema").".";}  
142 - $tabela .= (string) $this->getValue($path1,"tablename");  
143 - $data = (string) $this->getValue($path1,"THE_GEOM")." FROM (select ".(string) $this->getValue($path1,"THE_GEOM").",".(string) $this->getValue($path1,"fields")." FROM ".$tabela.") as foo USING UNIQUE ".(string) $this->getValue($path1,"FID")." USING SRID=".(string) $this->getValue($path1,"SRID");  
144 - $connection = "user=".(string) $this->getValue($path1,"username")." password=".(string) $this->getValue($path1,"username")." dbname=".(string) $this->getValue($path1,"dbName")." host=".(string) $this->getValue($path1,"host")." port=".(string) $this->getValue($path1,"port");  
145 - $connectiontype = MS_POSTGIS;  
146 - }  
147 - return array(  
148 - "minScale"=>(string) $this->getValue($path,"minScale"),  
149 - "maxScale"=>(string) $this->getValue($path,"maxScale"),  
150 - "visible"=>(string) $this->getValue($path,"visible"),  
151 - "proj"=>(string) $this->getValue($path,"proj"),  
152 - "transparency"=>(string) $this->getValue($path,"transparency"),  
153 - "type"=>(string) $this->getValue($path,"type"),  
154 - "data"=>$data,  
155 - "connection"=>$connection,  
156 - "connectiontype"=>$connectiontype,  
157 - "driverName"=>(string) $this->getValue($path,"driverName"),  
158 - "isLabeled"=>(string) $this->getValue($path,"isLabeled"),  
159 - "legenda"=>array(  
160 - "tipoLegenda"=>(string) $this->getValue($path."/tag:xml-tag","className"),  
161 - "classes"=>$classes  
162 - )  
163 - );  
164 - }  
165 - function VectorialUniqueValueLegend($result,$path1,$coluna,$tipocoluna,$valores,$nomes){  
166 - $valores = ",".str_replace(" ,",",",$valores);  
167 - $valores = explode(",",$valores);  
168 - $nomes = ",".str_replace(" ,",",",$nomes);  
169 - $nomes = explode(",",$nomes);  
170 - $classes = array();  
171 - $c = 0;  
172 -  
173 - while(list( , $node) = each($result)) {  
174 - $classe = array();  
175 - if($tipocoluna == 12)  
176 - {$classe["exp"] = "('[".$coluna."]'eq'".$valores[$c]."')";}  
177 - else  
178 - {$classe["exp"] = "([".$coluna."] = ".$valores[$c]." )";}  
179 - $classe["className"] = (string) $this->getValue($path1,"className",$c);  
180 - $classe["nome"] = $nomes[$c];  
181 - $classe["desc"] = (string) $this->getValue($path1,"desc",$c);  
182 - $classe["color"] = (string) $this->getValue($path1,"color",$c);  
183 - $classe["rotation"] = (string) $this->getValue($path1,"rotation",$c);  
184 - $classe["offsetX"] = (string) $this->getValue($path1,"offsetX",$c);  
185 - $classe["offsetY"] = (string) $this->getValue($path1,"offsetY",$c);  
186 - $classe["size"] = (string) $this->getValue($path1,"size",$c);  
187 - $classe["markerStyle"] = (string) $this->getValue($path1,"markerStyle",$c);  
188 - $classe["hasFill"] = (string) $this->getValue($path1,"hasFill",$c);  
189 - $classe["hasOutline"] = (string) $this->getValue($path1,"hasOutline",$c);  
190 - if($classe["hasOutline"] == "true"){  
191 - $classe["outline"] = (string) $this->getValue($path1."/tag:xml-tag","color",0);  
192 - }  
193 - else{  
194 - $classe["outline"] = (string) $this->getValue($path1,"color",$c);  
195 - }  
196 - if($classe["desc"] != "")  
197 - {$classes[] = $classe;}  
198 - $c = $c + 1;  
199 - }  
200 -  
201 - //com.iver.cit.gvsig.fmap.rendering.ZSort  
202 - return $classes;  
203 - }  
204 - function SingleSymbolLegend($result,$path){  
205 - $classes = array();  
206 - $c = 0;  
207 -  
208 - while(list( , $node) = each($result)) {  
209 - $classe = array();  
210 - $classe["className"] = (string) $this->getValue($path,"className",$c);  
211 - if($classe["className"] != "com.iver.cit.gvsig.fmap.rendering.ZSort"){  
212 - $classe["desc"] = (string) $this->getValue($path,"desc",$c);  
213 - $classe["color"] = (string) $this->getValue($path,"color",$c);  
214 - $classe["rotation"] = (string) $this->getValue($path,"rotation",$c);  
215 - $classe["offsetX"] = (string) $this->getValue($path,"offsetX",$c);  
216 - $classe["offsetY"] = (string) $this->getValue($path,"offsetY",$c);  
217 - $classe["size"] = (string) $this->getValue($path,"size",$c);  
218 - $classe["markerStyle"] = (string) $this->getValue($path,"markerStyle",$c);  
219 - $classe["hasFill"] = (string) $this->getValue($path,"hasFill",$c);  
220 - $classe["hasOutline"] = (string) $this->getValue($path,"hasOutline",$c);  
221 - $classe["exp"] = false;  
222 - $classe["nome"] = " ";  
223 - if($classe["hasOutline"] == "true"){  
224 - $classe["outline"] = (string) $this->getValue($path."/tag:xml-tag","color");  
225 - }  
226 - else{  
227 - $classe["outline"] = (string) $this->getValue($path,"color",$c);  
228 - }  
229 - $classes[] = $classe;  
230 - $c = $c + 1;  
231 - }  
232 - }  
233 -  
234 - return $classes;  
235 - }  
236 - function getValue($path,$key,$i=0){  
237 - $result = $this->xml->xpath($path."/tag:property[@key='".$key."']");  
238 - if($result)  
239 - {return $this->findAttribute($result[$i],"value");}  
240 - else  
241 - {return false;}  
242 - }  
243 - function addLayers($objMap,$gvsigview,$layerNames){  
244 - foreach($layerNames as $lname){  
245 - $dataLayer = $this->getLayerData($gvsigview,$lname);  
246 - $oLayer = ms_newLayerObj($objMap);  
247 - $oLayer->setmetadata("TEMA",$lname);  
248 - $oLayer->set("template","none.htm");  
249 - $oLayer = $this->data2layer($oLayer,$dataLayer);  
250 - //evita problemas no modo tile  
251 - $oLayer->setprocessing("LABEL_NO_CLIP=True");  
252 - $oLayer->setprocessing("POLYLINE_NO_CLIP=True");  
253 - }  
254 - return $objMap;  
255 - }  
256 - function data2layer($oLayer,$dataLayer){  
257 - $oLayer->set("name",basename($this->arquivoGvp)."_".$oLayer->index); //$this->nomeRandomico());  
258 - $this->nomesLayersAdicionados[] = $oLayer->name;  
259 - $oLayer->set("data",$dataLayer["data"]);  
260 - if($dataLayer["connectiontype"] != "")  
261 - {$oLayer->setConnectionType($dataLayer["connectiontype"]);}  
262 - if($dataLayer["connection"] != "")  
263 - {$oLayer->set("connection",$dataLayer["connection"]);}  
264 - $oLayer->set("status",MS_DEFAULT);  
265 - if($dataLayer["visible"] == "false")  
266 - {$oLayer->set("status",MS_OFF);}  
267 - if(!empty($dataLayer["transparency"])){  
268 - $opacidade = ($dataLayer["transparency"] * 100) / 255;  
269 - $oLayer->set("opacity",$opacidade);  
270 - }  
271 - if($dataLayer["minScale"] > 0)  
272 - {$oLayer->set("minscaledenom",$dataLayer["minScale"]);}  
273 - if($dataLayer["maxScale"] > 0)  
274 - {$oLayer->set("maxscaledenom",$dataLayer["maxScale"]);}  
275 -  
276 - $tipo = $dataLayer["legenda"]["classes"][0]["className"];  
277 - $oLayer->set("type",1);  
278 - if($tipo == "com.iver.cit.gvsig.fmap.core.symbols.SimpleMarkerSymbol")  
279 - {$oLayer->set("type",0);}  
280 - if($tipo == "com.iver.cit.gvsig.fmap.core.symbols.SimpleFillSymbol")  
281 - {$oLayer->set("type",2);}  
282 -  
283 - foreach($dataLayer["legenda"]["classes"] as $data){  
284 - //var_dump($data);  
285 - $classe = ms_newClassObj($oLayer);  
286 - $classe->set("name",$data["nome"]);  
287 - $estilo = ms_newStyleObj($classe);  
288 - if($oLayer->type == 0){  
289 - $estilo->set("symbolname","ponto");  
290 - }  
291 - if(!empty($data["color"])){  
292 - if($data["hasFill"] == "true"){  
293 - $ncor = explode(",",$data["color"]);  
294 - $cor = $estilo->color;  
295 - $cor->setrgb($ncor[0],$ncor[1],$ncor[2]);  
296 - }  
297 - if($data["hasOutline"] == "true" && $data["outline"] != ""){  
298 - $ncor = explode(",",$data["outline"]);  
299 - $cor = $estilo->outlinecolor;  
300 - $cor->setrgb($ncor[0],$ncor[1],$ncor[2]);  
301 - }  
302 -  
303 -if($data["hasFill"] == "" && $data["hasOutline"] == ""){  
304 - $ncor = explode(",",$data["color"]);  
305 - $cor = $estilo->color;  
306 - $cor->setrgb($ncor[0],$ncor[1],$ncor[2]);  
307 -}  
308 - }  
309 - if($data["size"] != false)  
310 - {$estilo->set("size",$data["size"]);}  
311 - if($data["exp"] != false)  
312 - {$classe->setExpression($data["exp"]);}  
313 - }  
314 -  
315 - return $oLayer;  
316 - }  
317 - function findAttribute($object, $attribute) {  
318 - $return = false;  
319 - if(@$object->attributes()){  
320 - foreach($object->attributes() as $a => $b) {  
321 - if ($a == $attribute) {  
322 - $return = $b;  
323 - }  
324 - }  
325 - }  
326 - return $return;  
327 - }  
328 - function nomeRandomico($n=10)  
329 - {  
330 - $nomes = "";  
331 - $a = 'azertyuiopqsdfghjklmwxcvbnABCDEFGHIJKLMNOPQRSTUVWXYZ';  
332 - $max = 51;  
333 - for($i=0; $i < $n; ++$i)  
334 - {$nomes .= $a{mt_rand(0, $max)};}  
335 - return $nomes;  
336 - }  
337 -}  
338 -?>