diff --git a/OsmAnd-java/src/net/osmand/binary/BinaryInspector.java b/OsmAnd-java/src/net/osmand/binary/BinaryInspector.java index f759486d44..3f66fb2680 100644 --- a/OsmAnd-java/src/net/osmand/binary/BinaryInspector.java +++ b/OsmAnd-java/src/net/osmand/binary/BinaryInspector.java @@ -49,6 +49,7 @@ import net.osmand.data.Building; import net.osmand.data.City; import net.osmand.data.MapObject; import net.osmand.data.Street; +import net.osmand.osm.MapRenderingTypes; import net.osmand.osm.PoiCategory; import net.osmand.util.MapUtils; @@ -542,17 +543,7 @@ public class BinaryInspector { mapObjectsCounter.value++; if (vInfo.osm) { b.setLength(0); - BinaryMapDataObject bobj = new BinaryMapDataObject(); - bobj.setArea(false); - bobj.coordinates = new int[obj.pointsX.length * 2]; - for(int i = 0; i < obj.pointsX.length; i++) { - bobj.coordinates[2*i] = obj.pointsX[i]; - bobj.coordinates[2*i +1] = obj.pointsY[i]; - } - bobj.types = obj.types; - bobj.setId(obj.getId() << 1); - bobj.objectNames = obj.getNames(); - printOsmMapDetails(bobj, b, obj.region); + printOsmRouteDetails(obj, b); try { printToFile(b.toString()); } catch (IOException e) { @@ -612,7 +603,9 @@ public class BinaryInspector { if (i > 0) { b.append(", "); } - b.append(obj.getRestrictionId(i)).append(" (").append(obj.getRestrictionType(i)).append(") "); + b.append(obj.getRestrictionId(i)).append(" (").append( + MapRenderingTypes.getRestrictionValue( + obj.getRestrictionType(i))).append(") "); } b.append("] "); @@ -886,7 +879,7 @@ public class BinaryInspector { } else if (vInfo.vmapObjects) { b.setLength(0); if (vInfo.osm) { - printOsmMapDetails(obj, b, null); + printOsmMapDetails(obj, b); try { printToFile(b.toString()); } catch (IOException e) { @@ -993,13 +986,90 @@ public class BinaryInspector { private static int OSM_ID = 1; - private void printOsmMapDetails(BinaryMapDataObject obj, StringBuilder b, RouteRegion reg) { + private void printOsmRouteDetails(RouteDataObject obj, StringBuilder b) { + StringBuilder tags = new StringBuilder(); + int[] types = obj.getTypes(); + for (int j = 0; j < types.length; j++) { + RouteTypeRule rt = obj.region.quickGetEncodingRule(types[j]); + if (rt == null) { + throw new NullPointerException("Type " + types[j] + "was not found"); + } + tags.append("\t\n"); + } + TIntObjectHashMap names = obj.getNames(); + if (names != null && !names.isEmpty()) { + int[] keys = names.keys(); + for (int j = 0; j < keys.length; j++) { + RouteTypeRule rt = obj.region.quickGetEncodingRule(keys[j]); + if (rt == null) { + throw new NullPointerException("Type " + keys[j] + "was not found"); + } + String name = quoteName(names.get(keys[j])); + tags.append("\t\n"); + } + } + + tags.append("\t\n"); + tags.append("\t\n"); + + TLongArrayList ids = new TLongArrayList(); + for (int i = 0; i < obj.getPointsLength(); i++) { + float lon = (float) MapUtils.get31LongitudeX(obj.getPoint31XTile(i)); + float lat = (float) MapUtils.get31LatitudeY(obj.getPoint31YTile(i)); + int id = OSM_ID++; + b.append("\t\n"); + if (obj.getPointNames(i) != null) { + String[] vs = obj.getPointNames(i); + int[] keys = obj.getPointNameTypes(i); + for (int j = 0; j < keys.length; j++) { + RouteTypeRule rt = obj.region.quickGetEncodingRule(keys[j]); + String name = quoteName(vs[j]); + tags.append("\t\t\n"); + } + } + if (obj.getPointTypes(i) != null) { + int[] keys = obj.getPointTypes(i); + for (int j = 0; j < keys.length; j++) { + RouteTypeRule rt = obj.region.quickGetEncodingRule(keys[j]); + tags.append("\t\t\n"); + } + } + b.append("\t\n"); + ids.add(id); + } + long idway = printWay(ids, b, tags); + if(obj.getRestrictionLength() > 0) { + for(int i = 0; i < obj.getRestrictionLength(); i ++) { + long ld = obj.getRestrictionId(i); + String tp = MapRenderingTypes.getRestrictionValue(obj.getRestrictionType(i)); + int id = OSM_ID++; + b.append("\t\n"); + b.append("\t\n"); + b.append("\t\n"); + b.append("\t\n"); + b.append("\t\n"); + b.append("\t\n"); + b.append("\t\n"); + b.append("\t\n"); + } + } + } + + private String quoteName(String name) { + name = name.replace("'", "'"); + name = name.replace("&", "&"); + return name; + } + + private void printOsmMapDetails(BinaryMapDataObject obj, StringBuilder b) { boolean multipolygon = obj.getPolygonInnerCoordinates() != null && obj.getPolygonInnerCoordinates().length > 0; boolean point = obj.getPointsLength() == 1; StringBuilder tags = new StringBuilder(); int[] types = obj.getTypes(); for (int j = 0; j < types.length; j++) { - TagValuePair pair = reg != null ? convert(reg.quickGetEncodingRule(types[j])): obj.getMapIndex().decodeType(types[j]); + TagValuePair pair = obj.getMapIndex().decodeType(types[j]); if (pair == null) { throw new NullPointerException("Type " + types[j] + "was not found"); } @@ -1008,8 +1078,7 @@ public class BinaryInspector { if (obj.getAdditionalTypes() != null && obj.getAdditionalTypes().length > 0) { for (int j = 0; j < obj.getAdditionalTypes().length; j++) { int addtype = obj.getAdditionalTypes()[j]; - TagValuePair pair = reg != null ? convert(reg.quickGetEncodingRule(addtype)): - obj.getMapIndex().decodeType(addtype); + TagValuePair pair = obj.getMapIndex().decodeType(addtype); if (pair == null) { throw new NullPointerException("Type " + obj.getAdditionalTypes()[j] + "was not found"); } @@ -1020,13 +1089,12 @@ public class BinaryInspector { if (names != null && !names.isEmpty()) { int[] keys = names.keys(); for (int j = 0; j < keys.length; j++) { - TagValuePair pair = reg != null ? convert(reg.quickGetEncodingRule(keys[j])): obj.getMapIndex().decodeType(keys[j]); + TagValuePair pair = obj.getMapIndex().decodeType(keys[j]); if (pair == null) { throw new NullPointerException("Type " + keys[j] + "was not found"); } String name = names.get(keys[j]); - name = name.replace("'", "'"); - name = name.replace("&", "&"); + name = quoteName(name); tags.append("\t\n"); } } @@ -1078,9 +1146,6 @@ public class BinaryInspector { } } - private TagValuePair convert(RouteTypeRule routeTypeRule) { - return new TagValuePair(routeTypeRule.getTag(), routeTypeRule.getValue(), 0); - } private long printWay(TLongArrayList ids, StringBuilder b, StringBuilder tags) { int id = OSM_ID++; diff --git a/OsmAnd-java/src/net/osmand/osm/MapRenderingTypes.java b/OsmAnd-java/src/net/osmand/osm/MapRenderingTypes.java index 35841c3920..7010b10938 100644 --- a/OsmAnd-java/src/net/osmand/osm/MapRenderingTypes.java +++ b/OsmAnd-java/src/net/osmand/osm/MapRenderingTypes.java @@ -588,6 +588,26 @@ public abstract class MapRenderingTypes { } + public static String getRestrictionValue(int i) { + switch (i) { + case RESTRICTION_NO_RIGHT_TURN: + return "NO_RIGHT_TURN".toLowerCase(); + case RESTRICTION_NO_LEFT_TURN: + return "NO_LEFT_TURN".toLowerCase(); + case RESTRICTION_NO_U_TURN: + return "NO_U_TURN".toLowerCase(); + case RESTRICTION_NO_STRAIGHT_ON: + return "NO_STRAIGHT_ON".toLowerCase(); + case RESTRICTION_ONLY_RIGHT_TURN: + return "ONLY_RIGHT_TURN".toLowerCase(); + case RESTRICTION_ONLY_LEFT_TURN: + return "ONLY_LEFT_TURN".toLowerCase(); + case RESTRICTION_ONLY_STRAIGHT_ON: + return "ONLY_STRAIGHT_ON".toLowerCase(); + } + return "unkonwn"; + + } }