Subversion Repositories eFlore/Applications.cel

Compare Revisions

Ignore whitespace Rev 1957 → Rev 1958

/trunk/src/org/tela_botanica/client/vues/observation/CartographieObservationVue.java
1,25 → 1,10
package org.tela_botanica.client.vues.observation;
 
import org.tela_botanica.client.interfaces.Rafraichissable;
import org.tela_botanica.client.modeles.objets.Configuration;
import org.tela_botanica.client.modeles.objets.EntiteGeographiqueObservation;
import org.tela_botanica.client.observation.ObservationMediateur;
import org.tela_botanica.client.util.Util;
 
import com.google.gwt.maps.client.InfoWindow;
import com.google.gwt.maps.client.InfoWindowContent;
import com.google.gwt.maps.client.MapType;
import com.google.gwt.maps.client.MapWidget;
import com.google.gwt.maps.client.Maps;
import com.google.gwt.maps.client.control.LargeMapControl;
import com.google.gwt.maps.client.event.MapClickHandler;
import com.google.gwt.maps.client.event.MapZoomEndHandler;
import com.google.gwt.maps.client.event.MarkerClickHandler;
import com.google.gwt.maps.client.event.MarkerDragEndHandler;
import com.google.gwt.maps.client.event.MarkerDragStartHandler;
import com.google.gwt.maps.client.geom.LatLng;
import com.google.gwt.maps.client.overlay.Marker;
import com.google.gwt.maps.client.overlay.MarkerOptions;
import com.google.gwt.user.client.Timer;
import com.google.gwt.user.client.Window;
import com.gwtext.client.core.EventCallback;
33,6 → 18,17
import com.gwtext.client.widgets.layout.FitLayout;
import com.gwtext.client.widgets.layout.RowLayout;
import com.gwtext.client.widgets.layout.RowLayoutData;
import com.google.maps.gwt.client.GoogleMap;
import com.google.maps.gwt.client.GoogleMap.ClickHandler;
import com.google.maps.gwt.client.GoogleMap.ZoomChangedHandler;
import com.google.maps.gwt.client.InfoWindow;
import com.google.maps.gwt.client.InfoWindowOptions;
import com.google.maps.gwt.client.LatLng;
import com.google.maps.gwt.client.MapOptions;
import com.google.maps.gwt.client.MapTypeId;
import com.google.maps.gwt.client.Marker;
import com.google.maps.gwt.client.MarkerOptions;
import com.google.maps.gwt.client.MouseEvent;
 
