local tables = {} -- Table pour les bornes incendie tables.fire_hydrants = osm2pgsql.define_node_table('fire_hydrants', { { column = 'id_column', type = 'id_type' }, { column = 'geom', type = 'point', projection = 4326 }, { column = 'tags', type = 'hstore' }, { column = 'ref', type = 'text' }, { column = 'color', type = 'text' }, { column = 'insee', type = 'text' }, }) -- Table pour les arbres tables.trees = osm2pgsql.define_node_table('trees', { { column = 'id_column', type = 'id_type' }, { column = 'geom', type = 'point', projection = 4326 }, { column = 'tags', type = 'hstore' }, { column = 'species', type = 'text' }, { column = 'height', type = 'text' }, { column = 'insee', type = 'text' }, }) -- Table pour les bornes de recharge (nodes) tables.charging_stations = osm2pgsql.define_node_table('charging_stations', { { column = 'id_column', type = 'id_type' }, { column = 'geom', type = 'point', projection = 4326 }, { column = 'tags', type = 'hstore' }, { column = 'operator', type = 'text' }, { column = 'capacity', type = 'text' }, { column = 'insee', type = 'text' }, }) -- Table pour les bornes de recharge (ways) tables.charging_stations_ways = osm2pgsql.define_way_table('charging_stations_ways', { { column = 'id_column', type = 'id_type' }, { column = 'geom', type = 'linestring', projection = 4326 }, { column = 'tags', type = 'hstore' }, { column = 'operator', type = 'text' }, { column = 'capacity', type = 'text' }, { column = 'insee', type = 'text' }, }) -- Function to determine the INSEE code from multiple possible sources function get_insee_code(tags) -- Try to get INSEE code from different tags if tags['ref:INSEE'] then return tags['ref:INSEE'] elseif tags['addr:postcode'] then -- French postal codes often start with the department code -- For example, 91150 is in department 91, which can help identify the INSEE code return tags['addr:postcode'] and string.sub(tags['addr:postcode'], 1, 2) .. "111" elseif tags['addr:city'] and tags['addr:city'] == 'Étampes' then -- If the city is Étampes, use the INSEE code 91111 return "91111" else -- Default to 91111 (Étampes) for this specific use case -- In a production environment, you would use a spatial query to determine the INSEE code return "91111" end end function osm2pgsql.process_node(object) -- Check for fire hydrants with different tagging schemes if object.tags.emergency == 'fire_hydrant' or object.tags.amenity == 'fire_hydrant' then tables.fire_hydrants:insert({ tags = object.tags, ref = object.tags.ref, color = object.tags.color, insee = get_insee_code(object.tags) }) end -- Check for trees if object.tags.natural == 'tree' then tables.trees:insert({ tags = object.tags, species = object.tags.species, height = object.tags.height, insee = get_insee_code(object.tags) }) end -- Check for charging stations if object.tags.amenity == 'charging_station' then tables.charging_stations:insert({ tags = object.tags, operator = object.tags.operator, capacity = object.tags.capacity, insee = get_insee_code(object.tags) }) end end function osm2pgsql.process_way(object) -- Check for charging stations that might be mapped as ways if object.tags.amenity == 'charging_station' then tables.charging_stations_ways:insert({ tags = object.tags, operator = object.tags.operator, capacity = object.tags.capacity, insee = get_insee_code(object.tags) }) end end function osm2pgsql.process_relation(object) return end