[SP-pm] Mapas

Hernan Lopes hernanlopes at gmail.com
Sat Aug 31 15:59:07 PDT 2013


Quanto ao CEP, é simples tambem, vc precisa fazer o seguinte para descobrir
as coordenadas relacionadas a um cep... o myagawa implementou um módulo que
facilita esse tipo de busca:

abs,

Hernan

# Imprime coordenadas relacionadas a um CEP
use Geo::Coder::Google;
use Data::Printer;
my $cep      = "04363-040" ,
   $geocoder = Geo::Coder::Google->new(apiver => 3),
   $location = $geocoder->geocode( location => "Brasil, cep $cep" );
print "A latutide e longitude para o $cep é: \n";
print "Latitude: ", $location->{ geometry }->{ location }->{ lat }, "\n";
print "Longitude: ", $location->{ geometry }->{ location }->{ lng }, "\n";







2013/8/31 Hernan Lopes <hernanlopes at gmail.com>

> Ahh, e vc pode implementar em qq linguagem, é bem simples, segue
> implementacao em JS pra vc colar no seu firebug:
>
> abs,
>
> Hernan
>
> var to_radian = function( val ) {
>
>     return val * Math.PI / 180;
> }
>
> var cidade = {
>     new_york : {
>         lat : 40.697169,
>         lon : -74.052658
>     },
>     sao_paulo : {
>         lat : -23.548943,
>         lon : -46.638818
>
>     }
> };
>
> var partida = cidade[ "new_york" ];
> var destino = cidade[ "sao_paulo" ];
>
> var raio_da_terra = 6371; // http://pt.wikipedia.org/wiki/Raio_da_Terra
>
> var dLat = to_radian(destino["lat"]-partida["lat"]);
> var dLon = to_radian(destino["lon"]-partida["lon"]);
> var lat1 = to_radian(partida["lat"]);
> var lat2 = to_radian(destino["lat"]);
>
> var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
>         Math.sin(dLon/2) * Math.sin(dLon/2) * Math.cos(lat1) * Math.cos(lat2);
> var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
> var d = raio_da_terra * c;
> console.log( "A distância entre Nova York e São Paulo é: " + d + " km ");
>
>
>
>
> 2013/8/31 Hernan Lopes <hernanlopes at gmail.com>
>
>> Segue um exemplo prático da fórmula de haversine... essa fórmula calcula
>> a distância entre duas coordenadas com latitude e longitude.
>>
>> O exemplo abaixo demonstra o cálculo da distância entre são paulo e nova
>> york:
>> Se fizer o mesmo procedimento no google maps, vai ver que o valor é igual.
>>
>> abs,
>>
>> Hernan
>>
>> use strict;
>> use warnings;
>> use GIS::Distance;
>> use Data::Printer;
>>
>> my $gis             = GIS::Distance->new();
>>    $gis->formula( 'Haversine' );
>>
>> my $cidade = {
>>     new_york => {
>>         lat => 40.697169,
>>         lon => -74.052658
>>     } ,
>>     sao_paulo => {
>>         lat => -23.548943 ,
>>         lon => -46.638818
>>     }
>> } ;
>> my @partida         = ( $cidade->{ new_york }->{ lat }, $cidade->{
>> new_york }->{ lon } );
>> my @destino         = ( $cidade->{ sao_paulo }->{ lat }, $cidade->{
>> sao_paulo }->{ lon } );
>> my $distance        = $gis->distance( @partida => @destino );
>> warn "A distância entre Nova york e São Paulo é: " , $distance->{ values
>> }->{ $distance->{unit} } , " ",  $distance->{unit};
>>
>>
>>
>>
>>
>> 2013/8/31 Hernan Lopes <hernanlopes at gmail.com>
>>
>>> De qualquer maneira, dadas duas coordenadas, a fórmula da distância de
>>> haversine vai te dar a resposta.
>>>
>>> É só vc usar este módulo com a opcão "Haversine" e as coordenadas,
>>> conforme: https://metacpan.org/module/GIS::Distance
>>>
>>>
>>>
>>>
>>> 2013/8/31 Blabos de Blebe <blabos at gmail.com>
>>>
>>>> Obrigado Stan, vou dar uma olhada.
>>>>
>>>> Desculpe se a pergunta é idiota, mas tem binding disso em Perl?
>>>>
>>>>
>>>> 2013/8/31 Stanislaw Pusep <creaktive at gmail.com>
>>>>
>>>>> Tem API do Google para isso, o Distance Matrix:
>>>>>
>>>>>     var service = new google.maps.DistanceMatrixService();
>>>>>     service.getDistanceMatrix({
>>>>>         origins: players,
>>>>>         destinations: players,
>>>>>         travelMode: google.maps.TravelMode.WALKING,
>>>>>     }, function (response, status) {
>>>>>         if (status == google.maps.DistanceMatrixStatus.OK) {
>>>>>             var origins = response.originAddresses;
>>>>>             var destinations = response.destinationAddresses;
>>>>>             ...
>>>>>         }
>>>>>     });
>>>>>
>>>>>
>>>>>
>>>>> 2013/8/31 Blabos de Blebe <blabos at gmail.com>
>>>>>
>>>>>> Fala pessoal,
>>>>>>
>>>>>> Eu estou fazendo mais um trabalho final na faculdade ( é, eu sei, é o
>>>>>> segundo, longa história... ) e vou precisar integrar com uma api de mapas.
>>>>>>
>>>>>> O trabalho é um site pra ajudar jogadores de magic, e uma das ajudas
>>>>>> é encontrar a loja mais próxima.
>>>>>>
>>>>>> Eu nunca mexi com mapas antes então gostaria que vocês me apontassem
>>>>>> documentação, módulos, dicas etc.
>>>>>>
>>>>>> Basicamente o que eu preciso é plotar lojas no mapa e calcular
>>>>>> distâncias entre elas e entre os jogadores, da mesma forma que o locator da
>>>>>> wizards faz:
>>>>>>
>>>>>>
>>>>>> http://locator.wizards.com/#brand=magic&a=search&p=20550-060&c=-23.7246761476923,-46.57210253923074&massmarket=no
>>>>>>
>>>>>> Parto do pressuposto que eu sei pelo menos o CEP de todo mundo.
>>>>>>
>>>>>> Qualquer ajuda é bem vinda.
>>>>>>
>>>>>> []'s
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> =begin disclaimer
>>>>>>    Sao Paulo Perl Mongers: http://sao-paulo.pm.org/
>>>>>>  SaoPaulo-pm mailing list: SaoPaulo-pm at pm.org
>>>>>>  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: SaoPaulo-pm at pm.org
>>>>>  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: SaoPaulo-pm at pm.org
>>>>  L<http://mail.pm.org/mailman/listinfo/saopaulo-pm>
>>>> =end disclaimer
>>>>
>>>>
>>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.pm.org/pipermail/saopaulo-pm/attachments/20130831/a2b48125/attachment-0001.html>


More information about the SaoPaulo-pm mailing list