<p>stan++</p>
<div class="gmail_quote">On Mar 19, 2012 11:23 AM, "Stanislaw Pusep" <<a href="mailto:creaktive@gmail.com">creaktive@gmail.com</a>> wrote:<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Uma fórmula de cálculo de distância entre latitudes/longitudes que tem precisão razoável e baixo custo computacional é "Spherical Law of Cosines".<div>Aqui tem várias outras fórmulas, com prós, contras e implementações (em JavaScript): <a href="http://www.movable-type.co.uk/scripts/latlong.html" target="_blank">http://www.movable-type.co.uk/scripts/latlong.html</a></div>


<div>Em Perl, os módulos Geo::Distance e Geo::Distance::XS implementam o cálculo de distância.</div><div>A propósito, uma lista "oficial" (da Embratel) vinculando DDD aos nomes de cidades é esta: <a href="http://www.embratel.com.br/Embratel02/cda/portal/0,1446,RE_P_365,00.html" target="_blank">http://www.embratel.com.br/Embratel02/cda/portal/0,1446,RE_P_365,00.html</a></div>


<div>Por obséquio, cruzei essa lista com as coordenadas das cidades, para o meu módulo Geo::CEP (DDD é a 5-a coluna):</div><div><div><br></div><div>01000000,05999999,SP,São Paulo,11,-23.5333333,-46.6166667</div><div>06000000,06299999,SP,Osasco,11,-23.5666667,-46.7833333</div>


<div>06300000,06399999,SP,Carapicuíba,11,-23.5166667,-46.8333333</div><div>06400000,06499999,SP,Barueri,11,-23.5166667,-46.8833333</div><div>06500000,06549999,SP,Santana de Parnaíba,11,-23.45,-46.9166667</div><div>...</div>


</div><div><div>99965000,99965970,RS,Água Santa,54,-28.1666667,-52.0333333</div><div>99970000,99970970,RS,Ciríaco,54,-28.35,-51.8833333</div><div>99975000,99975970,RS,São João Bosco,54,,</div><div>99980000,99980974,RS,David Canabarro,54,,</div>


