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

JP Telecom- Julio juliojptelecom em gmail.com
Quinta Setembro 10 09:13:14 BRT 2009


Pablo,

O uso de DDD não é só apenas qdo ultrapassar 50KM, pode ser mesmo sendo bem menos, essa regra não existe mais ( é uma regra antiga), agora a regra é se for cidade diferente mesmo tendo o mesmo DDD tem que discar o Código de área ( isso para telefones fixo) e para celular sendo o mesmo DDD não precisa de código de área.

  ----- Original Message ----- 
  From: Pablo Câmara 
  To: asteriskbrasil em listas.asteriskbrasil.org 
  Sent: Thursday, September 10, 2009 8:56 AM
  Subject: [AsteriskBrasil] Calcula distâncias entre cidades utilizando latitude e longitude. MYSQL - ASTERISK 1.6


  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?




------------------------------------------------------------------------------



  _______________________________________________
  Participe do IV Encontro VoIPCenter, 16 a 18 de setembro - São Paulo.
  VoIP, Asterisk e Convergência de Redes.
  http://www.encontrovoipcenter.com.br

  Compre uma camiseta da AsteriskBrasil.org!
  http://www.voipmania.com.br

  Acesse o canal IRC de discussão sobre Asterisk em Português Brasileiro na rede Freenode.net: #asterisk-br
  _______________________________________________
  Lista de discussões AsteriskBrasil.org
  AsteriskBrasil em listas.asteriskbrasil.org
  http://listas.asteriskbrasil.org/mailman/listinfo/asteriskbrasil
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: http://listas.asteriskbrasil.org/pipermail/asteriskbrasil/attachments/20090910/b9523afd/attachment.htm 


Mais detalhes sobre a lista de discussão AsteriskBrasil