_filter= Exemplo de filtro http://localhost/i3geo/ms_criamapa.php?temasa=_lbiomashp&map_layer__lbiomashp_filter=(('[CD_LEGENDA]'='CAATINGA'))&temasa=_lbiomashp no caso de camadas Postgis basta usar map_layer__lbiomashp_filter=cd_legenda='CAATINGA' */ if(isset($_GET["ajuda"])){ echo "
";
	echo"
Parâmetros:

base - arquivo mapfile que servirá de base para a criação do mapa. Por default, são utilizados os arquivos existentes em i3geo/aplicmap (geral1windows, geral1,...)
	Essa variável pode ser definida em ms_configura também. Se não estiver definida em nenhum lugar, o i3Geo tentará descobrir o arquivo adequado a ser utilizado. Você pode utilizar essa opção para abrir um mapa com as camadas que você quiser, mas para evitar redundâncias, prefira o uso de &temasa

temasa - lista, separada por espaços, com os nomes dos arquivos map ou gvsig que serão adicionados ao mapa. Se o arquivo não estiver no diretório i3geo/temas, o nome deve incluir o caminho completo no servidor. O arquivo pode conter mais de um layer pois todos os existentes serão adicionados ao mapa. Por default, todos os layers encontrados nos mapfiles são adicionados ao mapa com o status de desenho em OFF.

layers - lista, separada por espaços, com os nomes dos layers que serão ligados. A lista deve conter os nomes dos layers e não os nomes dos mapfiles acrescentados ao mapa. Por exemplo, ao adicionar com 'temasa' um mapfile chamado 'transporte' que contenha os layers 'estradas' e 'ferrovias' os dois layers serão adicionados ao mapa. Para que esses dois layers fiquem visíveis no mapa deve-se utilizar &layers=estradas ferrovias.

desligar - lista com os nomes dos temas que serão forçados a inicializar desligados, ou seja, com STATUS OFF

mapext - extensao geografica que será utilizada. Por padrão, a extensão geográfica é definida para abranger o Brasil todo. Para alterar o padrão deve-se utilizar o parâmetro mapext para especificar a nova abrangência. Essa abrangência deve ser definida em coordenadas no formato décimos de grau e na projeção geográfica. Exemplo: &mapext=-54 -30 -50 -12. Observe que a ordem dos valores são xmin ymin xmax ymax

executa - programa ou função em php que será executado via include. O include é feito no final do processo de inicialização quando a variável $tmpfname já está definida. Essa variável guarda o nome do arquivo mapfile que será utilizado pelo i3geo.

interface - nome da interface que será utilizada para abrir o mapa. As interfaces são arquivos HTML que podem estar no diretório aplicmap. Por default, utiliza-se o geral.htm. Vc pode copiar esse html e alterá-lo para customizar o mapa. Para chamar o html customizado, utilize ms_criamapa.php?interface=meumapa.htm

perfil - perfil utilizado para restringir os menus de temas. ms_criamapa.php?perfil=usuário1

caminho - caminho relativo que indica o local onde a interface do mapa esta localizada.

pontos - lista de coordenadas x e y que serão adicionadas como pontos no mapa.

nometemapontos - nome do tema de pontos

linhas - lista de coordenadas x e y que serão adicionadas como linhas no mapa. As coordenadas de linhas diferentes devem ser separadas por ',', por exemplo: -54 -12 -50 -12,-50 -1 -50 -2 -50 -3

nometemalinhas - nome do tema de linhas

poligonos - lista de coordenadas x e y que serão adicionadas como polígonos no mapa. As coordenadas dos vértices de polígonos diferentes devem ser separadas por ','.

nometemapoligonos - nome do tema de polígonos

simbolo - nome do símbolo que será utilizado para desenhar os elementos inseridos (veja arquivo de símbolos em i3geo/symbols)

corsimbolo - cor do símbolo definido em RGB separados por espaço ou vírgula

tamanhosimbolo - tamanho do símbolo em pixels

wkt - insere elementos no mapa com coordenadas definidas em wkt

nometemawkt - nome do tema em wkt

idioma - idioma da interface (veja os idiomas disponíveis em classe_idioma.js)

kmlurl - url de um arquivo KML que será incluido no mapa. Válido apenas na interface google maps

url_wms - endereço de um WMS (será incluido como uma camada no mapa)

layer_wms - nome do layer

style_wms - estilo do layer

nome_wms - nome da camada (titulo)

srs_wms - código da projeção

image_wms - tipo de imagem disponível

versao_wms - Versão do WMS (necessário quando da inclusão de uma camada WMS diretamente pela URL)

