/*******************************************************************************
* David.Pichardie@inria.fr, Copyright (C) 2011. All rights reserved. *
*******************************************************************************/
package org.javascool.proglets.gogleMaps;
import java.util.Map;
import java.util.List;
import java.util.Set;
import javax.swing.SwingUtilities;
import org.javascool.macros.Macros;
/** Définit les fonctions de la proglet qui permettent de tracer des chemins sur une carte de France.
*
* @see <a href="Functions.java.html">code source</a>
* @serial exclude
*/
public class Functions {
private static final long serialVersionUID = 1L;
// @factory
private Functions() {}
/** Renvoie l'instance de la proglet pour accéder à ses éléments. */
private static Panel getPane() {
return Macros.getProgletPane();
}
/** Définit l'intensité d'uen route. */
public enum IntensiteRoute {
LEGER(1), MOYEN(2), FORT(3);
private int value;
IntensiteRoute(int i) {
value = i;
}
}
/** Calcule la distance entre deux villes. */
public static double getDistance(String ville1, String ville2) {
double x1 = latitudes.get(ville1), y1 = longitudes.get(ville1);
double x2 = latitudes.get(ville2), y2 = longitudes.get(ville2);
return distanceEuclidienne(y1, x1, y2, x2);
}
public final static IntensiteRoute LEGER = IntensiteRoute.LEGER;
public final static IntensiteRoute MOYEN = IntensiteRoute.MOYEN;
public final static IntensiteRoute FORT = IntensiteRoute.FORT;
/** Met en évidence un point de la carte désigné par ses coordonnées géographiques (longitude,latitude). */
public static void affichePointSurCarte(double longitude, double latitude, int idx) {
getPane().main.affichePoint(longitude, latitude, idx);
};
/** Met en évidence un point de la carte désigné par ses coordonnées géographiques (longitude,latitude) en numérotant ce point avec le nombre index. */
public static void affichePointSurCarte(double longitude, double latitude) {
getPane().main.affichePoint(longitude, latitude);
}
/** Trace une ligne droite entre un point de coordonnées géographiques (longitude1,latitude1) et un autre de coordonnées géographiques (longitude2,latitude2). */
public static void afficheRouteSurCarte(double longitude1, double latitude1, double longitude2, double latitude2, IntensiteRoute intensite) {
getPane().main.afficheRoute(longitude1, latitude1, longitude2, latitude2, intensite.value);
}
/** Trace une ligne droite entre un point de coordonnées géographiques (longitude1,latitude1) et un autre de coordonnées géographiques (longitude2,latitude2) en prenant une couleur d'intensité intensite. */
public static void afficheRouteSurCarte(double longitude1, double latitude1, double longitude2, double latitude2) {
getPane().main.afficheRoute(longitude1, latitude1, longitude2, latitude2);
}
/** Calcule la distance (en km) sur la sphère terrestre entre un point de coordonnées géographiques (longitude1,latitude1) et un autre de coordonnées géographiques (longitude2,latitude2). */
public static int distanceEuclidienne(double longitude1, double latitude1, double longitude2, double latitude2) {
return getPane().main.distanceEuclidienne(longitude1, latitude1, longitude2, latitude2);
}
/** Efface la carte. */
public static void effaceCarte() {
getPane().main.clearMap();
}
/** Table de toutes les villes. */
public static Set<String> villes;
/** Table des latitudes associée à chaque nom de ville. */
public static Map<String, Double> latitudes;
/** Table des longitudes associée à chaque nom de ville. */
public static Map<String, Double> longitudes;
/** Table des voisins de chaque ville. */
public static Map<String, List<String> > voisins;
/** Calcule un chemin sous forme d'une liste de noms de ville afin de relier la ville de nom depart à celle de nom arrivee en suivant uniquement des routes de la table voisins de la proglet. */
public static List<String> plusCourtCheminGogleMap(String depart, String arrivee) {
return GogleMapCalculChemins.plusCourtChemin(getPane().main, depart, arrivee);
}
/** Parcours en largeur de la carte à partir d'un point de départ. */
public static void parcoursEnLargeur(final String depart) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
getPane().main.clearMap();
GogleMapParcours.afficheToutesRoutesDirectes(getPane().main);
GogleMapParcours.parcoursLargeur(getPane().main, depart);
}
}
);
}
}