From 525d98da2dbbe8b7ac61df54c0407459cd91d6e4 Mon Sep 17 00:00:00 2001 From: Edmar Moretti Date: Fri, 26 Oct 2007 12:20:10 +0000 Subject: [PATCH] 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) --- ms_criamapa.php | 467 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------------------------------------------------------------------------------------------------- 1 file changed, 334 insertions(+), 133 deletions(-) diff --git a/ms_criamapa.php b/ms_criamapa.php index fbe0d2f..1708053 100644 --- a/ms_criamapa.php +++ b/ms_criamapa.php @@ -142,22 +142,11 @@ $_SESSION["utilizacgi"] = $utilizacgi_; //pega todas as variáveis da sessão // foreach(array_keys($_SESSION) as $k) -{ - eval("\$".$k."='".$_SESSION[$k]."';"); -} +{eval("\$".$k."='".$_SESSION[$k]."';");} // //monta a apresentação do aguarde // -if (!isset($interface)) -{ - echo ""; - echo '
'; - echo '

'.$mensagemInicia.'
Aguarde...criando o mapa

'; - echo "


"; - echo "


"; - echo "
"; - echo ''; -} +mostraAguarde(); // //define os arquivos .map conforme o tipo de sistema operacional // @@ -195,26 +184,7 @@ $_SESSION["imgdir"] = $diretorios[2]; // //cria arquivos para impedir a leitura dos diretórios temporários // -if (!file_exists($dir_tmp."/index.htm")) -{ - $f = fopen($dir_tmp."/index.htm",x); - fclose($f); - $f = fopen($dir_tmp."/index.html",x); - fclose($f); - $f = fopen($dir_tmp."/".$diretorios[1]."/index.html",x); - fclose($f); - $f = fopen($dir_tmp."/".$diretorios[1]."/index.htm",x); - fclose($f); - $f = fopen($dir_tmp."/".$diretorios[2]."/index.html",x); - fclose($f); - $f = fopen($dir_tmp."/".$diretorios[2]."/index.htm",x); - fclose($f); -} -if (!file_exists($dir_tmp."/index.htm")) -{ - echo "Erro. Não foi possível gravar no diretório temporário"; - exit; -} +criaIndex(); // //cria os objetos map // @@ -239,45 +209,10 @@ ms_ResetErrorList(); // //verifica a lista de temas da inicializacao, adicionando-os se necessário // -if (!isset($temasa)){$temasa = $estadosl;} -$temasa = str_replace(','," ",$temasa); -$alayers = explode(" ",$temasa); -foreach ($alayers as $arqt) -{ - $arqtemp = ""; - $arqt = trim($arqt); - if ($arqt == "") - {continue;} - if (file_exists($arqt)) - {$arqtemp = $arqt;} - if ((strtoupper(substr(PHP_OS, 0, 3) == 'WIN')) && (file_exists($temasaplic."\\".$arqt.".map"))) - {$arqtemp = $temasaplic."\\".$arqt.".map";} - elseif (file_exists($temasaplic."/".$arqt.".map")) - {$arqtemp = $temasaplic."/".$arqt.".map";} - if ((strtoupper(substr(PHP_OS, 0, 3) == 'WIN')) && (file_exists($temasdir."\\".$arqt.".map"))) - {$arqtemp = $temasdir."\\".$arqt.".map";} - elseif (file_exists($temasdir."/".$arqt.".map")) - {$arqtemp = $temasdir."/".$arqt.".map";} - if ($arqtemp == "") - {echo "
Impossível acessar tema $arqtemp";} - else - { - if (!@ms_newMapObj($arqtemp)) - {echo "
Problemas com a camada $arqtemp
";} - else - { - $maptemp = @ms_newMapObj($arqtemp); - for($i=0;$i<($maptemp->numlayers);$i++) - { - $layern = $maptemp->getLayer($i); - $layern->setmetadata("NOMEORIGINAL",$layern->name); - if ($layern->name == "estadosl") - {$layern->set("data",$temasaplic."/dados/estados.shp");} - ms_newLayerObj($mapn, $layern); - } - } - } -} +incluiTemasIniciais(); +// +//verifica erros +// $error = ms_GetErrorObj(); while($error && $error->code != MS_NOERR) { @@ -288,19 +223,10 @@ ms_ResetErrorList(); // //liga os temas definidos em $layers // -if (isset($layers)) -{ - $layers = str_replace(','," ",$layers); - $lista = explode(" ", $layers); - foreach ($lista as $l) - { - $arqt = trim($l); - if ($l == "") - {continue;} - if(@$mapn->getLayerByName($l)) - {$layern = $mapn->getLayerByName($l);$layern->set("status",MS_DEFAULT);} - } -} +ligaTemas(); +// +//verifica erros +// $error = ms_GetErrorObj(); while($error && $error->code != MS_NOERR) { @@ -377,9 +303,208 @@ while($error && $error->code != MS_NOERR) $error = $error->next(); } ms_ResetErrorList(); +// //inclui pontos via url +// if (isset($pontos)) +{inserePontosUrl();} +$error = ms_GetErrorObj(); +while($error && $error->code != MS_NOERR) +{ + printf("
Error in %s: %s
\n", $error->routine, $error->message); + $error = $error->next(); +} +ms_ResetErrorList(); +// +//inclui linhas via url +// +if (isset($linhas)) +{insereLinhasUrl();} +$error = ms_GetErrorObj(); +while($error && $error->code != MS_NOERR) +{ + printf("
Error in %s: %s
\n", $error->routine, $error->message); + $error = $error->next(); +} +ms_ResetErrorList(); +// +//inclui pontos via url +// +if (isset($poligonos)) +{inserePoligonosUrl();} +$error = ms_GetErrorObj(); +while($error && $error->code != MS_NOERR) +{ + printf("
Error in %s: %s
\n", $error->routine, $error->message); + $error = $error->next(); +} +ms_ResetErrorList(); +// +//se vc quiser parar o script aqui, para verificar erros, descomente a linha abaixo +// +//exit; +// +//verifica os dados de cada layer +// +$mapa = ms_newMapObj($tmpfname); +$path = $mapa->shapepath; +for($i=0;$i<($mapa->numlayers);$i++) +{ + $layer = $mapa->getLayer($i); + $ok = true; + if ($layer->connection == "") + { + $ok = false; + $d = $layer->data; + if((file_exists($d)) || (file_exists($d.".shp"))) + {$ok = true;} + else + { + if((file_exists($path."/".$d)) || (file_exists($path."/".$d.".shp"))) + {$ok = true;} + } + } + if ($ok == false) + {$layer->set("status",MS_OFF);} +} +$mapa->save($tmpfname); +// +//obtem o IP do usuário e registra no banco de dados +//essa função pode ser comentada sem prejuízos ao funcionamento do I3Geo +require_once($caminho."ms_registraip.php"); +// +// gera a url para abrir o mapa +// interface = arquivo html que será aberto +// +if ($interface != "mashup") +{ + if (count(explode(".php",$interface)) > 1) + { + if (file_exists($caminho."aplicmap/".$interface)) + {include_once($caminho."aplicmap/".$interface);} + else + {include_once($interface);} + exit; + } + else + { + if (file_exists($caminho."aplicmap/".$interface)) + {$urln = $caminho."aplicmap/".$interface."?".session_id();} + else + {$urln = $interface."?".session_id();} + //header("Location:".$urln); + echo ""; + } +} +////////////////////////////////////////////////////////////////////////////// +//funções +///////////////////////////////////////////////////////////////////////////// + +function ligaTemas() +{ + global $layers,$mapn; + if (isset($layers)) + { + $layers = str_replace(','," ",$layers); + $lista = explode(" ", $layers); + foreach ($lista as $l) + { + $arqt = trim($l); + if ($l == "") + {continue;} + if(@$mapn->getLayerByName($l)) + {$layern = $mapn->getLayerByName($l);$layern->set("status",MS_DEFAULT);} + } + } +} + +function incluiTemasIniciais() +{ + global $temasa,$estadosl,$temasaplic,$temasdir,$mapn; + if (!isset($temasa)){$temasa = $estadosl;} + $temasa = str_replace(','," ",$temasa); + $alayers = explode(" ",$temasa); + foreach ($alayers as $arqt) + { + $arqtemp = ""; + $arqt = trim($arqt); + if ($arqt == "") + {continue;} + if (file_exists($arqt)) + {$arqtemp = $arqt;} + if ((strtoupper(substr(PHP_OS, 0, 3) == 'WIN')) && (file_exists($temasaplic."\\".$arqt.".map"))) + {$arqtemp = $temasaplic."\\".$arqt.".map";} + elseif (file_exists($temasaplic."/".$arqt.".map")) + {$arqtemp = $temasaplic."/".$arqt.".map";} + if ((strtoupper(substr(PHP_OS, 0, 3) == 'WIN')) && (file_exists($temasdir."\\".$arqt.".map"))) + {$arqtemp = $temasdir."\\".$arqt.".map";} + elseif (file_exists($temasdir."/".$arqt.".map")) + {$arqtemp = $temasdir."/".$arqt.".map";} + if ($arqtemp == "") + {echo "
Impossível acessar tema $arqtemp";} + else + { + if (!@ms_newMapObj($arqtemp)) + {echo "
Problemas com a camada $arqtemp
";} + else + { + $maptemp = @ms_newMapObj($arqtemp); + for($i=0;$i<($maptemp->numlayers);$i++) + { + $layern = $maptemp->getLayer($i); + $layern->setmetadata("NOMEORIGINAL",$layern->name); + if ($layern->name == "estadosl") + {$layern->set("data",$temasaplic."/dados/estados.shp");} + ms_newLayerObj(&$mapn, $layern); + } + } + } + } +} + +function criaIndex() { + global $dir_tmp,$diretorios; + if (!file_exists($dir_tmp."/index.htm")) + { + $f = fopen($dir_tmp."/index.htm",x); + fclose($f); + $f = fopen($dir_tmp."/index.html",x); + fclose($f); + $f = fopen($dir_tmp."/".$diretorios[1]."/index.html",x); + fclose($f); + $f = fopen($dir_tmp."/".$diretorios[1]."/index.htm",x); + fclose($f); + $f = fopen($dir_tmp."/".$diretorios[2]."/index.html",x); + fclose($f); + $f = fopen($dir_tmp."/".$diretorios[2]."/index.htm",x); + fclose($f); + } + if (!file_exists($dir_tmp."/index.htm")) + { + echo "Erro. Não foi possível gravar no diretório temporário"; + exit; + } +} + +function mostraAguarde() +{ + global $interface,$caminho,$mensagemInicia; + if (!isset($interface)) + { + echo ""; + echo '
'; + echo '

