Автоматическое получение широты и долготы с помощью php, API

В одном из моих приложений php я должен узнать широту и долготу места с адреса.

Я пробовал этот код:

$json = file_get_contents("http://maps.google.com/maps/api/geocode/json?address=$address&sensor=false&region=$region"); $json = json_decode($json); $lat = $json->{'results'}[0]->{'geometry'}->{'location'}->{'lat'}; $long = $json->{'results'}[0]->{'geometry'}->{'location'}->{'lng'}; 

Но он показывает следующую ошибку:

Предупреждение: file_get_contents (http://maps.google.com/maps/api/geocode/json?address=technopark, Trivandrun, kerala, India & sensor = false & region = IND) [function.file-get-contents]: не удалось открыть поток : Ошибка HTTP-запроса! HTTP / 1.0 400 Bad Request в D: \ Projects \ lon.php в строке 4

Пожалуйста, помогите мне решить эту проблему.

Используйте curl вместо file_get_contents :

 $address = "India+Panchkula"; $url = "http://maps.google.com/maps/api/geocode/json?address=$address&sensor=false&region=India"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_PROXYPORT, 3128); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); $response = curl_exec($ch); curl_close($ch); $response_a = json_decode($response); echo $lat = $response_a->results[0]->geometry->location->lat; echo "<br />"; echo $long = $response_a->results[0]->geometry->location->lng; 
 $address = str_replace(" ", "+", $address); 

Используйте вышеуказанный код перед файлом_get_content. означает, используйте следующий код

 $address = str_replace(" ", "+", $address); $json = file_get_contents("http://maps.google.com/maps/api/geocode/json?address=$address&sensor=false&region=$region"); $json = json_decode($json); $lat = $json->{'results'}[0]->{'geometry'}->{'location'}->{'lat'}; $long = $json->{'results'}[0]->{'geometry'}->{'location'}->{'lng'}; 

и он будет работать уверенно. Поскольку адрес не поддерживает пробелы, он поддерживает только знак + вместо места.

 // добавить urlencode на ваш адрес
 $ address = urlencode («технопарк, Trivandrun, kerala, India»);
 $ region = "IND";
 $ json = file_get_contents ("http://maps.google.com/maps/api/geocode/json?address=$address&sensor=false&region=$region");

 echo $ json;

 $ decoded = json_decode ($ json);

 print_r ($ декодируется);

Две идеи:

  • Являются ли URL адреса и региона закодированы ?
  • Возможно, ваш компьютер, запускающий код, не разрешает доступ к http. Попробуйте загрузить другую страницу (например, « http://www.google.com ») и посмотрите, работает ли это. Если это также не работает, то что-то не так с настройками PHP.
 $address = str_replace(" ", "+", $address); $json = file_get_contents("http://maps.google.com/maps/api/geocode/json?address=$address&sensor=false&region=$region"); $json = json_decode($json); $lat = $json->{'results'}[0]->{'geometry'}->{'location'}->{'lat'}; $long = $json->{'results'}[0]->{'geometry'}->{'location'}->{'lng'}; 

… и не забудьте «$ region» для работы кода:

 $address = "Salzburg"; $address = str_replace(" ", "+", $address); $region = "Austria"; $json = file_get_contents("http://maps.google.com/maps/api/geocode/json?address=$address&sensor=false&region=$region"); $json = json_decode($json); $lat = $json->{'results'}[0]->{'geometry'}->{'location'}->{'lat'}; $long = $json->{'results'}[0]->{'geometry'}->{'location'}->{'lng'}; echo $lat."</br>".$long;