2016-03-22 3 views
0

Я пытаюсь получить расстояние между двумя местоположениями через API Карт Google, используя приведенный ниже PHP-скрипт, который, по-видимому, работает (их размещенный тестовый url работает, добавляется ниже), но когда я использую код, который они предоставляют на моем собственном сервере, похоже, ничего не делает ... PHP работает очень хорошо, кстати, и, похоже, он не делает ничего смешного, что потребует от меня что-то включить в моем ini-файле.PHP: расстояние между двумя адресами с Картами Google?

Я не уверен, в чем проблема ... был на этом весь день.

Любые идеи? Может, это мой .ini?

Я не уверен, что мне здесь не хватает. Я использую общий хост, но это не должно меняться. Он должен технически работать так, как есть, так или иначе, поэтому я здесь - мне нужно некоторое понимание.


Сайт с исходным кодом: http://www.codexworld.com/distance-between-two-addresses-google-maps-api-php/#comment-24117

Их демо: http://demos.codexworld.com/distance-between-two-addresses-google-maps-api-php/

Мой полный тестовый код:

<?php 
/** 
* 
* Author: CodexWorld 
* 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'; 
     } 
    } 

    if (!empty($_POST['addrFrom']) && !empty($_POST['addrTo'])) { 
     $addressFrom = htmlspecialchars($_POST['addrFrom']); 
     $addressTo = htmlspecialchars($_POST['addrTo']); 
     $distance = getDistance($addressFrom, $addressTo, "K"); 
     $success = true; 
    } 
?> 

<!DOCTYPE html> 
<html> 
<head></head> 
<body> 
    <form method="post"> 
     <p class="distance"><span>Distance:<?php if ($success == true) { echo ' ' . $distance; } ?></span> </p> 
     <p><label>Address From</label><input type="text" name="addrFrom" value=""></p> 
     <p><label>Address To</label><input type="text" name="addrTo" value=""></p> 
     <p><input type="submit" name="submit" value="Calculate Distance"></p> 
    </form> 
</body> 
</html> 
+0

начало повторять некоторые переменные –

+0

'$ success' не определено –

+0

@Dagon Спасибо за комментирование, извините, что я на самом деле просто забыл положить это обратно, у меня было это как испытание на моем конце, чтобы увидеть, основывались ли основы. Просто верни его. Я повторил $ ​​addressFrom и $ addressTwo и $ distance, из которых я знаю, что $ formattedAddrFrom и $ formattedAddrTo должны работать ... Не проверяли $ geocodeFrom и этот набор переменных. Я повторю несколько переменных и сообщаю, что я нахожу. – Matthew

ответ

0

Попробуйте это - немного Изменив способ сделать это. .:

<?php 
/** 
* Author: CodexWorld 
* 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'; 
     } 
    } 

    if (isset($_POST['submit'])) { 
     $addressFrom = htmlspecialchars($_POST['addrFrom']); 
     $addressTo = htmlspecialchars($_POST['addrTo']); 
     $distance = getDistance($addressFrom, $addressTo, "K"); 
     echo $distance;  
    } 

?> 

<!DOCTYPE html> 
<html> 
<head></head> 
<body> 
    <form method="post"> 
     <p><label>Address From</label><input type="text" name="addrFrom" value=""></p> 
     <p><label>Address To</label><input type="text" name="addrTo" value=""></p> 
     <p><input type="submit" name="submit" value="Calculate Distance"></p> 
    </form> 
</body> 
</html> 
Смежные вопросы