Автозаполнение Google для определенного города

Я уже создаю API геокодирования на консоли Google. У меня есть поле поиска с автозаполнением Google на моем сайте, и я хотел бы указать определенный город для моего API геокодирования и интегрировать его в мое веб-приложение. Город: Тулуза, Страна: Франция.

Когда клиент вводит свой адрес в поле поиска, я хочу, чтобы он осуществлял поиск только по всем адресам в городе Тулуза, исходя из центра Тулузы с пройденным расстоянием 20 км.

Вот мой код, основанный на файле Function.php

 public function geoCoding($lat='',$lng='')
{
$protocol = isset($_SERVER["https"]) ? 'https' : 'http';
if ($protocol=="http"){
$url = "https://maps.googleapis.com/maps/api/geocode/json?latlng=".$lat.",".$lng."&sensor=true";
} else $url = "https://maps.googleapis.com/maps/api/geocode/json?latlng=".$lat.",".$lng."&sensor=true";

$google_geo_api_key=getOptionA('google_geo_api_key');
if (!empty($google_geo_api_key)){
$url=$url."&key=".urlencode($google_geo_api_key);
}

$data = @file_get_contents($url);
if (!empty($data)){
$result = json_decode($data,true);
//dump($result);
if (!isset($result['results'])){
return false;
}
if (is_array($result['results']) && count($result['results'])>=2){
$location = array();
foreach ($result['results'][0]['address_components'] as $component) {
switch ($component['types']) {
case in_array('street_number', $component['types']):
$location['street_number'] = $component['long_name'];
break;
case in_array('route', $component['types']):
$location['street'] = $component['long_name'];
break;
case in_array('neighborhood', $component['types']):
$location['street2'] = $component['long_name'];
break;
case in_array('sublocality', $component['types']):
$location['sublocality'] = $component['long_name'];
break;
case in_array('locality', $component['types']):
$location['locality'] = $component['long_name'];
break;
case in_array('administrative_area_level_2', $component['types']):
$location['admin_2'] = $component['long_name'];
break;
case in_array('administrative_area_level_1', $component['types']):
$location['admin_1'] = $component['long_name'];
break;
case in_array('postal_code', $component['types']):
$location['postal_code'] = $component['long_name'];
break;
case in_array('country', $component['types']):
$location['country'] = $component['long_name'];
$location['country_code'] = $component['short_name'];
break;
}
}
return $location;
}
}
return false;
}

0

Решение

Ваше описание звучит так, как будто вы используете Поисковая строка виджет в библиотеке «Метки» API JavaScript Карт, но ваш код показывает только использование обратное геокодирование в веб-сервисе API геокодирования.

Поскольку я думаю, что только первое имеет смысл, я рискну вас заинтересовать в следующих запросах, которые позволят вам ограничить автозаполнение для города:

  • Выпуск 8606: места ограничены
  • Выпуск 4433: разрешить componentRestrictions фильтровать те же компоненты, что и служба API геокодирования

На данный момент я знаю следующие варианты:

  • Установите поле поиска bounds к городам (которые вы можете получить из Geocoding API) и полагаться на виджет, чтобы предпочитать (не ограничивать) предложения в этих пределах, или
  • Создайте свой собственный виджет, используя AutocompleteService.getQueryPredictions () и сделайте свою собственную фильтрацию по факту, чтобы удалить предложения, но это было бы очень сложно, потому что название города не всегда будет частью предложения.
1

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

Других решений пока нет …

По вопросам рекламы [email protected]