[AsteriskBrasil] Calcula distâncias entre cidades utilizando latitude e longitude. MYSQL - ASTERISK 1.6

Pablo Câmara pscamara em gmail.com
Quinta Setembro 10 08:56:18 BRT 2009


Olá pessoal...

Quando devo utilizar o código de area dentro de um mesmo estado? Não sei se
a informação procede, mas quando a distancia ultrapassa 50 km, o uso do
código da area é obrigatório.

Logo resolvi apelar. Calcular as distancias utilizando latitude e longitude
utilizando os dados da Tabela cnlfixo da anatel.
E uma tabela de preferencias (filiais) que tem as informações da filial.

Porem não tenho certeza se esses cálculos estão corretos.

Passo como paramento o número discado. ('11', '9999' '9999')


DELIMITER $$

DROP FUNCTION IF EXISTS `asterisk`.`fn_calculaDistancia` $$
CREATE DEFINER=`root`@`%` FUNCTION `fn_calculaDistancia`(varDDD varchar(2),
varFaixa1 varchar(6), varFaixa2 varchar(4)) RETURNS varchar(10) CHARSET
latin1
BEGIN

declare radiano float default 0;
declare unidade float default 0;
declare area varchar(2) default 0;
declare latitude_1 float default 0;
declare longitude_1 float default 0;
declare latitude_2 float default 0;
declare longitude_2 float default 0;
declare distancia float default 50;

  set radiano = 180/PI();
  set unidade = 60 * 1.1515 * 1.609344;

  select substr(prefixo,1,2), substr(latitude,1,4)/100,
substr(longitude,1,4)/100
  into area, latitude_1, longitude_1
  from asterisk.preferencias
  where principal = 1;

  if (area = varDDD) then
   select substr(latitude,1,4)/100, substr(longitude,1,4)/100
   into latitude_2, longitude_2
   from asterisk.cnlfixo
   where prefixo = concat(varDDD,varFaixa1)
   and   varFaixa2 between faixainicial and faixafinal;

   set distancia = ((ACOS(SIN(latitude_1/radiano) * SIN(latitude_2/radiano)
+
        COS(latitude_1/radiano) * COS(latitude_2/radiano) *
        COS(longitude_2/radiano - longitude_1/radiano))) * unidade);

   end if;

   if (distancia >= 50) then
      return 0; -- usa ddd
   else
      return 1; -- remove ddd
   end if;


END $$

DELIMITER ;

Porem meus resultados não estao muito confiáveis.
Alguem consegue ver algum problema nessa procedure?
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: http://listas.asteriskbrasil.org/pipermail/asteriskbrasil/attachments/20090910/b2b3a126/attachment.htm 


Mais detalhes sobre a lista de discussão AsteriskBrasil