Skip to content

Commit

Permalink
Replace commune Entry by custom geo Entry
Browse files Browse the repository at this point in the history
  • Loading branch information
gildeluermoz committed Jan 7, 2022
1 parent 08b884e commit 7fa556f
Show file tree
Hide file tree
Showing 63 changed files with 367 additions and 388 deletions.
8 changes: 4 additions & 4 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -40,10 +40,10 @@ atlas/static/custom/templates/credits.html
atlas/static/custom/templates/mentions-legales.html

data/ref/emprise_territoire.*
data/ref/communes.dbf
data/ref/communes.prj
data/ref/communes.shp
data/ref/communes.shx
data/ref/geo_entry.dbf
data/ref/geo_entry.prj
data/ref/geo_entry.shp
data/ref/geo_entry.shx

data/ref/territoire.dbf
data/ref/territoire.prj
Expand Down
2 changes: 1 addition & 1 deletion README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ Atlas WEB dynamique Faune-Flore basé sur les données présentes dans la synth

Utilisé pour Biodiv'Ecrins, l'atlas de faune et de la flore du Parc national des Ecrins (http://biodiversite.ecrins-parcnational.fr).

Il permet de générer dynamiquement des fiches espèces avec des données calculées automatiquement (cartes de répartition, répartition altitudinale et phénologique, communes, secteurs, observateurs...) ainsi que des données saisies pour chaque espèce (photos, description...).
Il permet de générer dynamiquement des fiches espèces avec des données calculées automatiquement (cartes de répartition, répartition altitudinale et phénologique, entrée géographique, secteurs, observateurs...) ainsi que des données saisies pour chaque espèce (photos, description...).

L'outil a été développé de manière générique pour pouvoir être déployé sur d'autres BDD que GeoNature (SERENA, SICEN, INPN, fichier CSV, etc).

Expand Down
24 changes: 12 additions & 12 deletions atlas/atlasAPI.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
vmObservationsRepository,
vmObservationsMaillesRepository,
vmMedias,
vmCommunesRepository,
vmGeoEntryRepository
)

api = Blueprint("api", __name__)
Expand All @@ -24,12 +24,12 @@ def searchTaxonAPI():
return jsonify(results)


@api.route("/searchCommune", methods=["GET"])
def searchCommuneAPI():
@api.route("/searchGeoEntry", methods=["GET"])
def searchGeoEntryAPI():
session = utils.loadSession()
search = request.args.get("search", "")
limit = request.args.get("limit", 50)
results = vmCommunesRepository.getCommunesSearch(session, search, limit)
results = vmGeoEntryRepository.getGeoEntrySearch(session, search, limit)
session.close()
return jsonify(results)

Expand Down Expand Up @@ -104,21 +104,21 @@ def getObservationsGenericApi(cd_ref: int):


