Есть ли какой-нибудь способ получить только город и страну из пользовательского ввода на googleplacesautocomplete API, используя реагировать? - PullRequest
0 голосов
/ 29 октября 2019

Я не могу получить только город и страну в качестве вывода из компонента googleautocomplete с помощью реакции.

1 Ответ

0 голосов
/ 29 октября 2019

Способ сделать это - указать параметр 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;
}

Не стесняйтесь изменять это в соответствии со своими потребностями.

...