-
Notifications
You must be signed in to change notification settings - Fork 5
/
kml.php
executable file
·293 lines (270 loc) · 11.9 KB
/
kml.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
<?php
/*
Title: Catálogo de temas em KML
Gera um arquivo KML contendo os temas existentes no catálogo. Esse KML pode ser utilizado no Google Earth para que os temas possam ser vistos nesse aplicativo seguindo a mesma estrutura de organização
Exemplo
kml.php?idioma=en
Licença:
i3Geo Interface Integrada de Ferramentas de Geoprocessamento para Internet
Direitos Autorais Reservados (c) 2006 Ministério do Meio Ambiente Brasil
Desenvolvedor: Edmar Moretti edmar.moretti@gmail.com
Este programa é software livre; você pode redistribuí-lo
e/ou modificá-lo sob os termos da Licença Pública Geral
GNU conforme publicada pela Free Software Foundation;
Este programa é distribuído na expectativa de que seja útil,
porém, SEM NENHUMA GARANTIA; nem mesmo a garantia implícita
de COMERCIABILIDADE OU ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA.
Consulte a Licença Pública Geral do GNU para mais detalhes.
Você deve ter recebido uma c�pia da Licença Pública Geral do
GNU junto com este programa; se não, escreva para a
Free Software Foundation, Inc., no endereço
59 Temple Street, Suite 330, Boston, MA 02111-1307 USA.
Arquivo: i3geo/kml.php
Parâmetros:
perfil - perfis separados por espaços. Ao usar um perfil, serão mostrados apenas os temas disponíveis para o perfil indicado.
tipoxml - (opcional) quando definido como "kml" será inserido o cabeçalho de tipo kml no xml, possibilitando abrir o xml diretamente na aplicação Google Earth
idioma - pt|en|es
*/
//error_reporting(0);
include_once ("classesphp/carrega_ext.php");
include_once ("classesphp/classe_menutemas.php");
include ("classesphp/conexao.php");
include ("classesphp/funcoes_gerais.php");
$encoding = "ISO-8859-1";
if($convUTF == true){
$encoding = "UTF-8";
}
if(!isset($idioma)){
$idioma = "pt";
}
$xml = '<?xml version="1.0" encoding="'.$encoding.'"?>';
$xml .= "<kml xmlns='http://earth.google.com/kml/2.2'>\n";
//
//pega os endereços para compor a url de chamada do gerador de web services
//ogc.php
//
$protocolo = explode("/",$_SERVER['SERVER_PROTOCOL']);
$protocolo = strtolower($protocolo[0]);
$protocolo1 = strtolower($protocolo . '://'.$_SERVER['SERVER_NAME']);
$protocolo = $protocolo . '://'.$_SERVER['SERVER_NAME'] .":". $_SERVER['SERVER_PORT'];
$urli3geo = str_replace("/kml.php","",$protocolo.$_SERVER["PHP_SELF"]);
//error_reporting(0);
if(!isset($perfil)){
$perfil = "";
}
//
//monta o xml
//
$xml .= "<Document><name>Menu i3geo</name><open>0</open><description></description><visibility>0</visibility>\n";
if($idioma == "pt"){
$coluna = "nome_menu";
}
else{
$coluna = $idioma;
}
$menus = pegaDadosAdmin("SELECT publicado_menu,perfil_menu,aberto,desc_menu,id_menu,$coluna as nome_menu from ".$esquemaadmin."i3geoadmin_menus where lower(publicado_menu) != 'nao' or publicado_menu is null order by nome_menu ",$dbh);
//echo "<pre>menu - ".var_dump($menus);exit;
foreach($menus as $menu){
$xml .= kml_cabecalho($menu["nome_menu"],$menu["desc_menu"]);
$id_menu = $menu["id_menu"];
//raiz
if($idioma == "pt") {
$coluna = "nome_tema";
}
else{
$coluna = $idioma;
}
$sql = "select id_raiz,i3geoadmin_raiz.id_tema,$coluna as nome_tema,tipoa_tema,codigo_tema,kmz_tema FROM ".$esquemaadmin."i3geoadmin_raiz LEFT JOIN ".$esquemaadmin."i3geoadmin_temas ON i3geoadmin_temas.id_tema = i3geoadmin_raiz.id_tema where (lower(i3geoadmin_temas.tipoa_tema) != 'wms' or i3geoadmin_temas.tipoa_tema is null) 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";
$temas = pegaDadosAdmin($sql,$dbh);
if(count($temas) > 0){
foreach ($temas as $tema){
$xml .= kml_tema_bd($tema);
}
}
if($idioma == "pt"){
$coluna = "nome_grupo";
}
else{
$coluna = $idioma;
}
$grupos = pegaDadosAdmin("SELECT $coluna as nome_grupo,n1.id_n1,n1.id_grupo,gr.desc_grupo from ".$esquemaadmin."i3geoadmin_n1 as n1,".$esquemaadmin."i3geoadmin_grupos as gr where (lower(n1.publicado) != 'nao' or n1.publicado is null) and n1.id_menu = '$id_menu' and n1.id_grupo = gr.id_grupo order by gr.nome_grupo",$dbh);
foreach($grupos as $grupo){
$xml .= kml_cabecalho($grupo["nome_grupo"],$grupo["desc_grupo"]);
$id_grupo = $grupo["id_grupo"];
//raiz
if($idioma == "pt"){
$coluna = "nome_tema";
}
else{
$coluna = $idioma;
}
$sql = "select id_raiz,i3geoadmin_raiz.id_tema,$coluna as nome_tema,tipoa_tema,kml_tema,kmz_tema,codigo_tema FROM ".$esquemaadmin."i3geoadmin_raiz LEFT JOIN ".$esquemaadmin."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";
$temas = pegaDadosAdmin($sql,$dbh);
if(count($temas) > 0){
foreach ($temas as $tema){
$xml .= kml_tema_bd($tema);
}
}
if($idioma == "pt"){
$coluna = "nome_subgrupo";
}
else{
$coluna = $idioma;
}
$sql = "select s.$coluna as nome_subgrupo,n2.id_n2 from ".$esquemaadmin."i3geoadmin_n2 as n2,".$esquemaadmin."i3geoadmin_n1 as n1, ".$esquemaadmin."i3geoadmin_subgrupos as s ";
$sql .= "where n1.id_menu = '$id_menu' and n1.id_grupo = '$id_grupo' and n2.id_subgrupo = s.id_subgrupo ";
$sql .= "and n2.id_n1 = n1.id_n1 ";
$sql .= "and (n1.n1_perfil = '' or n1.n1_perfil is null) and (n2.n2_perfil = '' or n2.n2_perfil isnull) ";
$sql .= "and (lower(n2.publicado) != 'nao' or n2.publicado is null) ";
$sql .= "order by s.nome_subgrupo";
$subgrupos = pegaDadosAdmin($sql,$dbh);
//var_dump($subgrupos);
if($idioma == "pt"){
$coluna = "nome_tema";
}
else{
$coluna = $idioma;
}
foreach ($subgrupos as $subgrupo){
$id_n2 = $subgrupo["id_n2"];
$sql = "select t.codigo_tema,t.$coluna as nome_tema,t.link_tema, t.desc_tema, t.kmz_tema from ".$esquemaadmin."i3geoadmin_n3 as n3,".$esquemaadmin."i3geoadmin_temas as t where ";
$sql .= "n3.id_n2='$id_n2' ";
$sql .= "and n3.id_tema = t.id_tema ";
$sql .= "and (n3_perfil = '' or n3_perfil is null) ";
$sql .= "and (lower(t.kml_tema) != 'nao' or t.kml_tema is null)";
$sql .= "and (lower(t.tipoa_tema) != 'wms' or t.tipoa_tema is null)";
$sql .= "and (lower(n3.publicado) != 'nao' or n3.publicado is null) ";
$temas = pegaDadosAdmin($sql,$dbh);
$xml .= kml_folder($subgrupo["nome_subgrupo"]);
if(count($temas) > 0){
foreach ($temas as $tema){
$xml .= kml_tema_bd($tema);
}
}
$xml .= "</Folder>\n";
}
$xml .= "</Folder>\n";
}
$xml .= "</Folder>\n";
}
$xml .= "</Document></kml>\n";
//exit;
if(isset($_GET["tipoxml"]) && $_GET["tipoxml"] == "kml"){
echo header('Content-type: application/vnd.google-earth.kml+xml');
echo header('Content-Disposition: attachment; filename="i3geo.kml"');
}
else{
echo header("Content-type: application/xml");
}
echo $xml;
function kml_tema_bd($tema){
global $urli3geo;
$xml = "";
$teste = array_keys($tema);
if(in_array("link_tema",$teste)){
$fonte = $tema["link_tema"];
}
else{
$fonte = "";
}
$nome = $tema["nome_tema"];
$id = $tema["codigo_tema"];
if(in_array("desc_tema",$teste)){
$desc = $tema["desc_tema"];
}
else{
$desc = "";
}
$fonte = "<a href='$fonte' >Fonte </a>";
$legenda = "<a href='$urli3geo/ogc.php?tema=$id&layer=$id&request=getlegendgraphic&service=wms&format=image/jpeg' >Legenda </a>";
$urlLegenda = $urli3geo."/ogc.php?tema=$id&layer=$id&request=getlegendgraphic&service=wms&format=image/jpeg";
$href = "$urli3geo/ogc.php?tema=$id&width=800&height=800&VERSION=1.1.1&REQUEST=GetMap&SRS=EPSG:4326&STYLES=&BGCOLOR=0xFFFFFF&FORMAT=image/png&TRANSPARENT=TRUE&layers=$id";
$xml .= kml_servico($nome,$fonte,$legenda,$desc,$href,$urlLegenda);
if(strtolower($tema["kmz_tema"]) == "sim"){
$href = "$urli3geo/pacotes/kmlmapserver/kmlservice.php?request=kmz&map=$id&typename=$id";
$xml .= kml_networklink($nome." (vetorial)",$fonte,$legenda,$desc,$href);
}
return $xml;
}
function kml_cabecalho($nome,$desc){
$xml = "<Folder>\n";
$xml .= " <name>".str_replace("&","&",kml_converteTexto($nome))."</name>\n";
$xml .= " <description>".str_replace("&","&",kml_converteTexto($desc))."</description>\n";
$xml .= " <open>0</open><visibility>0</visibility>\n";
return $xml;
}
function kml_folder($nome,$open=0,$vis=0){
$xml = " <Folder>\n";
$xml .= " <name>".str_replace("&","&",kml_converteTexto($nome))."</name>\n";
$xml .= " <description></description>\n";
$xml .= " <open>$open</open><visibility>$vis</visibility>\n";
return $xml;
}
function kml_tema($tema){
global $urli3geo;
$xml = "";
$nome = kml_converteTexto($tema->TNOME);
$desc = kml_converteTexto($tema->TDESC);
$id = kml_converteTexto($tema->TID);
$fonte = kml_converteTexto($tema->TLINK);
$tipoa = "";
if($tema->TIPOA)
$tipoa = kml_converteTexto($tema->TIPOA);
$ogc = sim;
if($tema->TID){
$kml = kml_converteTexto($tema->KML);
}
if(strtolower($kml) != "nao" && strtolower($tipoa) != "wms"){
if($fonte != "")
$fonte = "<a href='$fonte' >Fonte </a>";
else
$fonte = "";
$legenda = "<a href='$urli3geo/ogc.php?tema=$id&layer=$id&request=getlegendgraphic&service=wms&format=image/png' >Legenda </a>";
$href = "$urli3geo/ogc.php?tema=$id&width=800&height=800&VERSION=1.1.1&REQUEST=GetMap&SRS=EPSG:4326&STYLES=&BGCOLOR=0xFFFFFF&FORMAT=image/png&TRANSPARENT=TRUE&layers=$id";
$xml .= kml_servico($nome,$fonte,$legenda,$desc,$href);
}
return $xml;
}
function kml_servico($nome,$fonte,$legenda,$desc,$href,$urlLegenda){
$xml = kml_folder($nome);
$xml .= "<ScreenOverlay>\n";
$xml .= "<name>Legenda</name>\n";
$xml .= "<visibility>0</visibility>\n";
$xml .= "<Icon>\n";
$xml .= "<href><![CDATA[".$urlLegenda."]]></href>\n";
$xml .= "</Icon>\n";
$xml .= "<overlayXY x='0.01' y='0.14' xunits='fraction' yunits='fraction'/>\n";
$xml .= "<screenXY x='0.01' y='0.14' xunits='fraction' yunits='fraction'/>\n";
$xml .= "<size x='-1' y='-1' xunits='pixels' yunits='pixels'/>\n";
$xml .= "</ScreenOverlay>\n";
$xml .= " <GroundOverlay>\n";
$xml .= " <name>".str_replace("&","&",kml_converteTexto($nome))."</name>\n";
$xml .= " <description><![CDATA[".$fonte.$legenda.$desc."]]></description>\n";
$xml .= " <visibility>0</visibility>\n";
$xml .= " <Icon>\n";
$xml .= " <viewRefreshMode>onStop</viewRefreshMode>\n";
$xml .= " <href>$href</href>\n";
$xml .= " </Icon>\n";
$xml .= " <LatLonBox><north>9.49014618085</north><south>-39.3925604735</south><east>-29.5851853</east><west>-76.5125927</west></LatLonBox>\n";
$xml .= " </GroundOverlay>\n";
$xml .= "</Folder>";
return $xml;
}
function kml_networklink($nome,$fonte,$legenda,$desc,$href){
$xml = " <NetworkLink>\n";
$xml .= " <name>".str_replace("&","&",kml_converteTexto($nome))."</name>\n";
$xml .= " <description><![CDATA[".$fonte.$legenda.$desc."]]></description>\n";
$xml .= " <visibility>0</visibility>\n";
$xml .= " <Link>\n";
$xml .= " <viewRefreshMode>never</viewRefreshMode>\n";
$xml .= " <href>$href</href>\n";
$xml .= " </Link>\n";
$xml .= " </NetworkLink>\n";
return $xml;
}
function kml_converteTexto($i){
global $encoding;
$encodingatual = mb_detect_encoding($i, 'UTF-8, UTF-7, ASCII, ISO-8859-1');
return mb_convert_encoding($i,$encoding,$encodingatual);
}
?>