/*
Title: Coordenadas
i3GEO.coordenadas
Inclui elementos HTML especiais no mapa para apresentação de coordenadas.
Contém funções que permitem a conversão de coordenadas, entre sistemas de projeção deiferentes, com base na biblioteca Proj4js.
Cria também o bloco de apresentação de coordenadas com base na posição do mouse sobre o mapa.
Mais informações em http://trac.osgeo.org/proj4js/
Para adicionar novas projeções ou modificar as atuais, edit a variável i3GEO.coordenadas.config e defOrigem
Arquivo: i3geo/classesjs/classe_coordenadas.js
Licença:
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
Este programa é software livre; você pode redistribuí-lo
e/ou modificá-lo sob os termos da Licença Pública Geral
GNU conforme publicada pela Free Software Foundation;
Este programa é distribuído na expectativa de que seja útil,
porém, SEM NENHUMA GARANTIA; nem mesmo a garantia implícita
de COMERCIABILIDADE OU ADEQUACÃO A UMA FINALIDADE ESPECÍFICA.
Consulte a Licença Pública Geral do GNU para mais detalhes.
Você deve ter recebido uma cópia da Licença Pública Geral do
GNU junto com este programa; se não, escreva para a
Free Software Foundation, Inc., no endereço
59 Temple Street, Suite 330, Boston, MA 02111-1307 USA.
*/
if(typeof(i3GEO) === 'undefined'){
var i3GEO = {};
}
i3GEO.coordenadas = {
/*
Propriedade: formato
Formato de apresentação das coordenadas
Type:
{string}
Default:
"lista"
Valores:
bloco - mostra apenas um dos tipos e uma caixa de seleção
separado - mostra todos os tipos em lugares diferentes conforme o valor de idhtml
lista - mostra cada tipo em um lugar diferente conforme o valor de idhtml
janela - cria uma janela flutuante para mostrar os dados
*/
formato: "bloco", //bloco,separado,lista,janela
/*
Propriedade: padrao
Indica qual tipo de coordenada é mostrado como padrão quando formato for igual a "bloco".
Deve existir em i3GEO.coordenadas.config
Default:
"geoProj"
*/
padrao: "geoProj", //so faz sentido se formato for bloco
/*
Propriedade: defOrigem
CRS que define a projeção original das coordenadas capturadas na tela. Deve ser o mesmo
parâmetro definido no mapfile de inicialização do mapa (veja em i3geo/aplicmap/geral1.map ou geral1windows.map)
Default:
"+proj=longlat +ellps=GRS67 +no_defs"
*/
defOrigem: "+proj=longlat +ellps=GRS67 +no_defs", //sad69 geo
/*
Propriedade: config
Define as configurações de cada tipo de coordenada que será utilizada e/ou mostrada no mapa
Para alterar os parâmetros ou acrescentar novas projeções, altere esse objeto
Para mais detalhes, veja i3geo/classesjs/classe_coordenada.js
Para desativar a apresentação de uma projeção altere o valor de "ativo".
*/
config: {
"geoProj":{
idhtml: "localizarxy",
tipo: "geo",
titulo: "Geo",
ativo: true,
defepsg: ""
},
"dd":{
idhtml: "localizarxy",
tipo: "metrica",
titulo: "Déc. de grau",
ativo: true,
defepsg: ""
},
"policonicaSad69":{
idhtml: "localizarxy",
tipo: "metrica",
titulo: "Polic SAD-69",
ativo: true,
defepsg: "+proj=poly +lat_0=0 +lon_0=-54 +x_0=5000000 +y_0=10000000 +ellps=aust_SA +units=m +no_defs"
},
"utmSad69Proj":{
idhtml: "localizarxy",
tipo: "utm",
titulo: "UTM Sad-69",
ativo: true,
defepsg: "",
zona:{
"19N":"+proj=utm +zone=19 +ellps=aust_SA +units=m +no_defs",
"20N":"+proj=utm +zone=20 +ellps=aust_SA +units=m +no_defs",
"21N":"+proj=utm +zone=21 +ellps=aust_SA +units=m +no_defs",
"22N":"+proj=utm +zone=22 +ellps=aust_SA +units=m +no_defs",
"17S":"+proj=utm +zone=17 +south +ellps=aust_SA +units=m +no_defs",
"18S":"+proj=utm +zone=18 +south +ellps=aust_SA +units=m +no_defs",
"19S":"+proj=utm +zone=19 +south +ellps=aust_SA +units=m +no_defs",
"20S":"+proj=utm +zone=20 +south +ellps=aust_SA +units=m +no_defs",
"21S":"+proj=utm +zone=21 +south +ellps=aust_SA +units=m +no_defs",
"22S":"+proj=utm +zone=22 +south +ellps=aust_SA +units=m +no_defs",
"23S":"+proj=utm +zone=23 +south +ellps=aust_SA +units=m +no_defs",
"24S":"+proj=utm +zone=24 +south +ellps=aust_SA +units=m +no_defs",
"25S":"+proj=utm +zone=25 +south +ellps=aust_SA +units=m +no_defs"
}
},
"utmSirgas2000Proj":{
idhtml: "localizarxy",
tipo: "utm",
titulo: "UTM Sirgas",
ativo: true,
defepsg: "",
zona:{
"11N":"+proj=utm +zone=11 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs",
"12N":"+proj=utm +zone=12 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs",
"13N":"+proj=utm +zone=13 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs",
"14N":"+proj=utm +zone=14 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs",
"15N":"+proj=utm +zone=15 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs",
"16N":"+proj=utm +zone=16 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs",
"17N":"+proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs",
"18N":"+proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs",
"19N":"+proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs",
"20N":"+proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs",
"21N":"+proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs",
"22N":"+proj=utm +zone=22 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs",
"17S":"+proj=utm +zone=17 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs",
"18S":"+proj=utm +zone=18 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs",
"19S":"+proj=utm +zone=19 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs",
"20S":"+proj=utm +zone=20 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs",
"21S":"+proj=utm +zone=21 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs",
"22S":"+proj=utm +zone=22 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs",
"23S":"+proj=utm +zone=23 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs",
"24S":"+proj=utm +zone=24 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs",
"25S":"+proj=utm +zone=25 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"
}
}
},
/*
Parametros de inicialização dos componentes.
Essa variável define os parâmetros individuais de cada componente que pode ser utilizado no mapa.
Você pode acessar os parâmetros da seguinte forma:
i3GEO.coordenadas.PARAMETROS.mostraCoordenadas.idhtml = "";
Nas versões anteriores à 4.5 do i3Geo utilizava-se um
Default:
i3GEO.coordenadas.PARAMETROS = {
"mostraCoordenadasUTM":
{idhtml:"mostraUTM"},
"mostraCoordenadasGEO":
{idhtml:"localizarxy"}
}
Tipo:
{objeto}
*/
PARAMETROS: {
"mostraCoordenadasUTM":
{idhtml:"localizarxy"},
"mostraCoordenadasGEO":
{idhtml:"localizarxy"}
},
/*
Variavel: MODOTEXTO
Representação das coordenadas no modo texto
*/
MODOTEXTO: "",
/*
Function: mostraCoordenadasUTM
Obtém e mostra as coordenadas UTM da posição do mouse sobre o mapa por meio de um cálculo realizado no servidor.
Essa função deixou de ser utilizada na versão 4.5 do i3Geo.
As coordenadas são obtidas por meio de uma chamada AJAX.
Se você não quer essa função no mapa, elimine o elemento HTML existente no mapa que contenha o
id definido em i3GEO.coordenadas.PARAMETROS (mostraCoordenadasUTM) ou altere a variável i3GEO.eventos.MOUSEPARADO
Se i3GEO.coordenadas.mostraCoordenadasUTM.idhtml for igual a i3GEO.coordenadas.mostraCoordenadasGEO.idhtml
os valores mostrados serão intercalados entre GEO e UTM
Parametro:
id {String} - id do elemento HTML que receberá o resultado. Esse id por default é obtido de
i3GEO.coordenadas.PARAMETROS
Return:
{JSON} - objeto com x e y
*/
mostraCoordenadasUTM: function(id){
if(typeof(console) !== 'undefined'){console.info("i3GEO.coordenadas.mostraCoordenadasUTM()");}
try{
if(arguments.length === 0 || id === "" || typeof(id) === 'undefined')
{id = this.PARAMETROS.mostraCoordenadasUTM.idhtml;}
else
{this.PARAMETROS.mostraCoordenadasUTM.idhtml = id;}
if (!$i(id) || this.PARAMETROS.mostraCoordenadasUTM.idhtml === ""){
if(i3GEO.eventos.MOUSEPARADO.toString().search("atualizaCoordenadasUTM()") >= 0)
{i3GEO.eventos.MOUSEPARADO.remove("atualizaCoordenadasUTM()");}
return;
}
atualizaCoordenadasUTM = function()
{
if(this.PARAMETROS.mostraCoordenadasUTM.idhtml === ""){
if(i3GEO.eventos.MOUSEPARADO.toString().search("atualizaCoordenadasUTM()") >= 0)
{i3GEO.eventos.MOUSEPARADO.remove("atualizaCoordenadasUTM()");}
return;
}
if(i3GEO.Interface.STATUS.atualizando.length > 0)
{return;}
if(typeof(console) !== 'undefined'){console.info("atualizaCoordenadasUTM()");}
if(objposicaocursor.imgx < 10 || objposicaocursor.imgy < 10)
{return;}
if($i("wdoca")){return;}
//
//cancela se existir alguma ferramenta ativa
//
if(i3GEO.util.verificaScriptTag("i3GEOF") === true)
{return;}
var tempUtm = function(retorno){
var funcao,temp,texto;
funcao = "$i(i3GEO.coordenadas.PARAMETROS.mostraCoordenadasUTM.idhtml).style.display='none';"+
"if(i3GEO.coordenadas.PARAMETROS.mostraCoordenadasGEO.idhtml == i3GEO.coordenadas.PARAMETROS.mostraCoordenadasUTM.idhtml)"+
"{$i(i3GEO.coordenadas.PARAMETROS.mostraCoordenadasGEO.idhtml).style.display='block';i3GEO.coordenadas.mostraCoordenadasGEO();}";
idSetTimeoutMostraUTM = setTimeout(funcao,3400);
temp = $i(i3GEO.coordenadas.PARAMETROS.mostraCoordenadasUTM.idhtml);
if(retorno.data){
temp.style.display="block";
texto = "
";
temp.innerHTML = texto;
}
};
i3GEO.php.geo2utm(tempUtm,objposicaocursor.ddx,objposicaocursor.ddy);
};
if(i3GEO.eventos.MOUSEPARADO.toString().search("atualizaCoordenadasUTM()") < 0)
{i3GEO.eventos.MOUSEPARADO.push("atualizaCoordenadasUTM()");}
}
catch(e){i3GEO.janela.tempoMsg("mostraCoordenadasUtm: "+e.description);}
},
/*
Function: mostraCoordenadasGEO
Obtém e mostra as coordenadas Geográficas da posição do mouse sobre o mapa.
Se você não quer essa função no mapa, elimine o elemento HTML que contenha o
id definido em i3GEO.coordenadas.PARAMETROS, por default é "localizarxy"
Parametro:
id {String} - id do elemento HTML que receberá o resultado. Esse id por default é obtido de
i3GEO.coordenadas.PARAMETROS
*/
mostraCoordenadasGEO: function(id){
if(typeof(console) !== 'undefined'){console.info("i3GEO.coordenadas.mostraCoordenadasGEO()");}
try{
if(arguments.length === 0 || id === "" || typeof(id) === 'undefined')
{id = this.PARAMETROS.mostraCoordenadasGEO.idhtml;}
else
{this.PARAMETROS.mostraCoordenadasGEO.idhtml = id;}
if($i(id)){
if(!$i("coordgeotabela")){
$i(id).innerHTML = i3GEO.coordenadas.criaMascaraDMS("coordgeotabela");
atualizaLocalizarGeo = function(){
var temp = $i("coordgeotabela");
if(temp && temp.style.display === "block")
{i3GEO.coordenadas.atualizaGeo(objposicaocursor.dmsx,objposicaocursor.dmsy,"coordgeotabela");}
};
if(i3GEO.Interface.TABLET === true){
if(i3GEO.eventos.MOUSECLIQUE.toString().search("atualizaLocalizarGeo()") < 0)
{i3GEO.eventos.MOUSECLIQUE.push("atualizaLocalizarGeo()");}
}
else{
if(i3GEO.eventos.MOUSEMOVE.toString().search("atualizaLocalizarGeo()") < 0)
{i3GEO.eventos.MOUSEMOVE.push("atualizaLocalizarGeo()");}
}
}
}
}
catch(e){i3GEO.janela.tempoMsg("mostraCoordenadasGeo: "+e.description);}
},
/*
Function: geo2zonaUtm
Determina qual é a zona UTM de um par de coordenadas geográficas
Parametros:
long - longitude em décimos de grau
Return:
{number} - zona UTM
*/
geo2zonaUtm: function(long){
long = (long * 1) + 180;
long = long / 6;
return parseInt(long,10) + 1;
},
/*
Function: criaMascaraDMS
Cria uma tabela para mostrar as coordenadas no padrão grau minuto e segundo
A tabela criada receberá o id = prefixo
Parametro:
prefixo {string} - prefixo para batizar os ids dos elementos que serão criados
Retorno:
{string} - html com a tabela
*/
criaMascaraDMS: function(prefixo,titulo,caixa){
var ins = '
";
return ins;
},
/*
Function: atualizaGeo
Atualiza os valores em uma tabela do tipo DMS
Parametros:
dmsx {string} - valors de longitude em "d m s"
dmsy {string} - valors de latitude em "d m s"
prefixo {string} - prefixo da tabela (veja criaMascaraDMS)
*/
atualizaGeo: function(dmsx,dmsy,prefixo){
var x = dmsx.split(" "),
y = dmsy.split(" ");
$i(prefixo+"xg").value = x[0];
$i(prefixo+"xm").value = x[1];
$i(prefixo+"xs").value = x[2];
$i(prefixo+"yg").value = y[0];
$i(prefixo+"ym").value = y[1];
$i(prefixo+"ys").value = y[2];
i3GEO.coordenadas.MODOTEXTO += "DMS - Latitude: "+y[0]+" "+y[1]+" "+y[2]+" Longitude: "+x[0]+" "+x[1]+" "+x[2]+" ";
},
/*
Function: criaMascaraMetrica
Cria uma tabela para mostrar as coordenadas no padrão métrico (x e y)
A tabela criada receberá o id prefixo+"tabela"
Parametro:
prefixo {string} - prefixo para batizar os ids dos elementos que serão criados
cixa {string} - (opcional) caixa de seleção de tipos
Retorno:
{string} - html com a tabela
*/
criaMascaraMetrica: function(prefixo,titulo,caixa){
var ins = "
";
return ins;
},
/*
Atualiza os valores em uma tabela do tipo x e y com base na biblioteca Proj4
http://trac.osgeo.org/proj4js/wiki/UserGuide
Parametros:
configProj {string}
*/
atualizaProj4: function(onde,configProj,x,y){
var zona,temp,p,
destino = "",
iu = i3GEO.util;
try{
if(!$i(onde+configProj+"ZN"))
{return;}
}
catch(e){return;}
temp = i3GEO.coordenadas.config[configProj];
try{
if($i(onde+configProj).style.display === "none")
{return;}
}
catch(men){}
if(temp.tipo === "metrica"){
destino = temp.defepsg;
}
if(typeof(x) === 'undefined')
{x = objposicaocursor.ddx;}
if(typeof(y) === 'undefined')
{y = objposicaocursor.ddy;}
if(temp.tipo === "utm"){
zona = i3GEO.coordenadas.geo2zonaUtm(x);
$i(onde+configProj+"ZN").value = zona;
if(objposicaocursor.ddy*1 > 0)
{destino = temp.zona[zona+"N"];}
else
{destino = temp.zona[zona+"S"];}
if(typeof(destino) === 'undefined'){
iu.defineValor(onde+configProj+"X","value","?");
iu.defineValor(onde+configProj+"Y","value","?");
return;
}
}
//
//no caso de dd
//
if(temp.defepsg === "" && temp.tipo === "metrica")
{p = {x:x,y:y};}
else
{p = i3GEO.coordenadas.calculaProj4(i3GEO.coordenadas.defOrigem,destino,x,y);}
iu.defineValor(onde+configProj+"X","value",p.x);
iu.defineValor(onde+configProj+"Y","value",p.y);
i3GEO.coordenadas.MODOTEXTO += temp.titulo+" - X: "+p.x+" Y: "+p.y+" ";
},
/*
Function: calculaProj4
Faz a projeção de x e y da origem para o destino
Parametros:
origem {string} - CRS contendo o código da projeção de origem
destino {string} - CRS contendo o código da projeção de destino
x {numerico} - coordenada x ou longitude
y {numerico} - coordenada y ou latitude
Retorno:
{Proj4js.transform}
*/
calculaProj4: function(origem,destino,x,y){
Proj4js.defs = {
'ORIGEM' : origem,
'DESTINO': destino
};
//para corrigir o path do proj4js
//var url = Proj4js.getScriptLocation() + 'defs/' + this.srsAuth.toUpperCase() + this.srsProjNumber + '.js';
Proj4js.getScriptLocation = function(){
return i3GEO.configura.locaplic + "/pacotes/proj4js/lib/";
};
var source = new Proj4js.Proj("ORIGEM"),
dest = new Proj4js.Proj("DESTINO"),
p = new Proj4js.Point(x,y);
Proj4js.transform(source, dest, p);
return p;
},
/*
Mostra um tipo de coordenada e esconde os outros.
Mostra o que estiver definido em i3GEO.coordenadas.padrao
*/
ativaBloco: function(prefixo){
var tipos = i3GEO.util.listaChaves(i3GEO.coordenadas.config),
n = tipos.length,
temp,
i = 0;
//
//cria o HTML e a caixa de seleção
//
for(i=0;i";
//
//cria a caixa de seleção
//
for(i=0;i"+temp.titulo+"";
}
}
caixa += "";
if(i3GEO.coordenadas.formato !== "bloco")
{caixa = "";}
for(i=0;i" +
"Clique aqui para ativar Alt+C para poder capturar as coordenadas";
}
if(onde !== "" && $i(onde))
{$i(onde).innerHTML = ins;}
//
//aplica as funções de movimentação do mouse
//
atualizaLocalizarGeo = function(id,x,y){
if(typeof(x) === 'undefined')
{x = objposicaocursor.dmsx;}
if(typeof(y) === 'undefined')
{y = objposicaocursor.dmsy;}
temp = $i(id);
if(temp && temp.style.display === "block")
{i3GEO.coordenadas.atualizaGeo(x,y,id);}
};
for(i=0;i