Commit 525d98da2dbbe8b7ac61df54c0407459cd91d6e4

Authored by Edmar Moretti
1 parent 31d3495a

Incluidos dois novos parâmetros de inicialização o ms_criamapa.php que permitem …

…a inclusão de linhas e polígonos, semelhante ao parâmetro pontos (veja no wiki do portal a documentação de como usar)
Showing 1 changed file with 334 additions and 133 deletions   Show diff stats
ms_criamapa.php
... ... @@ -142,22 +142,11 @@ $_SESSION["utilizacgi"] = $utilizacgi_;
142 142 //pega todas as variáveis da sessão
143 143 //
144 144 foreach(array_keys($_SESSION) as $k)
145   -{
146   - eval("\$".$k."='".$_SESSION[$k]."';");
147   -}
  145 +{eval("\$".$k."='".$_SESSION[$k]."';");}
148 146 //
149 147 //monta a apresentação do aguarde
150 148 //
151   -if (!isset($interface))
152   -{
153   - echo "<html><head>";
154   - echo '<div id="aguarde">';
155   - echo '<p class=paguarde style="font-family: Verdana, Arial, Helvetica, sans-serif;color:black;text-align:center;font-size:12pt"><b>'.$mensagemInicia.'</b><br> Aguarde...criando o mapa</p>';
156   - echo "<center><img src='".$caminho."imagens/i3geo1.jpg'><br><br>";
157   - echo "<center><img src='".$caminho."imagens/mapserv.png'><br><br>";
158   - echo "<center><a href='http://mapas.mma.gov.br/download' target=blank ><img src='".$caminho."imagens/somerights20_pt.gif' ></a>";
159   - echo '<BODY bgcolor="white" style="background-color:white">';
160   -}
  149 +mostraAguarde();
161 150 //
162 151 //define os arquivos .map conforme o tipo de sistema operacional
163 152 //
... ... @@ -195,26 +184,7 @@ $_SESSION[&quot;imgdir&quot;] = $diretorios[2];
195 184 //
196 185 //cria arquivos para impedir a leitura dos diretórios temporários
197 186 //
198   -if (!file_exists($dir_tmp."/index.htm"))
199   -{
200   - $f = fopen($dir_tmp."/index.htm",x);
201   - fclose($f);
202   - $f = fopen($dir_tmp."/index.html",x);
203   - fclose($f);
204   - $f = fopen($dir_tmp."/".$diretorios[1]."/index.html",x);
205   - fclose($f);
206   - $f = fopen($dir_tmp."/".$diretorios[1]."/index.htm",x);
207   - fclose($f);
208   - $f = fopen($dir_tmp."/".$diretorios[2]."/index.html",x);
209   - fclose($f);
210   - $f = fopen($dir_tmp."/".$diretorios[2]."/index.htm",x);
211   - fclose($f);
212   -}
213   -if (!file_exists($dir_tmp."/index.htm"))
214   -{
215   - echo "Erro. Não foi possível gravar no diretório temporário";
216   - exit;
217   -}
  187 +criaIndex();
