Commit e8699eaa authored by Lionel's avatar Lionel
Browse files

Génération geojson pour region, dep et epci

parent a579da3e
import geopandas
import pandas
def calculer_cartes(
chemin_fichier_contours_regions,
chemin_fichier_contours_departements,
chemin_fichier_contours_epcis,
chemin_fichier_production_besoins,
chemin_fichier_pratiques_agricoles,
chemin_fichier_population_agricole,
chemin_fichier_politique_fonciere,
dossier_resultat):
df_production_besoins = pandas.read_csv(chemin_fichier_production_besoins, sep=";")
df_pratiques_agricoles = pandas.read_csv(chemin_fichier_pratiques_agricoles, sep=";")
df_population_agricole = pandas.read_csv(chemin_fichier_population_agricole, sep=";")
df_politique_fonciere = pandas.read_csv(chemin_fichier_politique_fonciere, sep=";")
_calculer_carte_regions(chemin_fichier_contours_regions,
dossier_resultat / 'regions-crater.geojson',
df_production_besoins,
df_pratiques_agricoles,
df_population_agricole,
df_politique_fonciere)
_calculer_carte_departements(chemin_fichier_contours_departements,
dossier_resultat / 'departements-crater.geojson',
df_production_besoins,
df_pratiques_agricoles,
df_population_agricole,
df_politique_fonciere
)
_calculer_carte_epcis(chemin_fichier_contours_epcis,
dossier_resultat / 'epcis-crater.geojson',
df_production_besoins,
df_pratiques_agricoles,
df_population_agricole,
df_politique_fonciere
)
def _calculer_carte_regions(chemin_fichier_contours_regions,
chemin_fichier_resultat_regions,
df_production_besoins,
df_pratiques_agricoles,
df_population_agricole,
df_politique_fonciere
):
regions_gdf = geopandas.read_file(chemin_fichier_contours_regions)
regions_gdf['id_territoire'] = 'R-' + regions_gdf['code']
regions_gdf = regions_gdf.loc[:, ['id_territoire', 'geometry']]
regions_gdf = _ajouter_notes_et_messages_tous_axes('REGION',
regions_gdf,
df_production_besoins,
df_pratiques_agricoles,
df_population_agricole,
df_politique_fonciere
)
regions_gdf.to_file(chemin_fichier_resultat_regions, driver="GeoJSON")
def _calculer_carte_departements(chemin_fichier_contours_departements,
chemin_fichier_resultat_departements,
df_production_besoins,
df_pratiques_agricoles,
df_population_agricole,
df_politique_fonciere
):
departements_gdf = geopandas.read_file(chemin_fichier_contours_departements)
departements_gdf['id_territoire'] = 'D-' + departements_gdf['code']
departements_gdf = departements_gdf.loc[:, ['id_territoire', 'geometry']]
departements_gdf = _ajouter_notes_et_messages_tous_axes('DEPARTEMENT',
departements_gdf,
df_production_besoins,
df_pratiques_agricoles,
df_population_agricole,
df_politique_fonciere
)
departements_gdf.to_file(chemin_fichier_resultat_departements,
driver="GeoJSON")
def _calculer_carte_epcis(chemin_fichier_contours_epcis,
chemin_fichier_resultat_epcis,
df_production_besoins,
df_pratiques_agricoles,
df_population_agricole,
df_politique_fonciere
):
epcis_gdf = geopandas.read_file(
chemin_fichier_contours_epcis)
epcis_gdf = epcis_gdf.astype({'SIREN': 'int32'})
epcis_gdf['id_territoire'] = 'E-' + epcis_gdf['SIREN'].map(str)
epcis_gdf = epcis_gdf.loc[:, ['id_territoire', 'geometry']]
epcis_gdf = _ajouter_notes_et_messages_tous_axes('EPCI',
epcis_gdf,
df_production_besoins,
df_pratiques_agricoles,
df_population_agricole,
df_politique_fonciere
)
epcis_gdf = epcis_gdf.to_crs(epsg=4326)
epcis_gdf.to_file(chemin_fichier_resultat_epcis, driver="GeoJSON")
def _ajouter_notes_et_messages_tous_axes(categorie_territoire,
gdf_resultat,
df_production_besoins,
df_pratiques_agricoles,
df_population_agricole,
df_politique_fonciere):
df_production_besoins_categorie = df_production_besoins[
df_production_besoins['categorie_territoire'] == categorie_territoire]
df_production_besoins_categorie = df_production_besoins_categorie.loc[:,
['id_territoire', 'categorie_territoire', 'nom_territoire',
'note_production_besoins',
'message_production_besoins']]
gdf_resultat = gdf_resultat.merge(df_production_besoins_categorie, on='id_territoire')
df_pratiques_agricoles_categorie = df_pratiques_agricoles[
df_pratiques_agricoles['categorie_territoire'] == categorie_territoire]
df_pratiques_agricoles_categorie = (
df_pratiques_agricoles_categorie.loc[:, ['id_territoire', 'synthese_note', 'synthese_message']]
.rename(columns={'synthese_note': 'note_pratiques_agricoles',
'synthese_message': 'message_pratiques_agricoles'})
)
gdf_resultat = gdf_resultat.merge(df_pratiques_agricoles_categorie, on='id_territoire')
df_population_agricole_categorie = df_population_agricole[
df_pratiques_agricoles['categorie_territoire'] == categorie_territoire]
df_population_agricole_categorie = (
df_population_agricole_categorie.loc[:, ['id_territoire', 'synthese_note', 'synthese_message']]
.rename(columns={'synthese_note': 'note_population_agricole',
'synthese_message': 'message_population_agricole'})
)
gdf_resultat = gdf_resultat.merge(df_population_agricole_categorie, on='id_territoire')
df_politique_fonciere_categorie = df_politique_fonciere[
df_politique_fonciere['categorie_territoire'] == categorie_territoire]
df_politique_fonciere_categorie = (
df_politique_fonciere_categorie.loc[:, ['id_territoire', 'synthese_note', 'synthese_message']]
.rename(columns={'synthese_note': 'note_politique_fonciere',
'synthese_message': 'message_politique_fonciere'})
)
gdf_resultat = gdf_resultat.merge(df_politique_fonciere_categorie, on='id_territoire')
return gdf_resultat
......@@ -2,6 +2,7 @@ import argparse
import crater.politique_fonciere.calculateur as calculateur_politique_fonciere
import crater.population_agricole.calculateur as calculateur_population_agricole
from crater.cartographie.calculateur_cartographie import calculer_cartes
from crater.crater_logger import log
from crater.outils import reinitialiser_dossier
from crater.parcel import collecteur_besoins_api_parcel
......@@ -225,6 +226,21 @@ def lancer_calcul_production_besoins():
)
def lancer_calcul_cartes():
reinitialiser_dossier(CHEMIN_OUTPUT_DATA / 'crater_geojson')
calculer_cartes(
CHEMIN_CRATER_DATA_SOURCES / 'france_geojson' / 'regions.geojson',
CHEMIN_CRATER_DATA_SOURCES / 'france_geojson' / 'departements.geojson',
CHEMIN_CRATER_DATA_SOURCES / 'banatic' / 'epci_sig' / '2020' / 'Epci2020_region.shp',
CHEMIN_OUTPUT_DATA / DOSSIER_PRODUCTION_BESOINS / 'production_besoins.csv',
CHEMIN_OUTPUT_DATA / DOSSIER_PRATIQUES_AGRICOLES / 'pratiques_agricoles.csv',
CHEMIN_OUTPUT_DATA / DOSSIER_POPULATION_AGRICOLE / 'synthese.csv',
CHEMIN_OUTPUT_DATA / DOSSIER_POLITIQUE_FONCIERE / 'synthese.csv',
CHEMIN_OUTPUT_DATA / 'crater_geojson'
)
if __name__ == '__main__':
parser = argparse.ArgumentParser()
parser = argparse.ArgumentParser(usage='%(prog)s ETAPE [options]\n'
......@@ -315,5 +331,8 @@ if __name__ == '__main__':
elif (args.ETAPE == 'population-agricole'):
print("Génération des fichiers résultats CRATER pour l'axe population agricole")
lancer_calcul_population_agricole()
elif (args.ETAPE == 'cartes'):
print("Génération des fichiers résultats CRATER pour les cartes")
lancer_calcul_cartes()
else:
parser.print_help()
import unittest
from pathlib import Path
import geopandas
import pandas
from crater.cartographie.calculateur_cartographie import calculer_cartes
from crater.outils import reinitialiser_dossier
from crater.reglages import DOSSIER_PRODUCTION_BESOINS, DOSSIER_PRATIQUES_AGRICOLES, DOSSIER_POPULATION_AGRICOLE, \
DOSSIER_POLITIQUE_FONCIERE
CHEMIN_DONNEES_SOURCES = Path('../../crater-data-sources')
CHEMIN_DONNEES_RESULTATS = Path('../../crater-data-resultats')
class TestCartographie(unittest.TestCase):
def test_generation_geojson(self):
# TODO => ajouter TU
reinitialiser_dossier(CHEMIN_DONNEES_RESULTATS / 'crater_geojson')
calculer_cartes(
CHEMIN_DONNEES_SOURCES / 'france_geojson' / 'regions.geojson',
CHEMIN_DONNEES_SOURCES / 'france_geojson' / 'departements.geojson',
CHEMIN_DONNEES_SOURCES / 'banatic' / 'epci_sig' / '2020' / 'Epci2020_region.shp',
CHEMIN_DONNEES_RESULTATS / DOSSIER_PRODUCTION_BESOINS / 'production_besoins.csv',
CHEMIN_DONNEES_RESULTATS / DOSSIER_PRATIQUES_AGRICOLES / 'pratiques_agricoles.csv',
CHEMIN_DONNEES_RESULTATS / DOSSIER_POPULATION_AGRICOLE / 'synthese.csv',
CHEMIN_DONNEES_RESULTATS / DOSSIER_POLITIQUE_FONCIERE / 'synthese.csv',
CHEMIN_DONNEES_RESULTATS / 'crater_geojson'
)
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment