package gps;

import java.util.HashMap;

/* sommets
 *   les sommets sont stockés dans une table
 *   et repérés par un entier unique (champ id)
 */

class Vertex {
  final int id;
  final double lon, lat; // en radians

  private Vertex(int id, double lat, double lon) {
    this.id = id;
    this.lon = Math.toRadians(lon);
    this.lat = Math.toRadians(lat);
  }

  // table contenant tous les sommets
  private static final HashMap<Integer, Vertex> nodes =
    new HashMap<Integer, Vertex>(101327);

  static void create(int id, double lat, double lon) {
    nodes.put(id, new Vertex(id, lat, lon));
  }

  static Vertex fromId(int id) {
    return nodes.get(id);
  }

  // distance orthodromique
  double distance(Vertex that) {
    return 6378 * Math.acos(Math.cos(this.lat) * Math.cos(that.lat)
        * Math.cos(this.lon - that.lon) + Math.sin(this.lat)
        * Math.sin(that.lat));
  }

  public String toString() {
    return "lat " + this.lat + ", long " + this.lon;
  }

  // utilisé dans Graph pour construire un point temporaire de coordonnées données
  Vertex(double lat, double lon) {
    this.lat = lat;
    this.lon = lon;
    this.id = -1;
  }

}