/*
Title: Editor vetorial de limites de regiões do sistema METAESTAT
Utilizado em i3geo/metaestat/editorlimites.php
Utiliza a API do Google Maps e pacotes/wicket/wicket.js (que cria o objeto Wkt com funcoes para processamento de Wkt)
Arquivo:
i3geo/ferramentas/metaestat/editorlimites.js
Licenca:
GPL2
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@gmail.com
Esse programa utiliza parcialmente os codigos da aplicacao calculadora de carbono desenvolvido pelo
IPAM - Instituto de Pesquisa Ambiental da Amazonia
Este programa e software livre; voce pode redistribui-lo
e/ou modifica-lo sob os termos da Licenca Publica Geral
GNU conforme publicada pela Free Software Foundation;
Este programa e distribuido na expectativa de que seja util,
porem, SEM NENHUMA GARANTIA; nem mesmo a garantia implicita
de COMERCIABILIDADE OU ADEQUACAO A UMA FINALIDADE ESPECIFICA.
Consulte a Licenca Publica Geral do GNU para mais detalhes.
Voce deve ter recebido uma copia da Licenca Publica Geral do
GNU junto com este programa; se nao, escreva para a
Free Software Foundation, Inc., no endereco
59 Temple Street, Suite 330, Boston, MA 02111-1307 USA.
*/
if(typeof(i3GEOF) === 'undefined'){
var i3GEOF = {};
}
/*
Classe: i3GEOF.editorlimites
Funções de edição vetorial utilizadas pelo editor de regiões do sistema METAESTAT
*/
i3GEOF.editorlimites = {
iconePonto: function(sel){
if(sel){
return i3GEO.configura.locaplic+"/imagens/google/symbol_middot_y.png";
}
else{
return i3GEO.configura.locaplic+"/imagens/google/symbol_middot.png";
}
},
/**
* Objeto DOM com a imagem de aguarde existente no cabecalho da janela
*
*/
aguarde: "",
/**
* Guarda o Id do DIV que recebera o conteudo HTML do editor
*/
iddiv: "",
/**
* Objeto criado com new google.maps.drawing.DrawingManager
*/
drawingManager: "",
selectedShape: null,
/**
* Array que guarda todos os objetos que estao atualmente no mapa
* E atualizado toda vez que uma figura e acrescentada ou removida
*/
shapes: [],
/**
* guarda o mapeamento entre o codigo da regiao e o codigo do layer adicionado ao mapa
*/
regioestemas:{},
/**
* Guarda o mapeamento entre o codigo da regiao e o codigo do layer adicionado ao mapa
*/
temasregioes:{},
/**
* Guarda os dados descritivos sobre cada regiao obtidos na formacao no combo de escolha de regioes
*/
descregioes:[],
/**
* Inicia o editor
*
* Cria o objeto da API do Google Maps com new google.maps.drawing.DrawingManager
* A janela flutuante que recebera os componentes do editor ja deve estar aberta (veja editorlimites.php)
* Executa i3GEOF.editorlimites.html
*
* @param Id do DIV que recebera o conteudo HTML do editor
*/
inicia: function(iddiv){
var i,n,ics;
//mensagem
i3GEO.janela.tempoMsg("Atenção: apenas tabelas no esquema i3geo_metaestat podem ser editadas.");
i3GEOF.editorlimites.iddiv = iddiv;
$i(iddiv).innerHTML = i3GEOF.editorlimites.html();
ics = $i(iddiv).getElementsByTagName("button");
n = ics.length;
i3GEO.barraDeBotoes.ativaBotoes();
i3GEOF.editorlimites.comboRegiaoEditavel();
for(i=0;i Se o valor do código for vazio, será criado um novo elemento. Caso contrário, os valores atualmente registrados serão atualizados. Edite os atributos: Código: Nome: Escolha a operação desejada:
'; //combo para escolher a regiao
return ins;
},
/**
* Atualiza a ferramenta quando a janela flutuante tem seu foco ativado
*/
ativaFoco: function(){
i3GEO.util.mudaCursor(i3GEO.configura.cursores,"crosshair",i3GEO.Interface.IDMAPA,i3GEO.configura.locaplic);
i3GEO.barraDeBotoes.ativaIcone("pan");
i3GEOF.editorlimites.mudaicone();
i3GEO.Interface.googlemaps.recalcPar();
},
/**
* Marca uma figura como selecionada
* @param objeto shape que sera marcado
*/
setSelection: function(shape){
if(shape.setEditable){
shape.setEditable(!shape.editable);
}
else{
shape.editable = true;
shape.setIcon({url: i3GEOF.editorlimites.iconePonto(true)});
}
},
/**
* Marca todas as figuras como nao selecionadas
* As figuras existentes no mapa sao mantidas na variavel i3GEOF.editorlimites.shapes
*/
clearSelection: function(){
var i,
n = i3GEOF.editorlimites.shapes.length;
for(i=0;i
';
return ins;
},
/**
* Cria a janela flutuante para receber os componentes da ferramenta
* @param html com o conteudo da ferramenta
*/
criaJanelaFlutuante: function(html){
var titulo,cabecalho,minimiza,janela;
cabecalho = function(){};
minimiza = function(){
i3GEO.janela.minimiza("salvaLimite");
};
titulo = "Salva limite ";
janela = i3GEO.janela.cria(
"300px",
"265px",
"",
"",
"",
titulo,
"salvaLimite",
true,
"hd",
cabecalho,
minimiza
);
$i("salvaLimite_corpo").style.backgroundColor = "white";
$i("salvaLimite_corpo").innerHTML = html;
YAHOO.util.Event.addListener(janela[0].close, "click", i3GEOF.editorlimites.mudaicone);
},
/**
* Aplica a operacao de salvar os dados no banco para o shape selecionado
* Executa admin/php/metaestat.php?funcao=mantemDadosRegiao
* @param boolean indica se as coordenadas serao salvas tambem
*/
gravaDados: function(comwkt){
if(i3GEO.login.verificaCookieLogin() === false){
i3GEO.janela.tempoMsg("Você precisa fazer login para usar essa opção");
return;
}
if(!window.confirm("Grava mesmo os dados?")){
return;
}
var p,codigo_tipo_regiao = $i("i3geoCartoRegioesEditaveis").value,
identificadornovo = $i("inputIdentificadorNovoElemento").value,
identificador = $i("inputIdentificadorElemento").value,
nome = $i("inputNomeNovoElemento").value,
wkt = "",
temp = function(retorno){
i3GEOF.editorlimites.deleteSelectedShape(true);
var janela = YAHOO.i3GEO.janela.manager.find("salvaLimite");
if(janela){
janela.destroy();
}
i3GEO.Interface.redesenha();
};
if(comwkt === true){
wkt = i3GEOF.editorlimites.toWKT(i3GEOF.editorlimites.selectedShapes()[0]);
}
else{
if(identificadornovo === identificador && $i("inputNomeElemento").value === nome){
i3GEO.janela.tempoMsg("Valores iguais ao original");
return;
}
}
p = i3GEO.configura.locaplic+"/admin/php/metaestat.php?funcao=mantemDadosRegiao&tipo=";
cpJSON.call(p,"foo",temp,"&codigo_tipo_regiao="+codigo_tipo_regiao+"&identificadornovo="+identificadornovo+"&identificador="+identificador+"&nome="+nome+"&wkt="+wkt);
},
/**
* Exclui um registro do banco de dados
* Executa admin/php/metaestat.php?funcao=mantemDadosRegiao&tipo=excluir
*/
excluiPoligono: function(){
if(i3GEO.login.verificaCookieLogin() === false){
i3GEO.janela.tempoMsg("Você precisa fazer login para usar essa opção");
return;
}
if(!window.confirm("Exclui mesmo o poligono?")){
return;
}
var codigo_tipo_regiao = $i("i3geoCartoRegioesEditaveis").value,
identificador = $i("inputIdentificadorElemento").value,
temp = function(retorno){
i3GEOF.editorlimites.deleteSelectedShape(true);
var janela = YAHOO.i3GEO.janela.manager.find("salvaLimite");
if(janela){
janela.destroy();
}
i3GEO.Interface.redesenha();
},
p = i3GEO.configura.locaplic+"/admin/php/metaestat.php?funcao=mantemDadosRegiao&tipo=excluir";
cpJSON.call(p,"foo",temp,"&codigo_tipo_regiao="+codigo_tipo_regiao+"&identificador="+identificador);
}
},
/**
*Funcoes que controlam o processo de edicao de atributos de um shape
*/
editarAtributos: {
aliascolunas: "", //guarda os nomes das colunas e seus aliases para permitir a criacao de novos registros
x: "",
y: "",
/**
* Ativa a ferramenta
* Define os eventos de onclick para abrir formulario quando o usuario clica no mapa
* Para cada regiao sao obtidas todas as variaveis cadastradas
* Executa i3GEOF.editorlimites.editarAtributos.criaJanelaFlutuante
* Executa i3GEOF.editorlimites.editarAtributos.comboVariaveis();
*/
ativa: function(botao){
if($i("i3geoCartoRegioesEditaveis").value == ""){
i3GEO.janela.tempoMsg("Escolha uma regiao");
return;
}
i3GEOF.editorlimites.mudaicone(botao);
if(i3GEO.eventos.MOUSECLIQUE.toString().search("i3GEOF.editorlimites.editarAtributos.captura()") < 0)
{i3GEO.eventos.MOUSECLIQUE.push("i3GEOF.editorlimites.editarAtributos.captura()");}
var janela = YAHOO.i3GEO.janela.manager.find("editaAtributos");
if(janela){
$i("editarAtributosForm").innerHTML = "";
}
else{
i3GEOF.editorlimites.editarAtributos.criaJanelaFlutuante(i3GEOF.editorlimites.editarAtributos.html());
i3GEOF.editorlimites.editarAtributos.comboVariaveis();
}
},
/**
* Fecha a janela de edicao
*/
desativa: function(){
var janela = YAHOO.i3GEO.janela.manager.find("editaAtributos");
if(janela){
janela.destroy();
}
},
criaJanelaFlutuante: function(html){
var janela,titulo,cabecalho,minimiza;
cabecalho = function(){};
minimiza = function(){
i3GEO.janela.minimiza("editaAtributos");
};
titulo = "Atributos ";
janela = i3GEO.janela.cria(
"250px",
"265px",
"",
"",
"",
titulo,
"editaAtributos",
false,
"hd",
cabecalho,
minimiza
);
$i("editaAtributos_corpo").style.backgroundColor = "white";
$i("editaAtributos_corpo").innerHTML = html;
i3GEO.janela.tempoMsg("Após escolher a medida da variável, clique no mapa para escolher o limite geográfico.");
YAHOO.util.Event.addListener(janela[0].close, "click", i3GEOF.editorlimites.mudaicone);
},
/**
* Fornece o HTML com os objetos que receberao os componentes da ferramenta
* @return html
*/
html: function(){
var ins = '' +
'
Escolha uma variável para editar
'; ins += ""; $i("editarAtributosVariaveis").innerHTML = ins; }; i3GEO.php.listaVariavel(temp,"i3geo_metaestat"); }, /** * Monta um combo com as medidas de uma variavel * Executa i3GEO.php.listaMedidaVariavel * @param objeto DOM do tipo select que contem a lista de variaveis */ comboMedidasVariavel: function(comboMedidas){ var temp = function(dados){ var i,n = dados.length, ins = ''; ins += 'Escolha uma medida da variável para editar
'; ins += ""; $i("editarAtributosMedidasVariavel").innerHTML = ins; }; if(comboMedidas.value !== ""){ i3GEO.php.listaMedidaVariavel(comboMedidas.value,temp); } }, /** * Captura os atributos de um elemento do mapa * Executa i3GEOF.editorlimites.editarAtributos.pegaDados(); */ captura: function(){ if(!YAHOO.i3GEO.janela.manager.find("editaAtributos")){ i3GEOF.editorlimites.mudaicone(botao); return; } i3GEOF.editorlimites.editarAtributos.x = objposicaocursor.ddx; i3GEOF.editorlimites.editarAtributos.y = objposicaocursor.ddy; i3GEOF.editorlimites.editarAtributos.pegaDados(); }, /** * Obtem os dados de um elemento de uma regiao * Monta o formulario para edicao * Executa admin/php/metaestat.php?funcao=listaAtributosMedidaVariavelXY */ pegaDados: function(){ var p = i3GEO.configura.locaplic+"/admin/php/metaestat.php?funcao=listaAtributosMedidaVariavelXY", codigo_tipo_regiao = $i("i3geoCartoRegioesEditaveis").value, id_medida_variavel = $i("editarAtributosComboMedidas").value, temp = function(retorno){ var atr = retorno.atributos, i = 0, n = atr.dados.length, j = 0, idunico = "", nj = atr.aliascolunas.length, ins = "" + 'Limite geográfico escolhido:
' + 'Nome: ' + retorno.regiao.nomeregiao + '
' + 'Código: ' + retorno.regiao.identificador_regiao + '
' + '' + 'Atributos:
' + '' + ' '; $i("editarAtributosRegiao").innerHTML = ins; ins = ""; //registros for(i=0;iexcluir
"; //colunas for(j=0;j