Skip to content

Commit

Permalink
removed Routing from schema
Browse files Browse the repository at this point in the history
sorted members in DijkstraRouteCalculator


git-svn-id: https://svn.uni-koblenz.de/gupro/re-group/trunk/project/jgstreetmap@6257 6c03965d-96ef-0310-af27-ce2fa9dd3b5a
  • Loading branch information
Sascha Strauß committed Jun 9, 2008
1 parent ce14ecc commit 5c2916d
Show file tree
Hide file tree
Showing 3 changed files with 125 additions and 123 deletions.
2 changes: 1 addition & 1 deletion convertschema.sh
@@ -1,2 +1,2 @@
#! /bin/bash
java -cp ../common/lib/saxon/saxon9.jar net.sf.saxon.Transform -s:schema.xmi -xsl:../jgralab/src/de/uni_koblenz/jgralab/utilities/xmi2tgschema/XMI2TGSchema.xsl -o:src/de/uni_koblenz/jgstreetmap/OsmSchema.tg tool=ea schemaName=de.uni_koblenz.jgstreetmap.osmschema.OsmSchema
java -cp ../common/lib/saxon/saxon9.jar net.sf.saxon.Transform -s:OsmSchema.xmi -xsl:../jgralab/src/de/uni_koblenz/jgralab/utilities/xmi2tgschema/XMI2TGSchema.xsl -o:src/de/uni_koblenz/jgstreetmap/OsmSchema.tg tool=ea schemaName=de.uni_koblenz.jgstreetmap.osmschema.OsmSchema
6 changes: 2 additions & 4 deletions src/de/uni_koblenz/jgstreetmap/OsmSchema.tg
Expand Up @@ -15,9 +15,8 @@ abstract VertexClass kdtree.Key {keyValue: Double};
VertexClass kdtree.NodeSet;
VertexClass kdtree.XKey: kdtree.Key;
VertexClass kdtree.YKey: kdtree.Key;
VertexClass routing.Route;
VertexClass routing.Segment {length: Double, oneway: Boolean, wayType: routing.SegmentType};
AggregationClass HasMember from Relation (0,*) role relation to OsmPrimitive (0,*) role member aggregate from {memberRole: String, memberType: String};
VertexClass routing.Segment {oneway: Boolean, wayType: routing.SegmentType, length: Double};
AggregationClass HasMember from Relation (0,*) role relation to OsmPrimitive (0,*) role member aggregate from {memberType: String, memberRole: String};
AggregationClass HasNode from Way (1,*) role way to Node (2,*) role node aggregate from;
EdgeClass routing.HasTarget from routing.Segment (0,*) role segmentToSource to Node (1,1) role target;
EdgeClass routing.HasSource from routing.Segment (0,*) role segmentToTarget to Node (1,1) role source;
Expand All @@ -27,4 +26,3 @@ AggregationClass kdtree.HasRoot from kdtree.KDTree (0,1) role tree to kdtree.Key
EdgeClass kdtree.HasSet from kdtree.Key (1,1) role key to kdtree.NodeSet (0,1) role set;
AggregationClass kdtree.HasYChild from kdtree.XKey (1,1) role parent to kdtree.YKey (0,2) role child aggregate from;
AggregationClass kdtree.HasXChild from kdtree.YKey (1,1) role parent to kdtree.XKey (0,2) role child aggregate from;
AggregationClass routing.ContainsSegment from routing.Route (0,*) to routing.Segment (0,*) role segment aggregate from { opposite: Boolean};
240 changes: 122 additions & 118 deletions src/de/uni_koblenz/jgstreetmap/routing/DijkstraRouteCalculator.java
Expand Up @@ -17,75 +17,13 @@

