Commit 865209db0167fb21040be5c9d18591cb6b1608e4
1 parent
1b382d01
Exists in
master
and in
7 other branches
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 = "";} |
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("&","&",kml_converteTexto($nome))."</name>\n"; | |
198 | - $kml .= " <description>".str_replace("&","&",kml_converteTexto($desc))."</description>\n"; | |
199 | - $kml .= " <open>0</open><visibility>0</visibility>\n"; | |
232 | + echo "<Folder>\n"; | |
233 | + echo " <name>".str_replace("&","&",kml_converteTexto($nome))."</name>\n"; | |
234 | + echo " <description>".str_replace("&","&",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("&","&",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("&","&",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("&","&",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("&","&",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("&","&",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("&","&",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 | { | ... | ... |