- Timestamp:
- 08/09/12 16:20:19 (13 years ago)
- Location:
- branches/RoutePlanning/HeuristicLab.Problems.RoutePlanning/3.3
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/RoutePlanning/HeuristicLab.Problems.RoutePlanning/3.3/Graph/OsmGraph.cs
r8434 r8462 71 71 public float GetWeight(Way edge, OsmVertex<Node> source, OsmVertex<Node> target) { 72 72 double distance = Utils.Distance(source.Node.Point, target.Node.Point); 73 //double distance = Utils.LocationDistance(source.Node.Point, target.Node.Point); 73 74 int speed = edge.GetMaxSpeed(); 74 75 double weight = (distance / speed) * 3.6; 76 //double weight = (distance / speed); 75 77 return (float)weight; 76 78 } … … 84 86 public float EstimatedCosts(OsmVertex<Node> source, OsmVertex<Node> target) { 85 87 double distance = Utils.Distance(source.Node.Point, target.Node.Point); 88 //double distance = Utils.LocationDistance(source.Node.Point, target.Node.Point); 86 89 int speed = 130; 87 90 double costs = (distance / speed) * 3.6; 91 //double costs = (distance / speed); 88 92 return (float)costs; 89 93 } -
branches/RoutePlanning/HeuristicLab.Problems.RoutePlanning/3.3/Osm.Data/XmlDataSource.cs
r8316 r8462 1 1 2 using System; 2 3 using System.Collections.Generic; 3 4 using System.IO; 4 5 using System.Xml; 6 using HeuristicLab.Problems.RoutePlanning.Graph; 5 7 namespace HeuristicLab.Problems.RoutePlanning.Osm.Data { 6 8 public class XmlDataSource : IDataSource { … … 82 84 } 83 85 84 #endregion 86 public IGraph GetRoutingGraph() { 87 IGraph graph = new Graph.Graph(); 88 foreach (Way way in ways.Values) { 89 List<Node> nodes = way.Nodes; 90 for (int i = 0; i < way.Nodes.Count - 1; i++) { 91 Vertex v1 = new Vertex(nodes[i].Id, nodes[i].Longitude, nodes[i].Latitude); 92 graph.AddVertex(v1); 93 Vertex v2 = new Vertex(nodes[i + 1].Id, nodes[i + 1].Longitude, nodes[i + 1].Latitude); 94 if (v1.Id == 370626403) { 95 Console.WriteLine(); 96 } 97 graph.AddVertex(v2); 98 if (way.OneWay) { 99 Edge<Vertex> edge = new Edge<Vertex>(v1, v2); 100 edge.Category = (short)way.HighwayTag; 101 graph.AddEdge(edge); 102 } else { 103 Edge<Vertex> edgeForward = new Edge<Vertex>(v1, v2); 104 edgeForward.Category = (short)way.HighwayTag; 105 graph.AddEdge(edgeForward); 106 107 Edge<Vertex> edgeBackward = new Edge<Vertex>(v2, v1); 108 edgeForward.Category = (short)way.HighwayTag; 109 graph.AddEdge(edgeBackward); 110 } 111 112 } 113 } 114 return graph; 115 } 116 117 #endregion 118 119 #region Private Methods 85 120 86 121 private void ReadData() { … … 214 249 } 215 250 } 251 252 #endregion 216 253 } 217 254 } -
branches/RoutePlanning/HeuristicLab.Problems.RoutePlanning/3.3/Osm/IDataSource.cs
r8300 r8462 1 1 2 2 using System.Collections.Generic; 3 using HeuristicLab.Problems.RoutePlanning.Graph; 3 4 namespace HeuristicLab.Problems.RoutePlanning.Osm { 4 5 public interface IDataSource { … … 8 9 List<Way> GetWays(Node node); 9 10 Relation GetRelation(long relationId); 11 IGraph GetRoutingGraph(); 10 12 } 11 13 } -
branches/RoutePlanning/HeuristicLab.Problems.RoutePlanning/3.3/Osm/Utils.cs
r8308 r8462 8 8 double dy = p2.Y - p1.Y; 9 9 return Math.Sqrt(dx * dx + dy * dy); 10 } 11 12 public static double LocationDistance(PointD p1, PointD p2) { 13 // The Haversine formula 14 /* dlon = lon2 - lon1 15 dlat = lat2 - lat1 16 a = (sin(dlat/2))^2 + cos(lat1) * cos(lat2) * (sin(dlon/2))^2 17 c = 2 * atan2(sqrt(a), sqrt(1-a)) 18 d = R * c 19 */ 20 21 double lat1Rad = p1.Y * (Math.PI / 180.0); 22 double long1Rad = p1.X * (Math.PI / 180.0); 23 double lat2Rad = p2.Y * (Math.PI / 180.0); 24 double long2Rad = p2.X * (Math.PI / 180.0); 25 26 double longitude = long2Rad - long1Rad; 27 double latitude = lat2Rad - lat1Rad; 28 29 double a = Math.Pow(Math.Sin(latitude / 2.0), 2.0) + 30 Math.Cos(lat1Rad) * Math.Cos(lat2Rad) * 31 Math.Pow(Math.Sin(longitude / 2.0), 2.0); 32 33 double c = 2.0 * Math.Asin(Math.Sqrt(a)); 34 35 const double earthRadiusKms = 6376.5; 36 double distance = earthRadiusKms * c; 37 38 return distance; 10 39 } 11 40
Note: See TracChangeset
for help on using the changeset viewer.