Как правильно разобрать адрес?

Каким образом можно преобразовать два идентификатора ГАР в таблицу, структурированную по столбцам с указанием области, района, города (села), улицы, дома, корпуса, квартиры и полного адреса? Данные ГАР содержат информацию о иерархии адресов в колонке path таблицы adm_hierarchy и уровень адресных объектов в колонке level таблицы addr_obj.
  • 28 декабря 2023 г. 9:27
Ответы на вопрос 2
Для разбора адреса необходимо использовать информацию из колонок "path" и "level" таблиц "adm_hierarchy" и "addr_obj".

1. Сначала необходимо определить иерархию адреса, используя колонку "path" из таблицы "adm_hierarchy". Здесь "path" представляет собой путь от общего к конкретному адресному объекту. Например, путь может выглядеть следующим образом: "Россия/Москва/ЦАО/Тверская ул./д. 15/корп. 1/кв. 10". 

2. Затем необходимо определить уровень каждого адресного объекта, используя колонку "level" из таблицы "addr_obj". Уровень определяет, является ли адресный объект областью, районом, городом, улицей, домом, корпусом, квартирой и т. д.

3. Далее необходимо структурировать адрес по столбцам. Например:

   - Область: значения из иерархии адреса с уровнем "область".
   - Район: значения из иерархии адреса с уровнем "район".
   - Город (село): значения из иерархии адреса с уровнем "город" или "село".
   - Улица: значения из иерархии адреса с уровнем "улица".
   - Дом: значения из иерархии адреса с уровнем "дом".
   - Корпус: значения из иерархии адреса с уровнем "корпус".
   - Квартира: значения из иерархии адреса с уровнем "квартира".
   
4. Для полного адреса можно объединить структурированные значения адреса с помощью разделителей, например, через запятую или слэш. Например:

   - Полный адрес: "Москва, ЦАО, Тверская ул., д. 15, корп. 1, кв. 10".

Таким образом, используя информацию из таблицы "adm_hierarchy" (колонка "path") и таблицы "addr_obj" (колонка "level"), можно разобрать адрес и структурировать его по столбцам, а затем объединить в полный адрес.
Добрый день.  Тоже скачали справочник. Удалось создать запрос, который выводит плоскую таблицу. 

А вот часть запроса как разделить на колонки path

select amh.objectid, 
(0 || split_part(amh."path", '.', 1))::integer as col1, (0 || split_part(amh."path", '.', 2))::integer as col2, 
(0 || split_part(amh."path", '.', 3))::integer as col3, (0 || split_part(amh."path", '.', 4))::integer as col4,
(0 || split_part(amh."path", '.', 5))::integer as col5, (0 || split_part(amh."path", '.', 6))::integer as col6,
(0 || split_part(amh."path", '.', 7))::integer as col7
from as_mun_hierarchy amh 
where objectid in 
			(select objectid 
			from as_apartments aa 
			where aa.isactual = 1 and aa.isactive = 1 and aa.enddate > current_date)
Похожие вопросы