218 188 //
219 189 //cria os objetos map
220 190 //
... ... @@ -239,45 +209,10 @@ ms_ResetErrorList();
239 209 //
240 210 //verifica a lista de temas da inicializacao, adicionando-os se necessário
241 211 //
242   -if (!isset($temasa)){$temasa = $estadosl;}
243   -$temasa = str_replace(','," ",$temasa);
244   -$alayers = explode(" ",$temasa);
245   -foreach ($alayers as $arqt)
246   -{
247   - $arqtemp = "";
248   - $arqt = trim($arqt);
249   - if ($arqt == "")
250   - {continue;}
251   - if (file_exists($arqt))
252   - {$arqtemp = $arqt;}
253   - if ((strtoupper(substr(PHP_OS, 0, 3) == 'WIN')) && (file_exists($temasaplic."\\".$arqt.".map")))
254   - {$arqtemp = $temasaplic."\\".$arqt.".map";}
255   - elseif (file_exists($temasaplic."/".$arqt.".map"))
256   - {$arqtemp = $temasaplic."/".$arqt.".map";}
257   - if ((strtoupper(substr(PHP_OS, 0, 3) == 'WIN')) && (file_exists($temasdir."\\".$arqt.".map")))
258   - {$arqtemp = $temasdir."\\".$arqt.".map";}
259   - elseif (file_exists($temasdir."/".$arqt.".map"))
260   - {$arqtemp = $temasdir."/".$arqt.".map";}
261   - if ($arqtemp == "")
262   - {echo "<br>Imposs&iacute;vel acessar tema $arqtemp";}
263   - else
264   - {
265   - if (!@ms_newMapObj($arqtemp))
266   - {echo "<br>Problemas com a camada $arqtemp<br>";}
267   - else
268   - {
269   - $maptemp = @ms_newMapObj($arqtemp);
270   - for($i=0;$i<($maptemp->numlayers);$i++)
271   - {
272   - $layern = $maptemp->getLayer($i);
273   - $layern->setmetadata("NOMEORIGINAL",$layern->name);
274   - if ($layern->name == "estadosl")
275   - {$layern->set("data",$temasaplic."/dados/estados.shp");}
276   - ms_newLayerObj($mapn, $layern);
277   - }
278   - }
279   - }
280   -}
  212 +incluiTemasIniciais();
  213 +//
  214 +//verifica erros
  215 +//
