[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