[firebase-br] calculo de distancia entre coordenadas

Carlos H. Cantu listas em warmboot.com.br
Seg Ago 11 10:27:20 -03 2014


Vc não precisa de trocentas casas decimais... pelo que lembro, com 6
casas decimais vc já consegue uma boa precisão em coordenadas GPS.
Pode fazer o teste no google maps mesmo.

[]s
Carlos H. Cantu
www.FireBase.com.br - www.firebirdnews.org
www.warmboot.com.br - blog.firebase.com.br

bicb>  

bicb> Pessoal, estou tentando fazer um SQL que me retorne a distancia entre
bicb> dois pontos através de coordenadas, 

bicb> na internet achei essa function em MySQL e estou tentando converter para
bicb> um aprocedure FB mas esta dando erro na quantidade de casas decimais. 

bicb> alguém saberia como resolver? 

bicb> desde já agradeço. 

bicb> a procedure é essa: 

bicb> SET TERM ^ ; 

bicb> CREATE OR ALTER PROCEDURE CALCULA_DISTANCIA (
bicb>  lat1 double precision,
bicb>  long1 double precision,
bicb>  lat2 double precision,
bicb>  long2 double precision)
bicb> returns (
bicb>  distancia double precision)
bicb> as
bicb> declare variable v2r double precision;
bicb> declare variable vlong double precision;
bicb> declare variable vlat double precision;
bicb> declare variable vtmp_sin double precision;
bicb> declare variable vtmp_cos double precision;
bicb> declare variable vtmp_sin2 double precision;
bicb> declare variable a double precision;
bicb> declare variable c double precision;
bicb> begin
bicb>  --V2r = 0.017453292519943295769236;--VALOR CORRETO
bicb>  V2r = 0.01745329251994329576;-- ASSIM DA CERTO
bicb>  vlong = (long2 - long1) * v2r;
bicb>  vLat = (lat2 - lat1) * v2r; 

bicb> vTmp_Sin = sin(vLat/2.0);
bicb>  vTmp_cos = cos(lat1 * v2r);
bicb>  vTmp_Sin2 = sin(vlong / 2.0); 

bicb> a = (vTmp_Sin * vTmp_Sin) + (vTmp_cos * vTmp_cos) * (vTmp_Sin2 *
bicb> vTmp_Sin2);
bicb>  c = 2.0 * atan2(sqrt(a), sqrt(1.0 - a)); 

bicb> distancia = 6368.1 * c; 

bicb> suspend;
bicb> end^ 

bicb> SET TERM ; ^ 

bicb> GRANT EXECUTE ON PROCEDURE CALCULA_DISTANCIA TO SYSDBA; 

bicb>  
bicb> ______________________________________________
bicb> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
bicb> Para saber como gerenciar/excluir seu cadastro na lista, use:
bicb> http://www.firebase.com.br/fb/artigo.php?id=1107
bicb> Para consultar mensagens antigas: http://firebase.com.br/pesquisa





Mais detalhes sobre a lista de discussão lista