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=";")