Skip to content

Instantly share code, notes, and snippets.

View ThomasG77's full-sized avatar

Thomas Gratier ThomasG77

View GitHub Profile
@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);
@ThomasG77
ThomasG77 / README.md
Last active June 11, 2025 10:56
Rapide exploitation des données SWI catnat (grilles et données)

Rapide exploitation des données SWI catnat (grilles et données)

Coordonnées des mailles https://donneespubliques.meteofrance.fr/client/document/metadonnees_swi_276.csv (pris depuis la page https://donneespubliques.meteofrance.fr/?fond=produit&id_produit=301&id_rubrique=40 partie Documentation)

curl -s https://donneespubliques.meteofrance.fr/client/document/metadonnees_swi_276.csv | sed 1,4d | sed 's/#//g' >| mailles_safran.csv

ogr2ogr -f "ESRI Shapefile" -dialect SQLite -sql "SELECT num_maille, lambx, lamby, lambx93, lamby93,lat_dg,lon_dg,PolygonFromText('POLYGON((' || (lambx * 100 - 4000) || ' ' || (lamby * 100 - 4000) || ',' || (lambx * 100 - 4000) || ' ' || (lamby * 100 + 4000) || ',' || (lambx * 100 + 4000) || ' ' || (lamby * 100 + 4000) || ',' || (lambx * 100 + 4000) || ' ' || (lamby * 100 - 4000) || ',' || (lambx * 100 - 4000) || ' ' || (lamby * 100 - 4000) || '))', 27572) AS geometry FROM mailles_safran" mailles_safran.shp mailles_safran.csv
zip mailles_safran.zip mailles_safran.shp maille
@ThomasG77
ThomasG77 / get-ocs-data-filtered.py
Created May 22, 2025 13:20
OCSGE téléchargement IGN flux Atom
import xml.etree.ElementTree as ET
import requests
base_url_ocsge = "https://data.geopf.fr/telechargement/resource/OCSGE"
limit = 50
first_page = f'{base_url_ocsge}?page=1&limit={limit}'
r_first_page = requests.get(first_page)
root = ET.fromstring(r_first_page.text)
plugin_file_to_patch = iface.userProfileManager().userProfile().folder() + '/python/plugins/' + 'cadastre' + '/dialogs/search_dialog.py'
# Read in the file
with open(plugin_file_to_patch, 'r') as file:
filedata = file.read()
# Replace the target string
filedata = filedata.replace("['ogc_fid', 'tex', 'idu', 'geo_section', 'geom', 'comptecommunal', 'geo_parcelle']", "['ogc_fid', 'tex', 'idu', 'geo_section', 'geom', 'geo_parcelle']")
# Write the file out again
@ThomasG77
ThomasG77 / README.md
Created February 11, 2025 16:31
API jours fériés: passage sous forme de tableau

API jours fériés: passage sous forme de tableau

curl -s https://calendrier.api.gouv.fr/jours-feries/metropole.json | jq '[. | to_entries|sort_by(.key)| .[] | {"date":.key, "event": .value}]'
fetch('https://calendrier.api.gouv.fr/jours-feries/metropole.json').then(res => res.json()).then(json => {
    console.log(Object.entries(abc).map(([k,v]) => ({"date":k, "event": v})).toSorted((a, b) => a.date - b.date))
})
@ThomasG77
ThomasG77 / pnr.geojson
Created February 6, 2025 15:03
PNR demo
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.