if not current_app.config['AFFICHAGE_MAILLE']:
@api.route("/observations/<insee>/<int:cd_ref>", methods=["GET"])
def getObservationsCommuneTaxonAPI(insee, cd_ref):
@api.route("/observations/<geo_entry_id>/<int:cd_ref>", methods=["GET"])
def getObservationsGeoEntryTaxonAPI(geo_entry_id, cd_ref):
connection = utils.engine.connect()
observations = vmObservationsRepository.getObservationTaxonCommune(
connection, insee, cd_ref
observations = vmObservationsRepository.getObservationTaxonGeoEntry(
connection, geo_entry_id, cd_ref
)
connection.close()
return jsonify(observations)


@api.route("/observationsMaille/<insee>/<int:cd_ref>", methods=["GET"])
def getObservationsCommuneTaxonMailleAPI(insee, cd_ref):
@api.route("/observationsMaille/<geo_entry_id>/<int:cd_ref>", methods=["GET"])
def getObservationsGeoEntryTaxonMailleAPI(geo_entry_id, cd_ref):
connection = utils.engine.connect()
observations = vmObservationsMaillesRepository.getObservationsTaxonCommuneMaille(
connection, insee, cd_ref
observations = vmObservationsMaillesRepository.getObservationsTaxonGeoEntryMaille(
connection, geo_entry_id, cd_ref
)
connection.close()
return jsonify(observations)
Expand Down
44 changes: 22 additions & 22 deletions atlas/atlasRoutes.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,15 +18,15 @@

from atlas import utils
from atlas.env import config
from atlas.modeles.entities import vmTaxons, vmCommunes
from atlas.modeles.entities import vmTaxons, vmGeoEntry
from atlas.modeles.repositories import (
vmOrganismsRepository,
vmTaxonsRepository,
vmObservationsRepository,
vmAltitudesRepository,
vmMoisRepository,
vmTaxrefRepository,
vmCommunesRepository,
vmGeoEntryRepository,
vmObservationsMaillesRepository,
vmMedias,
vmCorTaxonAttribut,
Expand Down Expand Up @@ -123,10 +123,10 @@ def ficheOrganism(id_organism):


@main.route(
"/commune/" + current_app.config["REMOTE_MEDIAS_PATH"] + "<image>",
"/geoentry/" + current_app.config["REMOTE_MEDIAS_PATH"] + "<image>",
methods=["GET", "POST"],
)
def communeMedias(image):
def geoentryMedias(image):
return redirect(
current_app.config["REMOTE_MEDIAS_URL"]
+ current_app.config["REMOTE_MEDIAS_PATH"]
Expand Down Expand Up @@ -239,7 +239,7 @@ def ficheEspece(cd_ref):
altitudes = vmAltitudesRepository.getAltitudesChilds(connection, cd_ref)
months = vmMoisRepository.getMonthlyObservationsChilds(connection, cd_ref)
synonyme = vmTaxrefRepository.getSynonymy(connection, cd_ref)
communes = vmCommunesRepository.getCommunesObservationsChilds(connection, cd_ref)
geoentries = vmGeoEntryRepository.getGeoEntryObservationsChilds(connection, cd_ref)
taxonomyHierarchy = vmTaxrefRepository.getAllTaxonomy(db_session, cd_ref)
firstPhoto = vmMedias.getFirstPhoto(
connection, cd_ref, current_app.config["ATTR_MAIN_PHOTO"]
Expand Down Expand Up @@ -286,7 +286,7 @@ def ficheEspece(cd_ref):
altitudes=altitudes,
months=months,
synonyme=synonyme,
communes=communes,
geoentries=geoentries,
taxonomyHierarchy=taxonomyHierarchy,
firstPhoto=firstPhoto,
photoCarousel=photoCarousel,
Expand All @@ -298,39 +298,39 @@ def ficheEspece(cd_ref):
)


@main.route("/commune/<insee>", methods=["GET", "POST"])
def ficheCommune(insee):
@main.route("/geoentry/<geo_entry_id>", methods=["GET", "POST"])
def ficheGeoEntry(geo_entry_id):
session = utils.loadSession()
connection = utils.engine.connect()

listTaxons = vmTaxonsRepository.getTaxonsCommunes(connection, insee)
commune = vmCommunesRepository.getCommuneFromInsee(connection, insee)
listTaxons = vmTaxonsRepository.getTaxonsGeoEntry(connection, geo_entry_id)
geoentry = vmGeoEntryRepository.getGeoEntryFromId(connection, geo_entry_id)
if current_app.config["AFFICHAGE_MAILLE"]:
observations = vmObservationsMaillesRepository.lastObservationsCommuneMaille(
connection, current_app.config["NB_LAST_OBS"], str(insee)
observations = vmObservationsMaillesRepository.astObservationsGeoEntryMaille(
connection, current_app.config["NB_LAST_OBS"], str(geo_entry_id)
)
else:
observations = vmObservationsRepository.lastObservationsCommune(
connection, current_app.config["NB_LAST_OBS"], insee
observations = vmObservationsRepository.lastObservationsGeoEntry(
connection, current_app.config["NB_LAST_OBS"], geo_entry_id
)

surroundingAreas = []

observers = vmObservationsRepository.getObserversCommunes(connection, insee)
observers = vmObservationsRepository.getObserversGeoEntry(connection, geo_entry_id)

session.close()
connection.close()

return render_template(
"templates/areaSheet/_main.html",
sheetType="commune",
sheetType="geoentry",
surroundingAreas=surroundingAreas,
listTaxons=listTaxons,
areaInfos=commune,
areaInfos=geoentry,
observations=observations,
observers=observers,
DISPLAY_EYE_ON_LIST=True,
insee=insee,
geo_entry_id=geo_entry_id,
)


Expand Down Expand Up @@ -431,11 +431,11 @@ def sitemap():
modified_time = ten_days_ago
pages.append([url, modified_time])

municipalities = (
session.query(vmCommunes.VmCommunes).order_by(vmCommunes.VmCommunes.insee).all()
geoentries = (
session.query(vmGeoEntry.VmGeoEntry).order_by(vmGeoEntry.VmGeoEntry.geo_entry_id).all()
)
for municipalitie in municipalities:
url = url_root + url_for("main.ficheCommune", insee=municipalitie.insee)
for geoentrie in geoentries:
url = url_root + url_for("main.ficheGeoEntry", geo_entry_id=geoentrie.geo_entry_id)
modified_time = ten_days_ago
pages.append([url, modified_time])

Expand Down
2 changes: 1 addition & 1 deletion atlas/configuration/config.py.example
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,7 @@ NB_DAY_LAST_OBS = '7'
# Texte à afficher pour décrire la cartographie des 'dernières observations'
TEXT_LAST_OBS = 'Les observations des agents ces 7 derniers jours |'

# Carte de la fiche commune : nombre des 'x' dernières observations affichées
# Carte de la fiche de l'entrée géographique : nombre des 'x' dernières observations affichées
NB_LAST_OBS=100

###########################
Expand Down
6 changes: 6 additions & 0 deletions atlas/configuration/config.py.sample
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,12 @@ STRUCTURE = "Nom de la structure"
# Nom de l'application
NOM_APPLICATION = "Nom de l application"

# Code de l'entrée geographique principale dans 'ref_geo.bib_area_type'
MAIN_GEO_ENTRY_CODE = "COM"

# Intitulé de l'entrée géographique principale
MAIN_GEO_ENTRY_NAME = "commune"

# URL de l'application depuis la racine du domaine
# ex "/atlas" pour une URL: http://mon-domaine/atlas OU "" si l'application est accessible à la racine du domaine
URL_APPLICATION = ""
Expand Down
1 change: 1 addition & 0 deletions atlas/configuration/config_schema.py
Original file line number Diff line number Diff line change
Expand Up @@ -136,6 +136,7 @@ class Meta:
AFFICHAGE_RANG_STAT = fields.Boolean(load_default=True)
AFFICHAGE_NOUVELLES_ESPECES = fields.Boolean(load_default=True)
AFFICHAGE_RECHERCHE_AVANCEE = fields.Boolean(load_default=False)
MAIN_GEO_ENTRY_NAME = fields.String(load_default="geoentry")

RANG_STAT = fields.List(
fields.Dict,
Expand Down
20 changes: 12 additions & 8 deletions atlas/configuration/settings.ini.sample
Original file line number Diff line number Diff line change
Expand Up @@ -76,22 +76,26 @@ atlas_source_pass=monpassachanger
# Voir la colonne type_code de la table ref_geo.bib_areas_type
# Indiquer le code des entités géographiques du ref_geo qui correspondent respectivement aux mailles et aux limites de votre territoire
# Les données doivent préalablement être présentes dans le ref_geo
# type_code de l'entrée geographique principale (permet de consulter les observations pour chacune des entités géeographique : par ex : par commune)
type_geo_entry="'COM'"
# type code pour l'affichage des observations par maille
type_maille="'M1'"
# type code correspondant à votre territoire
type_territoire="'PEC'"

########### Si ref_geo = False #############

#### COMMUNES ####
#### ENTREE GEOGRAPHIQUE ####

# Creer la table des communes à partir d'un shapefile ?
# Si false, modifiez la creation de 'atlas.vm_communes' dans data/atlas/atlas.vm_communes.sql
import_commune_shp=true
# Creer la table de l'entrée geographique à partir d'un shapefile ?
# Si false, modifiez la creation de 'atlas.vm_geo_entry' dans data/gn2/atlas_ref_geo.sql
import_geo_entry_shp=true

# Chemin et nom des colonnes du SHP des communes du territoire. Laisser tel quel (en modifiant uniquement MYUSERLINUX)
# Chemin et nom des colonnes du SHP de l'entrée géographique. Laisser tel quel (en modifiant uniquement MYUSERLINUX)
# pour utiliser les communes du PnEcrins par défaut
communes_shp=/home/`whoami`/atlas/data/ref/communes.shp
colonne_insee=insee
colonne_nom_commune=nom_com
geo_entry_shp=/home/`whoami`/atlas/data/ref/geo_entry.shp
id_column=geo_entry_id
name_column=geo_entry_name

#### TERRITOIRE ####

Expand Down
6 changes: 3 additions & 3 deletions atlas/messages.pot
Original file line number Diff line number Diff line change
Expand Up @@ -207,7 +207,7 @@ msgid "search.species"
msgstr ""

#: templates/core/navbar.html:47 templates/home/globalStats.html:47
msgid "search.city"
msgid "search.geo"
msgstr ""

#: templates/core/sideBar.html:3
Expand Down Expand Up @@ -279,13 +279,13 @@ msgstr ""
#: templates/home/globalStats.html:39 templates/speciesSheet/map.html:20
#: templates/speciesSheet/otherInformations.html:10
#: templates/speciesSheet/otherInformations.html:14
msgid "municipalities"
msgid "geoentries"
msgstr ""

#: templates/home/globalStats.html:39 templates/speciesSheet/map.html:20
#: templates/speciesSheet/otherInformations.html:10
#: templates/speciesSheet/otherInformations.html:14
msgid "municipality"
msgid "geoentry"
msgstr ""

#: templates/home/globalStats.html:58
Expand Down
17 changes: 0 additions & 17 deletions atlas/modeles/entities/tCommunes.py

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,11 @@
Base = declarative_base()


class VmCommunes(Base):
class VmGeoEntry(Base):
__table__ = Table(
'vm_communes', metadata,
Column('insee', String(5), primary_key=True, unique=True),
Column('commune_maj', String(50)),
# Column('commune_min', String(50)),
'vm_geo_entry', metadata,
Column('geo_entry_id', String(255), primary_key=True, unique=True),
Column('geo_entry_name', String(50)),
Column('the_geom', Geometry(u'MULTIPOLYGON', 2154), index=True),
schema='atlas', autoload=True, autoload_with=engine
)
2 changes: 1 addition & 1 deletion atlas/modeles/entities/vmObservations.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ class VmObservations(Base):
"vm_observations",
metadata,
Column("id_observation", Integer, primary_key=True, unique=True),
Column("insee", String(5), index=True),
Column("geo_entry_id", String(255), index=True),
Column("dateobs", Date, index=True),
Column("observateurs", String(255)),
Column("altitude_retenue", Integer, index=True),
Expand Down
10 changes: 5 additions & 5 deletions atlas/modeles/repositories/tCommunesRepository.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,15 @@
from sqlalchemy.sql import text


def getCommunesObservationsChilds(connection, cd_ref):
def getGeoEntryObservationsChilds(connection, cd_ref):
sql = """
SELECT DISTINCT(com.insee) AS insee, com.commune_maj
FROM layers.l_communes com
JOIN atlas.vm_observations obs ON obs.insee = com.insee
SELECT DISTINCT(e.geo_entry_id) AS geo_entry_id, e.geo_entry_name
FROM layers.vm_geo_entry e
JOIN atlas.vm_observations obs ON obs.geo_entry_id = e.geo_entry_id
WHERE obs.cd_ref IN (
SELECT * FROM atlas.find_all_taxons_childs(:thiscdref)
) OR obs.cd_ref = :thiscdref
GROUP BY com.commune_maj, com.insee
GROUP BY e.geo_entry_name, e.geo_entry_id
""".encode('UTF-8')

return connection.execute(text(sql), thiscdref=cd_ref)
Loading

1 comment on commit 7fa556f

@camillemonchicourt
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Je pense que le terme "entrée géographique" n'est pas très compréhensible et intuitif.
J'aurai privilégié "zonage géographique" (GeoZoning).

Please sign in to comment.