From 27a438df07ac690dadcd622ca4ce6e35c4c94ad5 Mon Sep 17 00:00:00 2001 From: Edmar Moretti Date: Mon, 4 Jul 2011 20:58:49 +0000 Subject: [PATCH] Corrige as operações de seleção e obtenção de atributos quando é utilizada a interface googlemaps e temas em projeções que não geográfica --- classesphp/classe_atributos.php | 29 +++++++++++++++++++++-------- classesphp/classe_selecao.php | 16 +++++++++++++++- classesphp/classe_temas.php | 16 ++++++++++++++-- classesphp/funcoes_gerais.php | 1 - classesphp/mapa_controle.php | 122 ++++++++++---------------------------------------------------------------------------------------------------------------- classesphp/mapa_inicia.php | 9 ++++++--- ferramentas/busca/index.js.php | 2 +- 7 files changed, 67 insertions(+), 128 deletions(-) diff --git a/classesphp/classe_atributos.php b/classesphp/classe_atributos.php index 66ce83e..3d12f5b 100644 --- a/classesphp/classe_atributos.php +++ b/classesphp/classe_atributos.php @@ -69,10 +69,18 @@ class Atributos Nome do arquivo de seleção (.qy) */ public $qyfile; + /* + Variavel: $projO + + Objeto projection original do mapa. Obtido apenas na interface Googlemaps + */ + public $projO; /* Function: __construct -Cria um objeto Atributos +Cria um objeto Atributos. + +O tipo de interface usada pelo mapa é obtido do metadata "interface". Se for a interface Googlemaps, é feita a alteração temporária da projeção do mapa. parameters: @@ -100,8 +108,6 @@ $ext - (opcional) extensão geográfica que será aplicada ao mapa if($tema != "" && @$this->mapa->getlayerbyname($tema)) { $this->layer = $this->mapa->getlayerbyname($tema); - //if($this->layer->getProjection() == "" ) - //{$this->layer->setProjection("init=epsg:4291");} $this->nome = $tema; } if($ext && $ext != ""){ @@ -109,6 +115,10 @@ $ext - (opcional) extensão geográfica que será aplicada ao mapa $extatual = $this->mapa->extent; $extatual->setextent((min($e[0],$e[2])),(min($e[1],$e[3])),(max($e[0],$e[2])),(max($e[1],$e[3]))); } + if($this->mapa->getmetadata("interface") == "googlemaps"){ + $this->projO = $this->mapa->getProjection(); + $this->mapa->setProjection("init=epsg:4291"); + } } } /* @@ -120,7 +130,9 @@ Salva o mapfile atual function salva() { if (connection_aborted()){exit();} - $this->mapa->save($this->arquivo); + if($this->mapa->getmetadata("interface") == "googlemaps") + {$this->mapa->setProjection($this->projO);} + $this->mapa->save($this->arquivo); } /* @@ -764,14 +776,14 @@ $listaDeTemas - (opcional) Lista com os códigos dos temas que serão identificado } foreach ($listatemas as $tema) { - $resultados[$tema] = $this->identificaQBP2($tema,$xyarray[0],$xyarray[1],$this->arquivo,$resolucao,"","",false,$ext); + $resultados[$tema] = $this->identificaQBP2($tema,$xyarray[0],$xyarray[1],"",$resolucao,"","",false,$ext); } } //pesquisa todos os temas acrescentados no mapa if ($opcao == "todos") { foreach ($listatemas as $tema) - {$resultados[$tema] = $this->identificaQBP2($tema,$xyarray[0],$xyarray[1],$this->arquivo,$resolucao,"","",false,$ext);} + {$resultados[$tema] = $this->identificaQBP2($tema,$xyarray[0],$xyarray[1],"",$resolucao,"","",false,$ext);} } //pesquisa apenas os temas visiveis if ($opcao == "ligados" || $opcao == "lista") @@ -790,7 +802,7 @@ $listaDeTemas - (opcional) Lista com os códigos dos temas que serão identificado foreach ($listatemas as $tema) { $l = $this->mapa->getlayerbyname($tema); - $resultados[$tema] = $this->identificaQBP2($tema,$xyarray[0],$xyarray[1],$this->arquivo,$resolucao,"","",false,$ext); + $resultados[$tema] = $this->identificaQBP2($tema,$xyarray[0],$xyarray[1],"",$resolucao,"","",false,$ext); } //var_dump($resultados); } @@ -806,7 +818,7 @@ $listaDeTemas - (opcional) Lista com os códigos dos temas que serão identificado { if ($tl->status == MS_DEFAULT || $listaDeTemas != "") { - $resultados[$tema] = array("tips"=>$itemtip,"dados"=>$this->identificaQBP2($tema,$xyarray[0],$xyarray[1],$this->arquivo,$resolucao,$itemtip,"",true,$ext)); + $resultados[$tema] = array("tips"=>$itemtip,"dados"=>$this->identificaQBP2($tema,$xyarray[0],$xyarray[1],"",$resolucao,$itemtip,"",true,$ext)); $ltemp[] = $tema; } } @@ -1144,6 +1156,7 @@ $listaDeTemas - (opcional) Lista com os códigos dos temas que serão identificado $layer->set("template","none.htm"); $pt = ms_newPointObj(); $pt->setXY($x, $y); + // //operação especial para o caso de wms // diff --git a/classesphp/classe_selecao.php b/classesphp/classe_selecao.php index 30b6bdc..83443dd 100644 --- a/classesphp/classe_selecao.php +++ b/classesphp/classe_selecao.php @@ -11,7 +11,7 @@ Licenca: GPL2 -I3Geo Interface Integrada de Ferramentas de Geoprocessamento para Internet +i3Geo Interface Integrada de Ferramentas de Geoprocessamento para Internet Direitos Autorais Reservados (c) 2006 Ministério do Meio Ambiente Brasil Desenvolvedor: Edmar Moretti edmar.moretti@mma.gov.br @@ -68,11 +68,19 @@ class Selecao Nome do arquivo de seleção (.qy) */ public $qyfile; + /* + Variavel: $projO + + Objeto projection original do mapa. Obtido apenas na interface Googlemaps + */ + public $projO; /* Function: __construct Cria um objeto Selecao +O tipo de interface usada pelo mapa é obtido do metadata "interface". Se for a interface Googlemaps, é feita a alteração temporária da projeção do mapa. + parameters: $map_file - Endereço do mapfile no servidor. @@ -105,6 +113,10 @@ $ext - extensão geográfica do mapa $extatual = $this->mapa->extent; $extatual->setextent((min($e[0],$e[2])),(min($e[1],$e[3])),(max($e[0],$e[2])),(max($e[1],$e[3]))); } + if($this->mapa->getmetadata("interface") == "googlemaps"){ + $this->projO = $this->mapa->getProjection(); + $this->mapa->setProjection("init=epsg:4291"); + } } /* function: salva @@ -114,6 +126,8 @@ Salva o mapfile atual function salva() { if (connection_aborted()){exit();} + if($this->mapa->getmetadata("interface") == "googlemaps") + {$this->mapa->setProjection($this->projO);} $this->mapa->save($this->arquivo); } /* diff --git a/classesphp/classe_temas.php b/classesphp/classe_temas.php index 3df2bc8..f0cfa12 100644 --- a/classesphp/classe_temas.php +++ b/classesphp/classe_temas.php @@ -378,6 +378,10 @@ Calcula a extensão geográfica de um tema e ajusta o mapa para essa extensão. function zoomTema() { if(!$this->layer){return "erro";} + if($this->mapa->getmetadata("interface") == "googlemaps"){ + $projO = $this->mapa->getProjection(); + $this->mapa->setProjection("init=epsg:4291"); + } $prjMapa = ""; $prjTema = ""; if($this->layer->type != MS_LAYER_RASTER) @@ -411,6 +415,8 @@ Calcula a extensão geográfica de um tema e ajusta o mapa para essa extensão. $extatual->setextent($ret[0],$ret[1],$ret[2],$ret[3]); //echo "oi";exit; } + if($this->mapa->getmetadata("interface") == "googlemaps") + {$this->mapa->setProjection($projO);} return("ok"); } /* @@ -987,9 +993,13 @@ Calcula a extensão geográfica dos elementos selecionados de um tema e ajusta o m function zoomSel() { if(!$this->layer){return "erro";} + if($this->mapa->getmetadata("interface") == "googlemaps"){ + $projO = $this->mapa->getProjection(); + $this->mapa->setProjection("init=epsg:4291"); + } $extatual = $this->mapa->extent; - $prjMapa = ""; - $prjTema = ""; + $prjMapa = $this->mapa->getProjection(); + $prjTema = $this->layer->getProjection(); carregaquery($this->arquivo,&$this->layer,&$this->mapa); $sopen = $this->layer->open(); if($sopen == MS_FAILURE){return "erro";} @@ -1026,6 +1036,8 @@ Calcula a extensão geográfica dos elementos selecionados de um tema e ajusta o m } $extatual->setextent($ret->minx,$ret->miny,$ret->maxx,$ret->maxy); } + if($this->mapa->getmetadata("interface") == "googlemaps") + {$this->mapa->setProjection($projO);} return("ok"); } /* diff --git a/classesphp/funcoes_gerais.php b/classesphp/funcoes_gerais.php index ebbd649..c3af4d2 100644 --- a/classesphp/funcoes_gerais.php +++ b/classesphp/funcoes_gerais.php @@ -1348,7 +1348,6 @@ function pegaItens($layer,$mapa="") // //no caso de WMS ou WFS // - if($layer->connectiontype == 7){ $url = $layer->connection; $temp = explode("?",$url); diff --git a/classesphp/mapa_controle.php b/classesphp/mapa_controle.php index 2461e8d..05e174c 100644 --- a/classesphp/mapa_controle.php +++ b/classesphp/mapa_controle.php @@ -140,8 +140,10 @@ if ($funcao != "criaMapa") //isso é necessário pois a variável "interface" pode ser utilizada como parâmetro em algumas funções ajax //nesses casos, é necessário recuperar o valor correto e não da sessão // -$_SESSION["interface"] = $interfaceTemp; -$interface = $interfaceTemp; +if(isset($interfaceTemp) && $interfaceTemp != ""){ + $_SESSION["interface"] = $interfaceTemp; + $interface = $interfaceTemp; +} // //verifica se deve ativar o debug // @@ -503,16 +505,7 @@ Salva o mapa acrescentando um novo layer com os pontos. include_once("classe_analise.php"); copiaSeguranca($map_file); $m = new Analise($map_file,$tema,$locaplic,$ext); - /* - if($interface == "googlemaps") - { - $projMapa = $m->mapa->getProjection(); - $m->mapa->setProjection("init=epsg:4291"); - } - */ $retorno = $m->criaCentroide($locaplic); - //if($interface == "googlemaps") - //{$m->mapa->setProjection($projMapa);} $m->salva(); $_SESSION["contadorsalva"]++; break; @@ -1447,14 +1440,7 @@ Gera graficos automaticamente para os elementos de um tema include_once("classe_temas.php"); copiaSeguranca($map_file); $m = new Temas($map_file,$tema,$locaplic); - if($interface == "googlemaps") - { - $projMapa = $m->mapa->getProjection(); - $m->mapa->setProjection("init=epsg:4291"); - } $m->graficotema($lista,$tamanho,$tipo,$outlinecolor,$offset); - if($interface == "googlemaps") - {$m->mapa->setProjection($projMapa);} $m->salva(); $_SESSION["contadorsalva"]++; redesenhaMapa(); @@ -1475,11 +1461,6 @@ Altera uma classe de um tema, aplicando uma nova classificação ou modificando pa include_once("classe_alteraclasse.php"); copiaSeguranca($map_file); $m = new Alteraclasse($map_file,$tema,"",$ext); - if($interface == "googlemaps") - { - $projMapa = $m->mapa->getProjection(); - $m->mapa->setProjection("init=epsg:4291"); - } if ($opcao == "aplicacoresrgb") { $cores = str_replace("rgb","",$cores); @@ -1515,8 +1496,6 @@ Altera uma classe de um tema, aplicando uma nova classificação ou modificando pa } if ($opcao == "simbolounico") {$retorno = $m->simbolounico();} - if($interface == "googlemaps") - {$m->mapa->setProjection($projMapa);} $salvo = $m->salva(); $_SESSION["contadorsalva"]++; break; @@ -1705,18 +1684,7 @@ Os valores para o gráfico são obtidos do tema indicado na classe. Para cada novo include_once("classe_shp.php"); copiaSeguranca($map_file); $m = new SHP($map_file,$tema,$locaplic); - if($interface == "googlemaps") - { - $projMapa = $m->mapa->getProjection(); - $m->mapa->setProjection("init=epsg:4291"); - $m->salva(); - } $retorno = $m->insereSHPgrafico($x,$y,$itens,$width,$inclinacao,$shadow_height); - if($interface == "googlemaps") - { - $m->mapa->setProjection($projMapa); - $m->salva(); - } $_SESSION["contadorsalva"]++; break; /* @@ -2117,8 +2085,6 @@ A pesquisa em temas é feita apenas quando existir o metadata itembuscarapida if($lista != ""){ include_once("classe_atributos.php"); $m = new Atributos($map_file); - if($interface == "googlemaps") - {$m->mapa->setProjection("init=epsg:4291");} $dados = $m->buscaRegistros($palavra,$lista,"qualquer","mapa"); foreach($dados as $tema){ $rs = $tema["resultado"]; @@ -2154,8 +2120,6 @@ Procura valores em uma tabela que aderem a uma palavra de busca. include_once("classe_atributos.php"); if(!isset($tema)){$tema = "";} $m = new Atributos($map_file,$tema,"",$ext); - if($interface == "googlemaps") - {$m->mapa->setProjection("init=epsg:4291");} $retorno = $m->buscaRegistros($palavra,$lista,$tipo,$onde); break; /* @@ -2171,19 +2135,8 @@ Identifica elementos no mapa. if (!isset($tema)){$tema = "";} if (!isset($resolucao)){$resolucao = 5;} include_once("classe_atributos.php"); - $m = new Atributos($map_file,$tema); - if($interface == "googlemaps") - { - $projMapa = $m->mapa->getProjection(); - $m->mapa->setProjection("init=epsg:4291"); - $m->salva(); - } + $m = new Atributos($map_file,$tema); $retorno = $m->identifica($opcao,$xy,$resolucao); - if($interface == "googlemaps") - { - $m->mapa->setProjection($projMapa); - $m->salva(); - } break; /* Valor: IDENTIFICA2 @@ -2199,18 +2152,7 @@ Identifica elementos no mapa. if(!isset($ext)) {$ext = "";} $m = new Atributos($map_file,$tema,"",$ext); - if($interface == "googlemaps") - { - $projMapa = $m->mapa->getProjection(); - $m->mapa->setProjection("init=epsg:4291"); - $m->salva(); - } $retorno = $m->identifica2($opcao,$xy,$resolucao,$ext,$listaDeTemas); - if($interface == "googlemaps") - { - $m->mapa->setProjection($projMapa); - $m->salva(); - } break; /* Valor: IDENTIFICAUNICO @@ -2225,19 +2167,8 @@ Identifica elementos no mapa retornando apenas o valor de um único item. if(!isset($ext)) {$ext = "";} $m = new Atributos($map_file,$tema,"",$ext); - if($interface == "googlemaps") - { - $projMapa = $m->mapa->getProjection(); - $m->mapa->setProjection("init=epsg:4291"); - $m->salva(); - } $xy = explode(",",$xy); $retorno = $m->identificaQBP($tema,$xy[0],$xy[1],$map_file,$resolucao,$item,$tiporetorno="unico"); - if($interface == "googlemaps") - { - $m->mapa->setProjection($projMapa); - $m->salva(); - } break; /* Valor: ESTATISTICA @@ -2272,8 +2203,6 @@ Pega todos os valores dos itens de uma tabela de um tema. */ case "LISTAREGISTROS": include_once("classe_atributos.php"); - if(isset($ext) && $ext != "" && $interface == "googlemaps" && $geo == false) - {$ext = projetaExt($map_file,$ext);} $m = new Atributos($map_file,$tema,"",$ext); if(!isset($tipo)){$tipo = "";} if(!isset($inicio)){$inicio = 0;} @@ -2336,8 +2265,6 @@ Muda a extensão geográfica do mapa. if(!isset($geo)) {$geo = false;} $m = new Navegacao($map_file); - if(isset($ext) && $ext != "" && $interface == "googlemaps" && $geo == false) - {$ext = projetaExt($map_file,$ext);} $m->mudaExtensao($ext); $m->salva(); $_SESSION["contadorsalva"]++; @@ -2706,11 +2633,6 @@ Seleciona elementos utilizando um ponto. foreach($temas as $tema) { $m = new Selecao($map_file,$tema,$ext); - if($interface == "googlemaps") - { - $projMapa = $m->mapa->getProjection(); - $m->mapa->setProjection("init=epsg:4291"); - } $ok[] = $m->selecaoPT($xy,$tipo,$tolerancia); } $_SESSION["contadorsalva"]++; @@ -2730,11 +2652,6 @@ Seleciona elementos utilizando a extensão do mapa. foreach($temas as $tema) { $m = new Selecao($map_file,$tema,$ext); - if($interface == "googlemaps") - { - $projMapa = $m->mapa->getProjection(); - $m->mapa->setProjection("init=epsg:4291"); - } $ok[] = $m->selecaoEXT($tipo); } //$retorno = implode(",",$ok); @@ -2754,12 +2671,7 @@ Seleciona elementos utilizando um retângulo. $temas = explode(",",$tema); foreach($temas as $tema) { - $m = new Selecao($map_file,$tema,$ext); - if($interface == "googlemaps") - { - $projMapa = $m->mapa->getProjection(); - $m->mapa->setProjection("init=epsg:4291"); - } + $m = new Selecao($map_file,$tema,$ext); $ok[] = $m->selecaoBOX($tipo,$ext); } $_SESSION["contadorsalva"]++; @@ -2809,12 +2721,7 @@ Sleciona elementos de um tema com base em outro tema. $temas = explode(",",$tema); foreach($temas as $tema) { - $m = new Selecao($map_file,$tema); - if($interface == "googlemaps") - { - $projMapa = $m->mapa->getProjection(); - $m->mapa->setProjection("init=epsg:4291"); - } + $m = new Selecao($map_file,$tema); $ok[] = $m->selecaoTema($temao,$tipo); } $retorno = implode(",",$ok); @@ -3101,14 +3008,7 @@ function selecaoPoli($xs,$ys,$tema,$tipo) foreach($temas as $tema) { $m = new Selecao($map_file,$tema); - if($interface == "googlemaps") - { - $projMapa = $m->mapa->getProjection(); - $m->mapa->setProjection("init=epsg:4291"); - } $ok[] = $m->selecaoPorPoligono($tipo,$xs,$ys); - if($interface == "googlemaps") - {$m->mapa->setProjection($projMapa);} $m->salva(); $_SESSION["contadorsalva"]++; } @@ -3144,8 +3044,9 @@ function redesenhaMapa() // //na interface googlemaps não é necessário gerar a imagem // - if (isset($interface) && ($interface == "googlemaps" || $interface == "openlayers" || $interface == "googleearth")) - { + if (isset($interface) && ($interface == "padrao" || $interface == "flamingo")) + {$res = $m->redesenhaCorpo($tipoimagem,$utilizacgi,$locmapserv);} + else{ $e = $m->mapa->extent; $ext = $e->minx." ".$e->miny." ".$e->maxx." ".$e->maxy; $res["mapimagem"] = ""; @@ -3160,9 +3061,6 @@ function redesenhaMapa() $res["mappath"] = ""; $res["mapurl"] = ""; } - else{ - $res = $m->redesenhaCorpo($tipoimagem,$utilizacgi,$locmapserv); - } $res["mensagens"] = $m->pegaMensagens(); $res["tempo"] = microtime(1) - $tempo; restauraCon($map_file,$postgis_mapa); diff --git a/classesphp/mapa_inicia.php b/classesphp/mapa_inicia.php index 50fc5bb..6c3f6f0 100644 --- a/classesphp/mapa_inicia.php +++ b/classesphp/mapa_inicia.php @@ -5,14 +5,14 @@ Title: mapa_inicia.php Inicia um novo mapa. Gera as imagens necessárias para abrir o mapa e calcula um conjunto de variáveis necessárias -ao funcionamento do i3Geo. +ao funcionamento do i3Geo. Os dados são devolvidos como um objeto json. Conforme a interface +que será utilizada pelo mapa, são feitos ajustes específicos. Licenca: GPL2 - -I3Geo Interface Integrada de Ferramentas de Geoprocessamento para Internet +i3Geo Interface Integrada de Ferramentas de Geoprocessamento para Internet Direitos Autorais Reservados (c) 2006 Ministério do Meio Ambiente Brasil Desenvolvedor: Edmar Moretti edmar.moretti@mma.gov.br @@ -42,6 +42,8 @@ Inicia um mapa e obtém os parâmetros necessários para o funcionamento da interfa Globais: +$interface - nome da interface que será utilizada pelo mapa padrao|openlayers|googlemaps|googleearth|flamingo . O valor de $interface é também armazenado no metadata "interface" do objeto Map, podendo ser utilizada em outros programas do i3Geo. + $openid - indica se o usuário foi ou não autenticado em alguma rede social (veja i3geo/pacotes/openid) $interfacePadrao - interface definida em ms_configura.php @@ -230,6 +232,7 @@ function iniciaMapa() $of->set("imagemode",MS_IMAGEMODE_RGBA); $of->setOption("QUANTIZE_FORCE","OFF"); $of->set("driver","AGG/PNG"); + $m->mapa->setmetadata("interface",$interface); $m->salva(); $nomes = nomeRandomico(12); diff --git a/ferramentas/busca/index.js.php b/ferramentas/busca/index.js.php index ce7be50..4872682 100644 --- a/ferramentas/busca/index.js.php +++ b/ferramentas/busca/index.js.php @@ -225,7 +225,7 @@ i3GEOF.busca = { {tipo = "qualquer";} if ($i("i3GEObuscaregiao").checked === true) {onde = "regiao";} - palavra = removeAcentos(palavra); + palavra = i3GEO.util.removeAcentos(palavra); p = i3GEO.configura.locaplic+"/classesphp/mapa_controle.php?g_sid="+i3GEO.configura.sid+"&funcao=listavaloresitens&palavra="+palavra+"&lista="+listai.toString()+"&tipo="+tipo+"&onde="+onde+"&ext="+i3GEO.parametros.mapexten; cp = new cpaint(); cp.set_response_type("json"); -- libgit2 0.21.2