Hi Maning,
Here's another attempt at a fix. Please try.
Cheers,
Mark
diff --git a/src/uk/me/parabola/imgfmt/app/Coord.java b/src/uk/me/parabola/imgfmt/app/Coord.java
index 54cdc5f..84df73c 100644
--- a/src/uk/me/parabola/imgfmt/app/Coord.java
+++ b/src/uk/me/parabola/imgfmt/app/Coord.java
@@ -78,6 +78,10 @@ public class Coord implements Comparable<Coord> {
++highwayCount;
}
+ public void zeroHighwayCount() {
+ highwayCount = 0;
+ }
+
public int hashCode() {
return latitude+longitude;
}
diff --git a/src/uk/me/parabola/mkgmap/general/LineClipper.java b/src/uk/me/parabola/mkgmap/general/LineClipper.java
index 55aa51d..3ead4cc 100644
--- a/src/uk/me/parabola/mkgmap/general/LineClipper.java
+++ b/src/uk/me/parabola/mkgmap/general/LineClipper.java
@@ -135,11 +135,22 @@ public class LineClipper {
assert t[1] <= 1;
double d = 0.5;
- if (t[0] > 0)
- ends[0] = new Coord((int) (y0 + t[0] * dy + d), (int) (x0 + t[0] * dx + d));
+ if (t[0] > 0) {
+ Coord c = new Coord((int) (y0 + t[0] * dy + d), (int) (x0 + t[0] * dx + d));
+ if(c.equals(ends[0]))
+ ends[0].zeroHighwayCount(); // flag as boundary node
+ else
+ ends[0] = c;
+ }
+
+ if (t[1] < 1) {
+ Coord c = new Coord((int)(y0 + t[1] * dy + d), (int) (x0 + t[1] * dx + d));
+ if(c.equals(ends[1]))
+ ends[1].zeroHighwayCount(); // flag as boundary node
+ else
+ ends[1] = c;
+ }
- if (t[1] < 1)
- ends[1] = new Coord((int)(y0 + t[1] * dy + d), (int) (x0 + t[1] * dx + d));
return ends;
}
diff --git a/src/uk/me/parabola/mkgmap/general/RoadNetwork.java b/src/uk/me/parabola/mkgmap/general/RoadNetwork.java
index 9bc6b83..5b8d8db 100644
--- a/src/uk/me/parabola/mkgmap/general/RoadNetwork.java
+++ b/src/uk/me/parabola/mkgmap/general/RoadNetwork.java
@@ -103,6 +103,9 @@ public class RoadNetwork {
if(node1 == node2)
log.error("Road " + road.getRoadDef().getName() + " (OSM id " + road.getRoadDef().getId() + ") contains consecutive identical nodes - routing will be broken");
+ else if(arcLength == 0) {
+ log.error("Road " + road.getRoadDef().getName() + " (OSM id " + road.getRoadDef().getId() + ") contains zero length arc");
+ }
// Create forward arc from node1 to node2
Coord bearing = coordList.get(lastIndex + 1);
_______________________________________________
mkgmap-dev mailing list
[email protected]
http://www.mkgmap.org.uk/mailman/listinfo/mkgmap-dev