В ответах геокодирования структура адреса формируется не как единая
строка, а как набор логически связанных компонентов, позволяющих точно
интерпретировать географический объект на разных уровнях детализации.
Основная единица представления — address_components,
представляющая массив структурированных элементов, каждый из которых
описывает отдельную часть адреса.
Каждый элемент массива address_components содержит
следующие поля:
long_name — полное, человекочитаемое название
компонентаshort_name — сокращённое или стандартизированное
значениеtypes — массив типов, определяющих роль компонента в
адресеПример:
{
"long_name": "Lenin Avenue",
"short_name": "Lenin Ave",
"types": ["route"]
}
Компоненты не привязаны к фиксированному порядку. Их семантика
определяется исключительно набором types.
Система геокодирования использует стандартизированный набор типов, позволяющий разложить адрес на уровни административной и физической структуры.
country — странаadministrative_area_level_1 — регион, область,
штатadministrative_area_level_2 — район или эквивалентlocality — населённый пункт (город)sublocality, sublocality_level_1 — части
города или микрорайоныroute — улица, проспектstreet_number — номер домаpremise — здание или комплексsubpremise — квартира, офис, помещениеpostal_code — почтовый индексpostal_code_suffix — дополнительный сегмент
индексаplus_code — код Open Location Codeintersection — пересечение дорогestablishment — организация или объект (например,
торговый центр)Результат запроса геокодирования содержит не только
address_components, но и дополнительные поля, которые
используются совместно для формирования адреса:
formatted_address — строковое представление адресаgeometry — координаты и границы объектаplace_id — уникальный идентификатор местаtypes — тип объекта геокодированияПример объекта:
{
"formatted_address": "Lenin Ave 10, Karaganda 100000, Kazakhstan",
"place_id": "ChIJ...example",
"types": ["street_address"],
"address_components": [
{
"long_name": "10",
"short_name": "10",
"types": ["street_number"]
},
{
"long_name": "Lenin Avenue",
"short_name": "Lenin Ave",
"types": ["route"]
},
{
"long_name": "Karaganda",
"short_name": "Karaganda",
"types": ["locality"]
},
{
"long_name": "Karaganda Region",
"short_name": "Karaganda Region",
"types": ["administrative_area_level_1"]
},
{
"long_name": "Kazakhstan",
"short_name": "KZ",
"types": ["country"]
}
]
}
Работа с компонентами адреса обычно выполняется через обход массива
address_components и фильтрацию по types.
function getComponent(components, type) {
const component = components.find(item =>
item.types.includes(type)
);
return component ? component.long_name : null;
}
Использование:
geocoder.geocode({ address: "Lenin Ave 10 Karaganda" }, (results, status) => {
if (status === "OK") {
const components = results[0].address_components;
const streetNumber = getComponent(components, "street_number");
const route = getComponent(components, "route");
const city = getComponent(components, "locality");
const country = getComponent(components, "country");
console.log(streetNumber, route, city, country);
}
});
Компоненты адреса используются для построения пользовательских
форматов отображения, независимых от локализации
formatted_address.
function formatAddress(components) {
const number = getComponent(components, "street_number");
const street = getComponent(components, "route");
const city = getComponent(components, "locality");
return [street, number, city]
.filter(Boolean)
.join(", ");
}
Такой подход обеспечивает контроль над отображением адреса независимо от региональных стандартов Google.
formatted_address формируется системой автоматически и
зависит от:
Пример:
Lenin Ave 10, Karaganda 100000, Kazakhstanпроспект Ленина, 10, Караганда 100000, Казахстанaddress_components остаётся стабильной структурой, не
зависящей от языка отображения.
При обратном геокодировании (координаты → адрес) структура
address_components становится основным источником данных
для построения адреса.
geocoder.geocode({ location: { lat: 49.806, lng: 73.085 } }, (results, status) => {
if (status === "OK") {
const components = results[0].address_components;
const country = getComponent(components, "country");
const region = getComponent(components, "administrative_area_level_1");
console.log(country, region);
}
});
Компоненты с administrative_area_level_* формируют
вложенную структуру:
country
└── administrative_area_level_1
└── administrative_area_level_2
└── locality
└── sublocality
Эта модель позволяет корректно агрегировать данные для аналитики, фильтрации и построения географических сегментов.
Использование address_components позволяет устранять
неоднозначности:
St vs Street)Алгоритм нормализации обычно включает:
short_name или long_name к
единому стандартуОдин компонент может содержать несколько типов:
"types": ["sublocality", "sublocality_level_1"]
Поиск должен учитывать наличие типа в массиве, а не точное совпадение строки.
Порядок элементов в address_components не гарантирован,
поэтому доступ по индексу приводит к ошибкам.
Полагание исключительно на строковое представление приводит к потере структурности и невозможности анализа адреса на уровне города или региона.
Компоненты адреса применяются для автоматического заполнения форм:
routestreet_numberlocalityadministrative_area_level_1postal_codeПример интеграции:
function fillForm(components) {
document.querySelector("#street").value =
getComponent(components, "route") || "";
document.querySelector("#house").value =
getComponent(components, "street_number") || "";
document.querySelector("#city").value =
getComponent(components, "locality") || "";
document.querySelector("#zip").value =
getComponent(components, "postal_code") || "";
}
place_id используется для устойчивой идентификации
объекта независимо от изменения адресных компонентов.
Особенности:
Структурированные адресные данные применяются в:
Компонентный подход позволяет рассматривать адрес не как строку, а как набор взаимосвязанных сущностей с чёткой иерархией и типизацией.