gvsiggvp - (depreciado na versão 4.7 - utilize o parametro temasa) endereço no servidor do arquivo de projeto gvSig (gvp) que será utilizado para construir o mapa (experimental)

gvsigview - lista com nomes de views existentes no projeto gvSig separado por virgula. Se for vazio, serao adicionadas todas as views. Exemplo (http://localhost/i3geo/ms_criamapa.php?gvsiggvp=c:\temp\teste.gvp&gvsigview=Untitled - 0)

restauramapa - id do mapa armazenado no sistema de administracao e que será restaurado para ser aberto novamente (veja em i3geo/admin/html/mapas.html)

filtros - filtros podem ser adicionados incluindo o parametro da seguinte forma: &map_layer__filter=

  Exemplo de filtro

  http://localhost/i3geo/ms_criamapa.php?layers=_lbiomashp&temasa=_lbiomashp&map_layer__lbiomashp_filter=(('[CD_LEGENDA]'='CAATINGA'))

  no caso de camadas Postgis basta usar map_layer__lbiomashp_filter=cd_legenda='CAATINGA'

	";
	exit;
}


//$_COOKIE = array();
//
//quando $funcao existe, é pq o ms_criamapa.php está sendo utilizado como um include em classesphp/mapa_controle.php
//
ms_ResetErrorList();
$parurl = array_merge($_GET,$_POST);
if (!isset($parurl["debug"]))
{error_reporting(0);$debug="nao";}
else
{error_reporting(0);$debug="sim";}
if(!isset($funcao))
{ob_end_clean();}
/*
Carrega as extensões PHP

Carrega as extensões utilizadas no programa de inicialização.
A carga das extensões geralmente é necessária nas instalações windows (ms4w) ou quando as mesmas não são carregadas pela própria inicialização do PHP.
*/
include_once (dirname(__FILE__)."/classesphp/carrega_ext.php");
/*
Include dos arquivos PHP.

Inclui os programas php com funções utilizadas pelo ms_criamapa.php
*/
include_once (dirname(__FILE__)."/classesphp/pega_variaveis.php");
include_once (dirname(__FILE__)."/classesphp/funcoes_gerais.php");
$versao = versao();
$versao = $versao["principal"];

//
//verifica a sessao que controla o login do usuario
//
/*
session_name("i3GeoLogin");
session_start();
if(empty($_SESSION["usuario"])){
	setcookie("i3geocodigologin", session_id());
	setcookie("i3geousuariologin", "");
	setcookie("i3GeoLogin", "");
	session_destroy();
}
*/

//
//a variável $base pode ser definida em ms_configura, mas a preferência é pela definição já existente
//por isso, $base é guardada em uma variável e retomada apos o include de ms_configura.php
//se restauramapa estiver definido, usa o mapfile guardado no banco de  administracao como a base
//
if(!isset($dir_tmp)){
	include_once (dirname(__FILE__)."/ms_configura.php");
}
if(!empty($restauramapa)){
	$base = restauraMapaAdmin($restauramapa,$dir_tmp);
	$m = ms_newMapObj($base);
	$w = $m->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 diretorios 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($dir_tmp,$diretorios); $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; } if(empty($statusFerramentas)){ $statusFerramentas_ = array(); } else{ $statusFerramentas_ = $statusFerramentas; } /* 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]."';"); } //sao arrays $postgis_mapa = $postgis_mapa_; $_SESSION["statusFerramentas"] = $statusFerramentas_; /* 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; } //arquivo com a imagem de referência if (!isset ($map_reference_image)){ $map_reference_image = $map->reference->image; } //extensão geográfica da imagem do mapa de referência if (!isset ($map_reference_extent)){ $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 = "black_ol.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]); } } else{ //algumas aplicacoes usam essa variavel (SAIKU) $mapext = $ext->minx." ".$ext->miny." ".$ext->maxx." ".$ext->maxy; } /* 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]."/"); $projecao = pegaProjecaoDefault("proj4"); if($projecao != ""){ $mapn->setProjection($projecao); } $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($tmpfname,$versao); 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($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){ $pr = $layer->getProcessing(); if(!in_array("LABEL_NO_CLIP=True",$pr)){ $layer->setprocessing("LABEL_NO_CLIP=True"); } if(!in_array("POLYLINE_NO_CLIP=True",$pr)){ $layer->setprocessing("POLYLINE_NO_CLIP=True"); } } // //verifica se deve aplicar filtro // $filtro = $_GET["map_layer_".$layer->name."_filter"]; if(!empty($filtro)){ $layer->setmetadata("CACHE","nao"); $layer->setfilter($filtro); } } $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 diretorios temporários */ function criaIndex($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;} } ?>