Обратное геокодирование карт Google возвращает массивы разных размеров для разных городов и мест. Как я должен угадать, какой массив выбрать - PullRequest
0 голосов
/ 17 января 2019

Позвольте мне сначала привести пример данных, возвращаемых после выбора двух разных городов - Токио и Лондона.

Tokyo:

address_components: Array(9)
0: {long_name: "日本ドクターズビル", short_name: "日本ドクターズビル", types: Array(1)}
1: {long_name: "22", short_name: "22", types: Array(1)}
2: {long_name: "3", short_name: "3", types: Array(3)}
3: {long_name: "4 Chome", short_name: "4 Chome", types: Array(3)}
4: {long_name: "Kudankita", short_name: "Kudankita", types: Array(3)}
5: {long_name: "Chiyoda-ku", short_name: "Chiyoda-ku", types: Array(2)}
6: {long_name: "Tōkyō-to", short_name: "Tōkyō-to", types: Array(2)}
7: {long_name: "Japan", short_name: "JP", types: Array(2)}
8: {long_name: "102-0073", short_name: "102-0073", types: Array(1)}
length: 9

London:

address_components: Array(7)
0: {long_name: "141", short_name: "141", types: Array(1)}
1: {long_name: "Drury Lane", short_name: "Drury Ln", types: Array(1)}
2: {long_name: "London", short_name: "London", types: Array(1)}
3: {long_name: "Greater London", short_name: "Greater London", types: Array(2)}
4: {long_name: "England", short_name: "England", types: Array(2)}
5: {long_name: "United Kingdom", short_name: "GB", types: Array(2)}
6: {long_name: "WC2B 5TA", short_name: "WC2B 5TA", types: Array(1)}
length: 7

Как вы можете ясно видеть, элементы массива меняются в зависимости от местоположения, поэтому, если бы я хотел получить страну Токио, я бы выбрал ее с помощью:

data.address_components[7].long_name

К сожалению, это не будет работать в случае лондонской страны, поскольку в массиве даже нет элемента с индексом 7. Я более или менее просто пытаюсь передать формат "Город, Страна" на мой сервер, но из-за этих различий в массивах я иногда передаю правильную информацию, а иногда - что-то нежелательное.

Я что-то упустил?

1 Ответ

0 голосов
/ 17 января 2019

Массив types каждого компонента указывает тип этого компонента (конечно!) И всегда будет содержать строку «страна» для страны. Поэтому вы можете найти правильный элемент в массиве на основе этого. Должно быть что-то вроде следующего:

const country = address_components.find((component) =>
  component.types.includes('country')
).long_name;

Находит компонент, который имеет тип 'страна', затем принимает long_name этого компонента.

Источник: Руководство разработчика по геокодированию API

...