'.$mensagemInicia.'
Aguarde...criando o mapa

'; + echo "


"; + echo "


"; + echo "
"; + echo ''; + } +} + +function inserePontosUrl() +{ + global $pontos,$nometemapontos,$dir_tmp,$imgdir,$tmpfname,$locaplic; require_once "pacotes/phpxbase/api_conversion.php"; if (!isset($nometemapontos)) {$nometemapontos="Pontos";} @@ -433,68 +558,144 @@ if (isset($pontos)) $cor->setRGB(255,0,0); $salvo = $mapa->save($tmpfname); } -$error = ms_GetErrorObj(); -while($error && $error->code != MS_NOERR) -{ - printf("
Error in %s: %s
\n", $error->routine, $error->message); - $error = $error->next(); -} -ms_ResetErrorList(); // -//se vc quiser para o script aqui, para verificar erros, descomente a linha abaixo -// -//exit; -// -//verifica os dados de cada layer +//as linhas devem ter os pontos separados por espaços e cada linha separada por vírgula // -$mapa = ms_newMapObj($tmpfname); -$path = $mapa->shapepath; -for($i=0;$i<($mapa->numlayers);$i++) +function insereLinhasUrl() { - $layer = $mapa->getLayer($i); - $ok = true; - if ($layer->connection == "") + global $linhas,$nometemalinhas,$dir_tmp,$imgdir,$tmpfname,$locaplic; + require_once "pacotes/phpxbase/api_conversion.php"; + if (!isset($nometemalinhas)) + {$nometemalinhas="Linhas";} + if ($nometemalinhas == "") + {$nometemalinhas="Linhas";} + // + //cria o shape file + // + $tipol = MS_SHP_ARC; + $nomeshp = $dir_tmp."/".$imgdir."/linhains"; + // cria o dbf + $def = array(); + $items = array("COORD"); + foreach ($items as $ni) + {$def[] = array($ni,"C","254");} + xbase_create($nomeshp.".dbf", $def); + $dbname = $nomeshp.".dbf"; + $db=xbase_open($dbname,2); + $novoshpf = ms_newShapefileObj($nomeshp, $tipol); + $linhas = explode(",",trim($linhas)); + $pontosLinhas = array(); //guarda os pontos de cada linha em arrays + foreach ($linhas as $l) { - $ok = false; - $d = $layer->data; - if((file_exists($d)) || (file_exists($d.".shp"))) - {$ok = true;} - else + $tempPTs = explode(" ",trim($l)); + $temp = array(); + foreach ($tempPTs as $p) + if (is_numeric($p)){$temp[] = $p;} + $pontosLinhas[] = $temp; + } + foreach ($pontosLinhas as $ptsl) + { + $linhas = $ptsl; + $shape = ms_newShapeObj($tipol); + $linha = ms_newLineObj(); + $reg = array(); + $reg[] = ""; + for ($ci = 0;$ci < count($linhas);$ci=$ci+2) { - if((file_exists($path."/".$d)) || (file_exists($path."/".$d.".shp"))) - {$ok = true;} + $linha->addXY($linhas[$ci],$linhas[$ci+1]); + $shape->add($linha); } + $novoshpf->addShape($shape); + xbase_add_record($db,$reg); } - if ($ok == false) - {$layer->set("status",MS_OFF);} + $novoshpf->free(); + xbase_close($db); + //adiciona o layer + $mapa = ms_newMapObj($tmpfname); + $layer = ms_newLayerObj($mapa); + $layer->set("name","linhains"); + $layer->set("data",$nomeshp); + $layer->setmetadata("tema",$nometemalinhas); + $layer->setmetadata("classe","sim"); + $layer->set("type",MS_LAYER_LINE); + $layer->set("status",MS_DEFAULT); + $classe = ms_newClassObj($layer); + $estilo = ms_newStyleObj($classe); + $estilo->set("symbolname","linha"); + $estilo->set("size",3); + $cor = $estilo->color; + $cor->setRGB(255,0,0); + $salvo = $mapa->save($tmpfname); } -$mapa->save($tmpfname); -// -//obtem o IP do usuário e registra no banco de dados -//essa função pode ser comentada sem prejuízos ao funcionamento do I3Geo -require_once($caminho."ms_registraip.php"); // -// gera a url para abrir o mapa -// interface = arquivo html que será aberto +//os polígonos devem ter os pontos separados por espaços e cada polígono separado por vírgula // -if ($interface != "mashup") +function inserePoligonosUrl() { - if (count(explode(".php",$interface)) > 1) + global $poligonos,$nometemapoligonos,$dir_tmp,$imgdir,$tmpfname,$locaplic; + require_once "pacotes/phpxbase/api_conversion.php"; + if (!isset($nometemapoligonos)) + {$nometemapoligonos="Poligonos";} + if ($nometemapoligonos == "") + {$nometemapoligonos="Poligonos";} + // + //cria o shape file + // + $tipol = MS_SHP_POLYGON; + $nomeshp = $dir_tmp."/".$imgdir."/poligonosins"; + // cria o dbf + $def = array(); + $items = array("COORD"); + foreach ($items as $ni) + {$def[] = array($ni,"C","254");} + xbase_create($nomeshp.".dbf", $def); + $dbname = $nomeshp.".dbf"; + $db=xbase_open($dbname,2); + $novoshpf = ms_newShapefileObj($nomeshp, $tipol); + $linhas = explode(",",trim($poligonos)); + $pontosLinhas = array(); //guarda os pontos de cada linha em arrays + foreach ($linhas as $l) { - if (file_exists($caminho."aplicmap/".$interface)) - {include_once($caminho."aplicmap/".$interface);} - else - {include_once($interface);} - exit; + $tempPTs = explode(" ",trim($l)); + $temp = array(); + foreach ($tempPTs as $p) + if (is_numeric($p)){$temp[] = $p;} + $pontosLinhas[] = $temp; } - else + foreach ($pontosLinhas as $ptsl) { - if (file_exists($caminho."aplicmap/".$interface)) - {$urln = $caminho."aplicmap/".$interface."?".session_id();} - else - {$urln = $interface."?".session_id();} - //header("Location:".$urln); - echo ""; + $linhas = $ptsl; + $shape = ms_newShapeObj($tipol); + $linha = ms_newLineObj(); + $reg = array(); + $reg[] = ""; + for ($ci = 0;$ci < count($linhas);$ci=$ci+2) + { + $linha->addXY($linhas[$ci],$linhas[$ci+1]); + + } + $shape->add($linha); + $novoshpf->addShape($shape); + xbase_add_record($db,$reg); } + $novoshpf->free(); + xbase_close($db); + //adiciona o layer + $mapa = ms_newMapObj($tmpfname); + $layer = ms_newLayerObj($mapa); + $layer->set("name","linhains"); + $layer->set("data",$nomeshp); + $layer->setmetadata("tema",$nometemapoligonos); + $layer->setmetadata("classe","sim"); + $layer->set("type",MS_LAYER_POLYGON); + $layer->set("transparency","50"); + $layer->set("status",MS_DEFAULT); + $classe = ms_newClassObj($layer); + $estilo = ms_newStyleObj($classe); + //$estilo->set("symbolname","linha"); + //$estilo->set("size",3); + $cor = $estilo->color; + $cor->setRGB(255,0,0); + $salvo = $mapa->save($tmpfname); } ?> \ No newline at end of file -- libgit2 0.21.2