Способ сделать это - указать параметр types
в компоненте автозаполнения Google Адресов. Однако существует ограничение, заключающееся в том, что вы действительно можете указать только одну из опций для типов:
Вы можете ограничить результаты запроса автозаполнения определенного типа определением типа, передав параметр типов. Параметр указывает тип или коллекцию типов, как указано в поддерживаемых типах ниже. Если ничего не указано, возвращаются все типы. Как правило, допускается только один тип. Исключением является то, что вы можете безопасно смешивать геокод и тип учреждения, но учтите, что это будет иметь тот же эффект, что и указание без типов.
source: https://developers.google.com/places/web-service/autocomplete#place_types
Так чтоЛучшим вариантом для вашей ситуации, вероятно, будет использование коллекции типов (regions)
, но она будет включать в себя не только города и страны, такие как кварталы. Другой вариант - использовать коллекцию типов (cities)
, которая будет включать в себя только города.
Я также настоятельно рекомендую библиотеку реагировать-геосуггестить , если вы хотите, чтобы что-то заранее было сделано, чтобы выполнить это какВы можете передать их в качестве параметров и оформить их самостоятельно.
<Geosuggest
types={['(regions)']}
/>
РЕДАКТИРОВАТЬ
Я думаю, что, возможно, немного неправильно понял вопрос. Если вы пытаетесь выяснить, как получить адрес улицы, город и страну из ответа, который вы получаете от API Адресов, вам нужно будет отправить дополнительный запрос.
После того, какпользователь выбирает место из списка, вам нужно будет получить place_id
из исходного запроса и отправить запрос Place Details . Одним из полей в ответе будет address_component
, которое имеет этот очень странный формат . Я опубликовал пример того, как выглядит этот полный формат здесь .
Я сделал простую функцию преобразования, которая будет возвращать основные компоненты адреса в управляемом формате:
// ---------------------------------------------------------------------- //
// https://developers.google.com/maps/documentation/geocoding/intro#Types //
// ---------------------------------------------------------------------- //
// returns:
// {
// address_1
// address_2
// city
// state_code
// zip_code
// country
// }
function convertAddressComponents(addrComp) {
let newAddr = {};
let address_1 = [];
addrComp.forEach((el, i) => {
if (el.types.includes("post_box")) {
address_1.push(el.long_name);
} else if (el.types.includes("street_number")) {
address_1.push(el.long_name);
} else if (el.types.includes("route")) {
address_1.push(el.long_name);
} else if (el.types.includes("subpremise")) {
newAddr.address_2 = el.long_name;
} else if (el.types.includes("locality")) {
newAddr.city = el.long_name;
} else if (el.types.includes("administrative_area_level_1")) {
newAddr.state_code = el.short_name;
} else if (el.types.includes("postal_code")) {
newAddr.zip_code = el.short_name;
} else if (el.types.includes("country")) {
newAddr.country = el.long_name;
}
});
newAddr.address_1 = address_1.join(" ");
return newAddr;
}
Не стесняйтесь изменять это в соответствии со своими потребностями.