281 216 $error = ms_GetErrorObj();
282 217 while($error && $error->code != MS_NOERR)
283 218 {
... ... @@ -288,19 +223,10 @@ ms_ResetErrorList();
288 223 //
289 224 //liga os temas definidos em $layers
290 225 //
291   -if (isset($layers))
292   -{
293   - $layers = str_replace(','," ",$layers);
294   - $lista = explode(" ", $layers);
295   - foreach ($lista as $l)
296   - {
297   - $arqt = trim($l);
298   - if ($l == "")
299   - {continue;}
300   - if(@$mapn->getLayerByName($l))
301   - {$layern = $mapn->getLayerByName($l);$layern->set("status",MS_DEFAULT);}
302   - }
303   -}
  226 +ligaTemas();
  227 +//
  228 +//verifica erros
  229 +//
304 230 $error = ms_GetErrorObj();
305 231 while($error && $error->code != MS_NOERR)
306 232 {
... ... @@ -377,9 +303,208 @@ while($error &amp;&amp; $error-&gt;code != MS_NOERR)
377 303 $error = $error->next();
378 304 }
379 305 ms_ResetErrorList();
  306 +//
380 307 //inclui pontos via url
  308 +//
381 309 if (isset($pontos))
  310 +{inserePontosUrl();}
  311 +$error = ms_GetErrorObj();
  312 +while($error && $error->code != MS_NOERR)
  313 +{
  314 + printf("<br>Error in %s: %s<br>\n", $error->routine, $error->message);
  315 + $error = $error->next();
  316 +}
  317 +ms_ResetErrorList();
  318 +//
  319 +//inclui linhas via url
  320 +//
  321 +if (isset($linhas))
  322 +{insereLinhasUrl();}
  323 +$error = ms_GetErrorObj();
  324 +while($error && $error->code != MS_NOERR)
  325 +{
  326 + printf("<br>Error in %s: %s<br>\n", $error->routine, $error->message);
  327 + $error = $error->next();
  328 +}
  329 +ms_ResetErrorList();
  330 +//
  331 +//inclui pontos via url
  332 +//
  333 +if (isset($poligonos))
  334 +{inserePoligonosUrl();}
  335 +$error = ms_GetErrorObj();
  336 +while($error && $error->code != MS_NOERR)
  337 +{
  338 + printf("<br>Error in %s: %s<br>\n", $error->routine, $error->message);
  339 + $error = $error->next();
  340 +}
  341 +ms_ResetErrorList();
  342 +//
  343 +//se vc quiser parar o script aqui, para verificar erros, descomente a linha abaixo
  344 +//
  345 +//exit;
  346 +//
  347 +//verifica os dados de cada layer
  348 +//
  349 +$mapa = ms_newMapObj($tmpfname);
  350 +$path = $mapa->shapepath;
  351 +for($i=0;$i<($mapa->numlayers);$i++)
  352 +{
  353 + $layer = $mapa->getLayer($i);
  354 + $ok = true;
  355 + if ($layer->connection == "")
  356 + {
  357 + $ok = false;
  358 + $d = $layer->data;
  359 + if((file_exists($d)) || (file_exists($d.".shp")))
  360 + {$ok = true;}
  361 + else
  362 + {
  363 + if((file_exists($path."/".$d)) || (file_exists($path."/".$d.".shp")))
  364 + {$ok = true;}
  365 + }
  366 + }
  367 + if ($ok == false)
  368 + {$layer->set("status",MS_OFF);}
  369 +}
  370 +$mapa->save($tmpfname);
  371 +//
  372 +//obtem o IP do usuário e registra no banco de dados
  373 +//essa função pode ser comentada sem prejuízos ao funcionamento do I3Geo
  374 +require_once($caminho."ms_registraip.php");
  375 +//
  376 +// gera a url para abrir o mapa
  377 +// interface = arquivo html que será aberto
  378 +//
  379 +if ($interface != "mashup")
  380 +{
  381 + if (count(explode(".php",$interface)) > 1)
  382 + {
  383 + if (file_exists($caminho."aplicmap/".$interface))
  384 + {include_once($caminho."aplicmap/".$interface);}
  385 + else
  386 + {include_once($interface);}
  387 + exit;
  388 + }
  389 + else
  390 + {
  391 + if (file_exists($caminho."aplicmap/".$interface))
  392 + {$urln = $caminho."aplicmap/".$interface."?".session_id();}
  393 + else
  394 + {$urln = $interface."?".session_id();}
  395 + //header("Location:".$urln);
  396 + echo "<meta http-equiv='refresh' content='0;url=$urln'>";
  397 + }
  398 +}
  399 +//////////////////////////////////////////////////////////////////////////////
  400 +//funções
  401 +/////////////////////////////////////////////////////////////////////////////
  402 +
  403 +function ligaTemas()
  404 +{
  405 + global $layers,$mapn;
  406 + if (isset($layers))
  407 + {
  408 + $layers = str_replace(','," ",$layers);
  409 + $lista = explode(" ", $layers);
  410 + foreach ($lista as $l)
  411 + {
  412 + $arqt = trim($l);
  413 + if ($l == "")
  414 + {continue;}
  415 + if(@$mapn->getLayerByName($l))
  416 + {$layern = $mapn->getLayerByName($l);$layern->set("status",MS_DEFAULT);}
  417 + }
  418 + }
  419 +}
  420 +
  421 +function incluiTemasIniciais()
  422 +{
  423 + global $temasa,$estadosl,$temasaplic,$temasdir,$mapn;
  424 + if (!isset($temasa)){$temasa = $estadosl;}
  425 + $temasa = str_replace(','," ",$temasa);
  426 + $alayers = explode(" ",$temasa);
  427 + foreach ($alayers as $arqt)
  428 + {
  429 + $arqtemp = "";
  430 + $arqt = trim($arqt);
  431 + if ($arqt == "")
  432 + {continue;}
  433 + if (file_exists($arqt))
  434 + {$arqtemp = $arqt;}
  435 + if ((strtoupper(substr(PHP_OS, 0, 3) == 'WIN')) && (file_exists($temasaplic."\\".$arqt.".map")))
  436 + {$arqtemp = $temasaplic."\\".$arqt.".map";}
  437 + elseif (file_exists($temasaplic."/".$arqt.".map"))
  438 + {$arqtemp = $temasaplic."/".$arqt.".map";}
  439 + if ((strtoupper(substr(PHP_OS, 0, 3) == 'WIN')) && (file_exists($temasdir."\\".$arqt.".map")))
  440 + {$arqtemp = $temasdir."\\".$arqt.".map";}
  441 + elseif (file_exists($temasdir."/".$arqt.".map"))
  442 + {$arqtemp = $temasdir."/".$arqt.".map";}
  443 + if ($arqtemp == "")
  444 + {echo "<br>Imposs&iacute;vel acessar tema $arqtemp";}
  445 + else
  446 + {
  447 + if (!@ms_newMapObj($arqtemp))
  448 + {echo "<br>Problemas com a camada $arqtemp<br>";}
  449 + else
  450 + {
  451 + $maptemp = @ms_newMapObj($arqtemp);
  452 + for($i=0;$i<($maptemp->numlayers);$i++)
  453 + {
  454 + $layern = $maptemp->getLayer($i);
  455 + $layern->setmetadata("NOMEORIGINAL",$layern->name);
  456 + if ($layern->name == "estadosl")
  457 + {$layern->set("data",$temasaplic."/dados/estados.shp");}
  458 + ms_newLayerObj(&$mapn, $layern);
  459 + }
  460 + }
  461 + }
  462 + }
  463 +}
  464 +
  465 +function criaIndex()
382 466 {
  467 + global $dir_tmp,$diretorios;
  468 + if (!file_exists($dir_tmp."/index.htm"))
  469 + {
  470 + $f = fopen($dir_tmp."/index.htm",x);
  471 + fclose($f);
  472 + $f = fopen($dir_tmp."/index.html",x);
  473 + fclose($f);
  474 + $f = fopen($dir_tmp."/".$diretorios[1]."/index.html",x);
  475 + fclose($f);
  476 + $f = fopen($dir_tmp."/".$diretorios[1]."/index.htm",x);
  477 + fclose($f);
  478 + $f = fopen($dir_tmp."/".$diretorios[2]."/index.html",x);
  479 + fclose($f);
  480 + $f = fopen($dir_tmp."/".$diretorios[2]."/index.htm",x);
  481 + fclose($f);
  482 + }
  483 + if (!file_exists($dir_tmp."/index.htm"))
  484 + {
  485 + echo "Erro. Não foi possível gravar no diretório temporário";
  486 + exit;
  487 + }
  488 +}
  489 +
  490 +function mostraAguarde()
  491 +{
  492 + global $interface,$caminho,$mensagemInicia;
  493 + if (!isset($interface))
  494 + {
  495 + echo "<html><head>";
  496 + echo '<div id="aguarde">';
  497 + echo '<p class=paguarde style="font-family: Verdana, Arial, Helvetica, sans-serif;color:black;text-align:center;font-size:12pt"><b>'.$mensagemInicia.'</b><br> Aguarde...criando o mapa</p>';
  498 + echo "<center><img src='".$caminho."imagens/i3geo1.jpg'><br><br>";
  499 + echo "<center><img src='".$caminho."imagens/mapserv.png'><br><br>";
  500 + echo "<center><a href='http://mapas.mma.gov.br/download' target=blank ><img src='".$caminho."imagens/somerights20_pt.gif' ></a>";
  501 + echo '<BODY bgcolor="white" style="background-color:white">';
  502 + }
  503 +}
  504 +
  505 +function inserePontosUrl()
  506 +{
  507 + global $pontos,$nometemapontos,$dir_tmp,$imgdir,$tmpfname,$locaplic;
383 508 require_once "pacotes/phpxbase/api_conversion.php";
384 509 if (!isset($nometemapontos))
385 510 {$nometemapontos="Pontos";}
... ... @@ -433,68 +558,144 @@ if (isset($pontos))
433 558 $cor->setRGB(255,0,0);
434 559 $salvo = $mapa->save($tmpfname);
435 560 }
436   -$error = ms_GetErrorObj();
437   -while($error && $error->code != MS_NOERR)
438   -{
439   - printf("<br>Error in %s: %s<br>\n", $error->routine, $error->message);
440   - $error = $error->next();
441   -}
442   -ms_ResetErrorList();
443 561 //
444   -//se vc quiser para o script aqui, para verificar erros, descomente a linha abaixo
445   -//
446   -//exit;
447   -//
448   -//verifica os dados de cada layer
  562 +//as linhas devem ter os pontos separados por espaços e cada linha separada por vírgula
449 563 //
450   -$mapa = ms_newMapObj($tmpfname);
451   -$path = $mapa->shapepath;
452   -for($i=0;$i<($mapa->numlayers);$i++)
  564 +function insereLinhasUrl()
453 565 {
454   - $layer = $mapa->getLayer($i);
455   - $ok = true;
456   - if ($layer->connection == "")
  566 + global $linhas,$nometemalinhas,$dir_tmp,$imgdir,$tmpfname,$locaplic;
  567 + require_once "pacotes/phpxbase/api_conversion.php";
  568 + if (!isset($nometemalinhas))
  569 + {$nometemalinhas="Linhas";}
  570 + if ($nometemalinhas == "")
  571 + {$nometemalinhas="Linhas";}
  572 + //
  573 + //cria o shape file
  574 + //
  575 + $tipol = MS_SHP_ARC;
  576 + $nomeshp = $dir_tmp."/".$imgdir."/linhains";
  577 + // cria o dbf
  578 + $def = array();
  579 + $items = array("COORD");
  580 + foreach ($items as $ni)
  581 + {$def[] = array($ni,"C","254");}
  582 + xbase_create($nomeshp.".dbf", $def);
  583 + $dbname = $nomeshp.".dbf";
  584 + $db=xbase_open($dbname,2);
  585 + $novoshpf = ms_newShapefileObj($nomeshp, $tipol);
  586 + $linhas = explode(",",trim($linhas));
  587 + $pontosLinhas = array(); //guarda os pontos de cada linha em arrays
  588 + foreach ($linhas as $l)
457 589 {
458   - $ok = false;
459   - $d = $layer->data;
460   - if((file_exists($d)) || (file_exists($d.".shp")))
461   - {$ok = true;}
462   - else
  590 + $tempPTs = explode(" ",trim($l));
  591 + $temp = array();
  592 + foreach ($tempPTs as $p)
  593 + if (is_numeric($p)){$temp[] = $p;}
  594 + $pontosLinhas[] = $temp;
  595 + }
  596 + foreach ($pontosLinhas as $ptsl)
  597 + {
  598 + $linhas = $ptsl;
  599 + $shape = ms_newShapeObj($tipol);
  600 + $linha = ms_newLineObj();
  601 + $reg = array();
  602 + $reg[] = "";
  603 + for ($ci = 0;$ci < count($linhas);$ci=$ci+2)
463 604 {
464   - if((file_exists($path."/".$d)) || (file_exists($path."/".$d.".shp")))
465   - {$ok = true;}
  605 + $linha->addXY($linhas[$ci],$linhas[$ci+1]);
  606 + $shape->add($linha);
466 607 }
  608 + $novoshpf->addShape($shape);
  609 + xbase_add_record($db,$reg);
467 610 }
468   - if ($ok == false)
469   - {$layer->set("status",MS_OFF);}
  611 + $novoshpf->free();
  612 + xbase_close($db);
  613 + //adiciona o layer
  614 + $mapa = ms_newMapObj($tmpfname);
  615 + $layer = ms_newLayerObj($mapa);
  616 + $layer->set("name","linhains");
  617 + $layer->set("data",$nomeshp);
  618 + $layer->setmetadata("tema",$nometemalinhas);
  619 + $layer->setmetadata("classe","sim");
  620 + $layer->set("type",MS_LAYER_LINE);
  621 + $layer->set("status",MS_DEFAULT);
  622 + $classe = ms_newClassObj($layer);
  623 + $estilo = ms_newStyleObj($classe);
  624 + $estilo->set("symbolname","linha");
  625 + $estilo->set("size",3);
  626 + $cor = $estilo->color;
  627 + $cor->setRGB(255,0,0);
  628 + $salvo = $mapa->save($tmpfname);
470 629 }
471   -$mapa->save($tmpfname);
472   -//
473   -//obtem o IP do usuário e registra no banco de dados
474   -//essa função pode ser comentada sem prejuízos ao funcionamento do I3Geo
475   -require_once($caminho."ms_registraip.php");
476 630 //
477   -// gera a url para abrir o mapa
478   -// interface = arquivo html que será aberto
  631 +//os polígonos devem ter os pontos separados por espaços e cada polígono separado por vírgula
479 632 //
480   -if ($interface != "mashup")
  633 +function inserePoligonosUrl()
481 634 {
482   - if (count(explode(".php",$interface)) > 1)
  635 + global $poligonos,$nometemapoligonos,$dir_tmp,$imgdir,$tmpfname,$locaplic;
  636 + require_once "pacotes/phpxbase/api_conversion.php";
  637 + if (!isset($nometemapoligonos))
  638 + {$nometemapoligonos="Poligonos";}
  639 + if ($nometemapoligonos == "")
  640 + {$nometemapoligonos="Poligonos";}
  641 + //
  642 + //cria o shape file
  643 + //
  644 + $tipol = MS_SHP_POLYGON;
  645 + $nomeshp = $dir_tmp."/".$imgdir."/poligonosins";
  646 + // cria o dbf
  647 + $def = array();
  648 + $items = array("COORD");
  649 + foreach ($items as $ni)
  650 + {$def[] = array($ni,"C","254");}
  651 + xbase_create($nomeshp.".dbf", $def);
  652 + $dbname = $nomeshp.".dbf";
  653 + $db=xbase_open($dbname,2);
  654 + $novoshpf = ms_newShapefileObj($nomeshp, $tipol);
  655 + $linhas = explode(",",trim($poligonos));
  656 + $pontosLinhas = array(); //guarda os pontos de cada linha em arrays
  657 + foreach ($linhas as $l)
483 658 {
484   - if (file_exists($caminho."aplicmap/".$interface))
485   - {include_once($caminho."aplicmap/".$interface);}
486   - else
487   - {include_once($interface);}
488   - exit;
  659 + $tempPTs = explode(" ",trim($l));
  660 + $temp = array();
  661 + foreach ($tempPTs as $p)
  662 + if (is_numeric($p)){$temp[] = $p;}
  663 + $pontosLinhas[] = $temp;
489 664 }
490   - else
  665 + foreach ($pontosLinhas as $ptsl)
491 666 {
492   - if (file_exists($caminho."aplicmap/".$interface))
493   - {$urln = $caminho."aplicmap/".$interface."?".session_id();}
494   - else
495   - {$urln = $interface."?".session_id();}
496   - //header("Location:".$urln);
497   - echo "<meta http-equiv='refresh' content='0;url=$urln'>";
  667 + $linhas = $ptsl;
  668 + $shape = ms_newShapeObj($tipol);
  669 + $linha = ms_newLineObj();
  670 + $reg = array();
  671 + $reg[] = "";
  672 + for ($ci = 0;$ci < count($linhas);$ci=$ci+2)
  673 + {
  674 + $linha->addXY($linhas[$ci],$linhas[$ci+1]);
  675 +
  676 + }
  677 + $shape->add($linha);
  678 + $novoshpf->addShape($shape);
  679 + xbase_add_record($db,$reg);
498 680 }
  681 + $novoshpf->free();
  682 + xbase_close($db);
  683 + //adiciona o layer
  684 + $mapa = ms_newMapObj($tmpfname);
  685 + $layer = ms_newLayerObj($mapa);
  686 + $layer->set("name","linhains");
  687 + $layer->set("data",$nomeshp);
  688 + $layer->setmetadata("tema",$nometemapoligonos);
  689 + $layer->setmetadata("classe","sim");
  690 + $layer->set("type",MS_LAYER_POLYGON);
  691 + $layer->set("transparency","50");
  692 + $layer->set("status",MS_DEFAULT);
  693 + $classe = ms_newClassObj($layer);
  694 + $estilo = ms_newStyleObj($classe);
  695 + //$estilo->set("symbolname","linha");
  696 + //$estilo->set("size",3);
  697 + $cor = $estilo->color;
  698 + $cor->setRGB(255,0,0);
  699 + $salvo = $mapa->save($tmpfname);
499 700 }
500 701 ?>
501 702 \ No newline at end of file
... ...