Commit 865209db0167fb21040be5c9d18591cb6b1608e4

Authored by Edmar Moretti
1 parent 1b382d01

Corrige a geração de KML quando determinados campos do banco de admnistração conterem valores nulos

Showing 1 changed file with 135 additions and 102 deletions   Show diff stats
kml.php
... ... @@ -37,10 +37,6 @@ Arquivo: i3geo/kml.php
37 37 Parametro:
38 38  
39 39 perfil - perfis separados por espaços. Ao usar um perfil, serão mostrados apenas os temas disponíveis para o perfil indicado.
40   -
41   -idioma - idioma utilizado nos nomes dos temas
42   -
43   -download {boolean} - indica se o arquivo deve ser enviado como download (default = true)
44 40 */
45 41 error_reporting(0);
46 42 include_once ("classesphp/carrega_ext.php");
... ... @@ -52,9 +48,11 @@ if($convUTF == true)
52 48 {$encoding = "UTF-8";}
53 49 if(!isset($idioma))
54 50 {$idioma = "pt";}
55   -$kml = "";
56   -$kml .= '<?xml version="1.0" encoding="'.$encoding.'"?>';
57   -$kml .= "<kml xmlns='http://earth.google.com/kml/2.2'>\n";
  51 +
  52 +echo header("Content-type: application/xml");
  53 +echo '<?xml version="1.0" encoding="'.$encoding.'"?>';
  54 +echo "<kml xmlns='http://earth.google.com/kml/2.2'>\n";
  55 +
58 56 //
59 57 //pega os endereços para compor a url de chamada do gerador de web services
60 58 //ogc.php
... ... @@ -69,44 +67,70 @@ if(!isset($perfil)){$perfil = &quot;&quot;;}
69 67 //
70 68 //monta o xml
71 69 //
72   -$kml .= "<Document><name>Menu i3geo</name><open>0</open><description></description><visibility>0</visibility>\n";
73   -include("admin/php/admin.php");
74   -if($idioma == "pt")
75   -{$coluna = "nome_menu";}
76   -else
77   -{$coluna = $idioma;}
78   -$menus = pegaDados("SELECT publicado_menu,perfil_menu,aberto,desc_menu,id_menu,$coluna as nome_menu from i3geoadmin_menus where lower(publicado_menu) != 'nao' or publicado_menu isnull order by nome_menu ");
79   -foreach($menus as $menu)
  70 +echo "<Document><name>Menu i3geo</name><open>0</open><description></description><visibility>0</visibility>\n";
  71 +//
  72 +//no caso do arquivo com o menu vir de um arquivo XML
  73 +//
  74 +if ($menutemas != "" || is_array($menutemas))
