|
5 | 5 |
|
6 | 6 | from atlas.modeles.entities.vmObservations import VmObservationsMailles
|
7 | 7 | from atlas.modeles.entities.vmAreas import VmAreas
|
| 8 | +from atlas.modeles.entities.tMaillesTerritoire import TMaillesTerritoire |
| 9 | +from atlas.modeles.entities.vmTaxons import VmTaxons |
8 | 10 | from atlas.modeles.utils import deleteAccent, findPath
|
9 | 11 |
|
10 | 12 |
|
| 13 | +def getObservationsMaillesTerritorySpecies(session, cd_ref): |
| 14 | + """ |
| 15 | + Retourne les mailles et le nombre d'observation par maille pour un taxon et ses enfants |
| 16 | + sous forme d'un geojson |
| 17 | + """ |
| 18 | + query = func.atlas.find_all_taxons_childs(cd_ref) |
| 19 | + taxons_ids = session.scalars(query).all() |
| 20 | + taxons_ids.append(cd_ref) |
| 21 | + |
| 22 | + query = ( |
| 23 | + session.query( |
| 24 | + VmObservationsMailles.id_maille, |
| 25 | + TMaillesTerritoire.geojson_maille, |
| 26 | + func.max(VmObservationsMailles.annee).label("last_obs_year"), |
| 27 | + func.sum(VmObservationsMailles.nbr).label("obs_nbr"), |
| 28 | + VmObservationsMailles.type_code, |
| 29 | + VmTaxons.cd_ref, |
| 30 | + VmTaxons.nom_vern, |
| 31 | + VmTaxons.lb_nom, |
| 32 | + ) |
| 33 | + .join( |
| 34 | + TMaillesTerritoire, |
| 35 | + TMaillesTerritoire.id_maille == VmObservationsMailles.id_maille, |
| 36 | + ) |
| 37 | + .join( |
| 38 | + VmTaxons, |
| 39 | + VmTaxons.cd_ref == VmObservationsMailles.cd_ref, |
| 40 | + ) |
| 41 | + .filter(VmObservationsMailles.cd_ref == any_(taxons_ids)) |
| 42 | + .group_by( |
| 43 | + VmObservationsMailles.id_maille, |
| 44 | + TMaillesTerritoire.geojson_maille, |
| 45 | + VmObservationsMailles.type_code, |
| 46 | + VmTaxons.cd_ref, |
| 47 | + VmTaxons.nom_vern, |
| 48 | + VmTaxons.lb_nom, |
| 49 | + ) |
| 50 | + ) |
| 51 | + |
| 52 | + return FeatureCollection( |
| 53 | + [ |
| 54 | + Feature( |
| 55 | + id=o.id_maille, |
| 56 | + geojson_maille=json.loads(o.geojson_maille), |
| 57 | + id_maille=o.id_maille, |
| 58 | + type_code=o.type_code, |
| 59 | + nb_observations=int(o.obs_nbr), |
| 60 | + last_observation=o.last_obs_year, |
| 61 | + cd_ref=o.cd_ref, |
| 62 | + taxon=format_taxon_name(o), |
| 63 | + ) |
| 64 | + for o in query.all() |
| 65 | + ] |
| 66 | + ) |
| 67 | + |
| 68 | + |
11 | 69 | def format_taxon_name(observation):
|
12 | 70 | if observation.nom_vern:
|
13 | 71 | inter = observation.nom_vern.split(",")
|
@@ -65,6 +123,46 @@ def getObservationsMaillesChilds(session, cd_ref, year_min=None, year_max=None):
|
65 | 123 | )
|
66 | 124 |
|
67 | 125 |
|
| 126 | +def territoryObservationsMailles(connection): |
| 127 | + sql = """ |
| 128 | +SELECT obs.cd_ref, obs.id_maille, obs.nbr, obs.type_code, |
| 129 | + tax.lb_nom, tax.nom_vern, tax.group2_inpn, |
| 130 | + medias.url, medias.chemin, medias.id_media, |
| 131 | + st_asgeojson(m.geojson_maille) AS geom |
| 132 | +FROM atlas.vm_observations_mailles obs |
| 133 | + JOIN atlas.vm_taxons tax ON tax.cd_ref = obs.cd_ref |
| 134 | + JOIN atlas.t_mailles_territoire m ON m.id_maille=obs.id_maille |
| 135 | + LEFT JOIN atlas.vm_medias medias |
| 136 | + ON medias.cd_ref = obs.cd_ref AND medias.id_type = 1 |
| 137 | +GROUP BY obs.cd_ref, obs.id_maille, obs.nbr, |
| 138 | + tax.lb_nom, tax.nom_vern, tax.group2_inpn, |
| 139 | + medias.url, medias.chemin, medias.id_media, |
| 140 | + m.geojson_maille, |
| 141 | + obs.type_code |
| 142 | + """ |
| 143 | + |
| 144 | + observations = connection.execute(text(sql)) |
| 145 | + obsList = list() |
| 146 | + for o in observations: |
| 147 | + if o.nom_vern: |
| 148 | + inter = o.nom_vern.split(",") |
| 149 | + taxon = inter[0] + " | <i>" + o.lb_nom + "</i>" |
| 150 | + else: |
| 151 | + taxon = "<i>" + o.lb_nom + "</i>" |
| 152 | + temp = { |
| 153 | + "id_maille": o.id_maille, |
| 154 | + "type_code": o.type_code, |
| 155 | + "cd_ref": o.cd_ref, |
| 156 | + "nb_observations": o.nbr, |
| 157 | + "taxon": taxon, |
| 158 | + "geojson_maille": json.loads(o.geom), |
| 159 | + "group2_inpn": deleteAccent(o.group2_inpn), |
| 160 | + "pathImg": findPath(o), |
| 161 | + } |
| 162 | + obsList.append(temp) |
| 163 | + return obsList |
| 164 | + |
| 165 | + |
68 | 166 | # last observation for index.html
|
69 | 167 | def lastObservationsMailles(connection, mylimit, idPhoto):
|
70 | 168 | sql = """
|
|
0 commit comments