Esta é uma função muito interessante que retorna a distancia em metros, de dois pontos (com latitude e longitude).

Se você não tem e não sabe como conseguir a latitude e longitude de um endereço, uma maneira é utilizando a API do Google Maps, eu criei um post especial para este assunto:

http://ainternetenossa.wordpress.com/2009/10/20/como-buscar-informacoes-detalhadas-de-um-endereco-como-a-latitude-e-longitude-com-a-api-do-google-maps/

Segue a função para o cálculo de distância:

function distanciaPontosGPS($p1LA, $p1LO, $p2LA, $p2LO) {
    $r = 6371.0;
       
    $p1LA = $p1LA * pi() / 180.0;
    $p1LO = $p1LO * pi() / 180.0;
    $p2LA = $p2LA * pi() / 180.0;
    $p2LO = $p2LO * pi() / 180.0;
       
    $dLat = $p2LA – $p1LA;
    $dLong = $p2LO – $p1LO;
       
    $a = sin($dLat / 2) * sin($dLat / 2) + cos($p1LA) * cos($p2LA) * sin($dLong / 2) * sin($dLong / 2);
    $c = 2 * atan2(sqrt($a), sqrt(1 – $a));
       
    return round($r * $c * 1000); // resultado em metros.
}

 

Para usar:

echo distanciaPontosGPS(-26.91545, -49.063632, -26.917985, -49.061143);

Essas duas funções (fatorial e combinacoes) juntas, podem ser úteis para calcular combinações por meio da famosa permutação.
Este script pode até ser usado para calcular a quantidade de combinações possíveis para acertar na megasena com toda a absoluta certeza :P .

 

<?php
/**
 * Fatorial de um número.
 *
 * @param integer $number Query para pegar o número de linhas
 *
 * @return double
 *
 * @since 04/03/09
 * @author Lucas Martins
 * @copyright Copyright (c) 2009, Lucas Martins
 *
 * @license http://opensource.org/licenses/gpl-license.php GNU Public License
 *
 */
function fatorial($number) {
 if ($number >= 2) {
 
  for ($number, $resultado = $number; $number >= 2; $number–) {
   $resultado = (($number-1) * $resultado);
  }
 
  return $resultado;
 
 } else {
 
  return 1;
 
 }
}
 
 
/**
 * Análise Combinatória.
 *
 * @param integer $n Número de elementos
 * @param integer $k Taxa de agrupamento
 *
 * @return double
 *
 * @since 04/03/09
 * @author Lucas Martins
 * @copyright Copyright (c) 2009, Lucas Martins
 *
 * @license http://opensource.org/licenses/gpl-license.php GNU Public License
 *
 */
function combinacoes($n, $k) {
 if ($n > $k) {
  $combinacao = fatorial($n) / (fatorial($k) * fatorial($n – $k));
  return $combinacao;
 } else {
  return “ERRO: O número de elementos deve ser maior do que o de grupo”;
 }
}
 
// —————————-
// Exemplo de utilização
// —————————-
 
// fatorial(integer)
$permutacao = fatorial(4);
echo “O fatorial de 4 é: “.$permutacao.”<br />”;
 
// combinacoes(integer, integer)
$combinacoes = number_format(combinacoes(25, 15), 0, ‘,’, ‘.’);
echo “Pra eu ganhar na loteria megasena com certeza, eu tenho que fazer “.$combinacoes.” combinações possíveis :) <br />”;
?>

 

Abraços,
Lucas Martins.

Seguir

Obtenha todo post novo entregue na sua caixa de entrada.