80 75 {
81   - $kml .= kml_cabecalho($menu["nome_menu"],$menu["desc_menu"]);
82   - $id_menu = $menu["id_menu"];
83   - //raiz
84   - if($idioma == "pt")
85   - {$coluna = "nome_tema";}
  76 + //
  77 + //para manter a compatibilidade entre as versões do i3geo
  78 + //é necessário verificar se a variável $menutemas é um array ou não
  79 + //
  80 + if(is_array($menutemas))
  81 + {
  82 + foreach($menutemas as $m)
  83 + {$menus[] = $m["arquivo"];}
  84 + }
86 85 else
87   - {$coluna = $idioma;}
88   - $sql = "select id_raiz,i3geoadmin_raiz.id_tema,$coluna as nome_tema,tipoa_tema,codigo_tema,kmz_tema FROM i3geoadmin_raiz LEFT JOIN i3geoadmin_temas ON i3geoadmin_temas.id_tema = i3geoadmin_raiz.id_tema where (lower(i3geoadmin_temas.tipoa_tema) != 'wms' or i3geoadmin_temas.tipoa_tema isnull) and (lower(i3geoadmin_temas.kml_tema) != 'nao' or i3geoadmin_temas.kml_tema isnull) and i3geoadmin_temas.tipoa_tema != 'WMS' and i3geoadmin_temas.kml_tema != 'nao' and i3geoadmin_raiz.id_menu='$id_menu' and i3geoadmin_raiz.nivel = 0 and i3geoadmin_raiz.id_nivel = 0 order by ordem";
89   - $temas = pegaDados($sql);
90   - if(count($temas) > 0)
  86 + $menu[] = $menutemas;
  87 + foreach ($menus as $menu)
91 88 {
92   - foreach ($temas as $tema)
93   - {kml_tema_bd($tema);}
  89 + $xml = simplexml_load_file($menu);
  90 + //raiz
  91 + foreach($xml->TEMA as $tema)
  92 + {kml_tema($tema);}
  93 + foreach($xml->GRUPO as $grupo)
  94 + {
  95 + $nome = kml_converteTexto($grupo->GTIPO);
  96 + $desc = kml_converteTexto($grupo->DTIPO);
  97 + kml_cabecalho($nome,$desc);
  98 + foreach($grupo->TEMA as $tema)
  99 + {kml_tema($tema);}
  100 + foreach($grupo->SGRUPO as $sgrupo)
  101 + {
  102 + $nome = kml_converteTexto($sgrupo->SDTIPO);
  103 + kml_folder($nome);
  104 + foreach($sgrupo->TEMA as $tema)
  105 + {kml_tema($tema);}
  106 + echo "</Folder>\n";
  107 + }
  108 + echo "</Folder>\n";
  109 + }
94 110 }
  111 +}
  112 +//
  113 +//no caso do menu vir do sistema de administração
  114 +//
  115 +//error_reporting(E_ALL);
  116 +if(!isset($menutemas) || $menutemas == "")
  117 +{
  118 + include("admin/php/admin.php");
95 119 if($idioma == "pt")
96   - {$coluna = "nome_grupo";}
  120 + {$coluna = "nome_menu";}
97 121 else
98 122 {$coluna = $idioma;}
99   - $grupos = pegaDados("SELECT $coluna as nome_grupo,n1.id_n1,n1.id_grupo,gr.desc_grupo from i3geoadmin_n1 as n1,i3geoadmin_grupos as gr where (lower(n1.publicado) != 'nao' or n1.publicado isnull) and n1.id_menu = '$id_menu' and n1.id_grupo = gr.id_grupo order by gr.nome_grupo");
100   - foreach($grupos as $grupo)
  123 + $menus = pegaDados("SELECT publicado_menu,perfil_menu,aberto,desc_menu,id_menu,$coluna as nome_menu from i3geoadmin_menus where lower(publicado_menu) != 'nao' or publicado_menu isnull order by nome_menu ");
  124 + foreach($menus as $menu)
101 125 {
102   - kml_cabecalho($grupo["nome_grupo"],$grupo["desc_grupo"]);
103   - $id_grupo = $grupo["id_grupo"];
  126 + kml_cabecalho($menu["nome_menu"],$menu["desc_menu"]);
  127 + $id_menu = $menu["id_menu"];
104 128 //raiz
105 129 if($idioma == "pt")
106 130 {$coluna = "nome_tema";}
107 131 else
108 132 {$coluna = $idioma;}
109   - $sql = "select id_raiz,i3geoadmin_raiz.id_tema,$coluna as nome_tema,tipoa_tema,kml_tema,kmz_tema,codigo_tema FROM i3geoadmin_raiz LEFT JOIN i3geoadmin_temas ON i3geoadmin_temas.id_tema = i3geoadmin_raiz.id_tema where lower(i3geoadmin_temas.tipoa_tema) != 'wms' and lower(i3geoadmin_temas.kml_tema) != 'nao' and i3geoadmin_temas.tipoa_tema != 'WMS' and i3geoadmin_temas.kml_tema != 'nao' and i3geoadmin_raiz.id_menu='$id_menu' and i3geoadmin_raiz.nivel = 1 and i3geoadmin_raiz.id_nivel = ".$grupo["id_n1"]." order by ordem";
  133 + $sql = "select id_raiz,i3geoadmin_raiz.id_tema,$coluna as nome_tema,tipoa_tema,codigo_tema,kmz_tema FROM i3geoadmin_raiz LEFT JOIN i3geoadmin_temas ON i3geoadmin_temas.id_tema = i3geoadmin_raiz.id_tema where (lower(i3geoadmin_temas.tipoa_tema) != 'wms' or i3geoadmin_temas.tipoa_tema isnull) and (lower(i3geoadmin_temas.kml_tema) != 'nao' or i3geoadmin_temas.kml_tema isnull) and i3geoadmin_temas.tipoa_tema != 'WMS' and i3geoadmin_temas.kml_tema != 'nao' and i3geoadmin_raiz.id_menu='$id_menu' and i3geoadmin_raiz.nivel = 0 and i3geoadmin_raiz.id_nivel = 0 order by ordem";
110 134 $temas = pegaDados($sql);
111 135 if(count($temas) > 0)
112 136 {
... ... @@ -114,53 +138,66 @@ foreach($menus as $menu)
114 138 {kml_tema_bd($tema);}
115 139 }
116 140 if($idioma == "pt")
117   - {$coluna = "nome_subgrupo";}
118   - else
119   - {$coluna = $idioma;}
120   - $sql = "select s.$coluna as nome_subgrupo,n2.id_n2 from i3geoadmin_n2 as n2,i3geoadmin_n1 as n1, i3geoadmin_subgrupos as s ";
121   - $sql .= "where n1.id_grupo = '$id_grupo' and n2.id_subgrupo = s.id_subgrupo ";
122   - $sql .= "and n2.id_n1 = n1.id_n1 ";
123   - $sql .= "and n1.n1_perfil = '' and n2.n2_perfil = '' ";
124   - $sql .= "and (lower(n2.publicado) != 'nao' or n2.publicado isnull) ";
125   - $sql .= "order by s.nome_subgrupo";
126   - $subgrupos = pegaDados($sql);
127   - if($idioma == "pt")
128   - {$coluna = "nome_tema";}
  141 + {$coluna = "nome_grupo";}
129 142 else
130 143 {$coluna = $idioma;}
131   - foreach ($subgrupos as $subgrupo)
  144 + $grupos = pegaDados("SELECT $coluna as nome_grupo,n1.id_n1,n1.id_grupo,gr.desc_grupo from i3geoadmin_n1 as n1,i3geoadmin_grupos as gr where (lower(n1.publicado) != 'nao' or n1.publicado isnull) and n1.id_menu = '$id_menu' and n1.id_grupo = gr.id_grupo order by gr.nome_grupo");
  145 + foreach($grupos as $grupo)
132 146 {
133   - $id_n2 = $subgrupo["id_n2"];
134   - $sql = "select t.codigo_tema,t.$coluna as nome_tema,t.link_tema, t.desc_tema, t.kmz_tema from i3geoadmin_n3 as n3,i3geoadmin_temas as t where ";
135   - $sql .= "n3.id_n2='$id_n2' ";
136   - $sql .= "and n3.id_tema = t.id_tema ";
137   - $sql .= "and n3_perfil = '' ";
138   - $sql .= "and lower(t.kml_tema) != 'nao' ";
139   - $sql .= "and lower(t.tipoa_tema) != 'wms'";
140   - $sql .= "and (lower(n3.publicado) != 'nao' or n3.publicado isnull) ";
141   - $temas = pegadados($sql);
  147 + kml_cabecalho($grupo["nome_grupo"],$grupo["desc_grupo"]);
  148 + $id_grupo = $grupo["id_grupo"];
  149 + //raiz
  150 + if($idioma == "pt")
  151 + {$coluna = "nome_tema";}
  152 + else
  153 + {$coluna = $idioma;}
  154 + $sql = "select id_raiz,i3geoadmin_raiz.id_tema,$coluna as nome_tema,tipoa_tema,kml_tema,kmz_tema,codigo_tema FROM i3geoadmin_raiz LEFT JOIN i3geoadmin_temas ON i3geoadmin_temas.id_tema = i3geoadmin_raiz.id_tema where lower(i3geoadmin_temas.tipoa_tema) != 'wms' and lower(i3geoadmin_temas.kml_tema) != 'nao' and i3geoadmin_temas.tipoa_tema != 'WMS' and i3geoadmin_temas.kml_tema != 'nao' and i3geoadmin_raiz.id_menu='$id_menu' and i3geoadmin_raiz.nivel = 1 and i3geoadmin_raiz.id_nivel = ".$grupo["id_n1"]." order by ordem";
  155 + $temas = pegaDados($sql);
142 156 if(count($temas) > 0)
143 157 {
144   - kml_folder($subgrupo["nome_subgrupo"]);
145 158 foreach ($temas as $tema)
146 159 {kml_tema_bd($tema);}
147   - $kml .= "</Folder>\n";
148 160 }
  161 + if($idioma == "pt")
  162 + {$coluna = "nome_subgrupo";}
  163 + else
  164 + {$coluna = $idioma;}
  165 + $sql = "select s.$coluna as nome_subgrupo,n2.id_n2 from i3geoadmin_n2 as n2,i3geoadmin_n1 as n1, i3geoadmin_subgrupos as s ";
  166 + $sql .= "where n1.id_grupo = '$id_grupo' and n2.id_subgrupo = s.id_subgrupo ";
  167 + $sql .= "and n2.id_n1 = n1.id_n1 ";
  168 + $sql .= "and (n1.n1_perfil = '' or n1.n1_perfil isnull) and (n2.n2_perfil = '' or n2.n2_perfil isnull) ";
  169 + $sql .= "and (lower(n2.publicado) != 'nao' or n2.publicado isnull) ";
  170 + $sql .= "order by s.nome_subgrupo";
  171 + $subgrupos = pegaDados($sql);
  172 + if($idioma == "pt")
  173 + {$coluna = "nome_tema";}
  174 + else
  175 + {$coluna = $idioma;}
  176 + foreach ($subgrupos as $subgrupo)
  177 + {
  178 + $id_n2 = $subgrupo["id_n2"];
  179 + $sql = "select t.codigo_tema,t.$coluna as nome_tema,t.link_tema, t.desc_tema, t.kmz_tema from i3geoadmin_n3 as n3,i3geoadmin_temas as t where ";
  180 + $sql .= "n3.id_n2='$id_n2' ";
  181 + $sql .= "and n3.id_tema = t.id_tema ";
  182 + $sql .= "and (n3_perfil = '' or n3_perfil isnull) ";
  183 + $sql .= "and (lower(t.kml_tema) != 'nao' or t.kml_tema isnull)";
  184 + $sql .= "and (lower(t.tipoa_tema) != 'wms' or t.tipoa_tema isnull)";
  185 + $sql .= "and (lower(n3.publicado) != 'nao' or n3.publicado isnull) ";
  186 + $temas = pegadados($sql);
  187 + kml_folder($subgrupo["nome_subgrupo"]);
  188 + if(count($temas) > 0)
  189 + {
  190 + foreach ($temas as $tema)
  191 + {kml_tema_bd($tema);}
  192 + }
  193 + echo "</Folder>\n";
  194 + }
  195 + echo "</Folder>\n";
149 196 }
150   - $kml .= "</Folder>\n";
  197 + echo "</Folder>\n";
151 198 }
152   - $kml .= "</Folder>\n";
153   -}
154   -$kml .= "</Document></kml>\n";
155   -
156   -if(!isset($download) || $download != "false")
157   -{
158   - header("Content-type: application/kml");
159   - header('Content-Disposition: attachment; filename="menui3Geo.kml"');
160 199 }
161   -else
162   -{header("Content-type: application/xml");}
163   -echo $kml;
  200 +echo "</Document></kml>\n";