public class DijkstraRouteCalculator {

protected OsmGraph theGraph;
protected OsmDijkstraMarker dijkstraMarker;
// protected RoutingRestriction rest;
protected Set<SegmentType> relevantTypes;
protected Node start;
protected boolean routesCalculated;
protected boolean startChanged;

public Node getStart() {
return start;
}

public void setStart(Node start) {
this.start = start;
this.startChanged = true;
// calculateShortestRoute();
}

public DijkstraRouteCalculator(OsmGraph g) {
dijkstraMarker = null;
theGraph = g;
relevantTypes = new TreeSet<SegmentType>();
setRestriction(RoutingRestriction.CAR);
startChanged = false;
routesCalculated = false;
}

public enum RoutingRestriction {
CAR, BIKE, FOOT
}

public void setRestriction(RoutingRestriction rest) {

if (rest == RoutingRestriction.CAR) {
relevantTypes.add(SegmentType.MOTORWAY);
relevantTypes.add(SegmentType.PRIMARY);
relevantTypes.add(SegmentType.SECONDARY);
relevantTypes.add(SegmentType.TERTIARY);
relevantTypes.add(SegmentType.RESIDENTIAL);
relevantTypes.add(SegmentType.WORMHOLE);
relevantTypes.add(SegmentType.SERVICE);
relevantTypes.add(SegmentType.UNSURFACED);
} else if (rest == RoutingRestriction.BIKE) {
relevantTypes.add(SegmentType.CYCLEWAY);
relevantTypes.add(SegmentType.UNSURFACED);
relevantTypes.add(SegmentType.RESIDENTIAL);
relevantTypes.add(SegmentType.TERTIARY);
relevantTypes.add(SegmentType.SECONDARY);
relevantTypes.add(SegmentType.WORMHOLE);
relevantTypes.add(SegmentType.SERVICE);
} else if (rest == RoutingRestriction.FOOT) {
relevantTypes.add(SegmentType.CYCLEWAY);
relevantTypes.add(SegmentType.UNSURFACED);
relevantTypes.add(SegmentType.RESIDENTIAL);
relevantTypes.add(SegmentType.TERTIARY);
relevantTypes.add(SegmentType.SERVICE);
relevantTypes.add(SegmentType.WORMHOLE);
relevantTypes.add(SegmentType.FOOTWAY);
}

public enum Direction {
NORMAL, REVERSED;
}

protected class OsmDijkstraMarker extends
GraphMarker<OsmDijkstraMarker.Marker> {

public OsmDijkstraMarker() {
super(theGraph);
}

/** Marker class for temporary attributes of Dijkstra algorithm */
private class Marker {

Expand All @@ -101,31 +39,8 @@ private class Marker {

}

/** Initializes a vertex with a new Marker. */
public void init(Vertex v) {
mark(v, new Marker());
}

/**
* Sets the distance at Vertex <code>v</code> to
* <code>newDistance</code> and stores the possibly new predecessor<code>previousVertex</code>
* in the path from the start vertex.
*/
public void setNewDistance(Node v, double newDistance,
Node previousVertex, Segment sourceSegment) {
Marker m = getMark(v);
m.distance = newDistance;
m.prev = previousVertex;
m.sourceSegment = sourceSegment;
}

/**
* Checks if the Vertex <code>v</code> is already done.
*
* @return true if the Vertex was already handled.
*/
public boolean isDone(Node v) {
return getMark(v).done;
public OsmDijkstraMarker() {
super(theGraph);
}

/** Marks the Vertex <code>v</code> as "done". */
Expand All @@ -151,6 +66,63 @@ public Node getPreviousNode(Node v) {
public Segment getPreviousSegment(Node v) {
return getMark(v).sourceSegment;
}

/** Initializes a vertex with a new Marker. */
public void init(Vertex v) {
mark(v, new Marker());
}

/**
* Checks if the Vertex <code>v</code> is already done.
*
* @return true if the Vertex was already handled.
*/
public boolean isDone(Node v) {
return getMark(v).done;
}

/**
* Sets the distance at Vertex <code>v</code> to
* <code>newDistance</code> and stores the possibly new predecessor<code>previousVertex</code>
* in the path from the start vertex.
*/
public void setNewDistance(Node v, double newDistance,
Node previousVertex, Segment sourceSegment) {
Marker m = getMark(v);
m.distance = newDistance;
m.prev = previousVertex;
m.sourceSegment = sourceSegment;
}
}

public enum RoutingRestriction {
CAR, BIKE, FOOT
}

public class SegmentDirectionTuple {
public Segment segment;
public Direction direction;
}

protected OsmGraph theGraph;
protected OsmDijkstraMarker dijkstraMarker;

// protected RoutingRestriction rest;
protected Set<SegmentType> relevantTypes;

protected Node start;

protected boolean routesCalculated;

protected boolean startChanged;

public DijkstraRouteCalculator(OsmGraph g) {
dijkstraMarker = null;
theGraph = g;
relevantTypes = new TreeSet<SegmentType>();
setRestriction(RoutingRestriction.CAR);
startChanged = false;
routesCalculated = false;
}

public void calculateShortestRoutes() {
Expand Down Expand Up @@ -227,13 +199,33 @@ public int compare(Node a, Node b) {
routesCalculated = true;
}

public class SegmentDirectionTuple {
public Segment segment;
public Direction direction;
private Node getNextVertex(Node v, Segment e) {
if (e.getSourceList().get(0) == v) {
// System.out.println("n");
return e.getTargetList().get(0);
} else if (e.getTargetList().get(0) == v) {
// System.out.println("r");
return e.getSourceList().get(0);
}
return null;
}

public enum Direction {
NORMAL, REVERSED;
private List<Segment> getRelevantEdges(Node n) {
List<Segment> out = new LinkedList<Segment>();
// all edges in normal direction
for (Segment currentSegment : n.getSegmentToTargetList()) {
if (relevantTypes.contains(currentSegment.getWayType())) {
out.add(currentSegment);
}
}
// all edges in reversed direction if not oneway
for (Segment currentSegment : n.getSegmentToSourceList()) {
if (!currentSegment.isOneway()
&& relevantTypes.contains(currentSegment.getWayType())) {
out.add(currentSegment);
}
}
return out;
}

public List<SegmentDirectionTuple> getRoute(Node target) {
Expand Down Expand Up @@ -275,33 +267,45 @@ public List<SegmentDirectionTuple> getRoute(Node target) {
return out;
}

private List<Segment> getRelevantEdges(Node n) {
List<Segment> out = new LinkedList<Segment>();
// all edges in normal direction
for (Segment currentSegment : n.getSegmentToTargetList()) {
if (relevantTypes.contains(currentSegment.getWayType())) {
out.add(currentSegment);
}
}
// all edges in reversed direction if not oneway
for (Segment currentSegment : n.getSegmentToSourceList()) {
if (!currentSegment.isOneway()
&& relevantTypes.contains(currentSegment.getWayType())) {
out.add(currentSegment);
}
}
return out;
public Node getStart() {
return start;
}

private Node getNextVertex(Node v, Segment e) {
if (e.getSourceList().get(0) == v) {
// System.out.println("n");
return e.getTargetList().get(0);
} else if (e.getTargetList().get(0) == v) {
// System.out.println("r");
return e.getSourceList().get(0);
public void setRestriction(RoutingRestriction rest) {

if (rest == RoutingRestriction.CAR) {
relevantTypes.add(SegmentType.MOTORWAY);
relevantTypes.add(SegmentType.PRIMARY);
relevantTypes.add(SegmentType.SECONDARY);
relevantTypes.add(SegmentType.TERTIARY);
relevantTypes.add(SegmentType.RESIDENTIAL);
relevantTypes.add(SegmentType.WORMHOLE);
relevantTypes.add(SegmentType.SERVICE);
relevantTypes.add(SegmentType.UNSURFACED);
} else if (rest == RoutingRestriction.BIKE) {
relevantTypes.add(SegmentType.CYCLEWAY);
relevantTypes.add(SegmentType.UNSURFACED);
relevantTypes.add(SegmentType.RESIDENTIAL);
relevantTypes.add(SegmentType.TERTIARY);
relevantTypes.add(SegmentType.SECONDARY);
relevantTypes.add(SegmentType.WORMHOLE);
relevantTypes.add(SegmentType.SERVICE);
} else if (rest == RoutingRestriction.FOOT) {
relevantTypes.add(SegmentType.CYCLEWAY);
relevantTypes.add(SegmentType.UNSURFACED);
relevantTypes.add(SegmentType.RESIDENTIAL);
relevantTypes.add(SegmentType.TERTIARY);
relevantTypes.add(SegmentType.SERVICE);
relevantTypes.add(SegmentType.WORMHOLE);
relevantTypes.add(SegmentType.FOOTWAY);
}
return null;

}

public void setStart(Node start) {
this.start = start;
this.startChanged = true;
// calculateShortestRoute();
}

}

0 comments on commit 5c2916d

Please sign in to comment.