/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package projet;
import colormap.Colormap;
import isovaleur.*;
import java.util.ArrayList;
import java.util.Iterator;
/**
*
* @author lotfi
*/
public class DonneesAgreg {
private Colormap colormap;
private ArrayList<DonneesGeo> donneesGeo;
private ArrayList<DonneesGeo> donneesGeoInterp;
private double delta = 0.1;
private double latMin;
private double latMax;
private double lonMin;
private double lonMax;
//On prend 3 isovaleurs
private ArrayList<Segment> iso1;
private ArrayList<Segment> iso2;
private ArrayList<Segment> iso3;
private ArrayList<ArrayList<Segment>> isos2;
private ArrayList<ArrayList<Segment>> isos3;
public DonneesAgreg(){
this.colormap = new Colormap();
this.donneesGeo = new ArrayList<DonneesGeo>();
this.donneesGeoInterp = new ArrayList<DonneesGeo>();
iso1 = new ArrayList<>();
iso2 = new ArrayList<>();
iso3 = new ArrayList<>();
isos2 = new ArrayList<ArrayList<Segment>>();
isos3 = new ArrayList<ArrayList<Segment>>();
}
/**
* Ajout d'une valeur de la concentration à un instant du mois
* @param ville: ville pour laquelle la concentration passée en paramètre a été enregistrée
* @param concentration: concentration pour cette ville
*/
public void ajoutConcentration(String ville, Integer concentration){
//recherche de la ville dans la liste des données
Iterator<DonneesGeo> it = this.getDonneesGeo().iterator();
while(it.hasNext()){
DonneesGeo donnee = it.next();
if(donnee.getName().equals(ville))
donnee.ajoutConcentration(concentration);
}
}
/**
* Initialisation de la dimension de la colormap
* donneesGeo doit avoir été initialisé
*/
public void initColorMap(){
int lat, lon;
//double latMin, latMax, lonMin, lonMax;
setLatMin(InterShepard.latitudeMin(this.getDonneesGeo())) ;
setLatMax(InterShepard.latitudeMax(this.getDonneesGeo()));
setLonMin(InterShepard.longitudeMin(this.getDonneesGeo()));
setLonMax(InterShepard.longitudeMax(this.getDonneesGeo()));
int height = (int)Math.floor((getLatMax() - getLatMin()) / getDelta()) ;
int width =(int)Math.floor((getLonMax() - getLonMin()) / getDelta()) + 1;
this.getColormap().generateData(width, height );
Iterator<DonneesGeo> it = this.getDonneesGeoInterp().iterator();
while(it.hasNext()){
DonneesGeo donnee = it.next();
lat =(int)Math.floor((donnee.getLattitude() - getLatMin()) / this.getDelta());
lon =(int)Math.floor((donnee.getLongitude() - getLonMin()) / this.getDelta()) ;
this.getColormap().insertValue(lat , lon , donnee.getConcentration());
}
this.getColormap().initXi(2);
this.getColormap().generateRgb();
}
/**
* Interpole les valeurs de concentration par pas de 0.001
*/
public void completeDonneesGeo(){
this.setLatMin(InterShepard.latitudeMin(this.getDonneesGeo())) ;
this.setLonMin(InterShepard.longitudeMin(this.getDonneesGeo()));
this.setLatMax(InterShepard.latitudeMax(this.getDonneesGeo()));
this.setLonMax(InterShepard.longitudeMax(this.getDonneesGeo()));
for(double i = getLatMin(); i <= getLatMax() ; i+= getDelta()){
for(double j = getLonMin(); j <= getLonMax(); j+= getDelta()){
DonneesGeo d = new DonneesGeo(i,j,400 * Math.random());
double conc = InterShepard.calculDeF(d, getDonneesGeo());
d.setConcentration(conc);
this.getDonneesGeoInterp().add(d);
}
}
}
/**
* Génération des isovaleurs, une fois que toutes les données sont initialisées(colormat, ...)
*/
public void generateIso(){
ArrayList<Segment> isoval2 = new ArrayList<Segment> ();
ArrayList<Segment> isoval3 = new ArrayList<Segment>();
Isovaleur.determinerSigne(this.getColormap().getData(), ( this.getColormap().valMax() + 2 * this.getColormap().valMin()) / 3.0);
setIso1(Isovaleur.creerSegments(this.getColormap().getData(), ( this.getColormap().valMax() + 2 * this.getColormap().valMin()) / 3.0, getLatMin(), getLonMin(), getDelta()));
Isovaleur.determinerSigne(this.getColormap().getData(), (this.getColormap().valMax() + this.getColormap().valMin()) / 2.0);
setIso2(Isovaleur.creerSegments(this.getColormap().getData(), (this.getColormap().valMax() + this.getColormap().valMin()) / 2.0, getLatMin(), getLonMin(), getDelta()));
isoval3 = Isovaleur.creerSegments(this.getColormap().getData(), (2 * this.getColormap().valMax() + this.getColormap().valMin()) / 3.0, getLatMin(), getLonMin(), getDelta());
Isovaleur.determinerSigne(this.getColormap().getData(), (2 * this.getColormap().valMax() + this.getColormap().valMin()) / 3.0);
setIso3(Isovaleur.creerSegments(this.getColormap().getData(), (2 * this.getColormap().valMax() + this.getColormap().valMin()) / 3.0, getLatMin(), getLonMin(), getDelta()));
//Isovaleur.afficherSegments(iso3);
getIsos2().add(isoval2);
getIsos3().add(isoval3);
}
/**
* Génération de toutes les images et isovaleurs
*/
public void generateImages(String imageName){
for (int i = 0; i < this.getDonneesGeo().get(0).getConcentrationsHoraires().size(); i++){
Iterator<DonneesGeo> it = this.getDonneesGeo().iterator();
while(it.hasNext()){
DonneesGeo donnees = it.next();
donnees.setConcentration(donnees.getConcentrationsHoraires().get(i));
}
completeDonneesGeo();
initColorMap();
// generateIso();
this.getColormap().createImageFile("images/" + imageName + i + ".png");
}
}
/**
* @return the colormap
*/
public Colormap getColormap() {
return colormap;
}
/**
* @param colormap the colormap to set
*/
public void setColormap(Colormap colormap) {
this.colormap = colormap;
}
/**
* @return the donneesGeo
*/
public ArrayList<DonneesGeo> getDonneesGeo() {
return donneesGeo;
}
/**
* @param donneesGeo the donneesGeo to set
*/
public void setDonneesGeo(ArrayList<DonneesGeo> donneesGeo) {
this.donneesGeo = donneesGeo;
}
/**
* @return the donneesGeoInterp
*/
public ArrayList<DonneesGeo> getDonneesGeoInterp() {
return donneesGeoInterp;
}
/**
* @param donneesGeoInterp the donneesGeoInterp to set
*/
public void setDonneesGeoInterp(ArrayList<DonneesGeo> donneesGeoInterp) {
this.donneesGeoInterp = donneesGeoInterp;
}
/**
* @return the delta
*/
public double getDelta() {
return delta;
}
/**
* @param delta the delta to set
*/
public void setDelta(double delta) {
this.delta = delta;
}
/**
* @return the latMin
*/
public double getLatMin() {
return latMin;
}
/**
* @param latMin the latMin to set
*/
public void setLatMin(double latMin) {
this.latMin = latMin;
}
/**
* @return the latMax
*/
public double getLatMax() {
return latMax;
}
/**
* @param latMax the latMax to set
*/
public void setLatMax(double latMax) {
this.latMax = latMax;
}
/**
* @return the lonMin
*/
public double getLonMin() {
return lonMin;
}
/**
* @param lonMin the lonMin to set
*/
public void setLonMin(double lonMin) {
this.lonMin = lonMin;
}
/**
* @return the lonMax
*/
public double getLonMax() {
return lonMax;
}
/**
* @param lonMax the lonMax to set
*/
public void setLonMax(double lonMax) {
this.lonMax = lonMax;
}
/**
* @return the iso1
*/
public ArrayList<Segment> getIso1() {
return iso1;
}
/**
* @param iso1 the iso1 to set
*/
public void setIso1(ArrayList<Segment> iso1) {
this.iso1 = iso1;
}
/**
* @return the iso2
*/
public ArrayList<Segment> getIso2() {
return iso2;
}
/**
* @param iso2 the iso2 to set
*/
public void setIso2(ArrayList<Segment> iso2) {
this.iso2 = iso2;
}
/**
* @return the iso3
*/
public ArrayList<Segment> getIso3() {
return iso3;
}
/**
* @param iso3 the iso3 to set
*/
public void setIso3(ArrayList<Segment> iso3) {
this.iso3 = iso3;
}
/**
* @return the isos2
*/
public ArrayList<ArrayList<Segment>> getIsos2() {
return isos2;
}
/**
* @param isos2 the isos2 to set
*/
public void setIsos2(ArrayList<ArrayList<Segment>> isos2) {
this.isos2 = isos2;
}
/**
* @return the isos3
*/
public ArrayList<ArrayList<Segment>> getIsos3() {
return isos3;
}
/**
* @param isos3 the isos3 to set
*/
public void setIsos3(ArrayList<ArrayList<Segment>> isos3) {
this.isos3 = isos3;
}
}