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". Aqui tem várias outras fórmulas, com prós, contras e implementações (em JavaScript): http://www.movable-type.co.uk/scripts/latlong.html Em Perl, os módulos Geo::Distance e Geo::Distance::XS implementam o cálculo de distância. A propósito, uma lista "oficial" (da Embratel) vinculando DDD aos nomes de cidades é esta: http://www.embratel.com.br/Embratel02/cda/portal/0,1446,RE_P_365,00.html Por obséquio, cruzei essa lista com as coordenadas das cidades, para o meu módulo Geo::CEP (DDD é a 5-a coluna):
01000000,05999999,SP,São Paulo,11,-23.5333333,-46.6166667 06000000,06299999,SP,Osasco,11,-23.5666667,-46.7833333 06300000,06399999,SP,Carapicuíba,11,-23.5166667,-46.8333333 06400000,06499999,SP,Barueri,11,-23.5166667,-46.8833333 06500000,06549999,SP,Santana de Parnaíba,11,-23.45,-46.9166667 ... 99965000,99965970,RS,Água Santa,54,-28.1666667,-52.0333333 99970000,99970970,RS,Ciríaco,54,-28.35,-51.8833333 99975000,99975970,RS,São João Bosco,54,, 99980000,99980974,RS,David Canabarro,54,, 99990000,99990999,RS,Muliterno,54,-28.3333333,-51.7666667 (arquivo completo em http://api.metacpan.org/source/SYP/Geo-CEP-0.4/share/cep.csv) ABS() On Mon, Mar 19, 2012 at 10:06, Renato Santos <[email protected]> wrote: > Não existe em algum lugar publico a geoposição de cidades > (talvez algum lugar do > http://www.ibge.gov.br/home/disseminacao/online/catalogo2/digitaltema.php?tema=Organizacaoterrit&pagatual=inicio#sub_download > que > não consegui fazer funcionar) > 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: > math.max(math.abs(s.x - c.x), math.abs(s.y - c.y)) > > onde c = {x => longitude, y=>latitude} da cidade e > s = {x => longitude, y=>latitude} do cliente. > > Se quiser pode usar hipotenusa também, já que o calculo acima é pra jogos > 2d. > > > 2012/3/19 Leonardo Ruoso <[email protected]> > >> Em Seg, 2012-03-19 às 00:06 -0300, Thiago Rondon escreveu: >> > Pessoal, >> > >> > O Lucas Mateus neste artigo esta compartilhando um cenário onde ele >> > precisa realizar >> > o calculo entre dois pontos baseado no DDD, em alguns cenários esta >> > solução pode >> > ser aplicada muito bem ! >> > >> > http://sao-paulo.pm.org/equinocio/2012/mar/19 >> >> Xi³ >> >> Vou atacar de muito chato agora! >> >> Exemplos fáceis para complementar os de SP que constam no artigo: >> >> - O DDD de Curitiba é 41, o de São Paulo é 11 e o de Belo Horizonte é >> 31. Curitiba não é mais perto de Belo Horizonte do que de SP! >> - O DDD de Fortaleza é 85, o do interior é 88, mas o de Teresina e do >> Piauí quase todo é 86 e há cidades fora do Ceará com DDD 87 e 89! >> >> Para usar esse recurso seria necessário criar uma tabela auxiliar com a >> delimitação geográfica de cada código DDD. Você teria também de mapear >> os MCDU para as regiões menos populosas, mas eu tenho a impressão que o >> esforço seria em vão, pois se em SP todos os MCDU do DDD 11 correspondem >> à capital e em cidades do interior seja frequente que uma cidade inteira >> disponha de um único MCDU —o roteamento tandem é (era?) feito pelo MCDU— >> hoje isso mudou é válido apenas por acidente. >> >> Quem sempre morou em cidade grande (capitais populosas) pode lembretar >> que antigamente as pessoas «adivinhavam» o bairro ou a região pelo MCDU, >> mas com as centrais digitais o número do telefone (DDD e MCDU) do >> assinante não correspondem mais necessariamente à central em que o >> assinante está conectado. >> >> Era como se antigamente o número do telefone fosse o IP do assinante e >> esse número tenha sido transformado num registro de DNS para um endereço >> interno da rede de pacotes. >> >> Some-se a isso o fato de que em Fortaleza eu tinha um número com DDD 11 >> e em SP eu tenho um número de Santos :-) >> >> Há também grande possibilidade de que uma cidade com um determinado DDD >> esteja muito mais próxima de uma cidade grande com um outro DDD do que >> da cidade «grande» que tem o mesmo DDD que ela. Isso vai acontecer o >> tempo todo nas cidades próximas a fronteiras estatuais. >> >> > Abs! >> > -Thiago Rondon >> > =begin disclaimer >> > Sao Paulo Perl Mongers: http://sao-paulo.pm.org/ >> > SaoPaulo-pm mailing list: [email protected] >> > L<http://mail.pm.org/mailman/listinfo/saopaulo-pm> >> > =end disclaimer >> >> >> -- >> Leonardo Ruoso <[email protected]> >> (11) 2368-2228 - (11) 3522-9612 >> http://leonardo.ruoso.com >> >> =begin disclaimer >> Sao Paulo Perl Mongers: http://sao-paulo.pm.org/ >> SaoPaulo-pm mailing list: [email protected] >> L<http://mail.pm.org/mailman/listinfo/saopaulo-pm> >> =end disclaimer >> > > > > -- > Saravá, > Renato CRON Santos > http://www.renatocron.com/blog/ > @renato_cron <http://twitter.com/#!/renato_cron> > > > > =begin disclaimer > Sao Paulo Perl Mongers: http://sao-paulo.pm.org/ > SaoPaulo-pm mailing list: [email protected] > L<http://mail.pm.org/mailman/listinfo/saopaulo-pm> > =end disclaimer > >
=begin disclaimer Sao Paulo Perl Mongers: http://sao-paulo.pm.org/ SaoPaulo-pm mailing list: [email protected] L<http://mail.pm.org/mailman/listinfo/saopaulo-pm> =end disclaimer
