Index: branches/RoutePlanning/HeuristicLab.Problems.RoutePlanning/3.3/Graph/EarthDistanceCostCalculator.cs
===================================================================
--- branches/RoutePlanning/HeuristicLab.Problems.RoutePlanning/3.3/Graph/EarthDistanceCostCalculator.cs	(revision 8488)
+++ branches/RoutePlanning/HeuristicLab.Problems.RoutePlanning/3.3/Graph/EarthDistanceCostCalculator.cs	(revision 8488)
@@ -0,0 +1,39 @@
+﻿using System;
+
+namespace HeuristicLab.Problems.RoutePlanning.Graph {
+  public class EarthDistanceCostCalculator : ICostCalculator {
+    private const double earthMeanRadius = 6371.0 * 1000.0;
+
+    #region ICostCalculator Members
+
+    public float Costs(Edge<Vertex> edge) {
+      return edge.Weight;
+    }
+
+    public float EstimatedCosts(Vertex source, Vertex destination) {
+      return (float)EarthDistance(source.Logitude, source.Latitude, destination.Logitude, destination.Latitude);
+    }
+
+    #endregion
+
+    private double DegToRad(double alpha) {
+      return alpha * Math.PI / 180;
+    }
+
+    private double AngularDistance(double startLon, double startLat, double endLon, double endLat) {
+      double lat1 = DegToRad(startLat);
+      double lat2 = DegToRad(endLat);
+      double long1 = DegToRad(startLon);
+      double long2 = DegToRad(endLat);
+
+      double x = Math.Sin(lat1) * Math.Sin(lat2) + Math.Cos(lat1) * Math.Cos(lat2) * Math.Cos(long1 - long2);
+      x = Math.Min(1, Math.Max(0, x));
+
+      return Math.Acos(x);
+    }
+
+    private double EarthDistance(double startLon, double startLat, double endLon, double endLat) {
+      return earthMeanRadius * AngularDistance(startLon, startLat, endLon, endLat);
+    }
+  }
+}
Index: branches/RoutePlanning/HeuristicLab.Problems.RoutePlanning/3.3/Graph/Edge.cs
===================================================================
--- branches/RoutePlanning/HeuristicLab.Problems.RoutePlanning/3.3/Graph/Edge.cs	(revision 8479)
+++ branches/RoutePlanning/HeuristicLab.Problems.RoutePlanning/3.3/Graph/Edge.cs	(revision 8488)
@@ -16,4 +16,10 @@
       get { return category; }
       set { category = value; }
+    }
+
+    private float weight;
+    public float Weight {
+      get { return weight; }
+      set { weight = value; }
     }
 
Index: branches/RoutePlanning/HeuristicLab.Problems.RoutePlanning/3.3/Graph/ICostCalculator.cs
===================================================================
--- branches/RoutePlanning/HeuristicLab.Problems.RoutePlanning/3.3/Graph/ICostCalculator.cs	(revision 8488)
+++ branches/RoutePlanning/HeuristicLab.Problems.RoutePlanning/3.3/Graph/ICostCalculator.cs	(revision 8488)
@@ -0,0 +1,7 @@
+﻿
+namespace HeuristicLab.Problems.RoutePlanning.Graph {
+  public interface ICostCalculator {
+    float Costs(Edge<Vertex> edge);
+    float EstimatedCosts(Vertex source, Vertex destination);
+  }
+}
Index: branches/RoutePlanning/HeuristicLab.Problems.RoutePlanning/3.3/Graph/TravelTimeCostCalculator.cs
===================================================================
--- branches/RoutePlanning/HeuristicLab.Problems.RoutePlanning/3.3/Graph/TravelTimeCostCalculator.cs	(revision 8488)
+++ branches/RoutePlanning/HeuristicLab.Problems.RoutePlanning/3.3/Graph/TravelTimeCostCalculator.cs	(revision 8488)
@@ -0,0 +1,29 @@
+﻿
+using HeuristicLab.Problems.RoutePlanning.Osm;
+namespace HeuristicLab.Problems.RoutePlanning.Graph {
+  public class TravelTimeCostCalculator : ICostCalculator {
+    #region CostCalculator Members
+
+    public float Costs(Edge<Vertex> edge) {
+      double distance = Utils.Distance(edge.Source.Logitude, edge.Source.Latitude,
+                                       edge.Target.Logitude, edge.Target.Latitude);
+      //double distance = Utils.LocationDistance(source.Node.Point, target.Node.Point);
+      int speed = edge.GetMaxSpeed();
+      double weight = (distance / speed) * 3.6;
+      //double weight = (distance / speed);
+      return (float)weight;
+    }
+
+    public float EstimatedCosts(Vertex source, Vertex destination) {
+      double distance = Utils.Distance(source.Logitude, source.Latitude,
+                                       destination.Logitude, destination.Latitude);
+      //double distance = Utils.LocationDistance(source.Node.Point, target.Node.Point);
+      int speed = 130;
+      double costs = (distance / speed) * 3.6;
+      //double costs = (distance / speed);
+      return (float)costs;
+    }
+
+    #endregion
+  }
+}
