[mkgmap] 01/06: Imported Upstream version 0.0.0+svn3392

Bas Couwenberg sebastic at xs4all.nl
Thu Dec 25 20:12:59 UTC 2014


This is an automated email from the git hooks/post-receive script.

sebastic-guest pushed a commit to branch master
in repository mkgmap.

commit 04b4e0a4861efae915e3f58560fb4b8a67d970d7
Author: Bas Couwenberg <sebastic at xs4all.nl>
Date:   Thu Dec 25 19:30:56 2014 +0100

    Imported Upstream version 0.0.0+svn3392
---
 resources/mkgmap-version.properties                |  4 +--
 src/uk/me/parabola/imgfmt/app/Coord.java           | 19 +++++++---
 src/uk/me/parabola/mkgmap/build/MapBuilder.java    |  7 ++--
 src/uk/me/parabola/mkgmap/general/MapElement.java  |  9 +++++
 .../parabola/mkgmap/osmstyle/StyledConverter.java  | 21 ++----------
 .../osmstyle/housenumber/HousenumberGenerator.java | 40 +++++++++++++---------
 .../mkgmap/reader/polish/PolishMapDataSource.java  |  4 ++-
 .../parabola/mkgmap/reader/polish/RoadHelper.java  |  4 +--
 test/func/SimpleTest.java                          |  2 +-
 test/func/route/SimpleRouteTest.java               |  4 +--
 10 files changed, 63 insertions(+), 51 deletions(-)

