From ef27593bc84f86d8e5d0a9ff400a5657d07c04d1 Mon Sep 17 00:00:00 2001 From: Itz-Agasta Date: Fri, 13 Mar 2026 17:28:23 +0530 Subject: [PATCH] Adds support for associatedStreet relation processing during import - Refactor relation import to use row_factory for inserts - Only keep 'street' and 'house' roles, drop unknown roles --- lib-lua/themes/nominatim/init.lua | 32 +++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/lib-lua/themes/nominatim/init.lua b/lib-lua/themes/nominatim/init.lua index 173b9f25..a09109ef 100644 --- a/lib-lua/themes/nominatim/init.lua +++ b/lib-lua/themes/nominatim/init.lua @@ -89,6 +89,17 @@ local table_definitions = { indexes = { { column = 'nodes', method = 'gin' } } + }, + place_associated_street = { + ids = { type = 'relation', id_column = 'relation_id' }, + columns = { + { column = 'member_type', type = 'text', not_null = true }, + { column = 'member_id', type = 'int8', not_null = true }, + { column = 'member_role', type = 'text', not_null = true } + }, + indexes = { + { column = { 'member_type', 'member_id' }, method = 'btree' } + } } } @@ -674,6 +685,27 @@ function module.process_way(object) end function module.process_relation(object) + if object.tags.type == 'associatedStreet' then + local has_street = false + for _, member in ipairs(object.members) do + if member.role == 'street' then + has_street = true + break + end + end + if has_street then + for _, member in ipairs(object.members) do + if member.role == 'street' or member.role == 'house' then + insert_row.place_associated_street{ + member_type = member.type:upper(), + member_id = member.ref, + member_role = member.role + } + end + end + end + end + local geom_func = module.RELATION_TYPES[object.tags.type] if geom_func ~= nil then -- 2.39.5