Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions main/atlasAPI.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,12 @@ def getObservationsMailleAPI(cd_ref):
connection.close()
return Response(json.dumps(observations), mimetype='application/json')

@api.route('/observationsMailleLastObs/<int:cd_ref>',methods=['GET'])
def getObservationsMailleLastObsAPI(cd_ref):
connection = utils.engine.connect()
observations = vmObservationsMaillesRepository.getObservationsMaillesLastObsChilds(connection, cd_ref)
connection.close()
return Response(json.dumps(observations), mimetype='application/json')

@api.route('/observationsPoint/<int:cd_ref>', methods=['GET'])
def getObservationsPointAPI(cd_ref):
Expand Down
1 change: 1 addition & 0 deletions main/atlasRoutes.py
Original file line number Diff line number Diff line change
Expand Up @@ -160,6 +160,7 @@ def ficheEspece(cd_ref):
'PROTECTION': config.PROTECTION,
'GLOSSAIRE': config.GLOSSAIRE,
'AFFICHAGE_MAILLE': config.AFFICHAGE_MAILLE,
'TYPE_MAILLE': config.TYPE_MAILLE,
'ZOOM_LEVEL_POINT': config.ZOOM_LEVEL_POINT,
'LIMIT_CLUSTER_POINT': config.LIMIT_CLUSTER_POINT,
'FICHE_ESPECE': True,
Expand Down
3 changes: 3 additions & 0 deletions main/configuration/config.py.sample
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,9 @@ MAP = {
# True = maille / False = point
AFFICHAGE_MAILLE = False

#Couleur selon la dernière obs (<5 ans, 5 à 10 ans, +10 ans) "last obs" ou le nombre d'obs "nb obs"
TYPE_MAILLE = 'nb obs'

# Niveau de zoom à partir duquel on passe à l'affichage en point (si AFFICHAGE_MAILLE = False)
ZOOM_LEVEL_POINT = 11

Expand Down
32 changes: 32 additions & 0 deletions main/modeles/repositories/vmObservationsMaillesRepository.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,38 @@ def getObservationsMaillesChilds(connection, cd_ref):
tabObs.append(temp)
return tabObs

#Maille avec date de derniere obs seulement
def getObservationsMaillesLastObsChilds(connection, cd_ref):
sql = """
SELECT
obs.id_maille,
obs.geojson_maille,
max(date_part('year', o.dateobs)) as lastyear,
count(*) as nb_obs
FROM atlas.vm_observations_mailles obs
JOIN atlas.vm_observations o ON o.id_observation = obs.id_observation
WHERE obs.cd_ref in (
SELECT * FROM atlas.find_all_taxons_childs(:thiscdref)
)
OR obs.cd_ref = :thiscdref
GROUP BY obs.id_maille, obs.geojson_maille
ORDER BY id_maille"""
observations = connection.execute(text(sql), thiscdref=cd_ref)
tabObs = list()
for o in observations:
temp = {
'properties':{
'id_maille': o.id_maille,
'nb_observations': o.nb_obs,
'lastyear': o.lastyear
},
'geometry': ast.literal_eval(o.geojson_maille),
'type' : "Feature"
}
tabObs.append(temp)
outGeoJson={'type':"FeatureCollection", 'features':tabObs}
return outGeoJson


# last observation for index.html
def lastObservationsMailles(connection, mylimit, idPhoto):
Expand Down
2 changes: 1 addition & 1 deletion static/mapGenerator.js
Original file line number Diff line number Diff line change
Expand Up @@ -593,7 +593,7 @@ function generateSliderOnMap(){
},

onAdd: function (map) {
var sliderContainer = L.DomUtil.create('div', 'leaflet-bar leaflet-control leaflet-slider-control');
sliderContainer = L.DomUtil.create('div', 'leaflet-bar leaflet-control leaflet-slider-control');

sliderContainer.style.backgroundColor = 'white';
sliderContainer.style.width = '300px';
Expand Down
151 changes: 151 additions & 0 deletions static/mapMaillesLastObs.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,151 @@
var map = generateMap();
generateSliderOnMap();
var legend = L.control({position: 'bottomright'});

// Legende

htmlLegend = "<i style='border: solid "+configuration.MAP.BORDERS_WEIGHT+"px "+configuration.MAP.BORDERS_COLOR+";'> &nbsp; &nbsp; &nbsp;</i> Limite du "+ configuration.STRUCTURE;
generateLegende(htmlLegend);


// Current observation Layer: leaflet layer type
var currentLayer;

// Current observation geoJson: type object
var myGeoJson;

var compteurLegend = 0; // compteur pour ne pas rajouter la légende à chaque fois

function styleMailleAtlas(feature) {
var fillColor ;
var currentYear = new Date().getFullYear() ;
var obsyear = feature.properties.lastyear ;
if(feature.properties.lastyear <= currentYear - 10){
fillColor='red' ;
}else if(feature.properties.lastyear <= currentYear - 5) {
fillColor='yellow';
}else{
fillColor='green';
}

return {
fillColor: fillColor,
weight: 0.5,
color: 'white',
fillOpacity: 0.8
};
}

L.DomUtil.remove(sliderContainer); //Remove slider created in mapGenerator.js

$.ajax({
url: configuration.URL_APPLICATION+'/api/observationsMailleLastObs/'+cd_ref,
dataType: "json",
beforeSend: function(){
$('#loadingGif').attr('src', configuration.URL_APPLICATION+'/static/images/loading.svg')
}
}).done(function(observations) {
$('#loadingGif').hide();

currentLayer = L.geoJson(observations, {
onEachFeature : function (feature, layer){
popupContent = "<b>Nombre d'observations </b> "+feature.properties.nb_observations+"<br><b>Dernière d'observations </b>"+feature.properties.lastyear ;

layer.bindPopup(popupContent)
},
style: styleMailleAtlas,
}).addTo(map);
currentLayer.bringToFront();
/*
// affichage des mailles
displayMailleLayerFicheEspece(observations, taxonYearMin, YEARMAX);

//display nb observations
$("#nbObsLateral").html("<b>"+observations.length+" </b> </br> Observations" );



// pointer on first and last obs
$('.pointer').css('cursor', 'pointer');
//display nb observations
nbObs=0;
myGeoJson.features.forEach(function(l){
nbObs += l.properties.nb_observations
})
$("#nbObs").html("Nombre d'observation(s): "+ nbObs);



// Slider event
mySlider.on("change",function(){
years = mySlider.getValue();
yearMin = years[0];
yearMax = years[1];
map.removeLayer(currentLayer);
displayMailleLayerFicheEspece(observations, yearMin, yearMax)


nbObs=0;
myGeoJson.features.forEach(function(l){
nbObs += l.properties.nb_observations
})

$("#nbObs").html("Nombre d'observation(s): "+ nbObs);

});


// Stat - map interaction
$('#firstObs').click(function(){
var firstObsLayer;
var year = new Date('2400-01-01');


var layer = (currentLayer._layers);
for (var key in layer) {
layer[key].feature.properties.tabDateobs.forEach(function(thisYear){
if (thisYear <= year){
year = thisYear;
firstObsLayer = layer[key];
}
});
}


var bounds = L.latLngBounds([]);
var layerBounds = firstObsLayer.getBounds();
bounds.extend(layerBounds);
map.fitBounds(bounds, {
maxZoom : 12
});

firstObsLayer.openPopup();
})

$('#lastObs').click(function(){
var firstObsLayer;
var year = new Date('1800-01-01');


var layer = (currentLayer._layers);
for (var key in layer) {
layer[key].feature.properties.tabDateobs.forEach(function(thisYear){
if (thisYear >= year){
year = thisYear;
firstObsLayer = layer[key];
}
});
}


var bounds = L.latLngBounds([]);
var layerBounds = firstObsLayer.getBounds();
bounds.extend(layerBounds);
map.fitBounds(bounds, {
maxZoom : 12
});

firstObsLayer.openPopup();
})*/
});

4 changes: 4 additions & 0 deletions templates/ficheEspece.html
Original file line number Diff line number Diff line change
Expand Up @@ -553,7 +553,11 @@ <h3 class="text-center">Observations mensuelles</h3>
<script src="{{url_for('static', filename='mapGenerator.js') }}"></script>
<script src="{{url_for('static', filename='main.js') }}"></script>
{% if configuration.AFFICHAGE_MAILLE %}
{% if configuration.TYPE_MAILLE == "last obs" %}
<script src="{{url_for('static', filename='mapMaillesLastObs.js') }}"></script>
{% else %}
<script src="{{url_for('static', filename='mapMailles.js') }}"></script>
{% endif %}
{% else %}
<script src="{{url_for('static', filename='mapPoint.js') }}"></script>
{% endif %}
Expand Down