source: ether_eccad/trunk/ECCAD_INTERFACE/WEB-INF/src/org/medias/eccad/metier/dessinCarte/ServiceCarte.java @ 68

Last change on this file since 68 was 68, checked in by cbipsl, 14 years ago

commit v1 eccad

  • Property svn:executable set to *
File size: 11.0 KB
Line 
1package org.medias.eccad.metier.dessinCarte;
2
3import java.awt.Point;
4import java.io.File;
5import java.util.Map;
6
7
8import org.medias.eccad.helpers.Donnees;
9import org.medias.eccad.helpers.LoggerPerso;
10import org.medias.eccad.helpers.SpringBeanFactory;
11import org.medias.eccad.metier.generationRaster.GenerateurWorldFile;
12import org.medias.eccad.metier.generationRaster.ServiceRaster;
13import org.medias.eccad.metier.statistique.ServiceStatistique;
14import org.medias.eccad.modele.StatReponse;
15import org.medias.eccad.modele.Zone;
16import org.medias.eccad.persistance.GestionFichier;
17import org.medias.eccad.persistance.dao.GrilleDAO;
18import org.medias.eccad.persistance.exception.PersistanceException;
19import org.springframework.beans.factory.xml.XmlBeanFactory;
20
21
22public class ServiceCarte {
23        private CarteMapScript carte;
24        private String emplacement;
25        private XmlBeanFactory xmlbean;
26        private ServiceStatistique serviceStat;
27        /**
28         * Constructeur par défaut. Initialise le chemin d'accÚs à l'application et la carte.
29         *
30         */
31        public ServiceCarte() {
32                xmlbean = SpringBeanFactory.getXmlFactory();
33                initEmplacement();
34                initMap();
35                serviceStat = new ServiceStatistique();
36        }
37       
38        /**
39        * Initialisation de l'emplacement de l'application
40        *
41        */
42        private void initEmplacement() {
43                emplacement = Donnees.getHome();
44        }
45       
46        /**
47         * Initialisation de la carte
48         * Chargement d'un descripteur de carte vide et initialisation des couches à la volée
49         *
50         */
51        private void initMap() {
52                LoggerPerso.log(ServiceCarte.class, LoggerPerso.DEBUG, "chargement neutre.map");
53                carte = new CarteMapScript("neutre.map", emplacement + "/mapfile/");
54                carte.setOTFRaster("donnees", "null");
55                carte.setOTFLineLayer("monde", "world",  150, 150, 150);
56                carte.setOTFRasterCopyright("copyright", emplacement + "/images/logo_copy.jpg");
57        }
58       
59        /**
60         * Cette fonction génÚre une image de carte pour la grille passée en paramêtre avec la table de couleur demandée
61         * @param id_grille
62         * @param id_colormap
63         * @param zone_affiche
64         * @param zone_selection
65         * @param identifiant_unique
66         * @return l'emplacement et le nom de l'image générée
67         * @throws PersistanceException
68         */
69        public StatReponse getCarte(long id_grille, long id_colormap, Zone zone_aff, String identifiant_unique){
70                String img_temporaire = new String();
71                ServiceRaster serviceRaster = new ServiceRaster();
72               
73                StatReponse statReponse = serviceRaster.genereRaster(id_grille, id_colormap, zone_aff);
74                img_temporaire = statReponse.getUrlImage();
75                double center = statReponse.getCenter();
76               
77               
78                // TODO: placer le generateur de worldfile au niveau du service raster
79                GenerateurWorldFile gen_worldfile = (GenerateurWorldFile) xmlbean.getBean("worldfile");
80               
81                //initialiser la resolution
82                double resolution= getResolution(id_grille);
83                               
84                gen_worldfile.setPasX(resolution);
85                gen_worldfile.setPasY(-resolution);
86               
87                               
88                gen_worldfile.writeWorldFile("/tmp/" + id_grille + "." + id_colormap);
89               
90                String urlImage = gestionImageCarte(img_temporaire, zone_aff, identifiant_unique);
91                LoggerPerso.log(ServiceCarte.class, LoggerPerso.DEBUG, "urlImage   " +urlImage);
92               
93                statReponse.setUrlImage(urlImage);
94               
95                return statReponse;
96        }
97       
98        public double getResolution(long id_grille){
99//              initialiser la resolution
100                double resolution=0;
101                GrilleDAO grilleDAO = (GrilleDAO) xmlbean.getBean("grilleDAO");
102                               
103                try {resolution = grilleDAO.getGrilleResolution(id_grille);}catch (PersistanceException e) {LoggerPerso.log(ServiceRaster.class, LoggerPerso.ERROR, "ERROR generateRaster " + e.getM_message(), e);}
104                LoggerPerso.log(ServiceCarte.class, LoggerPerso.DEBUG, "resolution------------------------------------------------------> :: " + resolution);
105               
106                return resolution;
107        }
108       
109       
110       
111       
112       
113       
114        public StatReponse getStatReponse(long id_grille, long id_colormap, Zone zone_aff){
115                ServiceRaster serviceRaster = new ServiceRaster();
116                StatReponse statReponse = serviceRaster.genereRaster(id_grille, id_colormap, zone_aff);
117
118                LoggerPerso.log(ServiceCarte.class, LoggerPerso.DEBUG, "********************getStatReponse***************************");
119                return statReponse;
120        }
121       
122       
123       
124        /*
125        public StatReponse getCenter(long id_grille, long id_colormap, Zone zone_affiche, String identifiant_unique){
126               
127        }
128        */
129       
130       
131       
132        /**
133         * Genere une carte calculé à partir des données moyennes, somme, min, max ou ecart-type
134         * @param criteres
135         * @param id_param
136         * @param id_produit
137         * @param id_colormap
138         * @param fonction
139         * @param id_unique
140         * @return
141         */
142        public StatReponse getCarteStat(Map<String, String> criteres, long id_param, long id_produit, long id_colormap, String fonction, String id_unique, Zone selection) {
143                String img_temporaire = new String();
144               
145                StatReponse statReponse = serviceStat.getCarteStat(criteres, id_param, id_produit, id_colormap, fonction, id_unique);   
146                img_temporaire = statReponse.getUrlImage();
147                // TODO: placer le generateur de worldfile au niveau du service raster
148                GenerateurWorldFile gen_worldfile = (GenerateurWorldFile) xmlbean.getBean("worldfile");
149                gen_worldfile.writeWorldFile(img_temporaire);
150               
151               
152//              initialiser la resolution
153                float resolution=0;
154                GrilleDAO grilleDAO = (GrilleDAO) xmlbean.getBean("grilleDAO");
155                               
156                try {resolution = grilleDAO.getGrilleResolution(id_produit);}catch (PersistanceException e) {LoggerPerso.log(ServiceRaster.class, LoggerPerso.ERROR, "ERROR generateRaster " + e.getM_message(), e);}
157                LoggerPerso.log(ServiceCarte.class, LoggerPerso.DEBUG, "resolution------------------------------------------------------> :: " + resolution);
158                gen_worldfile.setPasX(resolution);
159                gen_worldfile.setPasY(-resolution);
160               
161               
162               
163                String urlImage = gestionImageCarte(img_temporaire, selection, id_unique);
164                LoggerPerso.log(ServiceCarte.class, LoggerPerso.DEBUG, "urlImage   " +urlImage);
165               
166                statReponse.setUrlImage(urlImage);
167               
168                return statReponse;
169               
170        }
171       
172        public StatReponse getStatReponse(Map<String, String> criteres, long id_param, long id_produit, long id_colormap, String fonction, String id_unique, Zone selection) {
173               
174                StatReponse statReponse = serviceStat.getCarteStat(criteres, id_param, id_produit, id_colormap, fonction, id_unique);   
175                               
176                return statReponse;
177               
178        }
179       
180       
181       
182        public String getLegendStat(long id_grille, long id_colormap, String fonction, String id) {
183                if (!fonction.equals("ecartCarte") && !fonction.equals("moyenneCarte") &&!fonction.equals("sommeCarte")) 
184                        return getLegend(id_grille, id_colormap);
185                String legend = serviceStat.getLegend(emplacement + "/images/cartes_temporaires/" + id_grille + "_" + id_colormap +"_" + id , id_colormap, id_grille);
186                LoggerPerso.log(ServiceCarte.class, LoggerPerso.DEBUG, "getLegendCarte :: " + legend);
187                return "/images/cartes_temporaires/" + id_grille + "_" + id_colormap +"_" + id +".legend.png";
188        }
189        /**
190         *
191         * @param id_grille
192         * @param id_colormap
193         * @param image_temporaire
194         * @param zone_affiche
195         * @param identifiant_unique
196         * @return
197         */
198        public String gestionImageCarte(String image_temporaire,Zone zone_aff, String identifiant_unique) {
199                LoggerPerso.log(LoggerPerso.class, LoggerPerso.DEBUG, "gestion image carte");
200                String img_erreur = "/images/nodata.png";
201                String nom_image_final;
202               
203                try {
204                        LoggerPerso.log(LoggerPerso.class, LoggerPerso.DEBUG, "modif layer : donnees " + image_temporaire);
205                        carte.modifDataLayer("donnees", image_temporaire);
206                        LoggerPerso.log(LoggerPerso.class, LoggerPerso.DEBUG, "modif layer ok");
207                        if (zone_aff != null)
208                                carte.zoneAffiche(zone_aff.getNorthbc(), zone_aff.getSouthbc(), zone_aff.getEastbc(), zone_aff.getWestbc());
209                        //carte.changeProjection("");
210                        nom_image_final = carte.dessinerCarte(emplacement + "/images/cartes_temporaires/", identifiant_unique);
211                }
212                catch (Exception e) {
213                        LoggerPerso.log(ServiceCarte.class, LoggerPerso.ERROR, "erreur lors de la création de la carte", e);
214                        return img_erreur;
215                }
216
217                GestionFichier effaceur = new GestionFichier();
218               
219                //effaceur.effacerFichier(image_temporaire.substring(0, image_temporaire.length()-4) +".wld");
220                effaceur.effacerFichierAncien(emplacement+"/images/cartes_temporaires/");
221
222                return ("/images/cartes_temporaires/" + nom_image_final);
223        }
224       
225        /**
226         * Retourne la légende associée à la colormap pour la grille donnée
227         * @param id_grille
228         * @param id_colormap
229         * @return
230         */
231        public String getLegend(long id_grille, long id_colormap) {
232                File legend_img = new File(emplacement + "/images/cartes_temporaires/" + id_grille + "_" + id_colormap +".legend.png");
233               
234                if (legend_img.exists())
235                        return "/images/cartes_temporaires/" + id_grille + "_" + id_colormap +".legend.png";
236               
237                ServiceRaster serviceRaster = new ServiceRaster();
238                serviceRaster.genereLegend(id_grille, id_colormap, emplacement + "/images/cartes_temporaires/" + id_grille + "_" + id_colormap);
239               
240                return "/images/cartes_temporaires/" + id_grille + "_" + id_colormap +".legend.png";
241        }
242       
243        /**
244         * Permet d'obtenir la zone que la carte couvre
245         * @return la Zone couverte
246         */
247        public Zone getCarteCoordinate() {
248                if (carte == null)
249                        return new Zone();
250               
251                Zone zone = carte.getZoneCouverte();
252
253                LoggerPerso.log(LoggerPerso.class, LoggerPerso.DEBUG, "zonnnnnnnnnnnnnnnnnnnnnnnne : getEastbc "+ zone.getEastbc());
254                LoggerPerso.log(LoggerPerso.class, LoggerPerso.DEBUG, "zonnnnnnnnnnnnnnnnnnnnnnnne : getWestbc "+ zone.getWestbc());
255                LoggerPerso.log(LoggerPerso.class, LoggerPerso.DEBUG, "zonnnnnnnnnnnnnnnnnnnnnnnne : getNorthbc "+ zone.getNorthbc());
256                LoggerPerso.log(LoggerPerso.class, LoggerPerso.DEBUG, "zonnnnnnnnnnnnnnnnnnnnnnnne : getSouthbc "+ zone.getSouthbc());
257               
258                /*if (zone.getEastbc() <180) { if((zone.getEastbc()- ((int)zone.getEastbc()))  < 0.5) zone.setEastbc(((int)zone.getEastbc()+ 0.25)); else zone.setEastbc(((int)zone.getEastbc()+ 0.75));};
259                if (zone.getWestbc() > -180 ) {  if((zone.getWestbc()- ((int)zone.getWestbc()))  < 0.5) zone.setWestbc(((int)zone.getWestbc()+ 0.25)); else zone.setWestbc(((int)zone.getWestbc()+ 0.75));};
260                if (zone.getNorthbc()< 90) {  if((zone.getNorthbc()- ((int)zone.getNorthbc()))  < 0.5) zone.setNorthbc(((int)zone.getNorthbc()+ 0.25)); else zone.setNorthbc(((int)zone.getNorthbc()+ 0.75));};
261                if (zone.getSouthbc() >-90) {  if((zone.getSouthbc()- ((int)zone.getSouthbc()))  < 0.5) zone.setSouthbc(((int)zone.getSouthbc()+ 0.25)); else zone.setSouthbc(((int)zone.getSouthbc()+ 0.75));};
262*/
263                LoggerPerso.log(LoggerPerso.class, LoggerPerso.DEBUG, "zonnnnnnnnnnnnnnnnnnnnnnnne : getEastbcN "+ zone.getEastbcN());
264                LoggerPerso.log(LoggerPerso.class, LoggerPerso.DEBUG, "zonnnnnnnnnnnnnnnnnnnnnnnne : getWestbcN "+ zone.getWestbcN());
265                LoggerPerso.log(LoggerPerso.class, LoggerPerso.DEBUG, "zonnnnnnnnnnnnnnnnnnnnnnnne : getNorthbcN "+ zone.getNorthbcN());
266                LoggerPerso.log(LoggerPerso.class, LoggerPerso.DEBUG, "zonnnnnnnnnnnnnnnnnnnnnnnne : getSouthbcN "+ zone.getSouthbcN());
267               
268               
269               
270                return zone;
271        }
272       
273        /**
274         * Permet de zoomer sur la carte suivant les coordonnées passées
275         * @param coef coefficient de zoom
276         * @param clicX position en x du point central du zoom
277         * @param clicY position en y du point central du zoom
278         */
279        public void zoomCarte(int coef, int clicX, int clicY, double resol) {
280                carte.definirZoom(coef, new Point(clicX, clicY), resol);
281        }
282       
283       
284}
Note: See TracBrowser for help on using the repository browser.