Геокодирование карт Google работает из браузера, но не с сервера PHP

Когда я получаю API геокодирования Карт Google из своего браузера, он работает, но не из моего сценария PHP.

За работой : https://maps.google.com/maps/api/geocode/json?sensor=false&ключ = AIzaSyDqIj_SXTf5Z5DgE_cvn5VF9h5NbuaiCbs&адрес = La% 20P% C3% A9relle,% 20Saint-Пьер-де-Шартрез,% 20France

Возвращает:

{
"results" : [
{
"address_components" : [
{
"long_name" : "La Pérelle",
"short_name" : "La Pérelle",
"types" : [ "colloquial_area", "political" ]
},
],
"formatted_address" : "La Pérelle, 38380, France",
// other stuffs
"partial_match" : true,
"place_id" : "ChIJZzDRRAX4ikcRnZ-vb1tnTgY",
"types" : [ "colloquial_area", "political" ]
}
],
"status" : "OK"}

Не работает :

<?php
$url = 'https://maps.google.com/maps/api/geocode/json?sensor=false&key=AIzaSyDqIj_SXTf5Z5DgE_cvn5VF9h5NbuaiCbs&address=La%20P%C3%A9relle,%20Saint-Pierre-de-Chartreuse,%20France';
echo file_get_contents($url);

Возвращает:

{
"results" : [],
"status" : "ZERO_RESULTS"}

Есть идеи?

Обновить : некоторые люди тоже не видят никаких результатов из своего браузера. Может ли Google использовать мою позицию, чтобы показать достойные результаты?

3

Решение

Я думаю, что это связано с регионом смещение региона.

Попробуйте добавить region параметр (хотя вам может потребоваться предварительно рассчитать его при построении запроса, если у вас есть запросы для разных регионов).

Например, для меня из Мадрида, Испания, этот запрос не дает результатов:

https://maps.google.com/maps/api/geocode/json?sensor=false&key=AIzaSyDqIj_SXTf5Z5DgE_cvn5VF9h5NbuaiCbs&address=La%20P%C3%A9relle,%20Saint-Pierre-de-Chartreuse,%20France

Но если я добавлю region=fr параметр

https://maps.google.com/maps/api/geocode/json?sensor=false&region=fr&key=AIzaSyDqIj_SXTf5Z5DgE_cvn5VF9h5NbuaiCbs&address=La%20P%C3%A9relle,%20Saint-Pierre-de-Chartreuse,%20France

Я получил:

{
"results" : [
{
"address_components" : [
{
"long_name" : "Chartreuse Mountains",
"short_name" : "Chartreuse Mountains",
"types" : [ "establishment", "natural_feature" ]
},
{
"long_name" : "Saint-Pierre-d'Entremont",
"short_name" : "Saint-Pierre-d'Entremont",
"types" : [ "locality", "political" ]
},
{
"long_name" : "Isere",
"short_name" : "Isere",
"types" : [ "administrative_area_level_2", "political" ]
},
{
"long_name" : "Auvergne-Rhône-Alpes",
"short_name" : "Auvergne-Rhône-Alpes",
"types" : [ "administrative_area_level_1", "political" ]
},
{
"long_name" : "France",
"short_name" : "FR",
"types" : [ "country", "political" ]
},
{
"long_name" : "73670",
"short_name" : "73670",
"types" : [ "postal_code" ]
}
],
"formatted_address" : "Chartreuse Mountains, 73670 Saint-Pierre-d'Entremont, France",
"geometry" : {
"location" : {
"lat" : 45.3773525,
"lng" : 5.827970700000001
},
"location_type" : "APPROXIMATE",
"viewport" : {
"northeast" : {
"lat" : 45.3787014802915,
"lng" : 5.829319680291503
},
"southwest" : {
"lat" : 45.3760035197085,
"lng" : 5.826621719708499
}
}
},
"place_id" : "ChIJSXJWFav4ikcREQZmf4QdYMc",
"types" : [ "establishment", "natural_feature" ]
}
],
"status" : "OK"}
1

Другие решения

(Отсутствие) языковых предпочтений чаще всего стоит за этой проблемой.

Когда вы отправляете запрос API из вашего браузера:

https://maps.google.com/maps/api/geocode/json?address=La%20P%C3%A9relle,%20Saint-Pierre-de-Chartreuse,%20France

может случиться так, что в настройках вашего браузера будет выбран французский язык в качестве первого, что заставляет ваш браузер отправлять заголовок Accept-Language вместе со всеми запросами.

Google Geocoding API проверит наличие language GET параметр, и при отсутствии этого он будет проверять наличие заголовка Accept-Language в качестве резервной копии. Если ваш браузер настроен на предпочтение контента на французском языке, это должно сделать вышеуказанный запрос эквивалентным

https://maps.google.com/maps/api/geocode/json?address=La%20P%C3%A9relle,%20Saint-Pierre-de-Chartreuse,%20France&язык = фр

Для меня, поскольку мой браузер настроен на использование английского языка, первый запрос возвращает «La Perelle, 73130 Saint-Francois-Longchamp, France», а второй возвращает «La Pérelle, 38380 Saint-Pierre-de-Chartreuse, France».

С момента введения нового геокодера в конце 2016 года region параметр больше не единственный, который влияет на результаты, language Параметр теперь влияет на результаты:

Предпочтительный язык имеет небольшое влияние на набор результатов, которые
API выбирает возврат и порядок, в котором они возвращаются.
Геокодер по-разному интерпретирует сокращения
язык, такие как сокращения для типов улиц, или синонимы, которые
может быть действительным на одном языке, но не на другом. Например, utca и
есть синонимы для улицы на венгерском языке.

Тем не менее, если «La Perelle, 73130 Saint-Francois-Longchamp, France» является просто плохими результатами для вышеуказанного запроса (La Pérelle, Saint-Pierre-de-Chartreuse, France), пожалуйста, учтите подача отчета об ошибке.

5

Работает

$url = 'https://maps.google.com/maps/api/geocode/json?sensor=false&key=AIzaSyDqIj_SXTf5Z5DgE_cvn5VF9h5NbuaiCbs&address='.urlencode('La Pérelle, 38380, France');
0

<?php
$address="La Pérelle, 38380, France";
$url = 'https://maps.google.com/maps/api/geocode/json?sensor=false&key=AIzaSyDqIj_SXTf5Z5DgE_cvn5VF9h5NbuaiCbs&address='.urlencode($address);
echo file_get_contents($url);

Надеюсь, это сработает для вас. Ваш адрес не был отформатирован для запроса формата.

Спасибо и С уважением

0

После иви ответ, на основе смещения региона, я должен найти другой способ связать фронт & фоновые места, и я сделал это с помощью place_id,

Это было невозможно раньше, так как Google не возвращал place_id из автозаполнения, но теперь оно работает, так что я делаю:

echo file_get_contents('https://maps.google.com/maps/api/geocode/json?sensor=false&key=AIzaSyA3U9jkQcF-Vplh6bpJNcVOWMSNImCPn04&place_id=ChIJZzDRRAX4ikcRnZ-vb1tnTgY');
0
По вопросам рекламы [email protected]