diff --git a/resources/mkgmap-version.properties b/resources/mkgmap-version.properties
index 798b028..494b950 100644
--- a/resources/mkgmap-version.properties
+++ b/resources/mkgmap-version.properties
@@ -1,2 +1,2 @@
-svn.version: 3383
-build.timestamp: 2014-12-18T07:11:34+0000
+svn.version: 3392
+build.timestamp: 2014-12-24T17:03:01+0000
diff --git a/src/uk/me/parabola/imgfmt/app/Coord.java b/src/uk/me/parabola/imgfmt/app/Coord.java
index c1486e7..eb93e71 100644
--- a/src/uk/me/parabola/imgfmt/app/Coord.java
+++ b/src/uk/me/parabola/imgfmt/app/Coord.java
@@ -590,7 +590,7 @@ public class Coord implements Comparable<Coord> {
 	 * @param val30 a longitude/latitude value with 30 bit precision
 	 * @return an angle in radians.
 	 */
-	private static double int30ToRadians(int val30){
+	public static double int30ToRadians(int val30){
 		return BIT30_RAD_FACTOR * val30;
 	}
 
@@ -769,10 +769,19 @@ public class Coord implements Comparable<Coord> {
 		double deltaLat = bLat - aLat;
 
 		double frac;
-		if (deltaLon == 0 && deltaLat == 0) 
-			frac = 0;
-		else 
-			frac = ((pLon - aLon) * deltaLon + (pLat - aLat) * deltaLat) / (deltaLon * deltaLon + deltaLat * deltaLat);
+		if (deltaLon == 0 && deltaLat == 0){ 
+			frac = 0; 
+		}
+		else {
+			// scale for longitude deltas by cosine of average latitude  
+			double scale = Math.cos(Coord.int30ToRadians((aLat + bLat + pLat) / 3) );
+			double deltaLonAP = scale * (pLon - aLon);
+			deltaLon = scale * deltaLon;
+			if (deltaLon == 0 && deltaLat == 0)
+				frac = 0;
+			else 
+				frac = (deltaLonAP * deltaLon + (pLat - aLat) * deltaLat) / (deltaLon * deltaLon + deltaLat * deltaLat);
+		}
 
 		double distance;
 		if (frac <= 0) {
diff --git a/src/uk/me/parabola/mkgmap/build/MapBuilder.java b/src/uk/me/parabola/mkgmap/build/MapBuilder.java
index 49a9aaf..5273ad5 100644
--- a/src/uk/me/parabola/mkgmap/build/MapBuilder.java
+++ b/src/uk/me/parabola/mkgmap/build/MapBuilder.java
@@ -686,9 +686,10 @@ public class MapBuilder implements Configurable {
 						log.debug("ADD parent-subdiv", parent, srcDivPair.getSource(), ", z=", zoom, " new=", div);
 					nextList.add(new SourceSubdiv(area, div));
 				}
-
-				Subdivision lastdiv = nextList.get(nextList.size() - 1).getSubdiv();
-				lastdiv.setLast(true);
+				if (nextList.size() > 0){
+					Subdivision lastdiv = nextList.get(nextList.size() - 1).getSubdiv();
+					lastdiv.setLast(true);
+				}
 			}
 
 			srcList = nextList;
diff --git a/src/uk/me/parabola/mkgmap/general/MapElement.java b/src/uk/me/parabola/mkgmap/general/MapElement.java
index ecefca0..fad3240 100644
--- a/src/uk/me/parabola/mkgmap/general/MapElement.java
+++ b/src/uk/me/parabola/mkgmap/general/MapElement.java
@@ -78,6 +78,15 @@ public abstract class MapElement {
 		this.labels[0] = name;
 	}
 
+	public void add2Name(String name) {
+		for (int i = 1; i < 4; i++) {
+			if (this.labels[i] == null) {
+				this.labels[i] = name;
+				break;
+			}
+		}
+	}
+
 	public void setLabels(String[] labels) {
 		this.labels = Arrays.copyOf(labels, 4);
 	}
diff --git a/src/uk/me/parabola/mkgmap/osmstyle/StyledConverter.java b/src/uk/me/parabola/mkgmap/osmstyle/StyledConverter.java
index bbc6093..a11ea4d 100644
--- a/src/uk/me/parabola/mkgmap/osmstyle/StyledConverter.java
+++ b/src/uk/me/parabola/mkgmap/osmstyle/StyledConverter.java
@@ -169,17 +169,6 @@ public class StyledConverter implements OsmConverter {
 		housenumberGenerator = new HousenumberGenerator(props);
 		
 		driveOn = props.getProperty("drive-on", null);
-		if (driveOn == null){
-			// support legacy options --drive-on-left and --drive-on-right
-			boolean dol = props.getProperty("drive-on-left", false);
-			boolean dor = props.getProperty("drive-on-right", false);
-			if (dol && dor)
-				throw new ExitException("options drive-on-left and drive-on-right and mutually exclusive");
-			if (dol)
-				driveOn = "left";
-			if (dor)
-				driveOn = "right";
-		}
 		if (driveOn == null)
 			driveOn = "detect,right";
 		switch (driveOn) {
@@ -196,7 +185,7 @@ public class StyledConverter implements OsmConverter {
 		default:
 			throw new ExitException("invalid parameters for option drive-on:"+driveOn);
 		}
-		
+			
 		checkRoundabouts = props.getProperty("check-roundabouts",false);
 		reportDeadEnds = props.getProperty("report-dead-ends", 1);  
 		
@@ -612,12 +601,6 @@ public class StyledConverter implements OsmConverter {
 		}
 		roads = null;
 
-		// at this point the check-roundabout option might have changed the driveOn value 
-//		if ("left".equals(driveOn) && !ignoreDriveOn){
-//			NODHeader.setDriveOnLeft(true);
-//			TREHeader.setDriveOnLeft(true);
-//		}
-
 		for(Relation relation : throughRouteRelations) {
 			Node node = null;
 			Way w1 = null;
@@ -697,7 +680,7 @@ public class StyledConverter implements OsmConverter {
 			}
 			log.info("detected value for driving on left flag is:",dol);			
 		} else {
-			driveOnLeft = ("left".equals(driveOn));
+			dol = ("left".equals(driveOn));
 			// warn if user given flag is obviously wrong
 			if ("left".equals(driveOn) && numDriveOnLeftRoads == 0 && numDriveOnRightRoads > 0)
 				log.warn("The drive-on-left flag is set but tile contains only drive-on-right roads");
diff --git a/src/uk/me/parabola/mkgmap/osmstyle/housenumber/HousenumberGenerator.java b/src/uk/me/parabola/mkgmap/osmstyle/housenumber/HousenumberGenerator.java
index 13c7aa2..b9d8950 100644
--- a/src/uk/me/parabola/mkgmap/osmstyle/housenumber/HousenumberGenerator.java
+++ b/src/uk/me/parabola/mkgmap/osmstyle/housenumber/HousenumberGenerator.java
@@ -509,12 +509,10 @@ public class HousenumberGenerator {
 	 * @return {@code true} point lies on the left side; {@code false} point lies on the right side
 	 */
 	private static boolean isLeft(Coord spoint1, Coord spoint2, Coord point) {
-		
-		boolean left =  ((spoint2.getLongitude() - spoint1.getLongitude())
-				* (point.getLatitude() - spoint1.getLatitude()) - (spoint2.getLatitude() - spoint1
-				.getLatitude()) * (point.getLongitude() - spoint1.getLongitude())) > 0;
-
-				return left;
+		return ((spoint2.getHighPrecLon() - spoint1.getHighPrecLon())
+				* (point.getHighPrecLat() - spoint1.getHighPrecLat()) - (spoint2
+				.getHighPrecLat() - spoint1.getHighPrecLat())
+				* (point.getHighPrecLon() - spoint1.getHighPrecLon())) > 0;
 	}
 	
 	/**
@@ -531,7 +529,7 @@ public class HousenumberGenerator {
 		} else if (frac >= 1) {
 			return spoint2.distance(point);
 		} else {
-			return spoint1.makeBetweenPoint(spoint2, frac).distance(point);
+			return point.distToLineSegment(spoint1, spoint2);
 		}
 
 	}
@@ -544,17 +542,27 @@ public class HousenumberGenerator {
 	 * @return the fraction
 	 */
 	private static double getFrac(Coord spoint1, Coord spoint2, Coord point) {
+		int aLon = spoint1.getHighPrecLon();
+		int bLon = spoint2.getHighPrecLon();
+		int pLon = point.getHighPrecLon();
+		int aLat = spoint1.getHighPrecLat();
+		int bLat = spoint2.getHighPrecLat();
+		int pLat = point.getHighPrecLat();
+		
+		double deltaLon = bLon - aLon;
+		double deltaLat = bLat - aLat;
 
-		double dx = spoint2.getLongitude() - spoint1.getLongitude();
-		double dy = spoint2.getLatitude() - spoint1.getLatitude();
-
-		if ((dx == 0) && (dy == 0)) {
+		if (deltaLon == 0 && deltaLat == 0) 
 			return 0;
+		else {
+			// scale for longitude deltas by cosine of average latitude  
+			double scale = Math.cos(Coord.int30ToRadians((aLat + bLat + pLat) / 3) );
+			double deltaLonAP = scale * (pLon - aLon);
+			deltaLon = scale * deltaLon;
+			if (deltaLon == 0 && deltaLat == 0)
+				return 0;
+			else 
+				return (deltaLonAP * deltaLon + (pLat - aLat) * deltaLat) / (deltaLon * deltaLon + deltaLat * deltaLat);
 		}
-
-		return ((point.getLongitude() - spoint1.getLongitude()) * dx + (point
-				.getLatitude() - spoint1.getLatitude()) * dy)
-				/ (dx * dx + dy * dy);
-
 	}
 }
diff --git a/src/uk/me/parabola/mkgmap/reader/polish/PolishMapDataSource.java b/src/uk/me/parabola/mkgmap/reader/polish/PolishMapDataSource.java
index a001070..c6f5386 100644
--- a/src/uk/me/parabola/mkgmap/reader/polish/PolishMapDataSource.java
+++ b/src/uk/me/parabola/mkgmap/reader/polish/PolishMapDataSource.java
@@ -484,6 +484,8 @@ public class PolishMapDataSource extends MapperBasedMapDataSource implements Loa
 	private boolean isCommonValue(MapElement elem, String name, String value) {
 		if (name.equals("Label")) {
 			elem.setName(unescape(recode(value)));
+		} else if (name.equals("Label2") || name.equals("Label3")) {
+			elem.add2Name(unescape(recode(value)));
 		} else if (name.equals("Levels") || name.equals("EndLevel") || name.equals("LevelsNumber")) {
 			try {
 				endLevel = Integer.valueOf(value);
@@ -503,7 +505,7 @@ public class PolishMapDataSource extends MapperBasedMapDataSource implements Loa
 		} else if (name.equals("Phone")) {
 		  elem.setPhone(recode(value));			
 		} else if (name.equals("CountryName")) {
-		  elem.setCountry(recode(value));
+		  elem.setCountry(unescape(recode(value)));
 		} else if (name.equals("RegionName")) {
 			//System.out.println("RegionName " + value);
 		  elem.setRegion(recode(value));				
diff --git a/src/uk/me/parabola/mkgmap/reader/polish/RoadHelper.java b/src/uk/me/parabola/mkgmap/reader/polish/RoadHelper.java
index 73bb9b6..4ee46d1 100644
--- a/src/uk/me/parabola/mkgmap/reader/polish/RoadHelper.java
+++ b/src/uk/me/parabola/mkgmap/reader/polish/RoadHelper.java
@@ -101,8 +101,8 @@ class RoadHelper {
 			roadClass = 0;
 		if (roadClass > 4)
 			roadClass = 4;
-		oneway = Integer.parseInt(f[2]) > 0;
-		toll = Integer.parseInt(f[3]) > 0;
+		oneway = (f.length > 2) ? Integer.parseInt(f[2]) > 0: false;
+		toll = (f.length > 3) ? Integer.parseInt(f[3]) > 0: false;
 		byte noAccess = 0;
 		for (int j = 0; j < f.length - 4; j++){
 			if (Integer.parseInt(f[4+j]) == 0)
diff --git a/test/func/SimpleTest.java b/test/func/SimpleTest.java
index f93a24d..824b77e 100644
--- a/test/func/SimpleTest.java
+++ b/test/func/SimpleTest.java
@@ -113,7 +113,7 @@ public class SimpleTest extends Base {
 				break;
 			case "LBL":
 				count++;
-				assertEquals("LBL size", 989, size);
+				assertEquals("LBL size", 999, size);
 				break;
 			}
 		}
diff --git a/test/func/route/SimpleRouteTest.java b/test/func/route/SimpleRouteTest.java
index c9df2ba..81f3e07 100644
--- a/test/func/route/SimpleRouteTest.java
+++ b/test/func/route/SimpleRouteTest.java
@@ -104,11 +104,11 @@ public class SimpleRouteTest extends Base {
 				break;
 			case "LBL":
 				count++;
-				assertEquals("LBL size", 989, size);
+				assertEquals("LBL size", 999, size);
 				break;
 			case "NET":
 				count++;
-				assertEquals("NET size", 1280, size);
+				assertEquals("NET size", 1301, size);
 				break;
 			case "NOD":
 				count++;

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-grass/mkgmap.git



More information about the Pkg-grass-devel mailing list