public class CartographieObservationVue extends Panel implements Rafraichissable {
 
41,10 → 37,11
private ObservationMediateur oMediateur = null;
Panel panneauCarto = null;
private MapWidget map;
GoogleMap map = null;
Marker nmk = null;
private boolean carteAjoutee = false;
private boolean requeteEnCours = false;
private boolean infoOuverte = false;
String valeurCommune = "Bourges";
LatLng centreFrance = null;
58,8 → 55,6
 
private InfoWindow info;
 
private boolean listenerInitialise = false;
 
public CartographieObservationVue(ObservationMediateur om) {
oMediateur = om;
73,41 → 68,21
 
setLayout(new RowLayout());
 
panneauCarto.setAutoHeight(true);
add(panneauExplication, new RowLayoutData(12));
add(panneauCarto, new RowLayoutData());
if(!carteAjoutee) {
Maps.loadMapsApi(Configuration.getCleGoogleMaps(), "2", false, new Runnable() {
@Override
public void run() {
initialiserCarte(false);
}
});
}
addListener(new ContainerListenerAdapter() {
@Override
public void onAfterLayout(Container c) {
if(carteAjoutee) {
panneauCarto.setHeight("100%");
if((panneauCarto.getHeight() - 20) > map.getSize().getHeight()) {
map.setSize(map.getSize().getWidth()+"px", (panneauCarto.getHeight() - 20)+"px");
}
panneauCarto.doLayout();
panneauCarto.expand();
}
initialiserCarte(false);
}
});
panneauCarto.setAutoHeight(true);
}
public void setTailleCarte(int hauteur, int largeur) {
map.setSize(largeur+"px", (hauteur+"px"));
setSize(largeur, hauteur);
}
public void masquerChargement(boolean masquer) {
122,72 → 97,88
}
public void obtenirInfosCommunes(LatLng coord) {
oMediateur.obtenirInformationCoord(this, coord);
oMediateur.obtenirInformationCoord(this, coord.lat(), coord.lng());
}
 
public void mettreAJourInfos(final LatLng pointNouvelleCommune, String infosComplementaires, int zoom) {
 
if (!carteAjoutee) {
initialiserCarte(true);
GoogleMap mapNulle = null;
if(nmk != null) {
nmk.setMap(mapNulle);
}
 
pointCommune = pointNouvelleCommune;
map.clearOverlays();
Marker nmk = fabriquerMarqueur(pointCommune, infosComplementaires);
map.addOverlay(nmk);
nmk = fabriquerMarqueur(pointCommune, infosComplementaires);
nmk.setMap(map);
afficherInfoMarker(nmk);
recentrerCarte();
}
 
public void initialiserCarte(boolean commune) {
private void initialiserCarte(boolean commune) {
centreFrance = LatLng.newInstance(47.0504, 2.2347);
panneauCarto.clear();
centreFrance = LatLng.create(47.0504, 2.2347);
pointCommune = centreFrance;
map = new MapWidget(pointCommune, niveauZoom);
panneauCarto.add(map);
panneauCarto.doLayout();
info = map.getInfoWindow();
MapOptions options = MapOptions.create();
options.setCenter(centreFrance);
options.setZoom(6) ;
options.setMapTypeId(MapTypeId.HYBRID);
options.setDraggable(true);
options.setMapTypeControl(true);
options.setScaleControl(true) ;
options.setScrollwheel(true) ;
map = GoogleMap.create(panneauCarto.getElement(), options ) ;
InfoWindowOptions infopts = InfoWindowOptions.create();
info = InfoWindow.create();
info.setOptions(infopts);
info.addCloseClickListener(new InfoWindow.CloseClickHandler() {
@Override
public void handle() {
infoOuverte = false;
}
});
if(!commune) {
fabriquerMarqueurIndication();
}
map.setZoomLevel(6);
map.checkResizeAndCenter();
map.setUIToDefault();
map.addControl(new LargeMapControl());
map.setCurrentMapType(MapType.getHybridMap());
carteAjoutee = true;
panneauCarto.doLayout();
map.addMapClickHandler(new MapClickHandler() {
 
map.addClickListener(new ClickHandler() {
@Override
public void onClick(MapClickEvent event) {
//TODO : quoi faire du double clic ?
public void handle(MouseEvent event) {
obtenirInfosCommunes(event.getLatLng());
}
});
map.addMapZoomEndHandler(new MapZoomEndHandler() {
 
map.addZoomChangedListener(new ZoomChangedHandler() {
@Override
public void onZoomEnd(MapZoomEndEvent event) {
niveauZoom = event.getNewZoomLevel();
public void handle() {
niveauZoom = (int)map.getZoom();
}
});
panneauCarto.doLayout();
panneauCarto.expand();
panneauCarto.setHeight("100%");
panneauCarto.setWidth("100%");
expand();
}
public void fabriquerMarqueurIndication() {
Marker marker = fabriquerMarqueur(pointCommune,"");
map.addOverlay(marker);
info.open(marker, new InfoWindowContent("<div id=\"info_contenu\">"+
GoogleMap mapNulle = null;
if(nmk != null) {
nmk.setMap(mapNulle);
}
nmk = fabriquerMarqueur(pointCommune,"");
nmk.setMap(map);
info.setContent("<div id=\"info_contenu\">"+
"Déplacez ce marqueur pour localiser votre observation (commune et coordonnées)<br />"
+"longitude="
+ marker.getLatLng().getLongitude() + "<br />latitude="
+ marker.getLatLng().getLatitude() + "</div>"));
+ nmk.getPosition().lng() + "<br />latitude="
+ nmk.getPosition().lat() + "</div>");
infoOuverte = true;
info.open(map,nmk);
}
 
public void AfficherMessageAucuneInfos() {
202,7 → 193,6
private void ajouterListenerBouton(final String idBouton) {
final ExtElement bouton = Ext.get(idBouton);
if(bouton == null) {
Timer t = new Timer() {
@Override
209,23 → 199,22
public void run() {
ajouterListenerBouton(idBouton);
}
};
t.schedule(500);
return;
} else {
bouton.addListener("click", new EventCallback() {
@Override
public void execute(EventObject e) {
EntiteGeographiqueObservation infosCommune = new EntiteGeographiqueObservation(codeCommune,valeurCommune,null,null);
infosCommune.setLat(pointCommune.lat()+"");
infosCommune.setLon(pointCommune.lng()+"");
oMediateur.rafraichirSaisieCommuneObservation(infosCommune);
}
});
bouton.focus();
}
bouton.addListener("click", new EventCallback() {
@Override
public void execute(EventObject e) {
EntiteGeographiqueObservation infosCommune = new EntiteGeographiqueObservation(codeCommune,valeurCommune,null,null);
infosCommune.setLat(pointCommune.getLatitude()+"");
infosCommune.setLon(pointCommune.getLongitude()+"");
oMediateur.rafraichirSaisieCommuneObservation(infosCommune);
}
});
bouton.focus();
}
 
@Override
254,7 → 243,7
}
LatLng coord = LatLng.newInstance(lat, lon);
LatLng coord = LatLng.create(lat, lon);
valeurCommune = infos.getZoneGeo();
codeCommune = Util.convertirChaineZoneGeoVersDepartement(infos.getIdZoneGeo());
268,49 → 257,52
public Marker fabriquerMarqueur(LatLng pointMarqueur, final String texte) {
// ajout de marqueurs déplacables, qui affichent une bulle d'information
MarkerOptions options = MarkerOptions.newInstance();
MarkerOptions options = MarkerOptions.create();
options.setDraggable(true);
final Marker marker = new Marker(pointMarqueur, options);
options.setPosition(pointMarqueur);
final Marker marker = Marker.create(options);
marker.addMarkerDragEndHandler(new MarkerDragEndHandler() {
marker.addDragEndListener(new Marker.DragEndHandler() {
@Override
public void onDragEnd(MarkerDragEndEvent event) {
masquerChargement(true);
obtenirInfosCommunes(marker.getLatLng());
public void handle(MouseEvent event) {
obtenirInfosCommunes(event.getLatLng());
}
 
});
 
marker.addMarkerDragStartHandler(new MarkerDragStartHandler() {
marker.addDragStartListener(new Marker.DragStartHandler() {
@Override
public void onDragStart(MarkerDragStartEvent event) {
info.setVisible(false);
public void handle(MouseEvent event) {
info.close();
}
});
marker.addMarkerClickHandler(new MarkerClickHandler() {
 
marker.addClickListener(new Marker.ClickHandler() {
@Override
public void onClick(MarkerClickEvent event) {
if(info.isVisible()) {
public void handle(MouseEvent event) {
if(infoOuverte) {
info.close();
infoOuverte = false;
} else {
afficherInfoMarker(marker);
infoOuverte = true;
}
}
}
});
return marker;
}
 
public void recentrerCarte() {
if(this.getWidth() > 12 && this.getHeight() > 24) {
map.setSize((this.getWidth() - 12)+"px" , (this.getHeight() - 24)+"px");
if(this.getWidth() > 12 && this.getHeight() > 24) {
panneauCarto.setSize((this.getWidth() - 12)+"px" , (this.getHeight() - 12)+"px");
}
map.setCenter(pointCommune, niveauZoom);
map.checkResizeAndCenter();
panneauCarto.doLayout();
panneauCarto.expand();
panneauCarto.setHeight("100%");
panneauCarto.setWidth("100%");
expand();
}
 
public boolean isCarteAjoutee() {
317,16 → 309,15
return carteAjoutee;
}
public void afficherInfoMarker(Marker marker) {
public void afficherInfoMarker(Marker marker) {
final String htmlBoutonOk = "<br /><button id=\"okMap\" class=\"x-btn-text\" type=\"button\">OK</button>";
 
String contenuMarker = "";
if(valeurCommune == null || valeurCommune.trim().equals("")) {
if(marker.getLatLng().getLongitude() == 0 && marker.getLatLng().getLatitude() == 0) {
if(marker.getPosition().lng() == 0 && marker.getPosition().lat() == 0) {
LatLng point = centreFrance;
marker.setLatLng(point);
marker.setPosition(point);
niveauZoom = 6;
}
contenuMarker = "<div id=\"info_contenu\">"+
333,26 → 324,31
"Aucune commune française trouvée à cet emplacement <br />"
+"Déplacez ce marqueur pour localiser votre observation (commune et coordonnées)<br />"
+"longitude="
+ marker.getLatLng().getLongitude() + "<br />latitude="
+ marker.getLatLng().getLatitude() + "</div>";
+ marker.getPosition().lng() + "<br />latitude="
+ marker.getPosition().lat() + "</div>";
} else {
contenuMarker = ""
+valeurCommune+" ("+codeCommune+")<br />"
+"longitude="
+ marker.getLatLng().getLongitude() + "<br />latitude="
+ marker.getLatLng().getLatitude() ;
+ marker.getPosition().lng() + "<br />latitude="
+ marker.getPosition().lat() ;
}
info.open(marker, new InfoWindowContent(""
+ contenuMarker
+ htmlBoutonOk));
info.setContent(contenuMarker+ htmlBoutonOk);
info.open(map, marker);
info.addDomReadyListenerOnce(new InfoWindow.DomReadyHandler() {
@Override
public void handle() {
ajouterListenerBouton("okMap");
}
});
recentrerCarte();
ajouterListenerBouton("okMap");
}
public LatLng getCentreFrance() {
return LatLng.newInstance(47.0504, 2.2347);
 
public double[] getCoordsCentreFrance() {
double[] coords = {47.0504, 2.2347};
return coords;
}
 
}