QuackOSM pour faire simplement du SQL avec données OSM
Posted by Cyrille37 on 31 August 2026 in French (Français).Salut
Une belle personne m’a parlée de QuackOSM quand je lui faisais part de la difficulté d’installer un serveur Overpass-API pour faire des requêtes en locales sans charger les serveurs communautaires.
Alors j’ai essayé … Et ça déchire de simplicité. 🤩
📢 ATTENTION: la doc est explicite : relations must be of type boundary or multipolygon. Il y d’autres contraintes, ce sera donc à voir selon les besoins …
Comme QuackOSM est un module Python et que je m’y perd tout le temps j’ai utilisé uv. QuackOSM se charge du téléchargement des fichiers PBF par exemple sur GeoFabrik OpenStreetMap Data Extracts.
Il suffit donc d’une seule ligne :
uvx --from 'quackosm[cli]' quackosm \
--osm-extract-query France \
--osm-extract-source geofabrik \
--working-directory ./ \
--ignore-cache \
--cpu-limit 8
Ou si vous avez déjà le fichier “france-latest.osm.pbf”
uvx --from 'quackosm[cli]' quackosm france-latest.osm.pbf \
--ignore-cache \
--cpu-limit 8
Pour obtenir le fichier “geofabrik_europe_france_nofilter_noclip_compact_sorted.parquet” (9 Go) au format GeoParquet.
À noter:
- l’extra
quackosm[cli]pour éviter “ModuleNotFoundError: No module named ‘click’” - Au premier appel, uv télécharge et résout les ~40 dépendances (duckdb, pyarrow, numpy, shapely, etc.) et les met en cache localement
En suite on peut utiliser DuckDB pour faire des requêtes sur des objets OSM.
Par exemple avec l’outil de bureau DBeaver on créer une connexion DuckDB (le driver est téléchargé automatiquement), on ouvre une console SQL sur la connexion et :
-- les points d'eau potable dans le périmètre de "Tours Métropole Val de Loire"
INSTALL spatial;
LOAD spatial;
-- Récupérer la géométrie de "Tours Métropole" (un POLYGON)
WITH tours_metropole AS (
SELECT geometry
FROM geofabrik_europe_france_nofilter_noclip_compact_sorted
WHERE tags['boundary'] = 'local_authority'
AND tags['name'] = 'Tours Métropole Val de Loire'
LIMIT 1
)
-- Récupérer les points d'eau potable (POINTS) dans cette géométrie
SELECT
feature_id,
tags['name'] AS name,
ST_X(geometry) AS longitude,
ST_Y(geometry) AS latitude
FROM geofabrik_europe_france_nofilter_noclip_compact_sorted
WHERE
-- Filtre sur les points d'eau potable (amenity=drinking_water)
tags['amenity'] = 'drinking_water'
-- et que la géométrie est un POINT
AND ST_GeometryType(geometry) = 'POINT'
-- et que le point est dans la géométrie de "Tours Métropole"
AND ST_Within(
geometry,
(SELECT geometry FROM tours_metropole)
);
-- Et 3.7 secondes plus tard :
|feature_id|name|longitude|latitude|
|----------|----|---------|--------|
|node/7285184855||0.5381852|47.3109468|
|node/2431342938||0.5143303|47.3412371|
|node/461205675||0.5452565|47.3481125|
|node/6624591422||0.5471518|47.3482322|
|node/3613483888||0.5489893|47.3489299|
Notes:
- le “FROM” est le nom du fichier GeoParquet sans l’extension
Et on peut utiliser tout plein d’autres connecteurs DuckDB pour l’utiliser dans son langage préféré.
J’adore ! Il est content Rosco. 🥳
Discussion
Comment from Cyrille37 on 31 August 2026 at 12:38
QuackOSM était annoncé dans hebdoOSM 719 et hebdoOSM 711.
Comment from Cyrille37 on 31 August 2026 at 13:45
Sur la performance, avec entrée “france-latest.osm.pbf” (4.8 Go) et sortie “france-latest_nofilter_noclip_compact_sorted.parquet” (8.4 Go)
Laptop, Intel Core i7-1360P, 32 Go RAM, Samsung SSD 990 PRO
Tower Intel Core Ultra 7 270K Plus, 96 Go RAM, Crucial SSD PCIe Gen4 NVMe