<div>99990000,99990999,RS,Muliterno,54,-28.3333333,-51.7666667</div></div><div><br></div><div>(arquivo completo em <a href="http://api.metacpan.org/source/SYP/Geo-CEP-0.4/share/cep.csv" target="_blank">http://api.metacpan.org/source/SYP/Geo-CEP-0.4/share/cep.csv</a>)</div>


<div><br>ABS()<br><br>
<br><br><div class="gmail_quote">On Mon, Mar 19, 2012 at 10:06, Renato Santos <span dir="ltr"><<a href="mailto:renato.cron@gmail.com" target="_blank">renato.cron@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">


Não existe em algum lugar publico a geoposição de cidades<div>(talvez algum lugar do <a href="http://www.ibge.gov.br/home/disseminacao/online/catalogo2/digitaltema.php?tema=Organizacaoterrit&pagatual=inicio#sub_download" target="_blank">http://www.ibge.gov.br/home/disseminacao/online/catalogo2/digitaltema.php?tema=Organizacaoterrit&pagatual=inicio#sub_download</a> que não consegui fazer funcionar)</div>




<div>e depois, tentar antes do DDD relacionar a cidade com a cidade do usuário e depois (pra não depender do banco) fazer a conta:<br><span style="font-family:Consolas,monospace;font-size:13px;line-height:16px;text-align:left;background-color:rgb(248,248,248);color:rgb(177,177,0)">math.max</span><span style="font-family:Consolas,monospace;font-size:13px;line-height:16px;text-align:left;background-color:rgb(248,248,248);color:rgb(102,204,102)">(</span><span style="font-family:Consolas,monospace;font-size:13px;line-height:16px;text-align:left;background-color:rgb(248,248,248);color:rgb(177,177,0)">math.abs</span><span style="font-family:Consolas,monospace;font-size:13px;line-height:16px;text-align:left;background-color:rgb(248,248,248);color:rgb(102,204,102)">(</span><span style="color:rgb(128,128,128);font-family:Consolas,monospace;font-size:13px;line-height:16px;text-align:left;background-color:rgb(248,248,248)">s.x - c.x</span><span style="font-family:Consolas,monospace;font-size:13px;line-height:16px;text-align:left;background-color:rgb(248,248,248);color:rgb(102,204,102)">)</span><span style="color:rgb(128,128,128);font-family:Consolas,monospace;font-size:13px;line-height:16px;text-align:left;background-color:rgb(248,248,248)">, </span><span style="font-family:Consolas,monospace;font-size:13px;line-height:16px;text-align:left;background-color:rgb(248,248,248);color:rgb(177,177,0)">math.abs</span><span style="font-family:Consolas,monospace;font-size:13px;line-height:16px;text-align:left;background-color:rgb(248,248,248);color:rgb(102,204,102)">(</span><span style="color:rgb(128,128,128);font-family:Consolas,monospace;font-size:13px;line-height:16px;text-align:left;background-color:rgb(248,248,248)">s.y - c.y</span><span style="font-family:Consolas,monospace;font-size:13px;line-height:16px;text-align:left;background-color:rgb(248,248,248);color:rgb(102,204,102)">)</span><span style="font-family:Consolas,monospace;font-size:13px;line-height:16px;text-align:left;background-color:rgb(248,248,248);color:rgb(102,204,102)">)</span></div>




<div><br></div><div>onde c = {x => longitude, y=>latitude} da cidade e </div><div>s = {x => longitude, y=>latitude} do cliente.</div><div><br></div><div>Se quiser pode usar hipotenusa também, já que o calculo acima é pra jogos 2d. </div>




<div><div><div> <br><br><div class="gmail_quote">2012/3/19 Leonardo Ruoso <span dir="ltr"><<a href="mailto:leonardo@ruoso.com" target="_blank">leonardo@ruoso.com</a>></span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">




Em Seg, 2012-03-19 às 00:06 -0300, Thiago Rondon escreveu:<br>
<div>> Pessoal,<br>
><br>
> O Lucas Mateus neste artigo esta compartilhando um cenário onde ele<br>
> precisa realizar<br>
> o calculo entre dois pontos baseado no DDD, em alguns cenários esta<br>
> solução pode<br>
> ser aplicada muito bem !<br>
><br>
> <a href="http://sao-paulo.pm.org/equinocio/2012/mar/19" target="_blank">http://sao-paulo.pm.org/equinocio/2012/mar/19</a><br>
<br>
</div>Xi³<br>
<br>
Vou atacar de muito chato agora!<br>
<br>
Exemplos fáceis para complementar os de SP que constam no artigo:<br>
<br>
- O DDD de Curitiba é 41, o de São Paulo é 11 e o de Belo Horizonte é<br>
31. Curitiba não é mais perto de Belo Horizonte do que de SP!<br>
- O DDD de Fortaleza é 85, o do interior é 88, mas o de Teresina e do<br>
Piauí quase todo é 86 e há cidades fora do Ceará com DDD 87 e 89!<br>
<br>
Para usar esse recurso seria necessário criar uma tabela auxiliar com a<br>
delimitação geográfica de cada código DDD. Você teria também de mapear<br>
os MCDU para as regiões menos populosas, mas eu tenho a impressão que o<br>
esforço seria em vão, pois se em SP todos os MCDU do DDD 11 correspondem<br>
à capital e em cidades do interior seja frequente que uma cidade inteira<br>
disponha de um único MCDU —o roteamento tandem é (era?) feito pelo MCDU—<br>
hoje isso mudou é válido apenas por acidente.<br>
<br>
Quem sempre morou em cidade grande (capitais populosas) pode lembretar<br>
que antigamente as pessoas «adivinhavam» o bairro ou a região pelo MCDU,<br>
mas com as centrais digitais o número do telefone (DDD e MCDU) do<br>
assinante não correspondem mais necessariamente à central em que o<br>
assinante está conectado.<br>
<br>
Era como se antigamente o número do telefone fosse o IP do assinante e<br>
esse número tenha sido transformado num registro de DNS para um endereço<br>
interno da rede de pacotes.<br>
<br>
Some-se a isso o fato de que em Fortaleza eu tinha um número com DDD 11<br>
e em SP eu tenho um número de Santos :-)<br>
<br>
Há também grande possibilidade de que uma cidade com um determinado DDD<br>
esteja muito mais próxima de uma cidade grande com um outro DDD do que<br>
da cidade «grande» que tem o mesmo DDD que ela. Isso vai acontecer o<br>
tempo todo nas cidades próximas a fronteiras estatuais.<br>
<div><br>
> Abs!<br>
> -Thiago Rondon<br>
> =begin disclaimer<br>
>    Sao Paulo Perl Mongers: <a href="http://sao-paulo.pm.org/" target="_blank">http://sao-paulo.pm.org/</a><br>
>  SaoPaulo-pm mailing list: <a href="mailto:SaoPaulo-pm@pm.org" target="_blank">SaoPaulo-pm@pm.org</a><br>
>  L<<a href="http://mail.pm.org/mailman/listinfo/saopaulo-pm" target="_blank">http://mail.pm.org/mailman/listinfo/saopaulo-pm</a>><br>
> =end disclaimer<br>
<br>
<br>
</div><font color="#888888">--<br>
Leonardo Ruoso <<a href="mailto:leonardo@ruoso.com" target="_blank">leonardo@ruoso.com</a>><br>
(11) 2368-2228 - (11) 3522-9612<br>
<a href="http://leonardo.ruoso.com" target="_blank">http://leonardo.ruoso.com</a><br>
</font><div><div></div><div><br>
=begin disclaimer<br>
   Sao Paulo Perl Mongers: <a href="http://sao-paulo.pm.org/" target="_blank">http://sao-paulo.pm.org/</a><br>
 SaoPaulo-pm mailing list: <a href="mailto:SaoPaulo-pm@pm.org" target="_blank">SaoPaulo-pm@pm.org</a><br>
 L<<a href="http://mail.pm.org/mailman/listinfo/saopaulo-pm" target="_blank">http://mail.pm.org/mailman/listinfo/saopaulo-pm</a>><br>
=end disclaimer<br>
</div></div></blockquote></div><br><br clear="all"><div><br></div></div></div><span><font color="#888888">-- <br><div><font size="1" color="#333333">Saravá,</font></div><div><font size="1" color="#333333">Renato CRON Santos</font></div>


<div><div style="text-align:right">

<font size="1" color="#333333"><a href="http://www.renatocron.com/blog/" target="_blank">http://www.renatocron.com/blog/</a></font></div></div><div style="text-align:right"><font size="1" color="#333333"><a href="http://twitter.com/#!/renato_cron" target="_blank">@renato_cron</a><br>




</font></div><div style="text-align:right"><br></div><br>
</font></span></div>
<br>=begin disclaimer<br>
   Sao Paulo Perl Mongers: <a href="http://sao-paulo.pm.org/" target="_blank">http://sao-paulo.pm.org/</a><br>
 SaoPaulo-pm mailing list: <a href="mailto:SaoPaulo-pm@pm.org" target="_blank">SaoPaulo-pm@pm.org</a><br>
 L<<a href="http://mail.pm.org/mailman/listinfo/saopaulo-pm" target="_blank">http://mail.pm.org/mailman/listinfo/saopaulo-pm</a>><br>
=end disclaimer<br>
<br></blockquote></div><br></div>
<br>=begin disclaimer<br>
   Sao Paulo Perl Mongers: <a href="http://sao-paulo.pm.org/" target="_blank">http://sao-paulo.pm.org/</a><br>
 SaoPaulo-pm mailing list: <a href="mailto:SaoPaulo-pm@pm.org">SaoPaulo-pm@pm.org</a><br>
 L<<a href="http://mail.pm.org/mailman/listinfo/saopaulo-pm" target="_blank">http://mail.pm.org/mailman/listinfo/saopaulo-pm</a>><br>
=end disclaimer<br>
<br></blockquote></div>