Skip to content

Instantly share code, notes, and snippets.

View ThomasG77's full-sized avatar

Thomas Gratier ThomasG77

View GitHub Profile
We can't make this file beautiful and searchable because it's too large.
code_dept_canton,code_dept,nom_dept,code_canton,nom_canton,code_commune,nom_commune,circ_leg_1986,circ_leg_2012,code_insee
0101,01,AIN,1,AMBERIEU-EN-BUGEY,002,L'Abergement-de-Varey,2,5,01002
0101,01,AIN,1,AMBERIEU-EN-BUGEY,004,Ambérieu-en-Bugey,2,5,01004
0101,01,AIN,1,AMBERIEU-EN-BUGEY,007,Ambronay,2,5,01007
0101,01,AIN,1,AMBERIEU-EN-BUGEY,041,Bettant,2,5,01041
0101,01,AIN,1,AMBERIEU-EN-BUGEY,089,Château-Gaillard,2,5,01089
0101,01,AIN,1,AMBERIEU-EN-BUGEY,149,Douvres,2,5,01149
0101,01,AIN,1,AMBERIEU-EN-BUGEY,345,Saint-Denis-en-Bugey,2,5,01345
0101,01,AIN,1,AMBERIEU-EN-BUGEY,379,Saint-Maurice-de-Rémens,2,5,01379
@ThomasG77
ThomasG77 / demo-wfs.py
Last active January 28, 2026 22:37
OGC WFS consumption URLs from a service
from owslib.wfs import WebFeatureService
url = 'https://ahocevar.com/geoserver/wfs'
wfs20 = WebFeatureService(url=url, version='2.0.0')
outputFormats = wfs20.getOperationByName('GetFeature').parameters.get('outputFormat').get('values')
for name, contentMetadata in wfs20.items():
for outputFormat in outputFormats:
print(wfs20.getGETGetFeatureRequest(name) + f'&OUTPUTFORMAT={quote(outputFormat)}', name, contentMetadata.title, contentMetadata.id, contentMetadata.abstract)
wget https://static.data.gouv.fr/resources/quartiers-prioritaires-de-la-politique-de-la-ville-qpv/20250206-161839/qp2024-france-hexagonale-outre-mer-wgs84-epsg4326.geojson
duckdb :memory: "INSTALL spatial;LOAD spatial;COPY (SELECT * FROM ST_Read('qp2024-france-hexagonale-outre-mer-wgs84-epsg4326.geojson')) TO 'qpv-2024.parquet' (FORMAT 'parquet', COMPRESSION 'zstd');"
rm qp2024-france-hexagonale-outre-mer-wgs84-epsg4326.geojson
gpio add bbox qpv-2024.parquet qpv-2024-with-bbox.parquet
rm qpv-2024.parquet
gpio sort hilbert qpv-2024-with-bbox.parquet qpv-2024.parquet
rm qpv-2024-with-bbox.parquet
gpio check all qpv-2024.parquet
@ThomasG77
ThomasG77 / README.md
Created November 19, 2025 12:47
Exemples de consommation Geo DVF Parquet via Duckdb

Exemples de consommation de DVF via parquet et Duckdb

