postgis_mapa = $postgis_mapa;
include_once(dirname(__FILE__)."/funcoes_gerais.php");
$this->v = versao();
$this->v = $this->v["principal"];
$this->localaplicacao = $locaplic;
if($map_file == "")
{
return;
}
$this->mapa = ms_newMapObj($map_file);
substituiConObj($this->mapa,$postgis_mapa);
$this->arquivo = str_replace(".map","",$map_file).".map";
if($tema != "" && @$this->mapa->getlayerbyname($tema))
{
$this->layer = $this->mapa->getlayerbyname($tema);
$this->nome = $tema;
$vermultilayer = new vermultilayer();
$vermultilayer->verifica($map_file,$tema);
if ($vermultilayer->resultado == 1) // o tema e multi layer
{
$ls = $vermultilayer->temas;
$this->visiveis = $vermultilayer->temasvisiveis;
}
else
{
$ls[] = $tema;
$this->visiveis = array($tema);
}
$this->grupo = $ls;
foreach ($ls as $l)
{
$t = $this->mapa->getlayerbyname($l);
$this->indices[] = $t->index;
}
}
if ($template == ""){
$template="legenda.htm";
}
if(file_exists($template))
{
$this->templateleg = $template;
return;
}
if (strtoupper(substr(PHP_OS, 0, 3) == 'WIN'))
{
$this->templateleg = $locaplic."\\aplicmap\\".$template;
}
else
{$this->templateleg = $locaplic."/aplicmap/".$template;
}
}
/*
function: salva
Salva o mapfile atual
*/
function salva()
{
$this->recalculaSLD();
restauraConObj($this->mapa,$this->postgis_mapa);
$this->mapa->save($this->arquivo);
}
/*
function: recalculaSLD
Constroi o SLD que é aplicado ao metadata wms_sld_body. O SLD resultante é baseado nas definições das classes existentes no layer
*/
function recalculaSLD(){
if($this->layer->classitem != "" && $this->layer->connectiontype == 7 && $this->layer->numclasses > 0){
$tipotemp = $this->layer->type;
$tiporep = $this->layer->getmetadata("tipooriginal");
$this->layer->set("type",MS_LAYER_POLYGON);
if ($tiporep == "linear")
{
$this->layer->set("type",MS_LAYER_LINE);
}
if ($tiporep == "pontual")
{
$this->layer->set("type",MS_LAYER_POINT);
}
$this->layer->set("status",MS_DEFAULT);
$this->layer->setmetadata("wms_sld_body","");
$sld = $this->layer->generateSLD();
if($sld != "")
{
$this->layer->setmetadata("wms_sld_body",str_replace('"',"'",$sld));
}
$this->layer->set("type",$tipotemp);
}
}
/*
function: aplicaLegendaImg
Aplica o metadata legendaimg que define um arquivo de imagem no lugar da criacao automatica da legenda
*/
function aplicaLegendaImg($imagem){
$this->layer->setmetadata("legendaimg",$imagem);
}
/*
function: criaLegenda
Gera a legenda processando o template HTML definido na construção da classe.
Se o tema for um WMS ou se o metadata legendaimg estiver definido, executa $this->tabelaLegenda
Return:
string com a legenda HTML
*/
function criaLegenda()
{
$l = "";
$numlayers = $this->mapa->numlayers;
if($this->nome != ""){
//verifica se é wms ou se o metadata legendaimg está definido
$c = $this->layer->connectiontype;
if ($c == 7 || $this->layer->getmetadata("legendaimg") != ""){
return($this->tabelaLegenda());
}
for ($i=0;$i < $numlayers;++$i){
$la = $this->mapa->getlayer($i);
if ($la->name != $this->nome)
{
$la->set("status",MS_OFF);
}
if ($la->group == $this->nome)
{
$la->set("status",MS_DEFAULT);
}
$la->set("minscaledenom",0);
$la->set("maxscaledenom",0);
}
$this->layer->set("status",MS_DEFAULT);
}
$desligar = array();
for ($i=0;$i < $numlayers;++$i){
$la = $this->mapa->getlayer($i);
if (strtoupper($la->getmetadata("ESCONDIDO")) == "SIM"){
$la->set("status",MS_OFF);
}
$desligarLayer = array();
if($la->status == MS_DEFAULT){
$nc = $la->numclasses;
for ($c = 0;$c < $nc;$c++){
$classe = $la->getclass($c);
if($classe->status == MS_OFF){
$desligarLayer[] = $c;
}
//remove o offset em simbolos do tipo imagem
if($classe->numstyles > 0){
$estilo = $classe->getstyle(0);
if($estilo->symbolname != "" && file_exists($estilo->symbolname)){
$estilo->set("offsetx",0);
$estilo->set("offsety",0);
}
}
}
$la->set("minscaledenom",0);
$la->set("maxscaledenom",0);
}
$desligar[$la->name] = $desligarLayer;
}
$legenda = $this->mapa->legend;
$legenda->set("template",$this->templateleg);
$tmparray["my_tag"] = "value_of_my_tag";
if(!$l = @$this->mapa->processlegendtemplate($tmparray)){
return ("erro");
}
//e necessario explodir as partes da legenda para converter os caracteres
$pedacos = explode("
",$l);
$n = count($pedacos);
for($i=0;$i<$n;$i++){
$pedacos[$i] = $this->converte($pedacos[$i]);
}
$l = implode("
",$pedacos);
return (array("legenda"=>$l,"desativar"=>$desligar));
}
function criaLegendaJson($w=25,$h=25)
{
$l = "";
$numlayers = $this->mapa->numlayers;
if($this->nome != ""){
//verifica se é wms ou se o metadata legendaimg está definido
$c = $this->layer->connectiontype;
if ($c == 7 || $this->layer->getmetadata("legendaimg") != ""){
return($this->tabelaLegenda());
}
for ($i=0;$i < $numlayers;++$i){
$la = $this->mapa->getlayer($i);
if ($la->name != $this->nome)
{
$la->set("status",MS_OFF);
}
if ($la->group == $this->nome)
{
$la->set("status",MS_DEFAULT);
}
$la->set("minscaledenom",0);
$la->set("maxscaledenom",0);
}
$this->layer->set("status",MS_DEFAULT);
}
$desligar = array();
$legenda = array();
for ($i=0;$i < $numlayers;++$i){
$la = $this->mapa->getlayer($i);
if (strtoupper($la->getmetadata("ESCONDIDO")) == "SIM"){
$la->set("status",MS_OFF);
}
$desligarLayer = array();
if($la->status == MS_DEFAULT){
if($la->getmetadata("legendaimg") != ""){
$classes = array();
$classes[] = array("nome"=>"","img"=>$la->getmetadata("legendaimg"), "checked"=>"checked", "index" => 0, "layer"=> $la->name );
$legenda[] = array("layer"=>$la->name,"nome"=>$this->converte($la->getmetadata("tema")),"classes"=>$classes);
} else {
$la->set("minscaledenom",0);
$la->set("maxscaledenom",0);
$nc = $la->numclasses;
$classes = array();
for ($c = 0;$c < $nc;$c++){
$ck = "checked";
$classe = $la->getclass($c);
if($classe->status == MS_OFF){
$ck = "";
}
//remove o offset em simbolos do tipo imagem
if($classe->numstyles > 0){
$estilo = $classe->getstyle(0);
if($estilo->symbolname != "" && file_exists($estilo->symbolname)){
$estilo->set("offsetx",0);
$estilo->set("offsety",0);
}
}
$imagem = $classe->createLegendIcon($w,$h)->saveWebImage();
$classes[] = array("nome"=>$this->converte($classe->name),"img"=>$imagem, "checked"=>$ck, "index" => $c, "layer"=> $la->name );
}
$legenda[] = array("layer"=>$la->name,"nome"=>$this->converte($la->getmetadata("tema")),"classes"=>$classes);
}
}
$desligar[$la->name] = $desligarLayer;
}
return (array("legenda"=>$legenda));
}
/*
function: legendaGrafica
Desenha a imagem da legenda.
return:
string de variaveis no formato javascript que permitem montar a legenda.
*/
function legendaGrafica(){
$numlayers = $this->mapa->numlayers;
for ($i=0;$i < $numlayers;++$i){
$layer = $this->mapa->getlayer($i);
if (($layer->data != "") && (strtoupper($layer->getmetadata("escondido")) != "SIM") && (strtoupper($layer->getmetadata("tema")) != "NAO")){
if ($layer->numclasses > 0){
$classe = $layer->getclass(0);
if (($classe->name == "") || ($classe->name == " "))
{
$classe->set("name",$layer->getmetadata("tema"));
}
//corrige o titulo da legenda
if($layer->type != 3 && $layer->type != 4){
$nclass = $layer->numclasses;
for($j=0;$j<$nclass;$j++){
$classe = $layer->getclass($j);
if($classe->title === ""){
$classe->title = $classe->name;
}
}
}
}
}
}
$nomeImagem = nomeRandomico();
$imgo = $this->mapa->drawlegend();
if($imgo->imagepath == "")
{
echo "Erro IMAGEPATH vazio";exit;
}
$nomer = ($imgo->imagepath)."leg".$nomeImagem.".png";
$imgo->saveImage($nomer);
$nomer = ($imgo->imageurl).basename($nomer);
return("var legimagem='".$nomer."';var legwidth=".$imgo->width.";var legheight=".$imgo->height.";var legpath='".$imgo->imagepath."';var legurl='".$imgo->imageurl."'");
}
/*
function: tabelaLegenda
Cria elementos para construir uma legenda no formato de tabela em HTML.
Utilizado na função de edição de legenda e legenda de WMS
parameters:
totaliza - sim|nao indica se os totais de elementos devem ser acrescentados ao nome da classe
return:
array
*/
function tabelaLegenda($totaliza="nao"){
$linhas = array();
foreach ($this->visiveis as $l){
$layer = $this->mapa->getlayerbyname($l);
//verifica se é wms ou wfs
$c = $layer->connectiontype;
$s = $layer->getmetadata("wms_sld_url");
$im = $layer->getmetadata("legendaimg");
$nc = $layer->numclasses;
//
//se for wms e tiver classes define o tipo de layer para poder gerar a legenda corretamente
//
if($c == 7 && $nc > 0){
$tipotemp = $layer->type;
$tiporep = $layer->getmetadata("tipooriginal");
$layer->set("type",MS_LAYER_POLYGON);
if($tiporep == "linear"){
$layer->set("type",MS_LAYER_LINE);
}
if ($tiporep == "pontual"){
$layer->set("type",MS_LAYER_POINT);
}
}
//
//se for WMS e não tiver classes, tenta pegar a legenda via requisição WMS
//
if ($c == 7) {
if($c == 7){
$con = $layer->connection;
$ver = $layer->getmetadata("wms_server_version");
$lwms = $layer->getmetadata("wms_name");
$f = $layer->getmetadata("wms_formatlist");
$f = explode(",",$f);
$f = $f[0];
$imgLeg = $con."&request=GetLegendGraphic&version=".$ver."&service=wms&layer=".$lwms."&format=".$f."&SLD=".$s;
if ($layer->getmetadata("legendawms") != ""){
$imgLeg = $layer->getmetadata("legendawms");
}
}
else{
$imgLeg = $im;
}
$linhas[] = array("tema"=>$l,"idclasse"=>"","nomeclasse"=>"","expressao"=>"","expressao"=>"","imagem"=>$imgLeg,"minScale"=>0,"maxScale"=>0);
}
else {
for ($c = 0;$c < $nc;$c++) {
$classe = $layer->getclass($c);
$imgi = $classe->createlegendicon(30,15);
$classe->drawlegendicon(30,15,$imgi,0,0);
$nomes = nomeRandomico(12);
$nomer = ($imgi->imagepath)."icone".$nomes.".png";
$imgi->saveImage($nomer);
$i = ($imgi->imageurl).basename($nomer);
$nomeclasse = $classe->name;
//if (function_exists("mb_convert_encoding"))
//{$nomeclasse = mb_convert_encoding($nomeclasse,"UTF-8","ISO-8859-1");}
$nomeclasse = $this->converte($nomeclasse);
$nomeexp = $classe->getExpressionString();
if (function_exists("mb_convert_encoding")) {
$nomeexp = mb_convert_encoding($nomeexp,"UTF-8","ISO-8859-1");
}
$linhas[] = array("tema"=>$l,"idclasse"=>$c,"nomeclasse"=>$nomeclasse,"expressao"=>$nomeexp,"imagem"=>$i,"proc"=>"","minScale"=>$classe->minscaledenom,"maxScale"=>$classe->maxscaledenom);
}
if (($totaliza=="sim") && ($nc > 1)){
$layer->set("template","none.htm");
$sopen = $layer->open();
if($sopen == MS_FAILURE){
return "erro";
}
$itens = $layer->getitems();
$total = 0;
$nreg = array();
for ($c = 0;$c < $nc;$c++){
$exp = $linhas[$c];
$exp = $exp["expressao"];
if($exp !== ""){
if($this->layer->connectiontype == MS_POSTGIS){
$exp = str_replace("eq"," = ",$exp);
$exp = str_replace("ne"," != ",$exp);
$exp = str_replace("lt"," < ",$exp);
$exp = str_replace("gt"," < ",$exp);
$exp = str_replace("(","",$exp);
$exp = str_replace(")","",$exp);
$exp = str_replace("'[","",$exp);
$exp = str_replace("]'","",$exp);
$exp = str_replace("' [","",$exp);
$exp = str_replace("] '","",$exp);
$exp = str_replace("and"," and ",$exp);
$exp = str_replace("or"," or ",$exp);
$exp = str_replace("[","",$exp);
$exp = str_replace("]","",$exp);
}
$teste = $layer->queryByAttributes($itens[0], $exp, 1);
if($teste != MS_SUCCESS){
$teste = $layer->queryByAttributes($itens[0], mb_convert_encoding($exp,"ISO-8859-1","UTF-8"), 1);
}
if($teste != MS_SUCCESS){
$teste = $layer->queryByAttributes($itens[0], mb_convert_encoding($exp,"UTF-8","ISO-8859-1"), 1);
}
}
else{
$teste = 0;
}
if ($teste == MS_SUCCESS){
$n = $layer->getNumResults();
$nreg[] = $n;
}
else {
$nreg[] = "erro";
}
$total = $total + $n;
}
$layer->close();
for ($c = 0;$c < $nc;$c++){
$classe = $layer->getclass($c);
$nome = $linhas[$c]["nomeclasse"];
$nome = explode(" - n=",$nome);
$nome = $nome[0]." - n=".$nreg[$c]."(".(round(($nreg[$c] * 100 / $total)))."%)";
$classe->set("name",$nome);
$linhas[$c]["nomeclasse"] = $nome;
$linhas[$c]["nreg"] = $nreg[$c];
$linhas[$c]["totalreg"] = $total;
}
}
if ($layer->type == MS_LAYER_RASTER && $nc == 1){
$proc = "";
$linhas = array();
if($layer->num_processing > 0){
$proc = $layer->getProcessing();
}
if($layer->type == MS_LAYER_RASTER && $proc == ""){
$proc = array("RESAMPLE=NEAREST");
}
$linhas[] = array("tema"=>$l,"idclasse"=>"","nomeclasse"=>"","expressao"=>"","imagem"=>"","proc"=>$proc,"minScale"=>0,"maxScale"=>0);
}
}
}
return $linhas;
}
/*
function: excluiEstilo
Exclui um estilo de uma classe.
*/
function excluiEstilo($classe,$estilo)
{
if(!$this->layer){
return "erro";
}
$classe = $this->layer->getclass($classe);
$classe->deletestyle($estilo);
$this->layer->removeMetaData("cache");
return "ok";
}
/*
function: adicionaEstilo
Adiciona um estilo em uma classe.
return:
objeto estilo
*/
function adicionaEstilo($classe,$estilo)
{
if(!$this->layer){
return "erro";
}
$classe = $this->layer->getclass($classe);
$estilo = $classe->getstyle($estilo);
$e = ms_newStyleObj($classe,$estilo);
$this->layer->removeMetaData("cache");
return($e);
}
/*
function: sobeEstilo
Sobe um estilo na ordem de desenho de uma classe.
parameters:
$classe - Índice da classe.
$estilo - Índice do estilo de uma classe que será clonado.
*/
function sobeEstilo($classe,$estilo)
{
if(!$this->layer){
return "erro";
}
$classe = $this->layer->getclass($classe);
$classe->movestyleup($estilo);
$this->layer->removeMetaData("cache");
}
/*
function: desceEstilo
Desce um estilo na ordem de desenho de uma classe.
parameters:
$classe - Índice da classe.
$estilo - Índice do estilo de uma classe que será clonado.
*/
function desceEstilo($classe,$estilo)
{
if(!$this->layer){
return "erro";
}
$classe = $this->layer->getclass($classe);
$classe->movestyledown($estilo);
$this->layer->removeMetaData("cache");
}
/*
function: listaSimbolos
Retorna uma lista de símbolos clicáveis no formato HTML.
Para cada tipo de simbologia deve haver um arquivo .map com as definições básicas.
Todos os símbolos do arquivo symbols/simbolos serão retornados como imagens.
parameters:
$tipo - Tipo de representação do símbolo, 0 pontos, 1 linhas e 2 polígonos.
$dir_tmp - Diretório temporário do mapserver.
$imgdir - Diretório temporário das imagens.
$onclick - Função que será incluída no HTML no evento onclick sobre o símbolo
$tamanho - Tamanho (size) do símbolo
$forca {boolean} - forca a exclusao dos simbolos atualmente em cache
return:
String no formato HTML com as imagens dos símbolos
*/
function listaSimbolos($tipo,$dir_tmp,$imgdir,$onclick,$tamanho=8,$width=1,$forca=false)
{
$versao = versao();
$versao = $versao["principal"];
//error_reporting(0);
if ($tipo == 3){
$tipo = 2;
} //tipo raster
if($imgdir == ""){
$dir = $dir_tmp;
}
else{
$dir = $dir_tmp."/".$imgdir;
}
if($forca == true){
unlink($dir."/simbolos".$tipo.".inc");
}
$ins = "";
//pega imagens que podem ser usadas como simbolos
if($tipo == 0){
if(!isset($locaplic)){
include(dirname(__FILE__)."/../ms_configura.php");
}
//veja esse codigo tambem em ferramentas/uploadsimbolo/exec.php
$pasta = $locaplic."/temas";
$url = "../temas";
if($customDir != "interface"){
$teste = $locaplic."/".$customDir;
if(file_exists($teste)){
$pasta = $teste;
$url = "../".$customDir;
}
$teste = $locaplic."/".$customDir."/images";
if(file_exists($teste)){
$pasta = $teste;
$url = "../".$customDir."/images";
}
$teste = $locaplic."/".$customDir."/imagens";
if(file_exists($teste)){
$pasta = $teste;
$url = "../".$customDir."/imagens";
}
}
if(file_exists($pasta)){
$lista = listaArquivos($pasta,true,array("png","PNG"));
//var_dump($lista);exit;
$n = count($lista["nomes"]);
for($i = 0; $i < $n; $i++){
$ins .= "
";
}
}
}
if (!file_exists($dir."/simbolos".$tipo.".inc"))
{
$f = fopen($dir."/simbolos".$tipo.".inc","w");
if ($tipo == 2){
$t="simpolv".$versao.".map";
}
if ($tipo == 0){
$t="simptv".$versao.".map";
}
if ($tipo == 1){
$t="simlinv".$versao.".map";
$tamanho = $tamanho / 4;
}
if (strtoupper(substr(PHP_OS, 0, 3) == 'WIN'))
{
$mapatemp = ms_newMapObj($this->localaplicacao."\\aplicmap\\".$t);
}
else{
$mapatemp = ms_newMapObj($this->localaplicacao."/aplicmap/".$t);
}
$l = $mapatemp->getlayer(0);
if (strtoupper(substr(PHP_OS, 0, 3) == 'WIN'))
{
$novoss = dirname($this->mapa->symbolsetfilename)."\\".basename($mapatemp->symbolsetfilename);
}
else{
$novoss = dirname($this->mapa->symbolsetfilename)."/".basename($mapatemp->symbolsetfilename);
}
$this->mapa->setsymbolset($novoss);
$ns = $this->mapa->getnumsymbols();
$inis = 0;
//na versao 7 nao tem o simbolo 0
if($this->v >= 7){
$inis = 1;
//se for versao 7 inclui um primeiro simbolo com valor 0 e imagem
$oSymbol = $this->mapa->getSymbolObjectById(1);
$adiciona = ms_newLayerObj($this->mapa, $l);
$nomel = $l->name;
$tematemp= $this->mapa->getlayerbyname($nomel);
$c = $tematemp->getClass(0);
$e = $c->getstyle(0);
$e->set("size",1);
$e->set("width",1);
$ico = $c->createLegendIcon(40,40);
$nimg = $ico->saveWebImage();
$pat = $this->mapa->web->imageurl;
$ins .= "
";
}
for ($i=$inis;$i < $ns;++$i){
$oSymbol = $this->mapa->getSymbolObjectById($i);
$nomes = $oSymbol->name;
if($nomes == ""){
$nomes = $i;
}
$adiciona = ms_newLayerObj($this->mapa, $l);
$nomel = $l->name;
$tematemp= $this->mapa->getlayerbyname($nomel);
$c = $tematemp->getClass(0);
$e = $c->getstyle(0);
$e->set("symbolname",$nomes);
$e->set("size",$tamanho);
$e->set("width",$width);
$ico = $c->createLegendIcon(40,40);
$nimg = $ico->saveWebImage();
$pat = $this->mapa->web->imageurl;
$ins .= "
";
}
fwrite($f,"");
fclose($f);
//copy ($dir."/simbolos".$tipo.".inc",$dir_tmp."/comum/simbolos".$tipo.".inc");
return $ins;
}
else {
$res = "";
include_once $dir."/simbolos".$tipo.".inc";
return $res;
}
}
/*
function: pegaParametros
Retorna uma lista com parâmetros sobre cada estilo de uma classe.
parameters:
$classe - Índice da classe.
return:
string com o
tipo do layer,id do estilo,outlinecolor,backgroundcolor,color,symbolname,size,symbolscaledenom,maxsize,minsize|
*/
function pegaParametros($classe)
{
if(!$this->layer){
return "erro";
}
$tipoLayer = $this->layer->type;
$classe = $this->layer->getclass($classe);
$numestilos = $classe->numstyles;
for ($i=0;$i<$numestilos;++$i){
$linha = array();
$estilo = $classe->getstyle($i);
$linha[] = $i;
$linha[] = corRGB($estilo->outlinecolor);
$linha[] = corRGB($estilo->backgroundcolor);
$linha[] = corRGB($estilo->color);
$linha[] = $estilo->symbolname;
if($estilo->getbinding(MS_STYLE_BINDING_SIZE)){
$linha[] = $estilo->getbinding(MS_STYLE_BINDING_SIZE);
}
else{
$linha[] = $estilo->size;
}
$linha[] = $estilo->opacity;
if($this->v >= 6){
$linha[] = $estilo->width;
$s = $estilo->symbol;
$linha[] = implode(" ",$s->getPatternArray);
$linha[] = $estilo->angle;
}
else{
$linha[] = "";
$linha[] = "";
}
$linha[] = $this->layer->symbolscaledenom;
$linha[] = $estilo->minsize;
$linha[] = $estilo->maxsize;
$linha[] = $estilo->offsetx;
$linha[] = $estilo->offsety;
$linhas[] = $tipoLayer."#".implode("#",$linha);
}
//retorna tipo do layer,id do estilo,outlinecolor,backgroundcolor,color,symbolname,size,symbolscaledenom
return implode("|",$linhas);
}
/*
function: aplicaParametro
Aplica um parâmetro em um estilo de uma classe.
parameters:
$classe - Índice da classe.
$estilo - Índice do estilo que será alterado.
$outlinecolor - Cor do contorno.
$backgroundcolor - Cor do fundo.
$color - Cor da frente.
$symbolname - Nome do símbolo.
$size - Tamanho que será aplicado ao símbolo.
$opacidade - Opacidade
*/
function aplicaParametro($classe,$estilo,$outlinecolor,$backgroundcolor,$color,$symbolname,$size,$opacidade,$width,$pattern,$angle,$minsize=0,$maxsize=500,$offsetx=0,$offsety=0)
{
if(!$this->layer){
return "erro";
}
if(!empty($pattern))
{
$pattern = str_replace(","," ",$pattern);
}
$classe = $this->layer->getclass($classe);
//isso é necessário pq o mapserver não consegue apagar o nome de um estilo
if(isset($symbolname) && ($symbolname == "" || $symbolname == "0")){
$classe->deletestyle($estilo);
$estilo = ms_newStyleObj($classe);
}
else{
$estilo = $classe->getstyle($estilo);
}
if (isset($outlinecolor))
{
$cor = $estilo->outlinecolor;
$nc = explode(",",$outlinecolor);
$cor->setRGB($nc[0],$nc[1],$nc[2]);
}
if (isset($backgroundcolor))
{
$cor = $estilo->backgroundcolor;
$nc = explode(",",$backgroundcolor);
$cor->setRGB($nc[0],$nc[1],$nc[2]);
}
if (isset($color))
{
$cor = $estilo->color;
$nc = explode(",",$color);
$cor->setRGB($nc[0],$nc[1],$nc[2]);
}
if((isset($symbolname)) && ($symbolname != ""))
{
if(is_numeric($symbolname))
{
$estilo->set("symbol",$symbolname);
}
else
{$estilo->set("symbolname",$symbolname);
}
}
if ((isset ($size)) && ($size != "-1"))
{
if(is_numeric($size)){
$estilo->removebinding(MS_STYLE_BINDING_SIZE);
$estilo->set("size",$size);
}
else{
$estilo->setbinding(MS_STYLE_BINDING_SIZE, $size);
}
}
if ((isset ($width)) && ($width != "-1") && ($this->v >= 6))
{
$estilo->set("width",$width);
}
if ((isset ($pattern)) && ($pattern != "-1") && ($this->v >= 6) && ($pattern != ""))
{
$estilo->updatefromstring("STYLE PATTERN ".$pattern." END");
}
if(isset($opacidade))
{
$estilo->set("opacity",$opacidade);
}
if(isset($angle))
{
$estilo->set("angle",$angle);
}
$estilo->set("minsize",$minsize);
$estilo->set("maxsize",$maxsize);
$estilo->set("offsetx",$offsetx);
$estilo->set("offsety",$offsety);
if ($this->layer->getmetadata("sld") != "")
{
$sld = $this->layer->getmetadata("sld");
$this->reSLD($this->arquivo,$this->nome,$sld);
}
$this->layer->setMetaData("cache","");
return "ok";
}
/*
function: pegaParametrosLegImg
Pega os parâmetros da legenda embebida no mapa.
return:
array - "imagecolor"=>$imagecolor,"transparent"=>transparent,"position"=>$position,"status"=>$status,"outlinecolor"=>$outlinecolor,"keyspacingy"=>$keyspacingy,"keyspacingx"=>$keyspacingx,"keysizey"=>$keysizey,"keysizex"=>$keysizex,"heigt"=>$height,"width"=>$width
*/
function pegaParametrosLegImg()
{
//error_reporting(0);
$legenda = $this->mapa->legend;
$height = $legenda->height;
$width = $legenda->width;
$keysizex = $legenda->keysizex;
$keysizey = $legenda->keysizey;
$keyspacingx = $legenda->keyspacingx;
$keyspacingy = $legenda->keyspacingy;
$outlinecolor = corRGB($legenda->outlinecolor); //Color of outline of box, -1 for no outline
$status = $legenda->status; //MS_ON, MS_OFF, MS_EMBED
$position = $legenda->position;
if ($position < 99){
$position = "10".$position;
}
$transparent = 100;
$imagecolor = corRGB($legenda->imagecolor);
$label = $legenda->label;
$font = $label->font;
if($font == MS_BITMAP)
{
$l = $label->size;
if ($l == MS_TINY){
$t = 5;
}
if ($l == MS_SMALL){
$t = 7;
}
if ($l == MS_MEDIUM){
$t = 10;
}
if ($l == MS_LARGE){
$t = 12;
}
if ($l == MS_GIANT){
$t = 14;
}
$labelsize = $t;
}
else
$labelsize = $label->size;
$tipofonte = $label->type;
return(array("tipofonte"=>$tipofonte,"font"=>$font,"imagecolor"=>$imagecolor,"transparent"=>transparent,"position"=>$position,"status"=>$status,"outlinecolor"=>$outlinecolor,"keyspacingy"=>$keyspacingy,"keyspacingx"=>$keyspacingx,"keysizey"=>$keysizey,"keysizex"=>$keysizex,"height"=>$height,"width"=>$width,"labelsize"=>$labelsize));
}
/*
function: aplicaParametrosLegImg
Aplica os parâmetros da legenda embebida no mapa.
parameters:
$imagecolor
$position
$status
$outlinecolor
$keyspacingy
$keyspacingx
$keysizey
$keysizex
$heigt
$width
*/
function aplicaParametrosLegImg($fonte,$imagecolor,$position,$status,$outlinecolor,$keyspacingy,$keyspacingx,$keysizey,$keysizex,$height,$width,$labelsize)
{
$legenda = $this->mapa->legend;
$legenda->set("height",$height);
$legenda->set("width",$width);
$legenda->set("keysizex",$keysizex);
$legenda->set("keysizey",$keysizey);
$legenda->set("keyspacingx",$keyspacingx);
$legenda->set("keyspacingy",$keyspacingy);
$corres = $legenda->outlinecolor;
$cor = explode(",",$outlinecolor);
$corres->setRGB($cor[0],$cor[1],$cor[2]);
if ($status == 3)
{
$legenda->set("status",MS_EMBED);
}
else{
$legenda->set("status",MS_OFF);
}
$verifica = $legenda->position;
if ($verifica < 100){
if($position > 99){
$position = 3;
}
}
$legenda->set("position",$position);
$corres = $legenda->imagecolor;
$cor = explode(",",$imagecolor);
$corres->setRGB($cor[0],$cor[1],$cor[2]);
$label = $legenda->label;
if ($fonte != "bitmap")
{
$label->updatefromstring("LABEL TYPE TRUETYPE END");
$label->set("font",$fonte);
$label->set("size",$labelsize);
}
else
{
$label->updatefromstring("LABEL TYPE BITMAP END");
$t = MS_TINY;
if ($labelsize > 5 ){
$t = MS_TINY;
}
if ($labelsize >= 7 ){
$t = MS_SMALL;
}
if ($labelsize >= 10 ){
$t = MS_MEDIUM;
}
if ($labelsize >= 12 ){
$t = MS_LARGE;
}
if ($labelsize >= 14 ){
$t = MS_GIANT;
}
$label->set("size",$t);
}
return("ok");
}
/*
Function: reSLD
Gera o SLD de um tema WMS.
Parametros:
$map_file {string} - arquivo map_file
$tema {string} - c�digo do tema
$sld {string} - arquivo onde o sld será gravado
*/
function reSLD($map_file,$tema,$sld)
{
$map = ms_newMapObj($map_file);
$layer = $map->getlayerbyname($tema);
$layer->set("name",$layer->getmetadata("nomeoriginal"));
$tiporep = $layer->getmetadata("tipooriginal");
$layer->set("type",MS_LAYER_POLYGON);
if ($tiporep == "linear")
{
$layer->set("type",MS_LAYER_LINE);
}
if ($tiporep == "pontual")
{
$layer->set("type",MS_LAYER_POINT);
}
$sldf = $layer->generateSLD();
if (file_exists($sld))
{
unlink($sld);
}
$fp = fopen($sld, "a");
fputs( $fp, $sldf );
fclose($fp);
}
function aplicaTodasClasses($parametro,$valor)
{
if(!$this->layer){
return "erro";
}
$numc = $this->layer->numclasses;
for ($c = 0;$c < $numc;$c++){
$classe = $this->layer->getclass($c);
$estilo = $classe->getstyle(0);
switch ($parametro){
case "pattern":
if(!empty($pattern)){
$pattern = str_replace(","," ",$valor);
if ($this->v >= 6){
$estilo->updatefromstring("STYLE PATTERN ".$valor." END");
}
}
continue;
case "symbolname":
if($parametro == "" || $parametro == "0"){
$classe->deletestyle($estilo);
$estilo = ms_newStyleObj($classe);
}
else{
if(is_numeric($valor)){
$estilo->set("symbol",$valor);
}
else{
$estilo->set("symbolname",$valor);
}
}
continue;
case "outlinecolor":
$cor = $estilo->outlinecolor;
$nc = explode(",",$valor);
$cor->setRGB($nc[0],$nc[1],$nc[2]);
continue;
case "backgroundcolor":
$cor = $estilo->backgroundcolor;
$nc = explode(",",$valor);
$cor->setRGB($nc[0],$nc[1],$nc[2]);
continue;
case "color":
$cor = $estilo->color;
$nc = explode(",",$valor);
$cor->setRGB($nc[0],$nc[1],$nc[2]);
continue;
case "size":
if(is_numeric($valor)){
$estilo->removebinding(MS_STYLE_BINDING_SIZE);
$estilo->set("size",$valor);
}
else{
$estilo->setbinding(MS_STYLE_BINDING_SIZE, $valor);
}
continue;
case "width":
$estilo->set("width",$valor);
continue;
case "offsetx":
$estilo->set("offsetx",$valor);
continue;
case "offsety":
$estilo->set("offsety",$valor);
continue;
case "opacity":
$estilo->set("opacity",$valor);
continue;
case "angle":
$estilo->set("angle",$valor);
continue;
}
}
$this->layer->setMetaData("cache","");
return "ok";
}
function converte($texto)
{
if (function_exists("mb_convert_encoding"))
{
if (!mb_detect_encoding($texto,"UTF-8",true))
{
$texto = mb_convert_encoding($texto,"UTF-8","ISO-8859-1");
}
}
return $texto;
}
}
?>