<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=iso-8859-1">
<META content="MSHTML 6.00.6000.16825" name=GENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY bgColor=#ffffff>
<DIV><FONT face=Arial size=2>Pablo,</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>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.</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<BLOCKQUOTE 
style="PADDING-RIGHT: 0px; PADDING-LEFT: 5px; MARGIN-LEFT: 5px; BORDER-LEFT: #000000 2px solid; MARGIN-RIGHT: 0px">
  <DIV style="FONT: 10pt arial">----- Original Message ----- </DIV>
  <DIV 
  style="BACKGROUND: #e4e4e4; FONT: 10pt arial; font-color: black"><B>From:</B> 
  <A title=pscamara@gmail.com href="mailto:pscamara@gmail.com">Pablo Câmara</A> 
  </DIV>
  <DIV style="FONT: 10pt arial"><B>To:</B> <A 
  title=asteriskbrasil@listas.asteriskbrasil.org 
  href="mailto:asteriskbrasil@listas.asteriskbrasil.org">asteriskbrasil@listas.asteriskbrasil.org</A> 
  </DIV>
  <DIV style="FONT: 10pt arial"><B>Sent:</B> Thursday, September 10, 2009 8:56 
  AM</DIV>
  <DIV style="FONT: 10pt arial"><B>Subject:</B> [AsteriskBrasil] Calcula 
  distâncias entre cidades utilizando latitude e longitude. MYSQL - ASTERISK 
  1.6</DIV>
  <DIV><BR></DIV>
  <DIV>Olá pessoal...</DIV>
  <DIV><BR></DIV>
  <DIV>Quando devo utilizar o código de area dentro de um mesmo estado?&nbsp;Não 
  sei se a informação procede, mas quando a distancia ultrapassa 50 km, o uso do 
  código da area é obrigatório.</DIV>
  <DIV><BR></DIV>
  <DIV>Logo resolvi apelar. Calcular as distancias utilizando latitude e 
  longitude utilizando os dados da Tabela cnlfixo da anatel.</DIV>
  <DIV>E uma tabela de preferencias (filiais) que tem as informações da 
  filial.</DIV>
  <DIV><BR></DIV>
  <DIV>Porem não tenho certeza se esses cálculos estão corretos.</DIV>
  <DIV><BR></DIV>
  <DIV>Passo como&nbsp;paramento&nbsp;o número discado. ('11', '9999' 
  '9999')</DIV>
  <DIV><BR></DIV>
  <DIV><BR></DIV>
  <DIV>DELIMITER $$</DIV>
  <DIV><BR></DIV>
  <DIV>DROP FUNCTION IF EXISTS `asterisk`.`fn_calculaDistancia` $$</DIV>
  <DIV>CREATE DEFINER=`root`@`%` FUNCTION `fn_calculaDistancia`(varDDD 
  varchar(2), varFaixa1 varchar(6), varFaixa2 varchar(4)) RETURNS varchar(10) 
  CHARSET latin1</DIV>
  <DIV>BEGIN</DIV>
  <DIV><BR></DIV>
  <DIV>declare radiano float default 0;</DIV>
  <DIV>declare unidade float default 0;</DIV>
  <DIV>declare area varchar(2) default 0;</DIV>
  <DIV>declare latitude_1 float default 0;</DIV>
  <DIV>declare longitude_1 float default 0;</DIV>
  <DIV>declare latitude_2 float default 0;</DIV>
  <DIV>declare longitude_2 float default 0;</DIV>
  <DIV>declare distancia float default 50;</DIV>
  <DIV><BR></DIV>
  <DIV>&nbsp;&nbsp;set radiano = 180/PI();</DIV>
  <DIV>&nbsp;&nbsp;set unidade = 60 * 1.1515 * 1.609344;</DIV>
  <DIV><BR></DIV>
  <DIV>&nbsp;&nbsp;select substr(prefixo,1,2), substr(latitude,1,4)/100, 
  substr(longitude,1,4)/100</DIV>
  <DIV>&nbsp;&nbsp;into area, latitude_1, longitude_1</DIV>
  <DIV>&nbsp;&nbsp;from asterisk.preferencias</DIV>
  <DIV>&nbsp;&nbsp;where principal = 1;</DIV>
  <DIV><BR></DIV>
  <DIV>&nbsp;&nbsp;if (area = varDDD) then</DIV>
  <DIV>&nbsp;&nbsp; select substr(latitude,1,4)/100, 
  substr(longitude,1,4)/100</DIV>
  <DIV>&nbsp;&nbsp; into latitude_2, longitude_2</DIV>
  <DIV>&nbsp;&nbsp; from asterisk.cnlfixo</DIV>
  <DIV>&nbsp;&nbsp; where prefixo = concat(varDDD,varFaixa1)</DIV>
  <DIV>&nbsp;&nbsp; and &nbsp; varFaixa2 between faixainicial and 
  faixafinal;</DIV>
  <DIV><BR></DIV>
  <DIV>&nbsp;&nbsp; set distancia = ((ACOS(SIN(latitude_1/radiano) * 
  SIN(latitude_2/radiano) +</DIV>
  <DIV>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;COS(latitude_1/radiano) * 
  COS(latitude_2/radiano) *</DIV>
  <DIV>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;COS(longitude_2/radiano - 
  longitude_1/radiano))) * unidade);</DIV>
  <DIV><BR></DIV>
  <DIV>&nbsp;&nbsp; end if;</DIV>
  <DIV><BR></DIV>
  <DIV>&nbsp;&nbsp; if (distancia &gt;= 50) then</DIV>
  <DIV>&nbsp;&nbsp; &nbsp; &nbsp;return 0; -- usa ddd</DIV>
  <DIV>&nbsp;&nbsp; else</DIV>
  <DIV>&nbsp;&nbsp; &nbsp; &nbsp;return 1; -- remove ddd</DIV>
  <DIV>&nbsp;&nbsp; end if;</DIV>
  <DIV><BR></DIV>
  <DIV><BR></DIV>
  <DIV>END $$</DIV>
  <DIV><BR></DIV>
  <DIV>DELIMITER ;</DIV>
  <DIV><BR></DIV>
  <DIV>Porem meus resultados não estao muito confiáveis.&nbsp;</DIV>
  <DIV>Alguem consegue ver algum problema nessa procedure?</DIV>
  <DIV><BR></DIV>
  <P>
  <HR>

  <P></P><BR>_______________________________________________<BR>Participe do IV 
  Encontro VoIPCenter, 16 a 18 de setembro - São Paulo.<BR>VoIP, Asterisk e 
  Convergência de Redes.<BR>http://www.encontrovoipcenter.com.br<BR><BR>Compre 
  uma camiseta da 
  AsteriskBrasil.org!<BR>http://www.voipmania.com.br<BR><BR>Acesse o canal IRC 
  de discussão sobre Asterisk em Português Brasileiro na rede Freenode.net: 
  #asterisk-br<BR>_______________________________________________<BR>Lista de 
  discussões 
  AsteriskBrasil.org<BR>AsteriskBrasil@listas.asteriskbrasil.org<BR>http://listas.asteriskbrasil.org/mailman/listinfo/asteriskbrasil</BLOCKQUOTE></BODY></HTML>