web;
$w->set("imagepath",dirname($w->imagepath)."/");
$w->set("imageurl",dirname($w->imageurl)."/");
$m->save($base);
}else{
if(isset($base)){
$tempBaseX = $base;
}
if(isset($tempBaseX) && $tempBaseX != ""){
$base = $tempBaseX;
}
}
//verifica se o usuario trocou a senha do master
if($_SERVER['SERVER_NAME'] != "localhost" && ($i3geomaster[0]["usuario"] == "admin" && $i3geomaster[0]["senha"] == "admin") ){
echo json_encode(array("bloqueado"=>"Bloqueado. ATENCAO!!! Acesso bloqueado: edite o arquivo i3geo/ms_configura.php e altere o login e senha da variavel i3geomaster"));
exit;
}
/*
Define o cookie para o idioma da interface
*/
if(isset($idioma) && $idioma != "")
{setcookie("i3geolingua", $idioma);}
/*
Cria os diretórios temporários que serão utilizados pelo i3geo para armazenar as imagens e outros dados.
*/
$diretorios = criaDirMapa($dir_tmp,$cachedir);
if(!$diretorios)
{echo "
Não foi possível criar os diretórios temporários em $dir_tmp.
";exit;}
criaIndex();
$tmpfname = $diretorios[0];
$protocolo = explode("/",$_SERVER['SERVER_PROTOCOL']);
/*
Prepara as variáveis que serão incluidas na seção
As variáveis vêm do arquivo ms_configura.php e são armazenadas em uma seção com nome específico para o i3geo.
*/
if (!isset($mapext)){
$mapext="";
}
else{
$mapext = str_replace(","," ",$mapext);
setcookie("i3geoUltimaExtensao", $mapext);
}
$saikuUrl_ = $saikuUrl;
$cachedir_ = $cachedir;
$dir_tmp_ = $dir_tmp;
$emailInstituicao_ = $emailInstituicao;
$locmapserv_ = $locmapserv;
$locaplic_ = $locaplic;
//$locsistemas_ = $locsistemas;
//$locidentifica_ = $locidentifica;
$R_path_ = $R_path;
$mapext_ = $mapext;
$debug_ = $debug;
$ler_extensoes_ = $ler_extensoes;
$postgis_mapa_ = $postgis_mapa;
$tituloInstituicao_ = $tituloInstituicao;
//$atlasxml_ = $atlasxml;
$expoeMapfile_ = $expoeMapfile;
$googleApiKey_ = $googleApiKey;
$mensagemInicia_ = $mensagemInicia;
$interfacePadrao_ = $interfacePadrao;
if(isset($interface))
{$interface_ = $interface;}
else{$interface_ = $interfacePadrao;}
if(isset($kmlurl))
{$kmlurl_ = $kmlurl;}
//
//se houver string de conexão para substituição
//o modo cgi não irá funcionar
//
if($postgis_mapa != "")
{$utilizacgi = "nao";}
if(!isset($perfil))
{$perfil="";}
$perfil_ = $perfil;
$utilizacgi_ = $utilizacgi;
if ((isset($navegadoresLocais)) && ($navegadoresLocais != ""))
{$navegadoresLocais_ = "sim";}
else
{$navegadoresLocais_ = "nao";}
if(empty($i3georendermode)){
$i3georendermode_ = 0;
}
else{
$i3georendermode_ = $i3georendermode;
}
/*
Inicia a seção
O i3geo inicia uma seção específica no servidor, denominada i3GeoPHP.
Se já houver uma seção aberta, em função de outro browser estar ativo, cria uma nova. Faz a cópia das variáveis definidas para itens da seção.
*/
session_name("i3GeoPHP");
session_start();
//echo $_SESSION["map_file"];exit;
if (!isset($g_sid)){$g_sid="";}
if(isset($_SESSION["map_file"]) || $g_sid != "" || $g_sid == "undefined")
{session_regenerate_id();$_SESSION = array();}
/*
Aguarde
Monta a apresentação do aguarde.
Aqui é necessário verificar se $executa está definido
isso pq algumas aplicações podem ser prejudicadas caso o aguarde seja mostrado
*/
$_SESSION["dir_tmp"] = $dir_tmp_;
$_SESSION["cachedir"] = $cachedir_;
$_SESSION["emailInstituicao"] = $emailInstituicao_;
$_SESSION["locmapserv"] = $locmapserv_;
$_SESSION["locaplic"] = $locaplic_;
//$_SESSION["locsistemas"] = $locsistemas_;
//$_SESSION["locidentifica"] = $locidentifica_;
$_SESSION["R_path"] = $R_path_;
$_SESSION["mapext"] = $mapext_;
$_SESSION["debug"] = $debug_;
$_SESSION["ler_extensoes"] = $ler_extensoes_;
$_SESSION["postgis_mapa"] = $postgis_mapa_;
$_SESSION["perfil"] = $perfil_;
$_SESSION["navegadoresLocais"] = $navegadoresLocais_;
$_SESSION["utilizacgi"] = $utilizacgi_;
$_SESSION["tituloInstituicao"] = $tituloInstituicao_;
//$_SESSION["atlasxml"] = $atlasxml;
$_SESSION["expoeMapfile"] = $expoeMapfile;
$_SESSION["googleApiKey"] = $googleApiKey_;
$_SESSION["mensagemInicia"] = $mensagemInicia_;
$_SESSION["interfacePadrao"] = $interfacePadrao_;
if(isset($interface_))
$_SESSION["interface"] = $interface_;
if(isset($kmlurl_))
$_SESSION["kmlurl"] = $kmlurl_;
//rotina de segurança, ver http://shiflett.org/articles/the-truth-about-sessions
$fingerprint = 'I3GEOSEC' . $_SERVER['HTTP_USER_AGENT'];
$_SESSION['fingerprint'] = md5($fingerprint . session_id());
$_SESSION["mapdir"] = $diretorios[1];
$_SESSION["imgdir"] = $diretorios[2];
$_SESSION["contadorsalva"] = 0;//essa variavel e utilizada pela ferramenta telaremota. Toda vez que o mapa e salvo, acrescenta 1 (veja classesphp/mapa_controle.php)
$_SESSION["i3georendermode"] = $i3georendermode_;
$_SESSION["saikuUrl"] = $saikuUrl_;
//
//pega todas as variáveis da sessão, mesmo as que foram definidas anteriormente
//
foreach(array_keys($_SESSION) as $k)
{eval("\$".$k."='".$_SESSION[$k]."';");}
$postgis_mapa = $postgis_mapa_;
/*
Define os arquivos .map
Seleciona os arquivos mapfile que serão carregados como base conforme o tipo de sistema operacional.
A variável $base pode ser definida como um parâmetro na inicialização, caso contrário será utilizado o valor definido em ms_configura.php ou o i3Geo tentará descobrir o melhor arquivo a ser usado, conforme o que existir em i3geo/aplicmap.
Os arquivos .map padrão são armazenados em i3geo/aplicmap.
O arquivo é lido conforma a característica do sistema operacional.
*/
$versao = versao();
$versao = $versao["principal"];
if(!isset($base) || $base == "")
{
if (strtoupper(substr(PHP_OS, 0, 3) == 'WIN'))
{$base = $locaplic."/aplicmap/geral1windowsv".$versao.".map";}
else
{
if($base == "" && file_exists('/var/www/i3geo/aplicmap/geral1debianv'.$versao.'.map')){
$base = "/var/www/i3geo/aplicmap/geral1debianv".$versao.".map";
}
if($base == "" && file_exists('/var/www/html/i3geo/aplicmap/geral1fedorav'.$versao.'.map')){
$base = "/var/www/html/i3geo/aplicmap/geral1fedorav".$versao.".map";
}
if($base == "" && file_exists('/opt/www/html/i3geo/aplicmap/geral1fedorav'.$versao.'.map')){
$base = "/opt/www/html/i3geo/aplicmap/geral1v".$versao.".map";
}
if($base == "")
{$base = $locaplic."/aplicmap/geral1v".$versao.".map";}
}
}
//if(!isset($estadosl))
//{$estadosl = "estadosl";}
/*
Cria os objetos map que serão processados
O arquivo definido em $base é lido como um objeto map. Esse objeto será processado para incluir novos layers e alterar outros parâmetros definidos pelo usuário.
*/
if (file_exists($base))
{
$map = ms_newMapObj($base);
$mapn = ms_newMapObj($base);
}
else
{
$map = ms_newMapObj($locaplic."/aplicmap/".$base.".map");
$mapn = ms_newMapObj($locaplic."/aplicmap/".$base.".map");
}
/*
Utiliza um projeto gvSig para compor o mapa
*/
if(!empty($gvsiggvp)){
incluiMapaGvsig($gvsiggvp,$gvsigview);
}
/*
Parâmetros adicionais.
Processa os parâmetros para a inicialização verificando se foram passados pela URL ou não.
*/
if (!isset($mapext))
{$mapext = $map->extent->minx." ".$map->extent->miny." ".$map->extent->maxx." ".$map->extent->maxy;}
if (!isset ($map_reference_image)) //arquivo com a imagem de referência
{$map_reference_image = $map->reference->image;}
if (!isset ($map_reference_extent)) //extensão geográfica da imagem do mapa de referência
{$map_reference_extent = $map->reference->extent->minx." ".$map->reference->extent->miny." ".$map->reference->extent->maxx." ".$map->reference->extent->maxy;}
if(!isset($interface)){
if(!isset($interfacePadrao))
{$interfacePadrao = "openlayers.htm";}
$interface = $interfacePadrao;
}
if(isset($layers) && !isset($temasa))
{$temasa = $layers;}
incluiTemasIniciais();
if(isset($layers))
{ligaTemas();}
if(isset($desligar))
{desligaTemasIniciais();}
if (isset($map_reference_image))
{$mapn->reference->set("image",$map_reference_image);}
$extr = $mapn->reference->extent;
if (isset($map_reference_extent))
{
$temp = explode(" ",$map_reference_extent);
foreach ($temp as $t)
{
if ($t != "")
{$newext[] = $t;}
}
if (count($newext) == 4)
{$extr->setextent($newext[0], $newext[1], $newext[2], $newext[3]);}
}
$ext = $mapn->extent;
$newext = array();
if ((isset($mapext)) && ($mapext != ""))
{
$temp = explode(" ",$mapext);
foreach ($temp as $t)
{
if ($t != "")
{$newext[] = $t;}
}
if (count($newext) == 4)
{$ext->setextent($newext[0], $newext[1], $newext[2], $newext[3]);}
}
/*
Configura os endereços corretos no mapfile.
Altera as propriedades imagepath e imageurl corrigindo os caminhos padrão conforme o diretório criado para armazenar o mapa de trabalho.
*/
$w = $mapn->web;
$atual = $w->imagepath;
$w->set("imagepath",$atual.$diretorios[2]."/");
$atual = $w->imageurl;
$w->set("imageurl",$atual.$diretorios[2]."/");
$salvo = $mapn->save($tmpfname);
$_SESSION["imgurl"] = strtolower($protocolo[0])."://".$_SERVER['HTTP_HOST'].$atual.$diretorios[2]."/";
$_SESSION["tmpurl"] = strtolower($protocolo[0])."://".$_SERVER['HTTP_HOST'].$atual;
$_SESSION["map_file"] = $tmpfname;
$_SESSION["mapext"] = $mapext;
if (isset($executa))
{
if (file_exists($executa))
{include_once ($executa);}
if (function_exists($executa))
{eval($executa."();");}
}
if(isset($wkt))
{insereWKTUrl();}
if(isset($pontos))
{inserePontosUrl();}
if(isset($linhas))
{insereLinhasUrl();}
if(isset($poligonos))
{inserePoligonosUrl();}
if(isset($url_wms))
{incluiTemaWms();}
adaptaLayers();
if (file_exists($locaplic."/pacotes/geoip") && file_exists($locaplic."/pacotes/geoip/GeoLiteCity.dat"))
{require_once(dirname(__FILE__)."/ms_registraip.php");}
//echo $tmpfname;exit;
if ($interface != "mashup")
{abreInterface($interface,$caminho,$tempo);}
/*
Adapta os dados de cada layer.
Faz alterações em cada layer caso sejam necessárias.
*/
function adaptaLayers(){
global $tmpfname,$versao;
$mapa = ms_newMapObj($tmpfname);
$path = $mapa->shapepath;
$numlayers = $mapa->numlayers;
for($i=0;$i<$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);}
//para impedir erros na legenda
if($layer->getmetadata("classe") == "")
{$layer->setmetadata("classe","");}
if($versao > 5){
$layer->setprocessing("LABEL_NO_CLIP=True");
$layer->setprocessing("POLYLINE_NO_CLIP=True");
}
}
$mapa->save($tmpfname);
erroCriacao();
}
/*
Redireciona para o HTML definido em $interface, abrindo o mapa
*/
function abreInterface($interface,$caminho,$tempo){
$nomeInterface = explode(".",basename($interface));
//$_SESSION["interface"] = $nomeInterface[0];
if (count(explode(".php",$interface)) > 1){
if(file_exists($caminho."interface/".$interface))
{include_once($caminho."interface/".$interface);}
else
{include_once($interface);}
exit;
}
else{
if(file_exists($caminho."interface/".$interface))
{$urln = $caminho."interface/".$interface."?".session_id();}
else
{$urln = $interface."?".session_id();}
if(!headers_sent())
{header("Location:".$urln);}
else
{echo "";}
}
}
/*
Desliga os temas definidos na variável $desligar
*/
function desligaTemasIniciais()
{
global $desligar,$mapn;
$layers = str_replace(','," ",$desligar);
$lista = explode(" ", $layers);
foreach ($lista as $l)
{
if ($l == "")
{continue;}
if(@$mapn->getLayerByName($l))
{$layern = $mapn->getLayerByName($l);$layern->set("status",MS_OFF);}
$grupos = $mapn->getLayersIndexByGroup($l);
if(count($grupos) > 0)
{
for ($i = 0;$i < count($grupos);++$i)
{
$layern = $mapn->getLayer($grupos[$i]);
if(strtolower($layern->group) == strtolower($l))
{
$layern->set("status",MS_OFF);
}
}
}
}
erroCriacao();
}
/*
Liga os temas definidos na variável $layers
*/
function ligaTemas()
{
global $layers,$mapn;
if (isset($layers))
{
$layers = str_replace(','," ",$layers);
$lista = explode(" ", $layers);
foreach ($lista as $l)
{
if ($l == "")
{continue;}
if(@$mapn->getLayerByName($l))
{$layern = $mapn->getLayerByName($l);$layern->set("status",MS_DEFAULT);}
$grupos = $mapn->getLayersIndexByGroup($l);
if(count($grupos) > 0)
{
for ($i = 0;$i < count($grupos);++$i)
{
$layern = $mapn->getLayer($grupos[$i]);
if(strtolower($layern->group) == strtolower($l))
{
$layern->set("status",MS_DEFAULT);
}
}
}
}
}
erroCriacao();
}
/*
Inclui os temas definidos na variável $temasa
Os temas devem estar em i3geo/temas
*/
function incluiTemasIniciais(){
global $temasa,$mapn,$locaplic;
if (strtoupper(substr(PHP_OS, 0, 3)) == 'WIN')
{$temasdir = $locaplic."\\temas";}
else
{$temasdir = $locaplic."/temas";}
if (!isset($temasa)){$temasa = "";}
$temasa = str_replace(','," ",$temasa);
$alayers = explode(" ",$temasa);
$existeraster = false;
foreach ($alayers as $arqt) {
$arqtemp = "";
$arqt = trim($arqt);
if ($arqt == "")
{continue;}
$extensao = ".map";
$arqt = str_replace(".gvp","",$arqt);
if(file_exists($arqt.".gvp")){
$extensao = ".gvp";
$arqt = $arqt.".gvp";
}
if(file_exists($arqt)){
$arqtemp = $arqt;
}
if ((strtoupper(substr(PHP_OS, 0, 3) == 'WIN')) && (file_exists($temasdir."\\".$arqt."php"))){
$extensao = ".php";
}
elseif (file_exists($temasdir."/".$arqt.".php")){
$extensao = ".php";
}
if ((strtoupper(substr(PHP_OS, 0, 3) == 'WIN')) && (file_exists($temasdir."\\".$arqt."gvp"))){
$extensao = ".gvp";
}
elseif (file_exists($temasdir."/".$arqt.".gvp")){
$extensao = ".gvp";
}
if ((strtoupper(substr(PHP_OS, 0, 3) == 'WIN')) && (file_exists($locaplic."\\aplicmap\\".$arqt.$extensao))){
$arqtemp = $locaplic."\\aplicmap\\".$arqt.$extensao;
}
elseif (file_exists($locaplic."/aplicmap/".$arqt.$extensao)){
$arqtemp = $locaplic."/aplicmap/".$arqt.$extensao;
}
if ((strtoupper(substr(PHP_OS, 0, 3) == 'WIN')) && (file_exists($temasdir."\\".$arqt.$extensao))){
$arqtemp = $temasdir."\\".$arqt.$extensao;
}
elseif (file_exists($temasdir."/".$arqt.$extensao)){
$arqtemp = $temasdir."/".$arqt.$extensao;
}
if($arqtemp == ""){
echo "
Impossível acessar tema $arqtemp";
}
else{
if ($extensao == ".map" && !@ms_newMapObj($arqtemp)){
echo "
Problemas com a camada $arqtemp
";
}
else{
if($extensao == ".map"){
$maptemp = @ms_newMapObj($arqtemp);
for($i=0;$i<($maptemp->numlayers);++$i){
//error_reporting(0);
$layern = $maptemp->getLayer($i);
if($layern->type == MS_LAYER_RASTER)
{$existeraster = true;}
if ($layern->name == "estadosl")
{$layern->set("data",$locaplic."/aplicmap/dados/estados.shp");}
$layern->setmetadata("nomeoriginal",$layern->name);
$nNome = str_replace(".map","",basename($arqtemp));
$layern->setmetadata("arquivotemaoriginal",$nNome);
autoClasses($layern,$mapn);
//
//necessário para não alterar a extensão do mapa por esse parâmetro
//
$layern->setmetadata("aplicaextensao","");
//cria e aplica sld se for wms e existirem classes
if($layern->classitem != "" && $layern->connectiontype == 7 && $layern->numclasses > 0 && $layern->getmetadata("wms_sld_body") == ""){
$tipotemp = $layern->type;
$statustemp = $layern->status;
$tiporep = $layern->getmetadata("tipooriginal");
$layern->set("type",MS_LAYER_POLYGON);
if ($tiporep == "linear")
{$layern->set("type",MS_LAYER_LINE);}
if ($tiporep == "pontual")
{$layern->set("type",MS_LAYER_POINT);}
$layern->set("status",MS_DEFAULT);
$sld = $layern->generateSLD();
if($sld != "")
$layern->setmetadata("wms_sld_body",str_replace('"',"'",$sld));
$layern->set("type",$tipotemp);
$layern->set("status",$statustemp);
}
cloneInlineSymbol($layern,$maptemp,$mapn);
ms_newLayerObj($mapn, $layern);
}
}
if($extensao == ".php"){
include_once($arqtemp);
eval($arqt."(\$mapn);");
}
if($extensao == ".gvp"){
include_once($locaplic."/pacotes/gvsig/gvsig2mapfile/class.gvsig2mapfile.php");
$gm = new gvsig2mapfile($arqtemp);
$gvsigview = $gm->getViewsNames();
foreach($gvsigview as $v){
$dataView = $gm->getViewData($v);
$mapn = $gm->addLayers($mapn,$v,$dataView["layerNames"]);
}
$next = $dataView["extent"];
$ext = $mapn->extent;
$ext->setextent($next[0],$next[1],$next[2],$next[3]);
}
}
}
}
//
//muda para RGB para melhorar o desenho da imagem raster
//
if($existeraster){
//$of = $mapn->outputformat;
//$of->set("imagemode",MS_IMAGEMODE_RGB);
}
erroCriacao();
}
/*
Cria os arquivos vazios index.htm e index.html nos diretórios temporários
*/
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;
}
}
/*
Mostra a mensagem de aguarde
*/
function mostraAguarde()
{
global $interface,$mensagemInicia,$tituloInstituicao;
if (!isset($interface))
{
echo "";
echo '';
echo "".$tituloInstituicao."";
echo '';
echo ''.$mensagemInicia.'
Aguarde...preparando o mapa
';
echo '';
echo " |
";
echo " | ";
echo " | ";
echo " | ";
echo " | ";
echo "
";
echo '';
}
}
/*
Insere elementos no mapa a partir de uma string definida em wkt
*/
function insereWKTUrl()
{
global $tamanhosimbolo,$simbolo,$corsimbolo,$wkt,$nometemawkt,$dir_tmp,$imgdir,$tmpfname,$locaplic;
include_once "pacotes/phpxbase/api_conversion.php";
if (!isset($nometemapontos))
{$nometemapontos="WKT";}
if ($nometemapontos == "")
{$nometemapontos="WKT";}
//
//cria o shape file
//
$shape = ms_shapeObjFromWkt($wkt);
$tipol = $shape->type;
if($tipol == 0){$tipol = 3;}
$nomeshp = $dir_tmp."/".$imgdir."/wkts";
// cria o dbf
$def = array();
$items = array("COORD");
foreach ($items as $ni)
{$def[] = array($ni,"C","254");}
if(!function_exists(dbase_create))
{xbase_create($nomeshp.".dbf", $def);}
else
{dbase_create($nomeshp.".dbf", $def);}
$dbname = $nomeshp.".dbf";
$db=xbase_open($dbname,2);
if ($tipol == 1)
{$novoshpf = ms_newShapefileObj($nomeshp, MS_SHP_ARC);}
if ($tipol == 3)
{$novoshpf = ms_newShapefileObj($nomeshp, MS_SHP_MULTIPOINT);}
if ($tipol == 2)
{$novoshpf = ms_newShapefileObj($nomeshp, MS_SHP_POLYGON);}
$reg[] = "";
$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","wktins");
$layer->set("data",$nomeshp.".shp");
$layer->setmetadata("DOWNLOAD","sim");
$layer->setmetadata("temalocal","sim");
$layer->setmetadata("tema",$nometemawkt);
$layer->setmetadata("classe","sim");
$layer->set("type",$shape->type);
$layer->set("status",MS_DEFAULT);
$classe = ms_newClassObj($layer);
$classe->set("name"," ");
$estilo = ms_newStyleObj($classe);
if($shape->type == 0)
{
if(!isset($simbolo))
$estilo->set("symbolname","ponto");
if(!isset($tamanhosimbolo))
$estilo->set("size",6);
}
if($shape->type == 1)
{
if(!isset($simbolo))
$estilo->set("symbolname","linha");
if(!isset($tamanhosimbolo))
$estilo->set("size",3);
}
if($shape->type == 2)
{$layer->set("opacity","50");}
$cor = $estilo->color;
if(!isset($corsimbolo))
{$corsimbolo ="255,0,0";}
$corsimbolo = str_replace(" ",",",$corsimbolo);
$corsimbolo = explode(",",$corsimbolo);
$cor->setRGB($corsimbolo[0],$corsimbolo[1],$corsimbolo[2]);
$salvo = $mapa->save($tmpfname);
erroCriacao();
}
/*
Insere um tema do tipo ponto
*/
function inserePontosUrl()
{
global $pontos,$tamanhosimbolo,$simbolo,$corsimbolo,$nometemapontos,$dir_tmp,$imgdir,$tmpfname,$locaplic;
include_once "pacotes/phpxbase/api_conversion.php";
if (!isset($nometemapontos))
{$nometemapontos="Pontos";}
if ($nometemapontos == "")
{$nometemapontos="Pontos";}
//
//cria o shape file
//
$tipol = MS_SHP_POINT;
$nomeshp = $dir_tmp."/".$imgdir."/pontosins";
// cria o dbf
$def = array();
$items = array("COORD");
foreach ($items as $ni)
{$def[] = array($ni,"C","254");}
if(!function_exists(dbase_create))
{xbase_create($nomeshp.".dbf", $def);}
else
{dbase_create($nomeshp.".dbf", $def);}
$dbname = $nomeshp.".dbf";
$db=xbase_open($dbname,2);
$novoshpf = ms_newShapefileObj($nomeshp, $tipol);
$pontos = explode(" ",trim($pontos));
if(count($pontos) == 1)
{$pontos = explode(",",trim($pontos[0]));}
foreach ($pontos as $p)
{if (is_numeric($p)){$pontosn[] = $p;}}
$pontos = $pontosn;
for ($ci = 0;$ci < count($pontos);$ci=$ci+2)
{
$reg = array();
$reg[] = $pontos[$ci]." ".$pontos[$ci+1];
$shape = ms_newShapeObj($tipol);
$linha = ms_newLineObj();
$linha->addXY($pontos[$ci],$pontos[$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","pontoins");
$layer->set("data",$nomeshp.".shp");
$layer->setmetadata("DOWNLOAD","sim");
$layer->setmetadata("tema",$nometemapontos);
$layer->setmetadata("classe","sim");
$layer->setmetadata("temalocal","sim");
$layer->setmetadata("ATLAS","nao");
$layer->set("type",MS_LAYER_POINT);
$layer->set("status",MS_DEFAULT);
$classe = ms_newClassObj($layer);
$classe->set("name"," ");
$estilo = ms_newStyleObj($classe);
if(!isset($simbolo))
{$simbolo = "ponto";}
$estilo->set("symbolname",$simbolo);
if(!isset($tamanhosimbolo))
{$tamanhosimbolo = 6;}
$estilo->set("size",$tamanhosimbolo);
$cor = $estilo->color;
if(!isset($corsimbolo))
{$corsimbolo ="255,0,0";}
$corsimbolo = str_replace(" ",",",$corsimbolo);
$corsimbolo = explode(",",$corsimbolo);
$cor->setRGB($corsimbolo[0],$corsimbolo[1],$corsimbolo[2]);
$salvo = $mapa->save($tmpfname);
erroCriacao();
}
/*
Insere um tema do tipo linear
As linhas devem ter os pontos separados por espaços e cada linha separada por vírgula
*/
function insereLinhasUrl()
{
global $tamanhosimbolo,$simbolo,$corsimbolo,$linhas,$nometemalinhas,$dir_tmp,$imgdir,$tmpfname,$locaplic;
include_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");}
if(!function_exists(dbase_create))
{xbase_create($nomeshp.".dbf", $def);}
else
{dbase_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)
{
$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)
{
$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.".shp");
$layer->setmetadata("DOWNLOAD","sim");
$layer->setmetadata("temalocal","sim");
$layer->setmetadata("tema",$nometemalinhas);
$layer->setmetadata("classe","sim");
$layer->setmetadata("ATLAS","nao");
$layer->set("type",MS_LAYER_LINE);
$layer->set("status",MS_DEFAULT);
$classe = ms_newClassObj($layer);
$classe->set("name"," ");
$estilo = ms_newStyleObj($classe);
if(!isset($simbolo))
{$simbolo = "linha";}
$estilo->set("symbolname",$simbolo);
if(!isset($tamanhosimbolo))
{$tamanhosimbolo = 6;}
$estilo->set("size",$tamanhosimbolo);
$cor = $estilo->color;
if(!isset($corsimbolo))
{$corsimbolo ="255,0,0";}
$corsimbolo = str_replace(" ",",",$corsimbolo);
$corsimbolo = explode(",",$corsimbolo);
$cor->setRGB($corsimbolo[0],$corsimbolo[1],$corsimbolo[2]);
$salvo = $mapa->save($tmpfname);
erroCriacao();
}
/*
Insere um tema poligonal.
Os polígonos devem ter os pontos separados por espaços e cada polígono separado por vírgula
*/
function inserePoligonosUrl()
{
global $tamanhosimbolo,$simbolo,$corsimbolo,$poligonos,$nometemapoligonos,$dir_tmp,$imgdir,$tmpfname,$locaplic;
include_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");}
if(!function_exists(dbase_create))
{xbase_create($nomeshp.".dbf", $def);}
else
{dbase_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)
{
$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)
{
$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.".shp");
$layer->setmetadata("DOWNLOAD","sim");
$layer->setmetadata("temalocal","sim");
$layer->setmetadata("tema",$nometemapoligonos);
$layer->setmetadata("classe","sim");
$layer->setmetadata("ATLAS","nao");
$layer->set("type",MS_LAYER_POLYGON);
$layer->set("opacity","50");
$layer->set("status",MS_DEFAULT);
$classe = ms_newClassObj($layer);
$classe->set("name"," ");
$estilo = ms_newStyleObj($classe);
$cor = $estilo->color;
if(!isset($corsimbolo))
{$corsimbolo ="255,0,0";}
$corsimbolo = str_replace(" ",",",$corsimbolo);
$corsimbolo = explode(",",$corsimbolo);
$cor->setRGB($corsimbolo[0],$corsimbolo[1],$corsimbolo[2]);
$salvo = $mapa->save($tmpfname);
erroCriacao();
}
/*
Inclui no mapa um tema do tipo WMS
*/
function incluiTemaWms()
{
global $nome_wms,$url_wms,$layer_wms,$style_wms,$srs_wms,$image_wms,$versao_wms,$tmpfname,$locaplic;
include_once ($locaplic."/classesphp/classe_mapa.php");
if(!$nome_wms)
{$nome = $layer_wms." ".$style_wms;}
else
$nome = $nome_wms;
$m = new Mapa($tmpfname);
$m->adicionatemawms($layer_wms,$url_wms,$style_wms,$srs_wms,$image_wms,$locaplic,"",$versao_wms,$nome,"","","","","nao","text/plain","");
$salvo = $m->salva($tmpfname);
//echo $tmpfname;exit;
erroCriacao();
}
/*
Projeto gvsig
*/
function incluiMapaGvsig($gvsiggvp,$gvsigview=""){
global $mapn,$locaplic;
include_once($locaplic."/pacotes/gvsig/gvsig2mapfile/class.gvsig2mapfile.php");
$gm = new gvsig2mapfile($gvsiggvp);
if(empty($gvsigview)){
$gvsigview = $gm->getViewsNames();
//$gvsigview = $gvsigview[0];
}
else{
$gvsigview = str_replace(" ",",",$gvsigview);
$gvsigview = explode(",",$gvsigview);
}
$numlayers = $mapn->numlayers;
for ($i=0;$i < $numlayers;$i++){
$layer = $mapn->getlayer($i);
$layer->set("status",MS_DELETE);
}
foreach($gvsigview as $v){
if($v != ""){
$dataView = $gm->getViewData($v);
$mapn = $gm->addLayers($mapn,$gvsigview,$dataView["layerNames"]);
}
}
$next = $dataView["extent"];
$ext = $mapn->extent;
$ext->setextent($next[0],$next[1],$next[2],$next[3]);
}
/*
Captura e mostra os erros de processamento do mapserver
*/
function erroCriacao(){
$error = ms_GetErrorObj();
while($error && $error->code != MS_NOERR)
{
printf("
Error in %s: %s
\n", $error->routine, $error->message);
$error = $error->next();
}
ms_ResetErrorList();
}
/*
Cria os diretórios temporários para a aplicação.
Parametro:
$dir_tmp {string} - Diretório temporário (no servidor) utilizado pelo mapserver.
$$cachedir {string} - Diretório de cache temporário definido no ms_configura.php
Retorno:
{boleano}
*/
function criaDirMapa($dir_tmp,$cachedir="")
{
if(!file_exists($dir_tmp)){
@mkdir ($dir_tmp,0777);
}
if(file_exists($dir_tmp))
{
$tmpdirname = nomeRandomico();
$crdir = @mkdir ($dir_tmp."/".$tmpdirname,0777);
chmod($dir_tmp."/".$tmpdirname,0777);
$crdiri = @mkdir ($dir_tmp."/img".$tmpdirname,0777);
chmod($dir_tmp."/img".$tmpdirname,0777);
$mapfile = $dir_tmp."/".$tmpdirname."/".$tmpdirname.".map";
$tmpimgname = "img".$tmpdirname;
@mkdir($dir_tmp."/comum",0777);
//utilizado para armazenar os arquivos de fonte de dados do SAIKU
@mkdir($dir_tmp."/saiku-datasources",0777);
chmod($dir_tmp."/saiku-datasources",0777);
//
if($cachedir == ""){
@mkdir($dir_tmp."/cache",0777);
chmod($dir_tmp."/cache",0777);
@mkdir($dir_tmp."/cache/googlemaps",0777);
chmod($dir_tmp."/cache/googlemaps",0777);
}
else{
@mkdir($cachedir,0777);
chmod($cachedir,0777);
@mkdir($cachedir."/googlemaps",0777);
chmod($cachedir."/googlemaps",0777);
}
if(file_exists($dir_tmp."/".$tmpdirname))
return array($mapfile,$tmpdirname,$tmpimgname);
else
{return false;}
}
else
{return false;}
}
?>