Dodao sam opciju približnog računanja razdaljine između A i B na osnovu geo lokacije, kao i približno računanje puta (1/3 ukupne razdaljine), što više krivina, to je tačnije
PHP kôd:
$vm = new VM;
echo $vm->getDistance("beograd", "novi sad");
Citat:
Distance between Beograd and Novi Sad is ~73.521 kilometers.
|
PHP kôd:
$vm = new VM;
echo $vm->getDistance("beograd", "novi sad", true);
Citat:
Distance between Beograd and Novi Sad is ~98.028 kilometers.
|
PHP kôd:
class VM{
/**
* ViaMichelin.com City2Hash PHP Class (25.11.2010)
* @author Webarto.com
* @copyright 2010
*/
public function generateLink($from, $to){
return '<a href="http://www.viamichelin.com/web/Itineraires?strStartLocid='.$this->getHash($from).'&strDestLocid='.$this->getHash($to).'">Click here to get route from '.ucwords($from).' to '.ucwords($to).'</a>';
}
public function getDistance($from, $to, $road = false){
$x = $this->getLL($from);
$y = $this->getLL($to);
$distance = $this->distance($x[1], $x[0], $y[1], $y[0]);
if($road == true){
$distance = $distance + ($distance / 3);
}
return "Distance between ".ucwords($from)." and ".ucwords($to)." is ~$distance kilometers.";
}
private function getHash($city){
$data = $this->loadData($city);
preg_match('#gf : \"(.*?)\"#is', $data, $bingo);
if(!empty($bingo[1])) return $bingo[1];
}
private function getLL($city){
$data = $this->loadData($city);
preg_match('#\{lon : (.*?), lat : (.*?)\}#is', $data, $bingo);
unset($bingo[0]);
return $bingo;
}
private function loadData($city){
$city = urlencode($city);
//cURL 4-5x faster than file_get_contents()
return $this->curl("http://www.viamichelin.com/vmw2/maf/dyn/controller/jseLocationFinder?strMerged=$city");
}
private function distance($lat1, $lon1, $lat2, $lon2){
$theta = $lon1 - $lon2;
$dist = sin(deg2rad($lat1)) * sin(deg2rad($lat2)) + cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * cos(deg2rad($theta));
$dist = acos($dist);
$dist = rad2deg($dist);
$miles = $dist * 60 * 1.1515;
return round($miles * 1.609344, 3);
}
//cURL function
private function curl($url){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
return curl_exec($ch);
curl_close ($ch);
}
}
Link:
http://webarto.com/53/viamichelin-php-class