محاسبه فاصله دو شهر توسط php و API گوگل
در این مطلب قصد داریم در مورد فاصله شهر ها با API گوگل توضیح دهیم.
اگر سایت های فروش بلیت اتوبوس و قطار و یا حتی سایت های گردشگری و یا سایت هایی که خدمات نقشه راه و این موارد را ارایه می دهد بررسی کنید ، میبینید که همه آنها فقط با دادن یک شهر مبدا و مقصد به شما فاصله مکانی آن را در چندصدم ثانیه می دهد .
پیاده سازی این مورد بسیار آسان بوده و ما هم قصد داریم در این مقاله به شما نحوه ساخت همچنین سیستمی را آموزش بدیم . پس با ما همراه باشید.
ما به راحتی می توانیم فاصله شهر ها را یا آدرس را توسط php و API گوگل مپ محاسبه کنیم. برای این منظور یک تابع برای دریافت فاصله بین دو شهر نوشتیم . تابع getDistance() همه قابلیت ها را یکجا دارد و سه پارامتر را می پذیرد .
- $addressFrom – ضروری . آدرس مبدا
- $addressTo – ضروری ، آدرس مقصد
- $unit – اختیاری ، حرف اول واحد اندازه گیری را پاس بدید . به طور پیش فرض مایل است . (K -> kilometre , M -> Mile)
تابع getDistance() را در کد زیر می بینید :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
/** * * Author: Netparadis * Function Name: getDistance() * $addressFrom => From address. * $addressTo => To address. * $unit => Unit type. * **/ function getDistance($addressFrom, $addressTo, $unit){ //Change address format $formattedAddrFrom = str_replace(' ','+',$addressFrom); $formattedAddrTo = str_replace(' ','+',$addressTo); //Send request and receive json data $geocodeFrom = file_get_contents('http://maps.google.com/maps/api/geocode/json?address='.$formattedAddrFrom.'&sensor=false'); $outputFrom = json_decode($geocodeFrom); $geocodeTo = file_get_contents('http://maps.google.com/maps/api/geocode/json?address='.$formattedAddrTo.'&sensor=false'); $outputTo = json_decode($geocodeTo); //Get latitude and longitude from geo data $latitudeFrom = $outputFrom->results[0]->geometry->location->lat; $longitudeFrom = $outputFrom->results[0]->geometry->location->lng; $latitudeTo = $outputTo->results[0]->geometry->location->lat; $longitudeTo = $outputTo->results[0]->geometry->location->lng; //Calculate distance from latitude and longitude $theta = $longitudeFrom - $longitudeTo; $dist = sin(deg2rad($latitudeFrom)) * sin(deg2rad($latitudeTo)) + cos(deg2rad($latitudeFrom)) * cos(deg2rad($latitudeTo)) * cos(deg2rad($theta)); $dist = acos($dist); $dist = rad2deg($dist); $miles = $dist * 60 * 1.1515; $unit = strtoupper($unit); if ($unit == "K") { return ($miles * 1.609344).' km'; } else if ($unit == "N") { return ($miles * 0.8684).' nm'; } else { return $miles.' mi'; } } |
به اینصورت می توانید از تابع استفاده کنید.
1 2 3 4 |
$addressFrom = 'Insert from address'; $addressTo = 'Insert to address'; $distance = getDistance($addressFrom, $addressTo, "K"); echo $distance; |
در اینجا ما از متغیر های ثابت برای مقدار دهی شهر و یا کشور استفاده کردیم که خب می توانید تمام این موارد را بصورت داینامیک از فرم ها دریافت کنید
یک API key گوگل را در درخواست خود به عنوان مقدار پارامتر key مشخص کنید .
1 |
$geocode = file_get_contents('https://maps.google.com/maps/api/geocode/json?address='.$formattedAddr.'&sensor=false&key=GoogleAPIKey'); |
برای دریافت api key گوگل مپ از طریق این آدرس می توانید استفاده کنید که البته نیاز به تغییر IP است .