From 017d40db6a14f47bff3c192adb2567b9ecdc37b4 Mon Sep 17 00:00:00 2001 From: Colas Geier Date: Thu, 18 Sep 2025 16:52:27 +0200 Subject: [PATCH] init --- tmp/PG_AVAL.py | 98 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 98 insertions(+) create mode 100644 tmp/PG_AVAL.py diff --git a/tmp/PG_AVAL.py b/tmp/PG_AVAL.py new file mode 100644 index 0000000..3daab40 --- /dev/null +++ b/tmp/PG_AVAL.py @@ -0,0 +1,98 @@ +import geopandas as gpd +import json +from shapely.geometry import shape +from pycen import con_gn + +PATH = '/home/colas/Documents/tmp/AVAL/' +gnaura = gpd.pd.read_csv(PATH+'BIODIVAURA_synthese_observations_2025-06-16T10_23_13.147Z.csv',sep=';') +gncen38 = gpd.pd.read_csv(PATH+'GN_synthese_observations_2025-06-16T10_23_43.122Z.csv',sep=';',dtype={'niveau_precision_diffusion':str}) + +gnaura = gpd.GeoDataFrame(gnaura, geometry=gpd.points_from_xy(gnaura.x_centroid_4326,gnaura.y_centroid_4326),crs=4326) +gncen38 = gpd.GeoDataFrame(gncen38, geometry=gpd.points_from_xy(gncen38.x_centroid_4326,gncen38.y_centroid_4326),crs=4326) + +gnaura.dropna(how='all',inplace=True,axis=1) +gncen38.dropna(how='all',inplace=True,axis=1) + +# Suppression des données CEN38 dans gnaura +lstdrop = gnaura[gnaura.uuid_perm_sinp.isin(gncen38.uuid_perm_sinp)].index +gnaura.drop(lstdrop,inplace=True) + +# Completion phylogenie BIODIVAURA +sql = """ + SELECT + t.cd_ref, + t.regne, + -- t.phylum, + -- t.classe, + -- t.ordre, + -- t.famille, + t.group1_inpn, + t.group2_inpn, + --t.nom_vern, + --t.nom_complet, + --t.nom_valide, + --t.lb_nom, + --s.* + --s.rq_statut, + --s.code_statut, + --s.cd_type_statut, + --s.label_statut, + --s.full_citation, + --s.doc_url + t.group3_inpn + FROM taxonomie.taxref t + --JOIN taxonomie.v_bdc_status s USING (cd_nom) + WHERE t.cd_ref IN {cd_nom} +;""".format(cd_nom = tuple(gnaura.cd_ref.unique())) +phylo = gpd.pd.read_sql_query(sql,con_gn) +gnaura = gnaura.merge(phylo,how='left',left_on='cd_ref',right_on='cd_ref',copy=False) +# Suppression des données polygones dans gnaura +# gnaura = gnaura[~gnaura.geojson_4326.str.contains('polygon',case=False,na=False)] + +# Compilation des données +compil = gpd.pd.concat([gncen38,gnaura]) +aura_imprecise = compil[compil.geojson_4326.str.contains('polygon',case=False,na=False)].copy() +compilF = compil[~compil.geojson_4326.str.contains('polygon',case=False,na=False)].copy() +compilF.to_csv(PATH+'compile_38&AURA_synthese_observations_2025-06-16.csv',sep=';',index=False) +compilF.to_crs(2154).to_file(PATH+'compile_38&AURA_synthese_observations.geojson') + +# Ecriture des données imprécises +geom = [shape(json.loads(i)) for i in aura_imprecise.geojson_4326] +gdf_imprecis = gpd.GeoDataFrame(aura_imprecise,geometry=geom,crs=4326) +aura_imprecise.to_csv(PATH+'AURA_synthese_observations_imprecise_2025-06-16.csv',sep=';',index=False) +gdf_imprecis.to_crs(2154).to_file(PATH+'AURA_synthese_observations_imprecise.geojson') + +# Génération du fichier liste_sp +liste_sp = compilF[['cd_ref','date_debut','date_fin','nom_valide','nom_vernaculaire','regne','group1_inpn','group2_inpn','group3_inpn','classe','ordre','famille','nombre_min','nombre_max','observateurs','fournisseur','communes','x_centroid_4326','y_centroid_4326']].copy() +liste_sp.sort_values(by=['cd_ref','date_debut'],inplace=True) +liste_sp.drop_duplicates(subset='cd_ref',keep='last',inplace=True) +liste_sp.to_excel(PATH+'liste_sp_AVAL.xlsx',index=False,sheet_name='liste_sp') + +# intersection des sites +gdf = gpd.read_file(PATH+'AVAL_ZO_Zone tampon_600m.gpkg')[['nom_ens','geometry']] +dfF = (compilF.to_crs(2154).sjoin(gdf, how='left') + .drop(columns=['geometry','index_right',"Unnamed: 0"],errors='ignore') + ) +dfF = dfF[[ + 'nom_ens','id_synthese', 'date_debut', 'date_fin', 'heure_debut', + 'heure_fin', 'cd_nom', 'cd_ref', 'nom_valide', 'nom_vernaculaire', + 'nom_cite', 'regne', 'group1_inpn', 'group2_inpn', 'group3_inpn', + 'classe', 'ordre', 'famille', 'rang_taxo', 'nombre_min', 'nombre_max', + 'alti_min', 'alti_max', 'observateurs', 'determinateur', 'communes', + 'geometrie_wkt_4326', 'x_centroid_4326', 'y_centroid_4326', 'nom_lieu', + 'comment_releve', 'comment_occurrence', #'validateur', + 'niveau_validation', 'jdd_nom', 'jdd_uuid', 'jdd_id', 'ca_nom', + 'ca_uuid', 'ca_id', 'precision_geographique', 'nature_objet_geo', + 'type_regroupement', 'technique_observation', 'biologique_statut', + 'etat_biologique', 'biogeographique_statut', 'naturalite', + 'preuve_existante', 'stade_vie', 'sexe', #'niveau_precision_diffusion', + 'objet_denombrement', 'type_denombrement', 'niveau_sensibilite', + 'statut_observation', 'floutage_dee', 'statut_source', 'type_info_geo', + 'methode_determination', 'comportement', 'id_origine', 'uuid_perm_sinp', + 'uuid_perm_grp_sinp', 'date_creation', 'date_modification', + 'champs_additionnels', 'fournisseur', 'geojson_4326', + 'statut_biologique', 'type_source', 'type_precision', + 'sensibilite', 'confidentialite' +]] +dfF.rename(columns={'nom':'nom_site'},inplace=True) +dfF.to_csv(PATH+'compile_38&AURA_synthese_observations_2025-06-16.csv', sep=";") \ No newline at end of file