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"); |
initialiserCarte(false); |
} |
panneauCarto.doLayout(); |
panneauCarto.expand(); |
} |
} |
}); |
|
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,18 → 199,16 |
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.getLatitude()+""); |
infosCommune.setLon(pointCommune.getLongitude()+""); |
infosCommune.setLat(pointCommune.lat()+""); |
infosCommune.setLon(pointCommune.lng()+""); |
oMediateur.rafraichirSaisieCommuneObservation(infosCommune); |
} |
}); |
227,6 → 215,7 |
|
bouton.focus(); |
} |
} |
|
@Override |
public void rafraichir(Object nouvelleDonnees, |
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"); |
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() { |
318,15 → 310,14 |
} |
|
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); |
|
recentrerCarte(); |
info.addDomReadyListenerOnce(new InfoWindow.DomReadyHandler() { |
@Override |
public void handle() { |
ajouterListenerBouton("okMap"); |
} |
}); |
|
public LatLng getCentreFrance() { |
return LatLng.newInstance(47.0504, 2.2347); |
recentrerCarte(); |
} |
|
public double[] getCoordsCentreFrance() { |
double[] coords = {47.0504, 2.2347}; |
return coords; |
} |
} |