osm-labo/counting_osm_objects/osm_data/style.lua
2025-07-27 18:01:24 +02:00

110 lines
3.8 KiB
Lua

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