164 201 function kml_tema_bd($tema)
165 202 {
166 203 global $urli3geo;
... ... @@ -192,19 +229,17 @@ function kml_tema_bd($tema)
192 229 }
193 230 function kml_cabecalho($nome,$desc)
194 231 {
195   - global $kml;
196   - $kml .= "<Folder>\n";
197   - $kml .= " <name>".str_replace("&","&amp;",kml_converteTexto($nome))."</name>\n";
198   - $kml .= " <description>".str_replace("&","&amp;",kml_converteTexto($desc))."</description>\n";
199   - $kml .= " <open>0</open><visibility>0</visibility>\n";
  232 + echo "<Folder>\n";
  233 + echo " <name>".str_replace("&","&amp;",kml_converteTexto($nome))."</name>\n";
  234 + echo " <description>".str_replace("&","&amp;",kml_converteTexto($desc))."</description>\n";
  235 + echo " <open>0</open><visibility>0</visibility>\n";
200 236 }
201 237 function kml_folder($nome)
202 238 {
203   - global $kml;
204   - $kml .= " <Folder>\n";
205   - $kml .= " <name>".str_replace("&","&amp;",kml_converteTexto($nome))."</name>\n";
206   - $kml .= " <description></description>\n";
207   - $kml .= " <open>0</open><visibility>0</visibility>\n";
  239 + echo " <Folder>\n";
  240 + echo " <name>".str_replace("&","&amp;",kml_converteTexto($nome))."</name>\n";
  241 + echo " <description></description>\n";
  242 + echo " <open>0</open><visibility>0</visibility>\n";
208 243 }
209 244 function kml_tema($tema)
210 245 {
... ... @@ -216,10 +251,10 @@ function kml_tema($tema)
216 251 $tipoa = "";
217 252 if($tema->TIPOA)
218 253 $tipoa = kml_converteTexto($tema->TIPOA);
219   - //$ogc = sim;
  254 + $ogc = sim;
220 255 if($tema->TID)
221   - {$kmli = kml_converteTexto($tema->KML);}
222   - if(strtolower($kmli) != "nao" && strtolower($tipoa) != "wms")
  256 + {$kml = kml_converteTexto($tema->KML);}
  257 + if(strtolower($kml) != "nao" && strtolower($tipoa) != "wms")
223 258 {
224 259 if($fonte != "")
225 260 $fonte = "<a href='$fonte' >Fonte </a>";
... ... @@ -233,30 +268,28 @@ function kml_tema($tema)
233 268 }
234 269 function kml_servico($nome,$fonte,$legenda,$desc,$href)
235 270 {
236   - global $kml;
237   - $kml .= " <GroundOverlay>\n";
238   - $kml .= " <name>".str_replace("&","&amp;",kml_converteTexto($nome))."</name>\n";
239   - $kml .= " <description><![CDATA[".$fonte.$legenda.$desc."]]></description>\n";
240   - $kml .= " <visibility>0</visibility>\n";
241   - $kml .= " <Icon>\n";
242   - $kml .= " <viewRefreshMode>onStop</viewRefreshMode>\n";
243   - $kml .= " <href>$href</href>\n";
244   - $kml .= " </Icon>\n";
245   - $kml .= " <LatLonBox><north>9.49014618085</north><south>-39.3925604735</south><east>-29.5851853</east><west>-76.5125927</west></LatLonBox>\n";
246   - $kml .= " </GroundOverlay>\n";
  271 + echo " <GroundOverlay>\n";
  272 + echo " <name>".str_replace("&","&amp;",kml_converteTexto($nome))."</name>\n";
  273 + echo " <description><![CDATA[".$fonte.$legenda.$desc."]]></description>\n";
  274 + echo " <visibility>0</visibility>\n";
  275 + echo " <Icon>\n";
  276 + echo " <viewRefreshMode>onStop</viewRefreshMode>\n";
  277 + echo " <href>$href</href>\n";
  278 + echo " </Icon>\n";
  279 + echo " <LatLonBox><north>9.49014618085</north><south>-39.3925604735</south><east>-29.5851853</east><west>-76.5125927</west></LatLonBox>\n";
  280 + echo " </GroundOverlay>\n";
247 281 }
248 282 function kml_networklink($nome,$fonte,$legenda,$desc,$href)
249 283 {
250   - global $kml;
251   - $kml .= " <NetworkLink>\n";
252   - $kml .= " <name>".str_replace("&","&amp;",kml_converteTexto($nome))."</name>\n";
253   - $kml .= " <description><![CDATA[".$fonte.$legenda.$desc."]]></description>\n";
254   - $kml .= " <visibility>0</visibility>\n";
255   - $kml .= " <Link>\n";
256   - $kml .= " <viewRefreshMode>never</viewRefreshMode>\n";
257   - $kml .= " <href>$href</href>\n";
258   - $kml .= " </Link>\n";
259   - $kml .= " </NetworkLink>\n";
  284 + echo " <NetworkLink>\n";
  285 + echo " <name>".str_replace("&","&amp;",kml_converteTexto($nome))."</name>\n";
  286 + echo " <description><![CDATA[".$fonte.$legenda.$desc."]]></description>\n";
  287 + echo " <visibility>0</visibility>\n";
  288 + echo " <Link>\n";
  289 + echo " <viewRefreshMode>never</viewRefreshMode>\n";
  290 + echo " <href>$href</href>\n";
  291 + echo " </Link>\n";
  292 + echo " </NetworkLink>\n";
260 293 }
261 294 function kml_converteTexto($i)
262 295 {
... ...