# Une commune
duckdb :memory: "INSTALL spatial;LOAD spatial;COPY (SELECT id_mutation, date_mutation, numero_disposition, nature_mutation, valeur_fonciere::DOUBLE AS valeur_fonciere, adresse_numero, adresse_suffixe, adresse_nom_voie, adresse_code_voie, code_postal, code_commune, nom_commune, code_departement, ancien_code_commune, ancien_nom_commune, id_parcelle, ancien_id_parcelle, numero_volume, lot1_numero, lot1_surface_carrez::DOUBLE AS lot1_surface_carrez, lot2_numero, lot2_surface_carrez::DOUBLE AS lot2_surface_carrez, lot3_numero, lot3_surface_carrez::DOUBLE AS lot3_surface_carrez, lot4_numero, lot4_surface_carrez::DOUBLE AS lot4_surface_carrez, lot5_numero, lot5_surface_carrez::DOUBLE AS lot5_surface_carrez, nombre_lots, code_type_local, type_local, surface_reelle_bati::DOUBLE AS surface_reelle_bati, nombre_pieces_principales, code_nature_culture, nature_culture, code_nature_culture_speciale, nature_culture_speciale, surface_terrain::DOUBL
@ThomasG77
ThomasG77 / stats-surface-91114.sql
Created October 20, 2025 16:29
Get area stats for parcelles and batiments for each parcelle
INSTALL SPATIAL;
LOAD SPATIAL;
SET memory_limit = '16GB';
SET max_temp_directory_size = '125GB';
COPY (WITH batiments_91114 AS (
SELECT *
FROM
read_parquet('https://cadastre.data.gouv.fr/data/etalab-cadastre/2025-09-01/geoparquet/france/cadastre.parquet')
WHERE type_objet = 'batiments' AND departement = '91' AND commune = '91114' AND ST_GeometryType(geometry) IN ('POLYGON', 'MULTIPOLYGON')
),
@ThomasG77
ThomasG77 / README.md
Created September 9, 2025 20:05
Imprimer un plan DXF de votre commune : quelques points pour démarrer

Vous souhaitez imprimer un plan DXF de votre commune?

## Quelques points pour vous aider

Prenez le DXF d'une feuille de votre commune. Les DXF comme les Edigeo utilisent des coordonnées en mètres utilisant soit la projection Lambert 93 soit une des projections Lamebert 93 conformes (voir https://bofip.impots.gouv.fr/bofip/5106-PGP.html/identifiant%3DBOI-ANNX-000373-20120912 pour savoir laquelle selon votre département)

rm *.DXF
wget https://cadastre.data.gouv.fr/data/dgfip-pci-vecteur/2025-04-01/dxf/feuilles/44/44109/dxf-44109000AZ01.tar.bz2
tar -xvf dxf-44109000AZ01.tar.bz2
@ThomasG77
ThomasG77 / README.md
Created July 18, 2025 10:33
Récupération geolocalisation EHPAD 57

Récupération geolocalisation EHPAD 57

Depuis le site https://www.pour-les-personnes-agees.gouv.fr/annuaire-ehpad-et-comparateur-de-prix-et-restes-a-charge/moselle-57, on a retrouvé la référence à l'API pour récupérer la donnée pour ce cas particulier

wget -O ehpad-57.json https://www.pour-les-personnes-agees.gouv.fr/api/v1/annuaire/heb?dept_numero=57

jq '.[].item | {"type": "Feature","properties": {"title": .title, "noFinesset": .noFinesset, "legal_staus": .legal_status, "postcode": .coordinates.postcode, "street": .coordinates.street, "codeinsee": .coordinates.codeinsee, "city": .coordinates.city}, "geometry": {"coordinates": [(.coordinates.longitude|tonumber), (.coordinates.latitude|tonumber)], "type": "Point"}}' ehpad-57.json | jq --slurp '{"type": "FeatureCollection", "features": .}' >| ehpad-57.geojson
``
@ThomasG77
ThomasG77 / README.md
Last active June 23, 2025 08:50
Liste des tribunaux judiciaires via site https://cartejudiciaire.fr/

Données récupérées depuis https://cartejudiciaire.fr/

Sûrement possible de reconstituer les périmètres depuis https://www.data.gouv.fr/fr/datasets/liste-des-juridictions-competentes-pour-les-communes-de-france/ mais cela aurait été laborieux...

wget https://cartejudiciaire.fr/resultats/2025/cartes/tj_population.html
grep 'geo_json_8b7d5198a511cd18e16301b3ef38921c_add({"bbox": ' tj_population.html | sed 's#);##g' | sed 's#            geo_json_8b7d5198a511cd18e16301b3ef38921c_add(##g' | jq '.features | map(del(.properties."Population du ressort (en milliers d‘habitants)", .properties."__folium_color"))' | jq '{"type": "FeatureCollection","features": .}' >| tj-2025.geojson
``
@ThomasG77
ThomasG77 / index.js
Created June 12, 2025 09:28
Issue with geobucket package
import { jenksBuckets } from "geobuckets";
const data = [60, 26, 20, 17, 10, 27, 98, 42, 55, 35];
const numClasses = 3;
const buckets = await jenksBuckets(data, numClasses);
console.log(buckets);