From 910fda83963571a0b46f4cedd6cffabb446e3ef2 Mon Sep 17 00:00:00 2001 From: Colas Geier Date: Tue, 21 Jul 2026 11:34:07 +0200 Subject: [PATCH] init code --- 3_AZALEE/tmp/PS_GAM2026_standardise_data.py | 41 +++ 5_GEONATURE/EXPORT/v_bam_widget.py | 20 ++ 5_GEONATURE/EXPORT/v_negria.py | 273 ++++++++++++++++++ .../IMPORTS/manip_data_negria_oxalis.py | 60 ++++ tmp/diag_foret_siteCEN.py | 49 ++++ 5 files changed, 443 insertions(+) create mode 100644 3_AZALEE/tmp/PS_GAM2026_standardise_data.py create mode 100644 5_GEONATURE/EXPORT/v_bam_widget.py create mode 100644 5_GEONATURE/EXPORT/v_negria.py create mode 100644 5_GEONATURE/IMPORTS/manip_data_negria_oxalis.py create mode 100644 tmp/diag_foret_siteCEN.py diff --git a/3_AZALEE/tmp/PS_GAM2026_standardise_data.py b/3_AZALEE/tmp/PS_GAM2026_standardise_data.py new file mode 100644 index 0000000..660f36b --- /dev/null +++ b/3_AZALEE/tmp/PS_GAM2026_standardise_data.py @@ -0,0 +1,41 @@ +import geopandas as gpd +from os import path + +PATH = '/home/cgeier/Documents/9_PROJETS/2_PS/2026/Anne BELET - couchepelousessches' +anne = gpd.read_file(path.join(PATH,'couche_finale_modif_CEN.gpkg')).set_index('site_code') +mosa = gpd.read_file(path.join(PATH,'couche_finale_modif_mosaique.gpkg')).set_index('site_code') +call = gpd.read_file(path.join(PATH,'couche_finale2.gpkg')).set_index('site_code') + +date_cols = anne.columns[anne.columns.str.contains('date')] +for tab in [anne,mosa,call]: + for d in date_cols : + tab[d] = (gpd.pd.to_datetime(tab[d],format='mixed',utc=True) + .astype(str) + .str.split(' ', expand=True)[0] + ) + + +anne.loc[anne.auteur_attrs=='Anne BELET (GAM)','organisme'] = 'Grenoble Alpes Métropole' +anne.loc[anne.auteur_geom=='Anne BELET (GAM)','organisme'] = 'Grenoble Alpes Métropole' +anne.loc[anne.auteur_geom=='Ag Mosaique Env','organisme'] = 'Mosaïque Environnement' +anne.loc[anne.auteur_geom=='Ag Mosaique Env','auteur_geom'] = 'Mosaïque Environnement' + +anne.loc[anne.auteur_attrs=='Anne BELET (GAM)','auteur'] = 'BELET Anne' +anne.loc[anne.auteur_geom=='Anne BELET (GAM)','auteur'] = 'BELET Anne' +anne.loc[anne.auteur_geom=='Mosaïque Environnement','auteur'] = 'Mosaïque Environnement' + +anne['id_origine'] = anne.index.str[:10] +anne['id_site'] = anne.index.copy() +anne.loc[anne.index.str.len()<10,'id_site'] = None +anne.loc[anne.index.str.len()>10,'id_site'] = None + +anne.rename(columns={ + 'rmq_interet_patri':'remarques','rmq_usage_process':'legende' + }, inplace=True) + +anne.to_file(path.join(PATH,'GAM2026_couche_finale_modif_CEN (corrige).gpkg'),index=False) +mosa.to_file(path.join(PATH,'GAM2026_couche_finale_modif_mosaique (corrige).gpkg')) +call.to_file(path.join(PATH,'GAM2026_couche_finale (corrige).gpkg')) + +anne.to_excel(path.join(PATH,'couche_finale_modif_CEN.xlsx'),index=False) +mosa.to_excel(path.join(PATH,'couche_finale_modif_mosaique.xlsx')) \ No newline at end of file diff --git a/5_GEONATURE/EXPORT/v_bam_widget.py b/5_GEONATURE/EXPORT/v_bam_widget.py new file mode 100644 index 0000000..3459eb8 --- /dev/null +++ b/5_GEONATURE/EXPORT/v_bam_widget.py @@ -0,0 +1,20 @@ +from pycen import con_gn + +sql = ''' + CREATE OR REPLACE VIEW gn_exports.v_bam_widget AS + SELECT + t.cd_ref AS cd_ref, + t.nom_vern AS nom_vernaculaire, + t.lb_nom AS nom_scientifique, + s.id_synthese AS id_synthese, + s.date_min AS date_min, + s.date_max AS date_max, + s.the_geom_4326 AS the_geom_4326, + t.classe AS classe + FROM gn_synthese.synthese s + JOIN taxonomie.taxref t USING(cd_nom) + ; +''' + +with con_gn.begin() as cnx: + cnx.execute(sql) \ No newline at end of file diff --git a/5_GEONATURE/EXPORT/v_negria.py b/5_GEONATURE/EXPORT/v_negria.py new file mode 100644 index 0000000..6bea77d --- /dev/null +++ b/5_GEONATURE/EXPORT/v_negria.py @@ -0,0 +1,273 @@ +from pycen import con_gn + +sql = ''' + +DROP VIEW IF EXISTS gn_exports.v_synthese_negria_forcenra; + +CREATE OR REPLACE VIEW gn_exports.v_synthese_negria_forcenra + AS +WITH af_actors AS ( + SELECT + cafa.id_acquisition_framework, + json_build_object('type_role', + CASE + WHEN cafa.id_organism IS NOT NULL THEN 'organism'::TEXT + WHEN cafa.id_role IS NOT NULL THEN 'role'::TEXT + ELSE NULL::TEXT + END, 'uuid_actor', coalesce(borg.uuid_organisme, tro.uuid_role), + 'cd_nomenclature_actor_role', tn.cd_nomenclature, 'identity', + CASE + WHEN cafa.id_organism IS NOT NULL + THEN json_build_object('organism_name', borg.nom_organisme) + WHEN cafa.id_role IS NOT NULL THEN json_build_object('first_name', + tro.nom_role, + 'last_name', + tro.prenom_role) END, + 'email', coalesce(borg.email_organisme, tro.email)) AS json_data + FROM gn_meta.cor_acquisition_framework_actor cafa + LEFT JOIN utilisateurs.bib_organismes borg ON cafa.id_organism = borg.id_organisme + LEFT JOIN utilisateurs.t_roles tro ON cafa.id_role = tro.id_role + JOIN ref_nomenclatures.t_nomenclatures tn + ON cafa.id_nomenclature_actor_role = tn.id_nomenclature +), af_territories AS ( + SELECT + caft.id_acquisition_framework, + array_agg(DISTINCT t_nomenclatures.cd_nomenclature) AS territories + FROM gn_meta.cor_acquisition_framework_territory caft + LEFT JOIN ref_nomenclatures.t_nomenclatures + ON caft.id_nomenclature_territory = + t_nomenclatures.id_nomenclature + GROUP BY caft.id_acquisition_framework +), af_objectives AS ( + SELECT + cafo.id_acquisition_framework, + array_agg(DISTINCT t_nomenclatures.cd_nomenclature) AS objectives + FROM gn_meta.cor_acquisition_framework_objectif cafo + LEFT JOIN ref_nomenclatures.t_nomenclatures + ON cafo.id_nomenclature_objectif = + t_nomenclatures.id_nomenclature + GROUP BY cafo.id_acquisition_framework +), af_voletsinp AS ( + SELECT + cafv.id_acquisition_framework, + array_agg(DISTINCT t_nomenclatures.cd_nomenclature) AS voletsinp + FROM gn_meta.cor_acquisition_framework_voletsinp cafv + LEFT JOIN ref_nomenclatures.t_nomenclatures + ON cafv.id_nomenclature_voletsinp = + t_nomenclatures.id_nomenclature + GROUP BY cafv.id_acquisition_framework +), af_publication AS ( + SELECT + cafp.id_acquisition_framework, + array_agg(DISTINCT + jsonb_build_object('uuid', sinp_datatype_publications.unique_publication_id, + 'reference', + sinp_datatype_publications.publication_reference, + 'url', + sinp_datatype_publications.publication_url)) AS publications + FROM gn_meta.cor_acquisition_framework_publication cafp + LEFT JOIN gn_meta.sinp_datatype_publications + ON cafp.id_publication = sinp_datatype_publications.id_publication + GROUP BY cafp.id_acquisition_framework +), af AS ( + SELECT + taf.id_acquisition_framework, + jsonb_build_object('uuid', taf.unique_acquisition_framework_id, 'name', + taf.acquisition_framework_name, + 'desc', taf.acquisition_framework_desc, 'start_date', + taf.acquisition_framework_start_date, 'end_date', + taf.acquisition_framework_end_date, + 'initial_closing_date', taf.initial_closing_date, 'territories', + af_territories.territories, 'territorial_level', + ntl.cd_nomenclature, 'territory_desc', taf.territory_desc, 'objectives', + af_objectives.objectives, 'publications', af_publication.publications, + 'financing_type', nft.cd_nomenclature, + 'target_description', + taf.target_description, 'ecologic_or_geologic_target', + taf.ecologic_or_geologic_target, 'actors', + json_agg(af_actors.json_data), 'is_parent', taf.is_parent, 'parent_uuid', + tafp.unique_acquisition_framework_id) AS af_data + FROM gn_meta.t_acquisition_frameworks taf + LEFT JOIN gn_meta.t_acquisition_frameworks tafp + ON tafp.id_acquisition_framework = taf.acquisition_framework_parent_id + JOIN af_actors ON af_actors.id_acquisition_framework = taf.id_acquisition_framework + LEFT JOIN ref_nomenclatures.t_nomenclatures ntl + ON taf.id_nomenclature_territorial_level = ntl.id_nomenclature + LEFT JOIN ref_nomenclatures.t_nomenclatures nft + ON taf.id_nomenclature_financing_type = nft.id_nomenclature + LEFT JOIN af_territories ON af_territories.id_acquisition_framework = taf.id_acquisition_framework + LEFT JOIN af_objectives ON af_objectives.id_acquisition_framework = taf.id_acquisition_framework + LEFT JOIN af_voletsinp ON af_voletsinp.id_acquisition_framework = taf.id_acquisition_framework + LEFT JOIN af_publication ON af_publication.id_acquisition_framework = taf.id_acquisition_framework + GROUP BY taf.id_acquisition_framework, taf.acquisition_framework_name, taf.acquisition_framework_desc, + taf.acquisition_framework_start_date, taf.acquisition_framework_end_date, taf.initial_closing_date, + ntl.cd_nomenclature, nft.cd_nomenclature, af_territories.territories, af_objectives.objectives, + af_voletsinp.voletsinp, af_publication.publications, taf.is_parent, + tafp.unique_acquisition_framework_id +), ds_actors AS ( + SELECT + cda.id_dataset, + json_build_object('type_role', + CASE + WHEN cda.id_organism IS NOT NULL THEN 'organism'::TEXT + WHEN cda.id_role IS NOT NULL THEN 'role'::TEXT + ELSE NULL::TEXT + END, 'uuid_actor', coalesce(borg.uuid_organisme, tro.uuid_role), + 'cd_nomenclature_actor_role', tn.cd_nomenclature, 'identity', + CASE + WHEN cda.id_organism IS NOT NULL + THEN json_build_object('organism_name', borg.nom_organisme) + WHEN cda.id_role IS NOT NULL THEN json_build_object('first_name', + tro.nom_role, + 'last_name', + tro.prenom_role) END, + 'email', coalesce(borg.email_organisme, tro.email)) AS json_data + FROM gn_meta.cor_dataset_actor cda + LEFT JOIN utilisateurs.bib_organismes borg ON cda.id_organism = borg.id_organisme + LEFT JOIN utilisateurs.t_roles tro ON cda.id_role = tro.id_role + JOIN ref_nomenclatures.t_nomenclatures tn + ON cda.id_nomenclature_actor_role = tn.id_nomenclature +), -- FIN +ds_protocols AS ( + SELECT + cdp.id_dataset, + jsonb_build_object( + 'uuid', sdp.unique_protocol_id, + 'name', sdp.protocol_name, + 'desc', sdp.protocol_desc, + 'url', sdp.protocol_url, + 'type', t_nomenclatures.cd_nomenclature) AS protocols + FROM gn_meta.cor_dataset_protocol cdp + JOIN gn_meta.sinp_datatype_protocols sdp + ON cdp.id_protocol = sdp.id_protocol + LEFT JOIN ref_nomenclatures.t_nomenclatures + ON sdp.id_nomenclature_protocol_type = t_nomenclatures.id_nomenclature +), ds AS ( + SELECT + tds.id_dataset, + tds.id_acquisition_framework, + -- tds.additional_data, + jsonb_build_object('uuid', tds.unique_dataset_id, 'name', tds.dataset_name, 'desc', tds.dataset_desc, + 'shortname', tds.dataset_shortname, 'data_type', ndt.cd_nomenclature, + 'keywords', tds.keywords, 'marine_domain', tds.marine_domain, + 'terrestrial_domain', tds.terrestrial_domain, 'collecting_method', + ncm.cd_nomenclature, 'protocols', + ds_protocols.protocols, + 'data_origin', ndo.cd_nomenclature, + 'dataset_objectif', ndso.cd_nomenclature, 'resource_type', nrt.cd_nomenclature, + 'source_status', nss.cd_nomenclature, 'territories', array_agg(DISTINCT + ref_nomenclatures.get_cd_nomenclature(cdt.id_nomenclature_territory)), + 'actors', json_agg(ds_actors.json_data)) AS dataset_data + FROM gn_meta.t_datasets tds + JOIN ds_actors ON ds_actors.id_dataset = tds.id_dataset + LEFT JOIN gn_meta.cor_dataset_territory cdt ON cdt.id_dataset = tds.id_dataset + LEFT JOIN ds_protocols ON ds_protocols.id_dataset = tds.id_dataset + LEFT JOIN ref_nomenclatures.t_nomenclatures ndt + ON tds.id_nomenclature_data_type = ndt.id_nomenclature + LEFT JOIN ref_nomenclatures.t_nomenclatures ncm + ON tds.id_nomenclature_collecting_method = ncm.id_nomenclature + LEFT JOIN ref_nomenclatures.t_nomenclatures ndo + ON tds.id_nomenclature_data_origin = ndo.id_nomenclature + LEFT JOIN ref_nomenclatures.t_nomenclatures ndso + ON tds.id_nomenclature_dataset_objectif = ndso.id_nomenclature + LEFT JOIN ref_nomenclatures.t_nomenclatures nrt + ON tds.id_nomenclature_resource_type = nrt.id_nomenclature + LEFT JOIN ref_nomenclatures.t_nomenclatures nss + ON tds.id_nomenclature_source_status = nss.id_nomenclature + GROUP BY tds.id_dataset, tds.id_acquisition_framework, tds.unique_dataset_id, tds.dataset_name, + tds.dataset_desc, tds.dataset_shortname, ndt.cd_nomenclature, ncm.cd_nomenclature, + ndo.cd_nomenclature, ndso.cd_nomenclature, nrt.cd_nomenclature, nss.cd_nomenclature, + ds_protocols.protocols +) +SELECT row_number() over (ORDER BY id_synthese) as gid, + s.id_synthese, + s.entity_source_pk_value AS id_source, + s.unique_id_sinp AS id_perm_sinp, + s.unique_id_sinp_grp AS id_perm_grp_sinp, + s.date_min AS date_debut, + s.date_max AS date_fin, + s.cd_nom, + s.meta_v_taxref AS version_taxref, + s.nom_cite, + s.count_min AS nombre_min, + s.count_max AS nombre_max, + s.altitude_min, + s.altitude_max, + s.depth_min AS profondeur_min, + s.depth_max AS profondeur_max, + s.observers AS observateurs, + s.determiner AS determinateur, + s.validator AS validateur, + s.sample_number_proof AS numero_preuve, + s.digital_proof AS preuve_numerique, + s.non_digital_proof AS preuve_non_numerique, + s.comment_context AS comment_releve, + s.comment_description AS comment_occurrence, + ds.dataset_data AS jdd_data, + af.af_data AS ca_data, + s.reference_biblio, + s.cd_hab AS code_habitat, + h.lb_hab_fr AS habitat, + s.place_name AS nom_lieu, + s.precision, + s.additional_data AS donnees_additionnelles, + st_astext(s.the_geom_4326) AS wkt_4326, + n1.cd_nomenclature AS nature_objet_geo, + n2.cd_nomenclature AS type_regroupement, + s.grp_method AS methode_regroupement, + n3.cd_nomenclature AS comportement, + n4.cd_nomenclature AS technique_obs, + n5.cd_nomenclature AS statut_biologique, + n6.cd_nomenclature AS etat_biologique, + n7.cd_nomenclature AS naturalite, + n8.cd_nomenclature AS preuve_existante, + n9.cd_nomenclature AS precision_diffusion, + n10.cd_nomenclature AS stade_vie, + n11.cd_nomenclature AS sexe, + n12.cd_nomenclature AS objet_denombrement, + n13.cd_nomenclature AS type_denombrement, + n14.cd_nomenclature AS niveau_sensibilite, + n15.cd_nomenclature AS statut_observation, + n16.cd_nomenclature AS floutage_dee, + n17.cd_nomenclature AS statut_source, + n18.cd_nomenclature AS type_info_geo, + n19.cd_nomenclature AS methode_determination, + n20.cd_nomenclature AS statut_validation, + coalesce(s.meta_update_date, s.meta_create_date) AS derniere_action--, s.the_geom_local -- supprimé car bloque GN2PG +FROM gn_synthese.synthese s + JOIN taxonomie.taxref USING (cd_nom) + JOIN ds ON ds.id_dataset = s.id_dataset + JOIN af ON ds.id_acquisition_framework = af.id_acquisition_framework + LEFT JOIN ref_habitats.habref h ON h.cd_hab = s.cd_hab + LEFT JOIN ref_nomenclatures.t_nomenclatures n1 ON s.id_nomenclature_geo_object_nature = n1.id_nomenclature + LEFT JOIN ref_nomenclatures.t_nomenclatures n2 ON s.id_nomenclature_grp_typ = n2.id_nomenclature + LEFT JOIN ref_nomenclatures.t_nomenclatures n3 ON s.id_nomenclature_behaviour = n3.id_nomenclature + LEFT JOIN ref_nomenclatures.t_nomenclatures n4 ON s.id_nomenclature_obs_technique = n4.id_nomenclature + LEFT JOIN ref_nomenclatures.t_nomenclatures n5 ON s.id_nomenclature_bio_status = n5.id_nomenclature + LEFT JOIN ref_nomenclatures.t_nomenclatures n6 ON s.id_nomenclature_bio_condition = n6.id_nomenclature + LEFT JOIN ref_nomenclatures.t_nomenclatures n7 ON s.id_nomenclature_naturalness = n7.id_nomenclature + LEFT JOIN ref_nomenclatures.t_nomenclatures n8 ON s.id_nomenclature_exist_proof = n8.id_nomenclature + LEFT JOIN ref_nomenclatures.t_nomenclatures n9 ON s.id_nomenclature_diffusion_level = n9.id_nomenclature + LEFT JOIN ref_nomenclatures.t_nomenclatures n10 ON s.id_nomenclature_life_stage = n10.id_nomenclature + LEFT JOIN ref_nomenclatures.t_nomenclatures n11 ON s.id_nomenclature_sex = n11.id_nomenclature + LEFT JOIN ref_nomenclatures.t_nomenclatures n12 ON s.id_nomenclature_obj_count = n12.id_nomenclature + LEFT JOIN ref_nomenclatures.t_nomenclatures n13 ON s.id_nomenclature_type_count = n13.id_nomenclature + LEFT JOIN ref_nomenclatures.t_nomenclatures n14 ON s.id_nomenclature_sensitivity = n14.id_nomenclature + LEFT JOIN ref_nomenclatures.t_nomenclatures n15 ON s.id_nomenclature_observation_status = n15.id_nomenclature + LEFT JOIN ref_nomenclatures.t_nomenclatures n16 ON s.id_nomenclature_blurring = n16.id_nomenclature + LEFT JOIN ref_nomenclatures.t_nomenclatures n17 ON s.id_nomenclature_source_status = n17.id_nomenclature + LEFT JOIN ref_nomenclatures.t_nomenclatures n18 ON s.id_nomenclature_info_geo_type = n18.id_nomenclature + LEFT JOIN ref_nomenclatures.t_nomenclatures n19 ON s.id_nomenclature_determination_method = n19.id_nomenclature + LEFT JOIN ref_nomenclatures.t_nomenclatures n20 ON s.id_nomenclature_valid_status = n20.id_nomenclature + +WHERE (af.af_data#>>'{uuid}') = '97c05888-08f5-4a4b-a224-20c3263594ad' + AND (ds.dataset_data#>>'{uuid}') not in ( + '7a29acae-757e-41d7-a0cf-a35c568a5db9', + '089a8dc1-3d50-4b2c-865c-d535a982446f' -- JDD : Expertise écologique - Label Golf pour la biodiversité + ) +-- FIN +ORDER BY s.id_synthese; +''' + +with con_gn.begin() as cnx: + cnx.execute(sql) \ No newline at end of file diff --git a/5_GEONATURE/IMPORTS/manip_data_negria_oxalis.py b/5_GEONATURE/IMPORTS/manip_data_negria_oxalis.py new file mode 100644 index 0000000..ae7edd9 --- /dev/null +++ b/5_GEONATURE/IMPORTS/manip_data_negria_oxalis.py @@ -0,0 +1,60 @@ +import pandas as pd +from os import path +from pycen import con_gn + +# PARAMS +PATH = '/media/cgeier/SRV/FICHIERS/OUTILS/CARTOGRAPHIE/ESPACE DE TRAVAIL/SITES/Lone de la Negria/Faune-Flore/Données partenaires/1.Données nettoyées/Golf Club Lyon Faune Flore Oxalis 2021/' +file = 'Golf Club Lyon Faune Flore Oxalis 2021.csv' + +# READ DATA +tax = pd.read_sql('SELECT * FROM taxonomie.taxref',con_gn) +df = pd.read_csv(path.join(PATH,file),index_col=0) + +# MAKE DICTIONARY +dic_tax_comp = dict(zip(tax.nom_complet,tax.cd_ref.astype(str))) +dic_tax_vali = dict(zip(tax.nom_valide,tax.cd_ref.astype(str))) +dic_tax_lbno = dict(zip(tax.lb_nom,tax.cd_ref.astype(str))) +dic_tax_vern = dict(zip(tax.nom_vern,tax.cd_ref.astype(str))) + +# MANIP DATA +df['cd_ref'] = df.NOMCITE.copy() +df.replace({'cd_ref':dic_tax_comp},inplace=True) +df.replace({'cd_ref':dic_tax_vali},inplace=True) +df.replace({'cd_ref':dic_tax_lbno},inplace=True) +df.replace({'cd_ref':dic_tax_vern},inplace=True) + +df['tmp'] = df.COMMENT.str.lower().copy() +df.tmp.replace({ + 'â':'a', + 'ê':'e' +}, regex=True) + +df.loc[df.tmp.str.contains("mâle",na=False),'sexe'] = "Mâle" +df.loc[df.tmp.str.contains("adulte",na=False),'stade_vie'] = "Adulte" +df.loc[df.tmp.str.contains("imago",na=False),'stade_vie'] = "Imago" +df.loc[df.tmp.str.contains("larve",na=False),'stade_vie'] = "Larve" +df.loc[df.tmp.str.contains("tetard",na=False),'stade_vie'] = "Têtard" +df.loc[df.tmp.str.contains("immature",na=False),'stade_vie'] = "Immature" +df.loc[df.tmp.str.contains("flor",na=False),'stade_vie'] = "Fleur" +df.loc[df.tmp.str.contains("cris",na=False),'comportement'] = "Cris" +df.loc[df.tmp.str.contains("cht",na=False),'comportement'] = "Chant" +df.loc[df.tmp.str.contains("chant",na=False),'comportement'] = "Chant" +df.loc[df.tmp.str.contains("transit",na=False),'comportement'] = "Passage en vol" +df.loc[df.tmp.str.contains("vol",na=False),'comportement'] = "Passage en vol" +df.loc[df.tmp.str.contains("chasse",na=False),'comportement'] = "Chasse/alimentation" +df.loc[df.tmp.str.contains("andem",na=False),'comportement'] = "Tandem" +df.loc[df.tmp.str.contains("ponte",na=False),'obj_denombrement'] = "Ponte" + +df.sexe.fillna('Non renseigné', inplace=True) +df.stade_vie.fillna('Inconnu', inplace=True) +df.comportement.fillna('Inconnu', inplace=True) +df.obj_denombrement.fillna('Individu', inplace=True) + +df['typ_denombre'] = 'Compté' +df['etat_bio'] = 'Observé vivant' +df['tech_obs'] = 'Vu' +df['OBSE_NOMBR'] = df.OBSE_NOMBR.astype(int) +df.loc[~df.PRECISGEO.isna(),'precisgeo'] = df[~df.PRECISGEO.isna()].PRECISGEO.astype(int).astype(str) + +del df['tmp'] +df.to_csv(path.join(PATH,'Golf Club Lyon Faune Flore Oxalis 2021 (remanié).csv')) diff --git a/tmp/diag_foret_siteCEN.py b/tmp/diag_foret_siteCEN.py new file mode 100644 index 0000000..0fc2330 --- /dev/null +++ b/tmp/diag_foret_siteCEN.py @@ -0,0 +1,49 @@ +from pycen import con_fon, con_gn +import geopandas as gpd + +zh = gpd.read_postgis('SELECT * FROM gn_exports.v_synthese_zh_rhomeosite', con_gn) + +_ens = gpd.read_postgis('SELECT * FROM sites.sites', con_fon,geom_col='geom') +_ens.sort_values('site_id',inplace=True) +_ens.site_id = _ens.site_id.str.replace('_ZI','') +site = gpd.read_postgis('SELECT * FROM _tdbfcen.vm_sites_cen_2026_shp',con_fon) +site['area_mastery'] = site.area / 10000 + + +ens = _ens[_ens.site_id.isin(site.id_site_cen.tolist())] +# ens = gpd.pd.concat([ens,_ens[(_ens.site_id.str.strip('_ZO').isin(site[~site.id_site_cen.isin(ens.site_id)].id_site_cen.tolist()))]]) +# ens.site_id = ens.site_id.str.strip('_ZO') +ens['area_total'] = ens.area / 10000 +zh_over_ens = zh.overlay(ens).dissolve('site_id') +zh_over_ens['area_zh_total'] = zh_over_ens.area / 10000 +zh_over_ens.to_file('/home/cgeier/Téléchargements/foret_sitecen/overlay_ens_zh.geojson',driver='GeoJSON') + +foret = gpd.read_file('/home/cgeier/Téléchargements/foret_sitecen/ign_masque_foret.geojson') +over = foret.overlay(site).dissolve('id_site_cen') +over['area_forest_master'] = over.area / 10000 +over.to_file('/home/cgeier/Téléchargements/foret_sitecen/overlay_sites_foret.geojson',driver='GeoJSON') + +peup = gpd.read_file('/home/cgeier/Téléchargements/foret_sitecen/peuplier_onsites.geojson') +p_over = peup.overlay(site).dissolve('id_site_cen') +p_over['area_peuplier_master'] = p_over.area / 10000 +p_over.to_file('/home/cgeier/Téléchargements/foret_sitecen/overlay_sites_peupleraie.geojson',driver='GeoJSON') + +zh_over = zh.overlay(site).dissolve('id_site_cen') +zh_over['area_zh_master'] = zh_over.area / 10000 +zh_over.to_file('/home/cgeier/Téléchargements/foret_sitecen/overlay_site_maitrise_zh.geojson',driver='GeoJSON') + +df = ( + ens[['site_id','site_nom','geom','area_total']] + .merge(over[['area_mastery','area_forest_master']].reset_index(drop=False), how='left', right_on='id_site_cen',left_on='site_id') + .drop(columns='id_site_cen') + .merge(p_over[['area_peuplier_master']].reset_index(drop=False), how='left', right_on='id_site_cen',left_on='site_id') + .drop(columns='id_site_cen') + .merge(zh_over_ens[['area_zh_total']].reset_index(drop=False), on='site_id', how='left') + .merge(zh_over[['area_zh_master']].reset_index(drop=False), how='left', right_on='id_site_cen',left_on='site_id') + .drop(columns='id_site_cen') + .sort_values('site_id') + .fillna(0) +) +df = df[~df.site_id.isin(['CACH','N2GL','N2IP','RNGL','RNIP','NDDM'])] + +df.to_file('/home/cgeier/Téléchargements/foret_sitecen/sites_foret.geojson',driver='GeoJSON') \ No newline at end of file