diff --git a/OsmAnd-api/src/net/osmand/aidlapi/OsmAndCustomizationConstants.java b/OsmAnd-api/src/net/osmand/aidlapi/OsmAndCustomizationConstants.java index af48552bc4..53e838a9a7 100644 --- a/OsmAnd-api/src/net/osmand/aidlapi/OsmAndCustomizationConstants.java +++ b/OsmAnd-api/src/net/osmand/aidlapi/OsmAndCustomizationConstants.java @@ -11,6 +11,7 @@ public interface OsmAndCustomizationConstants { String DRAWER_MY_PLACES_ID = DRAWER_ITEM_ID_SCHEME + "my_places"; String DRAWER_SEARCH_ID = DRAWER_ITEM_ID_SCHEME + "search"; String DRAWER_DIRECTIONS_ID = DRAWER_ITEM_ID_SCHEME + "directions"; + String DRAWER_TRIP_RECORDING_ID = DRAWER_ITEM_ID_SCHEME + "trip_recording"; String DRAWER_CONFIGURE_MAP_ID = DRAWER_ITEM_ID_SCHEME + "configure_map"; String DRAWER_DOWNLOAD_MAPS_ID = DRAWER_ITEM_ID_SCHEME + "download_maps"; String DRAWER_OSMAND_LIVE_ID = DRAWER_ITEM_ID_SCHEME + "osmand_live"; diff --git a/OsmAnd-java/src/main/java/net/osmand/binary/BinaryMapIndexReader.java b/OsmAnd-java/src/main/java/net/osmand/binary/BinaryMapIndexReader.java index dc16b89f30..34483b01b7 100644 --- a/OsmAnd-java/src/main/java/net/osmand/binary/BinaryMapIndexReader.java +++ b/OsmAnd-java/src/main/java/net/osmand/binary/BinaryMapIndexReader.java @@ -83,7 +83,7 @@ public class BinaryMapIndexReader { public final static int TRANSPORT_STOP_ZOOM = 24; public static final int SHIFT_COORDINATES = 5; - public static final int LABEL_ZOOM_ENCODE = 26; + public static final int LABEL_ZOOM_ENCODE = 31 - SHIFT_COORDINATES; private final static Log log = PlatformUtil.getLog(BinaryMapIndexReader.class); public static boolean READ_STATS = false; public static final SearchPoiTypeFilter ACCEPT_ALL_POI_TYPE_FILTER = new SearchPoiTypeFilter() { diff --git a/OsmAnd-java/src/main/java/net/osmand/binary/BinaryMapPoiReaderAdapter.java b/OsmAnd-java/src/main/java/net/osmand/binary/BinaryMapPoiReaderAdapter.java index fd6fe7bce9..742eae1f61 100644 --- a/OsmAnd-java/src/main/java/net/osmand/binary/BinaryMapPoiReaderAdapter.java +++ b/OsmAnd-java/src/main/java/net/osmand/binary/BinaryMapPoiReaderAdapter.java @@ -37,7 +37,12 @@ public class BinaryMapPoiReaderAdapter { private static final int CATEGORY_MASK = (1 << SHIFT_BITS_CATEGORY) - 1; private static final int ZOOM_TO_SKIP_FILTER_READ = 6; private static final int ZOOM_TO_SKIP_FILTER = 3; - private static final int BUCKET_SEARCH_BY_NAME = 15; // should be bigger 100? + private static final int BUCKET_SEARCH_BY_NAME = 15; // should be bigger 100? + private static final int BASE_POI_SHIFT = SHIFT_BITS_CATEGORY;// 7 + private static final int FINAL_POI_SHIFT = BinaryMapIndexReader.SHIFT_COORDINATES;// 5 + private static final int BASE_POI_ZOOM = 31 - BASE_POI_SHIFT;// 24 zoom + private static final int FINAL_POI_ZOOM = 31 - FINAL_POI_SHIFT;// 26 zoom + public static class PoiSubType { public boolean text; @@ -714,6 +719,8 @@ public class BinaryMapPoiReaderAdapter { Amenity am = null; int x = 0; int y = 0; + int precisionXY = 0; + boolean hasLocation = false; StringBuilder retValue = new StringBuilder(); PoiCategory amenityType = null; LinkedList textTags = null; @@ -740,12 +747,22 @@ public class BinaryMapPoiReaderAdapter { am.setRoutePoint(arp); } } + if (hasLocation) { + if (precisionXY != 0) { + int[] xy = MapUtils.calculateFinalXYFromBaseAndPrecisionXY(BASE_POI_ZOOM, FINAL_POI_ZOOM, precisionXY, x >> BASE_POI_SHIFT, y >> BASE_POI_SHIFT, true); + int x31 = xy[0] << FINAL_POI_SHIFT; + int y31 = xy[1] << FINAL_POI_SHIFT; + am.setLocation(MapUtils.get31LatitudeY(y31), MapUtils.get31LongitudeX(x31)); + } else { + am.setLocation(MapUtils.get31LatitudeY(y), MapUtils.get31LongitudeX(x)); + } + } return am; case OsmandOdb.OsmAndPoiBoxDataAtom.DX_FIELD_NUMBER: - x = (codedIS.readSInt32() + (px << (24 - zoom))) << 7; + x = (codedIS.readSInt32() + (px << (BASE_POI_ZOOM - zoom))) << BASE_POI_SHIFT; break; case OsmandOdb.OsmAndPoiBoxDataAtom.DY_FIELD_NUMBER: - y = (codedIS.readSInt32() + (py << (24 - zoom))) << 7; + y = (codedIS.readSInt32() + (py << (BASE_POI_ZOOM - zoom))) << BASE_POI_SHIFT; req.numberOfVisitedObjects++; if (checkBounds) { if (left31 > x || right31 < x || top31 > y || bottom31 < y) { @@ -754,7 +771,8 @@ public class BinaryMapPoiReaderAdapter { } } am = new Amenity(); - am.setLocation(MapUtils.get31LatitudeY(y), MapUtils.get31LongitudeX(x)); + hasLocation = true; + //am.setLocation(MapUtils.get31LatitudeY(y), MapUtils.get31LongitudeX(x)); // set precise coordinates break; case OsmandOdb.OsmAndPoiBoxDataAtom.SUBCATEGORIES_FIELD_NUMBER: int subtypev = codedIS.readUInt32(); @@ -827,6 +845,11 @@ public class BinaryMapPoiReaderAdapter { case OsmandOdb.OsmAndPoiBoxDataAtom.NOTE_FIELD_NUMBER: am.setDescription(codedIS.readString()); break; + case OsmandOdb.OsmAndPoiBoxDataAtom.PRECISIONXY_FIELD_NUMBER: + if (hasLocation) { + precisionXY = codedIS.readInt32(); + } + break; default: skipUnknownField(t); break; diff --git a/OsmAnd-java/src/main/java/net/osmand/binary/OsmandOdb.java b/OsmAnd-java/src/main/java/net/osmand/binary/OsmandOdb.java index 97a2abeb91..f531dfbfde 100644 --- a/OsmAnd-java/src/main/java/net/osmand/binary/OsmandOdb.java +++ b/OsmAnd-java/src/main/java/net/osmand/binary/OsmandOdb.java @@ -54371,6 +54371,24 @@ public final class OsmandOdb { */ com.google.protobuf.ByteString getTextValuesBytes(int index); + + // optional int32 precisionXY = 16; + /** + * optional int32 precisionXY = 16; + * + *
+     * precision in 1-xy-xy-xy binary format
+     * 
+ */ + boolean hasPrecisionXY(); + /** + * optional int32 precisionXY = 16; + * + *
+     * precision in 1-xy-xy-xy binary format
+     * 
+ */ + int getPrecisionXY(); } /** * Protobuf type {@code OsmAnd.OBF.OsmAndPoiBoxDataAtom} @@ -54539,6 +54557,11 @@ public final class OsmandOdb { textValues_.add(input.readBytes()); break; } + case 128: { + bitField0_ |= 0x00000200; + precisionXY_ = input.readInt32(); + break; + } } } } catch (com.google.protobuf.InvalidProtocolBufferException e) { @@ -55048,6 +55071,30 @@ public final class OsmandOdb { return textValues_.getByteString(index); } + // optional int32 precisionXY = 16; + public static final int PRECISIONXY_FIELD_NUMBER = 16; + private int precisionXY_; + /** + * optional int32 precisionXY = 16; + * + *
+     * precision in 1-xy-xy-xy binary format
+     * 
+ */ + public boolean hasPrecisionXY() { + return ((bitField0_ & 0x00000200) == 0x00000200); + } + /** + * optional int32 precisionXY = 16; + * + *
+     * precision in 1-xy-xy-xy binary format
+     * 
+ */ + public int getPrecisionXY() { + return precisionXY_; + } + private void initFields() { dx_ = 0; dy_ = 0; @@ -55062,6 +55109,7 @@ public final class OsmandOdb { note_ = ""; textCategories_ = java.util.Collections.emptyList(); textValues_ = com.google.protobuf.LazyStringArrayList.EMPTY; + precisionXY_ = 0; } private byte memoizedIsInitialized = -1; public final boolean isInitialized() { @@ -55122,6 +55170,9 @@ public final class OsmandOdb { for (int i = 0; i < textValues_.size(); i++) { output.writeBytes(15, textValues_.getByteString(i)); } + if (((bitField0_ & 0x00000200) == 0x00000200)) { + output.writeInt32(16, precisionXY_); + } getUnknownFields().writeTo(output); } @@ -55203,6 +55254,10 @@ public final class OsmandOdb { size += dataSize; size += 1 * getTextValuesList().size(); } + if (((bitField0_ & 0x00000200) == 0x00000200)) { + size += com.google.protobuf.CodedOutputStream + .computeInt32Size(16, precisionXY_); + } size += getUnknownFields().getSerializedSize(); memoizedSerializedSize = size; return size; @@ -55345,6 +55400,8 @@ public final class OsmandOdb { bitField0_ = (bitField0_ & ~0x00000800); textValues_ = com.google.protobuf.LazyStringArrayList.EMPTY; bitField0_ = (bitField0_ & ~0x00001000); + precisionXY_ = 0; + bitField0_ = (bitField0_ & ~0x00002000); return this; } @@ -55430,6 +55487,10 @@ public final class OsmandOdb { bitField0_ = (bitField0_ & ~0x00001000); } result.textValues_ = textValues_; + if (((from_bitField0_ & 0x00002000) == 0x00002000)) { + to_bitField0_ |= 0x00000200; + } + result.precisionXY_ = precisionXY_; result.bitField0_ = to_bitField0_; onBuilt(); return result; @@ -55525,6 +55586,9 @@ public final class OsmandOdb { } onChanged(); } + if (other.hasPrecisionXY()) { + setPrecisionXY(other.getPrecisionXY()); + } this.mergeUnknownFields(other.getUnknownFields()); return this; } @@ -56506,6 +56570,55 @@ public final class OsmandOdb { return this; } + // optional int32 precisionXY = 16; + private int precisionXY_ ; + /** + * optional int32 precisionXY = 16; + * + *
+       * precision in 1-xy-xy-xy binary format
+       * 
+ */ + public boolean hasPrecisionXY() { + return ((bitField0_ & 0x00002000) == 0x00002000); + } + /** + * optional int32 precisionXY = 16; + * + *
+       * precision in 1-xy-xy-xy binary format
+       * 
+ */ + public int getPrecisionXY() { + return precisionXY_; + } + /** + * optional int32 precisionXY = 16; + * + *
+       * precision in 1-xy-xy-xy binary format
+       * 
+ */ + public Builder setPrecisionXY(int value) { + bitField0_ |= 0x00002000; + precisionXY_ = value; + onChanged(); + return this; + } + /** + * optional int32 precisionXY = 16; + * + *
+       * precision in 1-xy-xy-xy binary format
+       * 
+ */ + public Builder clearPrecisionXY() { + bitField0_ = (bitField0_ & ~0x00002000); + precisionXY_ = 0; + onChanged(); + return this; + } + // @@protoc_insertion_point(builder_scope:OsmAnd.OBF.OsmAndPoiBoxDataAtom) } @@ -65008,37 +65121,38 @@ public final class OsmandOdb { "tegories\030\003 \003(\r\022\025\n\rsubcategories\030\005 \003(\r\"i\n" + "\020OsmAndPoiBoxData\022\014\n\004zoom\030\001 \001(\r\022\t\n\001x\030\002 \001" + "(\r\022\t\n\001y\030\003 \001(\r\0221\n\007poiData\030\005 \003(\0132 .OsmAnd." + - "OBF.OsmAndPoiBoxDataAtom\"\360\001\n\024OsmAndPoiBo", + "OBF.OsmAndPoiBoxDataAtom\"\205\002\n\024OsmAndPoiBo", "xDataAtom\022\n\n\002dx\030\002 \002(\021\022\n\n\002dy\030\003 \002(\021\022\022\n\ncat" + "egories\030\004 \003(\r\022\025\n\rsubcategories\030\005 \003(\r\022\014\n\004" + "name\030\006 \001(\t\022\016\n\006nameEn\030\007 \001(\t\022\n\n\002id\030\010 \001(\004\022\024" + "\n\014openingHours\030\n \001(\t\022\014\n\004site\030\013 \001(\t\022\r\n\005ph" + "one\030\014 \001(\t\022\014\n\004note\030\r \001(\t\022\026\n\016textCategorie" + - "s\030\016 \003(\r\022\022\n\ntextValues\030\017 \003(\t\"\032\n\007IdTable\022\017" + - "\n\007routeId\030\001 \003(\022\"F\n\017RestrictionData\022\014\n\004ty" + - "pe\030\001 \002(\005\022\014\n\004from\030\002 \002(\005\022\n\n\002to\030\003 \002(\005\022\013\n\003vi" + - "a\030\004 \001(\005\"x\n\tRouteData\022\016\n\006points\030\001 \002(\014\022\022\n\n" + - "pointTypes\030\004 \001(\014\022\022\n\npointNames\030\005 \001(\014\022\r\n\005", - "types\030\007 \002(\014\022\017\n\007routeId\030\014 \002(\005\022\023\n\013stringNa" + - "mes\030\016 \001(\014\"\304\005\n\022OsmAndRoutingIndex\022\014\n\004name" + - "\030\001 \002(\t\022?\n\005rules\030\002 \003(\01320.OsmAnd.OBF.OsmAn" + - "dRoutingIndex.RouteEncodingRule\022>\n\trootB" + - "oxes\030\003 \003(\0132+.OsmAnd.OBF.OsmAndRoutingInd" + - "ex.RouteDataBox\022A\n\014basemapBoxes\030\004 \003(\0132+." + - "OsmAnd.OBF.OsmAndRoutingIndex.RouteDataB" + - "ox\022=\n\006blocks\030\005 \003(\0132-.OsmAnd.OBF.OsmAndRo" + - "utingIndex.RouteDataBlock\032;\n\021RouteEncodi" + - "ngRule\022\013\n\003tag\030\003 \002(\t\022\r\n\005value\030\005 \002(\t\022\n\n\002id", - "\030\007 \001(\r\032\231\001\n\014RouteDataBox\022\014\n\004left\030\001 \002(\021\022\r\n" + - "\005right\030\002 \002(\021\022\013\n\003top\030\003 \002(\021\022\016\n\006bottom\030\004 \002(" + - "\021\022\023\n\013shiftToData\030\005 \001(\007\022:\n\005boxes\030\007 \003(\0132+." + - "OsmAnd.OBF.OsmAndRoutingIndex.RouteDataB" + - "ox\032\303\001\n\016RouteDataBlock\022$\n\007idTable\030\005 \001(\0132\023" + - ".OsmAnd.OBF.IdTable\022*\n\013dataObjects\030\006 \003(\013" + - "2\025.OsmAnd.OBF.RouteData\0221\n\014restrictions\030" + - "\007 \003(\0132\033.OsmAnd.OBF.RestrictionData\022,\n\013st" + - "ringTable\030\010 \001(\0132\027.OsmAnd.OBF.StringTable" + - "B\036\n\021net.osmand.binaryB\tOsmandOdb" + "s\030\016 \003(\r\022\022\n\ntextValues\030\017 \003(\t\022\023\n\013precision" + + "XY\030\020 \001(\005\"\032\n\007IdTable\022\017\n\007routeId\030\001 \003(\022\"F\n\017" + + "RestrictionData\022\014\n\004type\030\001 \002(\005\022\014\n\004from\030\002 " + + "\002(\005\022\n\n\002to\030\003 \002(\005\022\013\n\003via\030\004 \001(\005\"x\n\tRouteDat" + + "a\022\016\n\006points\030\001 \002(\014\022\022\n\npointTypes\030\004 \001(\014\022\022\n", + "\npointNames\030\005 \001(\014\022\r\n\005types\030\007 \002(\014\022\017\n\007rout" + + "eId\030\014 \002(\005\022\023\n\013stringNames\030\016 \001(\014\"\304\005\n\022OsmAn" + + "dRoutingIndex\022\014\n\004name\030\001 \002(\t\022?\n\005rules\030\002 \003" + + "(\01320.OsmAnd.OBF.OsmAndRoutingIndex.Route" + + "EncodingRule\022>\n\trootBoxes\030\003 \003(\0132+.OsmAnd" + + ".OBF.OsmAndRoutingIndex.RouteDataBox\022A\n\014" + + "basemapBoxes\030\004 \003(\0132+.OsmAnd.OBF.OsmAndRo" + + "utingIndex.RouteDataBox\022=\n\006blocks\030\005 \003(\0132" + + "-.OsmAnd.OBF.OsmAndRoutingIndex.RouteDat" + + "aBlock\032;\n\021RouteEncodingRule\022\013\n\003tag\030\003 \002(\t", + "\022\r\n\005value\030\005 \002(\t\022\n\n\002id\030\007 \001(\r\032\231\001\n\014RouteDat" + + "aBox\022\014\n\004left\030\001 \002(\021\022\r\n\005right\030\002 \002(\021\022\013\n\003top" + + "\030\003 \002(\021\022\016\n\006bottom\030\004 \002(\021\022\023\n\013shiftToData\030\005 " + + "\001(\007\022:\n\005boxes\030\007 \003(\0132+.OsmAnd.OBF.OsmAndRo" + + "utingIndex.RouteDataBox\032\303\001\n\016RouteDataBlo" + + "ck\022$\n\007idTable\030\005 \001(\0132\023.OsmAnd.OBF.IdTable" + + "\022*\n\013dataObjects\030\006 \003(\0132\025.OsmAnd.OBF.Route" + + "Data\0221\n\014restrictions\030\007 \003(\0132\033.OsmAnd.OBF." + + "RestrictionData\022,\n\013stringTable\030\010 \001(\0132\027.O" + + "smAnd.OBF.StringTableB\036\n\021net.osmand.bina", + "ryB\tOsmandOdb" }; com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() { @@ -65296,7 +65410,7 @@ public final class OsmandOdb { internal_static_OsmAnd_OBF_OsmAndPoiBoxDataAtom_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_OsmAnd_OBF_OsmAndPoiBoxDataAtom_descriptor, - new java.lang.String[] { "Dx", "Dy", "Categories", "Subcategories", "Name", "NameEn", "Id", "OpeningHours", "Site", "Phone", "Note", "TextCategories", "TextValues", }); + new java.lang.String[] { "Dx", "Dy", "Categories", "Subcategories", "Name", "NameEn", "Id", "OpeningHours", "Site", "Phone", "Note", "TextCategories", "TextValues", "PrecisionXY", }); internal_static_OsmAnd_OBF_IdTable_descriptor = getDescriptor().getMessageTypes().get(36); internal_static_OsmAnd_OBF_IdTable_fieldAccessorTable = new diff --git a/OsmAnd-java/src/main/java/net/osmand/map/OsmandRegions.java b/OsmAnd-java/src/main/java/net/osmand/map/OsmandRegions.java index 033beb3789..882231d8a6 100644 --- a/OsmAnd-java/src/main/java/net/osmand/map/OsmandRegions.java +++ b/OsmAnd-java/src/main/java/net/osmand/map/OsmandRegions.java @@ -436,6 +436,7 @@ public class OsmandRegions { cx /= object.getPointsLength(); cy /= object.getPointsLength(); rd.regionCenter = new LatLon(MapUtils.get31LatitudeY((int) cy), MapUtils.get31LongitudeX((int) cx)); + rd.boundingBox = findBoundingBox(object); } rd.regionParentFullName = mapIndexFields.get(mapIndexFields.parentFullName, object); @@ -461,6 +462,43 @@ public class OsmandRegions { return rd; } + private QuadRect findBoundingBox(BinaryMapDataObject object) { + if (object.getPointsLength() == 0) { + return new QuadRect(0, 0, 0, 0); + } + + double currentX = object.getPoint31XTile(0); + double currentY = object.getPoint31YTile(0); + double minX = currentX; + double maxX = currentX; + double minY = currentY; + double maxY = currentY; + + if (object.getPointsLength() > 1) { + for (int i = 1; i < object.getPointsLength(); i++) { + currentX = object.getPoint31XTile(i); + currentY = object.getPoint31YTile(i); + if (currentX > maxX) { + maxX = currentX; + } else if (currentX < minX) { + minX = currentX; + } + if (currentY > maxY) { + maxY = currentY; + } else if (currentY < minY) { + minY = currentY; + } + } + } + + minX = MapUtils.get31LongitudeX((int) minX); + maxX = MapUtils.get31LongitudeX((int) maxX); + double revertedMinY = MapUtils.get31LatitudeY((int) maxY); + double revertedMaxY = MapUtils.get31LatitudeY((int) minY); + + return new QuadRect(minX, revertedMinY, maxX, revertedMaxY); + } + private String getSearchIndex(BinaryMapDataObject object) { MapIndex mi = object.getMapIndex(); TIntObjectIterator it = object.getObjectNames().iterator(); diff --git a/OsmAnd-java/src/main/java/net/osmand/map/WorldRegion.java b/OsmAnd-java/src/main/java/net/osmand/map/WorldRegion.java index 38fbc40c3d..b6fdb4f7d4 100644 --- a/OsmAnd-java/src/main/java/net/osmand/map/WorldRegion.java +++ b/OsmAnd-java/src/main/java/net/osmand/map/WorldRegion.java @@ -1,6 +1,7 @@ package net.osmand.map; import net.osmand.data.LatLon; +import net.osmand.data.QuadRect; import net.osmand.util.Algorithms; import java.io.Serializable; @@ -40,6 +41,7 @@ public class WorldRegion implements Serializable { protected String regionDownloadName; protected boolean regionMapDownload; protected LatLon regionCenter; + protected QuadRect boundingBox; public static class RegionParams { protected String regionLeftHandDriving; @@ -74,12 +76,12 @@ public class WorldRegion implements Serializable { } } - - + + public boolean isRegionMapDownload() { return regionMapDownload; } - + public String getLocaleName() { if(!Algorithms.isEmpty(regionNameLocale)) { return regionNameLocale; @@ -90,14 +92,14 @@ public class WorldRegion implements Serializable { if(!Algorithms.isEmpty(regionName)) { return regionName; } - + return capitalize(regionFullName.replace('_', ' ')); } - + public String getRegionDownloadName() { return regionDownloadName; } - + public String getRegionDownloadNameLC() { return regionDownloadName == null ? null : regionDownloadName.toLowerCase(); } @@ -109,7 +111,7 @@ public class WorldRegion implements Serializable { public LatLon getRegionCenter() { return regionCenter; } - + public String getRegionSearchText() { return regionSearchText; } @@ -143,7 +145,7 @@ public class WorldRegion implements Serializable { this.regionDownloadName = downloadName; superregion = null; subregions = new LinkedList(); - + } public WorldRegion(String id) { this(id, null); @@ -152,7 +154,7 @@ public class WorldRegion implements Serializable { public String getRegionId() { return regionFullName; } - + private String capitalize(String s) { String[] words = s.split(" "); if (words[0].length() > 0) { @@ -182,4 +184,20 @@ public class WorldRegion implements Serializable { } return res; } + + public boolean containsRegion(WorldRegion region) { + if (this.boundingBox != null && region.boundingBox != null) { + return this.boundingBox.contains(region.boundingBox); + } + return false; + } + + public boolean isContinent() { + if (superregion != null) { + String superRegionId = superregion.getRegionId(); + String thisRegionId = getRegionId(); + return WORLD.equals(superRegionId) && !RUSSIA_REGION_ID.equals(thisRegionId); + } + return false; + } } \ No newline at end of file diff --git a/OsmAnd-java/src/main/java/net/osmand/util/Algorithms.java b/OsmAnd-java/src/main/java/net/osmand/util/Algorithms.java index a9d85ce118..83b7c14b44 100644 --- a/OsmAnd-java/src/main/java/net/osmand/util/Algorithms.java +++ b/OsmAnd-java/src/main/java/net/osmand/util/Algorithms.java @@ -127,6 +127,17 @@ public class Algorithms { return def; } + public static double parseDoubleSilently(String input, double def) { + if (input != null && input.length() > 0) { + try { + return Double.parseDouble(input); + } catch (NumberFormatException e) { + return def; + } + } + return def; + } + public static String getFileNameWithoutExtension(File f) { return getFileNameWithoutExtension(f.getName()); } diff --git a/OsmAnd-java/src/main/java/net/osmand/util/MapUtils.java b/OsmAnd-java/src/main/java/net/osmand/util/MapUtils.java index 7a37eee3aa..97e921a3d4 100644 --- a/OsmAnd-java/src/main/java/net/osmand/util/MapUtils.java +++ b/OsmAnd-java/src/main/java/net/osmand/util/MapUtils.java @@ -49,6 +49,47 @@ public class MapUtils { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '_', '~' }; + public static int calculateFromBaseZoomPrecisionXY(int baseZoom, int finalZoom, int xFinal, int yFinal) { + int px = xFinal; + int py = yFinal; + int precisionNumber = 1; + for (int zoom = finalZoom - 1; zoom >= baseZoom; zoom--) { + int x = px / 2; // (int) MapUtils.getTileNumberX(zoom, lon); + int y = py / 2; // (int) MapUtils.getTileNumberY(zoom, lat); + int deltax = px - x * 2; + int deltay = py - y * 2; + precisionNumber = (precisionNumber << 2) + (deltax << 1) + deltay; + // StringBuilder spaces = new StringBuilder(); + // for (int i = 0; i < 32 - zoom; i++) { + // spaces.append(' '); + // } + // System.out.println(String.format("%d %s + %d %s %s + %d", zoom, Integer.toBinaryString(x), deltax, spaces.toString(), Integer.toBinaryString(y), deltay)); + px = x; + py = y; + } + // System.out.println(String.format("Bits: %d %s (%d)", Integer.toBinaryString(precisionNumber).length(), Integer.toBinaryString(precisionNumber), precisionNumber)); + return precisionNumber; + } + + public static int[] calculateFinalXYFromBaseAndPrecisionXY(int bazeZoom, int finalZoom, + int precisionXY, int xBase, int yBase, boolean ignoreNotEnoughPrecision) { + // System.out.println(String.format("Base x, y at zoom %d: %d %d", zoomToStart, xBaseApproximation, yBaseApproximation)); + // calculate finish approximation using precisionNumber + int finalX = xBase; + int finalY = yBase; + int precisionCalc = precisionXY; + for (int zoom = bazeZoom; zoom < finalZoom; zoom++) { + if (precisionCalc <= 1 && precisionCalc > 0 && !ignoreNotEnoughPrecision) { + throw new IllegalArgumentException("Not enough bits to retrieve zoom approximation"); + } + finalY = finalY * 2 + (precisionXY & 1); + finalX = finalX * 2 + ((precisionXY & 2) >> 1); + precisionXY = precisionXY >> 2; + } + // System.out.println(String.format("Calc x, y at zoom %d: %d %d", finalZoom, finalX, finalY)); + return new int[] { finalX, finalY }; + } + public static double getDistance(LatLon l, double latitude, double longitude) { diff --git a/OsmAnd/build.gradle b/OsmAnd/build.gradle index 11c9388fa0..91a8ce39ab 100644 --- a/OsmAnd/build.gradle +++ b/OsmAnd/build.gradle @@ -85,6 +85,7 @@ android { } amazonFree { java.srcDirs = ["src-nogms", "src-google"] + manifest.srcFile "AndroidManifest-gplayFree.xml" } amazonFull { java.srcDirs = ["src-nogms", "src-google"] diff --git a/OsmAnd/res/drawable-mdpi/btn_background_active_dark.xml b/OsmAnd/res/drawable-mdpi/btn_background_active_dark.xml new file mode 100644 index 0000000000..88873ec3b4 --- /dev/null +++ b/OsmAnd/res/drawable-mdpi/btn_background_active_dark.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/OsmAnd/res/drawable-mdpi/btn_background_inactive_dark.xml b/OsmAnd/res/drawable-mdpi/btn_background_inactive_dark.xml new file mode 100644 index 0000000000..07c3aed3e9 --- /dev/null +++ b/OsmAnd/res/drawable-mdpi/btn_background_inactive_dark.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/OsmAnd/res/drawable-mdpi/btn_background_inactive_light.xml b/OsmAnd/res/drawable-mdpi/btn_background_inactive_light.xml new file mode 100644 index 0000000000..03ca0abfe5 --- /dev/null +++ b/OsmAnd/res/drawable-mdpi/btn_background_inactive_light.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/OsmAnd/res/drawable-mdpi/btn_background_stroked_active_dark.xml b/OsmAnd/res/drawable-mdpi/btn_background_stroked_active_dark.xml new file mode 100644 index 0000000000..1cdfa50a92 --- /dev/null +++ b/OsmAnd/res/drawable-mdpi/btn_background_stroked_active_dark.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/OsmAnd/res/drawable-mdpi/btn_background_stroked_active_light.xml b/OsmAnd/res/drawable-mdpi/btn_background_stroked_active_light.xml new file mode 100644 index 0000000000..543dd7ef1f --- /dev/null +++ b/OsmAnd/res/drawable-mdpi/btn_background_stroked_active_light.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/OsmAnd/res/drawable-mdpi/btn_background_stroked_inactive_dark.xml b/OsmAnd/res/drawable-mdpi/btn_background_stroked_inactive_dark.xml new file mode 100644 index 0000000000..f669c9d34f --- /dev/null +++ b/OsmAnd/res/drawable-mdpi/btn_background_stroked_inactive_dark.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/OsmAnd/res/drawable-mdpi/btn_background_stroked_inactive_light.xml b/OsmAnd/res/drawable-mdpi/btn_background_stroked_inactive_light.xml new file mode 100644 index 0000000000..feacf12888 --- /dev/null +++ b/OsmAnd/res/drawable-mdpi/btn_background_stroked_inactive_light.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/OsmAnd/res/drawable/btn_background_active_light.xml b/OsmAnd/res/drawable/btn_background_active_light.xml new file mode 100644 index 0000000000..4d8d8e82a5 --- /dev/null +++ b/OsmAnd/res/drawable/btn_background_active_light.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/OsmAnd/res/drawable/btn_unstroked_dark.xml b/OsmAnd/res/drawable/btn_unstroked_dark.xml new file mode 100644 index 0000000000..b1debd42fd --- /dev/null +++ b/OsmAnd/res/drawable/btn_unstroked_dark.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/OsmAnd/res/drawable/btn_unstroked_light.xml b/OsmAnd/res/drawable/btn_unstroked_light.xml new file mode 100644 index 0000000000..07db445277 --- /dev/null +++ b/OsmAnd/res/drawable/btn_unstroked_light.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/OsmAnd/res/drawable/ic_action_ruler_line.xml b/OsmAnd/res/drawable/ic_action_ruler_line.xml new file mode 100644 index 0000000000..0fb6bfc5fa --- /dev/null +++ b/OsmAnd/res/drawable/ic_action_ruler_line.xml @@ -0,0 +1,23 @@ + + + + + + diff --git a/OsmAnd/res/layout/bottom_sheet_button_with_icon.xml b/OsmAnd/res/layout/bottom_sheet_button_with_icon.xml new file mode 100644 index 0000000000..b184a3bea7 --- /dev/null +++ b/OsmAnd/res/layout/bottom_sheet_button_with_icon.xml @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/OsmAnd/res/layout/bottom_sheet_select_segment.xml b/OsmAnd/res/layout/bottom_sheet_select_segment.xml new file mode 100644 index 0000000000..ee4dfec006 --- /dev/null +++ b/OsmAnd/res/layout/bottom_sheet_select_segment.xml @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/OsmAnd/res/layout/dialog_edit_gpx_description.xml b/OsmAnd/res/layout/dialog_edit_gpx_description.xml index 1d2428f82b..66c0d57f0a 100644 --- a/OsmAnd/res/layout/dialog_edit_gpx_description.xml +++ b/OsmAnd/res/layout/dialog_edit_gpx_description.xml @@ -21,11 +21,13 @@ android:layout_marginLeft="@dimen/card_padding" android:padding="@dimen/context_menu_padding_margin_small" android:paddingStart="@dimen/context_menu_padding_margin_small" - android:paddingEnd="@dimen/context_menu_padding_margin_small"> + android:paddingEnd="@dimen/context_menu_padding_margin_small" + android:background="@null"> @@ -43,18 +45,20 @@ osmand:typeface="@string/font_roboto_medium" /> + android:layout_gravity="center_vertical"> + android:layout_height="match_parent" + android:layout_marginStart="@dimen/content_padding" + android:layout_marginLeft="@dimen/content_padding" + android:layout_marginTop="@dimen/content_padding_half" + android:layout_marginRight="@dimen/content_padding" + android:layout_marginEnd="@dimen/content_padding" + android:layout_marginBottom="@dimen/content_padding_half"> + android:orientation="vertical"> - + android:layout_height="@dimen/action_bar_height" + android:background="?attr/pstsTabBackground" + android:orientation="horizontal" + android:gravity="center_vertical"> - + - + + + + + + + + + + + + + + android:layout_height="match_parent" + android:background="?attr/activity_background_basic"> + android:visibility="gone" + tools:visibility="visible"> + osmand:typeface="@string/font_roboto_medium" /> diff --git a/OsmAnd/res/layout/favorites_list_item.xml b/OsmAnd/res/layout/favorites_list_item.xml index d53497c0f5..106e532e1e 100644 --- a/OsmAnd/res/layout/favorites_list_item.xml +++ b/OsmAnd/res/layout/favorites_list_item.xml @@ -1,158 +1,158 @@ - + - + - + - + - + - + - - + + - + - + - + - + - + - + - - - + + + - + - - + + \ No newline at end of file diff --git a/OsmAnd/res/layout/gpx_description_preview_card.xml b/OsmAnd/res/layout/gpx_description_preview_card.xml index a3b0ab8b25..551110d028 100644 --- a/OsmAnd/res/layout/gpx_description_preview_card.xml +++ b/OsmAnd/res/layout/gpx_description_preview_card.xml @@ -68,19 +68,18 @@ android:orientation="horizontal"> + android:layout_marginStart="@dimen/content_padding_half" + android:layout_marginLeft="@dimen/content_padding_half"> + android:layout_marginRight="@dimen/content_padding_half" + android:layout_marginEnd="@dimen/content_padding_half" + android:layout_gravity="end"> @@ -142,7 +140,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center_vertical" - android:background="?attr/selectableItemBackgroundBorderless" + android:duplicateParentState="true" android:padding="@dimen/bottom_sheet_content_padding_small" android:paddingStart="@dimen/bottom_sheet_content_padding_small" android:paddingEnd="@dimen/bottom_sheet_content_padding_small" diff --git a/OsmAnd/res/layout/gpx_overview_fragment.xml b/OsmAnd/res/layout/gpx_overview_fragment.xml index 3b205ae60e..e613260e86 100644 --- a/OsmAnd/res/layout/gpx_overview_fragment.xml +++ b/OsmAnd/res/layout/gpx_overview_fragment.xml @@ -38,21 +38,23 @@ android:layout_height="wrap_content" android:layout_marginStart="@dimen/content_padding" android:layout_marginLeft="@dimen/content_padding" - android:gravity="center" - android:orientation="horizontal" - android:paddingTop="@dimen/dash_margin" - android:paddingBottom="@dimen/dash_margin"> + android:layout_marginTop="@dimen/dash_margin" + android:layout_marginBottom="@dimen/dash_margin" + android:orientation="horizontal"> + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/OsmAnd/res/layout/gpx_track_item.xml b/OsmAnd/res/layout/gpx_track_item.xml index 69bfbb6119..26a7dc6f3f 100644 --- a/OsmAnd/res/layout/gpx_track_item.xml +++ b/OsmAnd/res/layout/gpx_track_item.xml @@ -51,6 +51,7 @@ @@ -31,6 +30,7 @@ android:layout_height="match_parent" android:layout_weight="1" android:background="@null" + android:letterSpacing="@dimen/description_letter_spacing" android:lines="1" android:textColor="?android:attr/textColorPrimary" android:textSize="@dimen/default_desc_text_size" @@ -61,8 +61,11 @@ android:layout_height="wrap_content" android:background="@null" android:ellipsize="end" + android:letterSpacing="@dimen/description_letter_spacing" + android:gravity="start|center_vertical" android:lines="1" android:maxWidth="@dimen/grid_menu_item_width" + android:minWidth="@dimen/map_route_buttons_width" android:textColor="?android:attr/textColorSecondary" android:textSize="@dimen/default_desc_text_size" tools:text="@string/distance" /> diff --git a/OsmAnd/res/layout/settings_group_title.xml b/OsmAnd/res/layout/settings_group_title.xml index 32629ed2de..456a3aace1 100644 --- a/OsmAnd/res/layout/settings_group_title.xml +++ b/OsmAnd/res/layout/settings_group_title.xml @@ -73,6 +73,7 @@ android:paddingBottom="@dimen/content_padding_small"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/OsmAnd/res/values-ar/strings.xml b/OsmAnd/res/values-ar/strings.xml index eb67234ff6..e374f5a869 100644 --- a/OsmAnd/res/values-ar/strings.xml +++ b/OsmAnd/res/values-ar/strings.xml @@ -2309,7 +2309,7 @@ التضاريس المفضلة : مسطحة أو تلال. الانحدار نقل - استخدام بيانات ارتفاع التضاريس المقدمة بواسطة SRTM, ASTER, EU-DEM. + إظهار نقاط ومعالم العمق. بدء مقطع جديدة بعد فارق 6 دقائق، مسار جديد بعد فارق 2 ساعة، أو ملف جديد بعد فارق أطول إذا تغير التاريخ. متوقف مؤقتاً diff --git a/OsmAnd/res/values-az/strings.xml b/OsmAnd/res/values-az/strings.xml index e4f88ddc9c..e800999147 100644 --- a/OsmAnd/res/values-az/strings.xml +++ b/OsmAnd/res/values-az/strings.xml @@ -779,7 +779,7 @@ Eniş Yoxuş Yüksəklik məlumatlarını istifadə et - SRTM, ASTER və EU-DEM tərəfindən təmin edilən ərazi yüksəklik məlumatlarını istifadə et. + Dərinlik konturlarını və nöqtələrini göstər. Dəniz dərinliyi konturları Kontur xəttinin sıxlığı diff --git a/OsmAnd/res/values-b+ast/strings.xml b/OsmAnd/res/values-b+ast/strings.xml index fd7c7ffabd..f1815fc169 100644 --- a/OsmAnd/res/values-b+ast/strings.xml +++ b/OsmAnd/res/values-b+ast/strings.xml @@ -519,7 +519,7 @@ Tiempu Distancia total Usar datos d\'elevación - Inclúi la elevación del tarrén (pelos datos de SRTM, ASTER y EU-DEM). + Esbillar otra rexón Camudar Imaxe de Mapillary diff --git a/OsmAnd/res/values-b+be+Latn/strings.xml b/OsmAnd/res/values-b+be+Latn/strings.xml index 6c09337e92..5ae3b5317a 100644 --- a/OsmAnd/res/values-b+be+Latn/strings.xml +++ b/OsmAnd/res/values-b+be+Latn/strings.xml @@ -2189,7 +2189,7 @@ Praparcyjnaj pamiacі %4$s MB (Abmiežavańnie Android %5$s MB, Dalvik %6$s MB). Vyjava Mapillary Dazvaliaje chutki ŭniosak ŭ Mapillary. Pieravažny reĺjef: raŭninny ci harysty. - Faktar vyšyni ziamnoj pavierchni (danyja z SRTM, ASTER i EU-DEM). + Pakazvać kontury i punkty hlybini. Ščyĺnasć haryzantaliaŭ Taŭščynia haryzantaliaŭ (izahipsy) diff --git a/OsmAnd/res/values-be/strings.xml b/OsmAnd/res/values-be/strings.xml index f8c57035e9..1f45267fa8 100644 --- a/OsmAnd/res/values-be/strings.xml +++ b/OsmAnd/res/values-be/strings.xml @@ -2194,7 +2194,7 @@ Час Агульная даўжыня Выкарыстоўваць даныя вышыні - Фактар вышыні зямной паверхні (даныя з SRTM, ASTER і EU-DEM). + Аўтаматычнае дзяленне запісаў пасля перапынку Пачаць новы сегмент пасля 6-хвіліннага перапынку, новы след — пасля 2-гадзіннага перапынку, ці новы файл пасля доўгага перапынку (як змяніляся дата). Берберская diff --git a/OsmAnd/res/values-ca/strings.xml b/OsmAnd/res/values-ca/strings.xml index c5537ac281..5bcd59d0b8 100644 --- a/OsmAnd/res/values-ca/strings.xml +++ b/OsmAnd/res/values-ca/strings.xml @@ -2162,7 +2162,7 @@ Mostra isòbates i fondàries puntuals. Isòbates Utilitza les cotes d\'elevació - Revisa l\'elevació del terreny (mitjançant dades SRTM, ASTER i EU-DEM). + Alçat de la ruta Descens Ascens diff --git a/OsmAnd/res/values-cs/strings.xml b/OsmAnd/res/values-cs/strings.xml index 10ec2cce11..94db359827 100644 --- a/OsmAnd/res/values-cs/strings.xml +++ b/OsmAnd/res/values-cs/strings.xml @@ -2174,7 +2174,7 @@ Čas Celková vzdálenost Použít údaje o nadmořské výšce - Zohlednit převýšení terénu (data od SRTM, ASTER a EU-DEM). + Styl jízdy Vyberte složku pro soubor GPX Soubor se nepodařilo přesunout. diff --git a/OsmAnd/res/values-da/strings.xml b/OsmAnd/res/values-da/strings.xml index c2d2fe7bc9..c176ef70df 100644 --- a/OsmAnd/res/values-da/strings.xml +++ b/OsmAnd/res/values-da/strings.xml @@ -2172,7 +2172,7 @@ Vis dybdekonturer og -punkter. Havdybdekonturer Brug højdedata - Terrænhøjde-faktor (via SRTM, ASTER og EU-DEM data). + Rutehøjde Fald Stigning diff --git a/OsmAnd/res/values-de/strings.xml b/OsmAnd/res/values-de/strings.xml index 0f1e174265..931f8aaa37 100644 --- a/OsmAnd/res/values-de/strings.xml +++ b/OsmAnd/res/values-de/strings.xml @@ -2171,7 +2171,7 @@ Offener Standortcode (OLC) Eine Schaltfläche, um durch die Liste unten zu blättern. Höhendaten berücksichtigen - Faktor im Geländeprofil (über SRTM, ASTER und EU-DEM-Daten). + Nautische Tiefenlinien Tiefenlinien und -punkte einblenden. Routenhöhenprofil diff --git a/OsmAnd/res/values-el/strings.xml b/OsmAnd/res/values-el/strings.xml index 49d5c237d7..901ae967d1 100644 --- a/OsmAnd/res/values-el/strings.xml +++ b/OsmAnd/res/values-el/strings.xml @@ -1876,7 +1876,7 @@ Συνολική απόσταση Επιλέξτε διακύμανση ανύψωσης Χρήση υψομετρικών δεδομένων - Συντελεστής σε ανύψωση εδάφους (μέσω SRTM, ASTER και δεδομένων EU-DEM). + Εμφάνιση ισοβαθών καμπυλών και σημείων. Ναυτικές ισοβαθείς καμπύλες Αυτόματος διαχωρισμός καταγραφών μετά από κενό diff --git a/OsmAnd/res/values-eo/strings.xml b/OsmAnd/res/values-eo/strings.xml index 515034f112..f8442229c2 100644 --- a/OsmAnd/res/values-eo/strings.xml +++ b/OsmAnd/res/values-eo/strings.xml @@ -2166,7 +2166,7 @@ Montri punktojn kaj kurbojn de profundo. Maraj profundec-kurboj Uzi datumojn pri altitudo - Konsideri nivelon de tereno (laŭ datumoj el SRTM, ASTER kaj EU-DEM). + Kursa altitudo Malsupreniro Supreniro diff --git a/OsmAnd/res/values-es-rAR/strings.xml b/OsmAnd/res/values-es-rAR/strings.xml index 1d455f3a1c..5ab5e53945 100644 --- a/OsmAnd/res/values-es-rAR/strings.xml +++ b/OsmAnd/res/values-es-rAR/strings.xml @@ -2175,7 +2175,7 @@ Tiempo Distancia total Usar datos de elevación - Incluye como factor, la elevación del terreno (según datos de SRTM, ASTER y EU-DEM). + Estilo de conducción Marcar la carpeta del archivo GPX No se pudo mover el archivo. diff --git a/OsmAnd/res/values-es-rUS/strings.xml b/OsmAnd/res/values-es-rUS/strings.xml index 73bf6c2aa8..a231dfc79f 100644 --- a/OsmAnd/res/values-es-rUS/strings.xml +++ b/OsmAnd/res/values-es-rUS/strings.xml @@ -2175,7 +2175,7 @@ Tiempo Distancia total Usar datos de elevación - Incluye como factor, la elevación del terreno (según datos de SRTM, ASTER y EU-DEM). + Estilo de conducción Marcar la carpeta del archivo GPX No se pudo mover el archivo. diff --git a/OsmAnd/res/values-es/strings.xml b/OsmAnd/res/values-es/strings.xml index eed7a15a11..b0b779d318 100644 --- a/OsmAnd/res/values-es/strings.xml +++ b/OsmAnd/res/values-es/strings.xml @@ -2163,7 +2163,7 @@ Tiempo Distancia total Usar datos de elevación - Incluye como factor, la elevación del terreno (según datos de SRTM, ASTER y EU-DEM). + Mostrar curvas y puntos de profundidad. Curvas de profundidad náuticas División automática de grabaciones en intervalos diff --git a/OsmAnd/res/values-et/strings.xml b/OsmAnd/res/values-et/strings.xml index a42e33c3a4..7061f624dc 100644 --- a/OsmAnd/res/values-et/strings.xml +++ b/OsmAnd/res/values-et/strings.xml @@ -2504,7 +2504,7 @@ Kuva sügavuskontuurid ja -punktid. Meresügavuse kontuurid Kasuta kõrgusandmeid - Maastiku kõrguse tegur (SRTM, ASTER ja EU-DEM andmestikust). + Laskumine Tõus Kõrgusevahe diff --git a/OsmAnd/res/values-eu/strings.xml b/OsmAnd/res/values-eu/strings.xml index 6c356b4117..44936b286b 100644 --- a/OsmAnd/res/values-eu/strings.xml +++ b/OsmAnd/res/values-eu/strings.xml @@ -2197,7 +2197,7 @@ Area honi dagokio: %1$s x %2$s Denbora Distantzia guztira Erabili elebazio kotak - Kontuan izan terrenoaren elebazioa (SRTM, ASTER, eta EU-DEM datuen bidez). + Malda Berberera Eskumatik gidatzea diff --git a/OsmAnd/res/values-fa/strings.xml b/OsmAnd/res/values-fa/strings.xml index 76b8a3ea0a..6c5174e96c 100644 --- a/OsmAnd/res/values-fa/strings.xml +++ b/OsmAnd/res/values-fa/strings.xml @@ -1811,7 +1811,7 @@ میانگین ارتفاع مسافت کل استفاده از دادهٔ ارتفاعی - فاکتور ارتفاع‌دهی عارضه‌ها (با استفاده از داده‌های SRTM،‏ ASTER و EU-DEM). + نمایش نقاط و منحنی‌های میزان عمقی. منحنی‌های میزان عمق دریا تراکم منحنی میزان diff --git a/OsmAnd/res/values-fi/strings.xml b/OsmAnd/res/values-fi/strings.xml index 08c023bef1..3801bf19b4 100644 --- a/OsmAnd/res/values-fi/strings.xml +++ b/OsmAnd/res/values-fi/strings.xml @@ -1898,7 +1898,7 @@ Jos pidät OsmAndista ja OSMsta ja haluat tukea niitä, on tämä täydellinen t Aika Kokonaisetäisyys Käytä korkeustietoja - Käytä maaston korkeustietoja jotka saadaan SRTM, ASTER ja EU-DEM lähteistä + Jaa automaattisesti nauhoitukset tauon jälkeen Piilota vesi Toiminnon nimi diff --git a/OsmAnd/res/values-fr/strings.xml b/OsmAnd/res/values-fr/strings.xml index 117c95585c..7eec7e78e9 100644 --- a/OsmAnd/res/values-fr/strings.xml +++ b/OsmAnd/res/values-fr/strings.xml @@ -2158,7 +2158,7 @@ Afficher les lignes et points de sonde. Lignes de sonde maritimes Utiliser les données d\'altitude - Facteur pour les données d\'altitude fournies par SRTM, ASTER et EU-DEM. + Altitude moyenne Distance totale Durée diff --git a/OsmAnd/res/values-gl/strings.xml b/OsmAnd/res/values-gl/strings.xml index 990ad44972..31607c9fc5 100644 --- a/OsmAnd/res/values-gl/strings.xml +++ b/OsmAnd/res/values-gl/strings.xml @@ -2572,7 +2572,7 @@ Lon %2$s
O OsmAnd recompila información sobre as lapelas que abres na aplicación. Non estamos a recompilar datos da localización, datos inseridos na aplicación ou datos relacionados coas áreas que ollas, procuras ou baixas. Agocha os descontos da aplicación e as mensaxes especiais dos acontecementos locais. Escoller variación da altitude - Inclúe coma factor, a altitude do terreo (segundo datos do SRTM, ASTER e EU-DEM). + Amosar curvas e puntos do afundimento. Curvas do afundimento náuticos División automática das gravacións en intres diff --git a/OsmAnd/res/values-hu/strings.xml b/OsmAnd/res/values-hu/strings.xml index 0fcacd38b7..47a3917779 100644 --- a/OsmAnd/res/values-hu/strings.xml +++ b/OsmAnd/res/values-hu/strings.xml @@ -2168,7 +2168,7 @@ Idő Teljes táv Magasságadatok használata - Terepmagasság figyelembe vétele (SRTM, ASTER és EU-DEM domborzatmodellekből). + Mélységvonalak és pontok megjelenítése. Tengeri mélységvonalak Felvételek automatikus szétvágása szünet után diff --git a/OsmAnd/res/values-hy/strings.xml b/OsmAnd/res/values-hy/strings.xml index b01a74768c..4d997b73ce 100644 --- a/OsmAnd/res/values-hy/strings.xml +++ b/OsmAnd/res/values-hy/strings.xml @@ -341,7 +341,7 @@ Ընդհանուր հեռավորությունը Ընտրել բարձունքների տատանումը Օգտագործել բարձրության տվյալները - Օգտագործել բարձրության տվյալներ տրամադրված SRTM, ASTER և EU-DEM։ + Ցույց տալ խորության տվյալները։ Ծովային խորքային ուրվագծեր Եզրագծերի խտությունը diff --git a/OsmAnd/res/values-id/strings.xml b/OsmAnd/res/values-id/strings.xml index 6661a37328..066b53f1b6 100644 --- a/OsmAnd/res/values-id/strings.xml +++ b/OsmAnd/res/values-id/strings.xml @@ -333,7 +333,7 @@ Jarak Total Pilih fluktuasi ketinggian Gunakan Data Ketinggian - Gunakan data elevasi medan yang disediakan oleh SRTM, ASTER, dan EU-DEM. + Tampilkan kontur dan titik kedalaman. Kontur kedalaman bahari Rekaman split otomatis setelah jeda diff --git a/OsmAnd/res/values-is/strings.xml b/OsmAnd/res/values-is/strings.xml index 09b1c14e24..baf977ae9c 100644 --- a/OsmAnd/res/values-is/strings.xml +++ b/OsmAnd/res/values-is/strings.xml @@ -1994,7 +1994,7 @@ Letur fyrir kort Ekið á hægri akrein Sjálfvirkt - Nota yfirborðshæðargögn (í gegnum SRTM, ASTER og EU-DEM). + Skipta skráningu sjálfvirkt eftir bil Stigvaxandi leit í borg Veldu þegar birta á kort einungis með vegum: diff --git a/OsmAnd/res/values-it/strings.xml b/OsmAnd/res/values-it/strings.xml index 18e12db1ea..b0fed91a00 100644 --- a/OsmAnd/res/values-it/strings.xml +++ b/OsmAnd/res/values-it/strings.xml @@ -2167,7 +2167,7 @@ Tempo Distanza totale Utilizza dati altitudine - Fattore di elevazione del terreno (tramite i dati SRTM, ASTER e EU-DEM). + Intervallo di tempo Massimo Ora d\'inizio diff --git a/OsmAnd/res/values-iw/strings.xml b/OsmAnd/res/values-iw/strings.xml index 34d36b235e..a9c6fff921 100644 --- a/OsmAnd/res/values-iw/strings.xml +++ b/OsmAnd/res/values-iw/strings.xml @@ -2712,7 +2712,7 @@ \n ניתן לקבל נווט אמין למדינה שלך - בין אם זו ישראל, צרפת, גרמניה, מקסיקו, אנגליה, ספרד, הולנד, ארה״ב, רוסיה, ברזיל או כל מדינה אחרת. מייל ימי עיבוד מסלולים לפי עקבות OSMC. - מקדם נתוני גובה פני קרקע (נתונים של SRTM,‏ ASTER ו־EU-DEM). + תוסף זה מעשיר את המפה ואת הניווט של יישומון OsmAnd ומאפשר לייצר מפות ימיות לחתירה, הפלגה וסוגים נוספים של ספורט ימי. \n \nתוסף מפה מיוחד ל־OsmAnd יספק את כל סימוני הניווט הימיים והסימנים הימיים המוסכמים, לניווט במקווי מים פנימיים לרבות ניווט באזורים הקרובים לחוף. התיאור של כל סימון ניווט מספק את הפרטים הנדרשים כדי לזהות אותם ואת המשמעות שלהם (קטגוריה, צורה, צבע, רצף, הפניה וכו׳). diff --git a/OsmAnd/res/values-ja/strings.xml b/OsmAnd/res/values-ja/strings.xml index 5b24b99331..a5edb2aaeb 100644 --- a/OsmAnd/res/values-ja/strings.xml +++ b/OsmAnd/res/values-ja/strings.xml @@ -2084,7 +2084,7 @@ POIの更新は利用できません 時間 総走行距離 標高データを使用 - SRTM、ASTER、EU-DEMによる地形標高データを使用します。 + 水域 水域ポリゴン 近隣のWikipedia記事 diff --git a/OsmAnd/res/values-lt/strings.xml b/OsmAnd/res/values-lt/strings.xml index 744312bd1d..eb1d4b98bc 100644 --- a/OsmAnd/res/values-lt/strings.xml +++ b/OsmAnd/res/values-lt/strings.xml @@ -2231,7 +2231,7 @@ Tai yra puikus būdas paremti OsmAnd ir OSM, jei jie jums patinka. Bendras atstumas Pasirinkite aukščio kaitos diapazoną Naudoti aukščio informaciją - Vietovės reljefo faktorius (SRTM, ASTER ir EU-DEM duomenimis). + Rodyti gylio kontūrus ir taškus. Vandenyno gylio kontūrai Automatinis įrašo padalinimas po pertraukimo diff --git a/OsmAnd/res/values-lv/strings.xml b/OsmAnd/res/values-lv/strings.xml index c80dfec131..7120ce1b02 100644 --- a/OsmAnd/res/values-lv/strings.xml +++ b/OsmAnd/res/values-lv/strings.xml @@ -2166,7 +2166,7 @@ Apraksta laukumu: %1$s x %2$s Laiks Maršruta garums Lietot elevācijas datus - Lietot apgabala elevācijas datus no SRTM, ASTER un EU-DEM. + Ieteicamais reljefs: līdzens vai kalnains. Slīpums Berberu diff --git a/OsmAnd/res/values-nb/strings.xml b/OsmAnd/res/values-nb/strings.xml index df0b7415ea..5d0a58d52d 100644 --- a/OsmAnd/res/values-nb/strings.xml +++ b/OsmAnd/res/values-nb/strings.xml @@ -2015,7 +2015,7 @@ Legg til ny mappe Spor Bruk høydedata - Ta hensyn til terrenghøyde (data fra SRTM, ASTER og EU-DEM). + Melding Tillatelser Kunne ikke importere filen. Kontroller at OsmAnd har tillatelse til å lese den. diff --git a/OsmAnd/res/values-nl/strings.xml b/OsmAnd/res/values-nl/strings.xml index 010ffd760d..5209bca499 100644 --- a/OsmAnd/res/values-nl/strings.xml +++ b/OsmAnd/res/values-nl/strings.xml @@ -2177,7 +2177,7 @@ Tijd in beweging Rijstijl Hoogtegegevens gebruiken - Gebruik hoogtegegevens (van SRTM, ASTER en EU-DEM data) bij bepalen route. + Track Rechts rijdend Automatisch diff --git a/OsmAnd/res/values-pl/strings.xml b/OsmAnd/res/values-pl/strings.xml index 6845928802..384f3f73a1 100644 --- a/OsmAnd/res/values-pl/strings.xml +++ b/OsmAnd/res/values-pl/strings.xml @@ -2169,7 +2169,7 @@ Wyświetla kontury i punkty głębi. Morskie kontury głębokości Używanie danych wysokościowych - Używa danych wysokościowych (dane z SRTM, ASTER i EU-DEM). + Wysokość trasy W dół W górę diff --git a/OsmAnd/res/values-pt-rBR/strings.xml b/OsmAnd/res/values-pt-rBR/strings.xml index ded36e2034..7a21af4cd6 100644 --- a/OsmAnd/res/values-pt-rBR/strings.xml +++ b/OsmAnd/res/values-pt-rBR/strings.xml @@ -2207,7 +2207,7 @@ Altitude da rota Selecionar a flutuação de altimetria Usar dados altimétricos - Considerar altimetria do terreno (via dados SRTM, ASTER e EU-DEM). + Mostrar curvas e pontos batimétricos. Batimetria náutica Densidade das curvas de nível diff --git a/OsmAnd/res/values-pt/strings.xml b/OsmAnd/res/values-pt/strings.xml index b6456d3df6..b5ddfb1f86 100644 --- a/OsmAnd/res/values-pt/strings.xml +++ b/OsmAnd/res/values-pt/strings.xml @@ -2011,7 +2011,7 @@ Distância total Selecionar flutuação de elevação Utilizar dados de elevação - Utilizar elevação de terreno (dos dados do SRTM, ASTER e EU-DEM). + Mostrar pontos e contornos de profundidade. Contornos de profundidade náuticos Mostra a transparência da barra de navegação diff --git a/OsmAnd/res/values-ru/strings.xml b/OsmAnd/res/values-ru/strings.xml index 648c8d72e1..b77fe2b33d 100644 --- a/OsmAnd/res/values-ru/strings.xml +++ b/OsmAnd/res/values-ru/strings.xml @@ -142,7 +142,7 @@ Стиль езды Колебания высоты ландшафта Использовать данные о высотах - Фактор рельефа местности (по данным SRTM, ASTER и EU-DEM). + Действие переименовано в %1$s, чтобы избежать дублирования. Обнаружен дубликат имени Переключатель, чтобы показать или скрыть избранные точки на карте. diff --git a/OsmAnd/res/values-sc/strings.xml b/OsmAnd/res/values-sc/strings.xml index f6dbd14b7b..0f5d4c3fdb 100644 --- a/OsmAnd/res/values-sc/strings.xml +++ b/OsmAnd/res/values-sc/strings.xml @@ -2167,7 +2167,7 @@ Curvas de profondidade nàuticas Ammustra sas lìnias de profondidade. Imprea sos datos de s\'artària - Fatore pro s\'artària de su terrinu (dae datos SRTM, ASTER e EU-DEM). + Istile de ghia Artària de su caminu Falada diff --git a/OsmAnd/res/values-sk/strings.xml b/OsmAnd/res/values-sk/strings.xml index a2da8a53fc..2fd8af51aa 100644 --- a/OsmAnd/res/values-sk/strings.xml +++ b/OsmAnd/res/values-sk/strings.xml @@ -2165,7 +2165,7 @@ Zobraziť hĺbkové úrovne a body. Námorné hĺbkové vrstevnice Použiť údaje nadmorskej výšky - Zohľadniť prevýšenie terénu (z údajov SRTM, ASTER a EU-DEM). + Prevýšenie trasy Klesanie Stúpanie diff --git a/OsmAnd/res/values-sl/strings.xml b/OsmAnd/res/values-sl/strings.xml index 80bb921f46..e78029cd1b 100644 --- a/OsmAnd/res/values-sl/strings.xml +++ b/OsmAnd/res/values-sl/strings.xml @@ -2169,7 +2169,7 @@ Čas Skupna razdalja Uporabi podatke višine - Faktor podatkov spreminjanja višine terena (po podatkih SRTM, ASTER in EU-DEM). + Način vožnje Izbor mape datotek GPX Datoteke ni mogoče premakniti. diff --git a/OsmAnd/res/values-sr/strings.xml b/OsmAnd/res/values-sr/strings.xml index 70463bce02..a548052f4a 100644 --- a/OsmAnd/res/values-sr/strings.xml +++ b/OsmAnd/res/values-sr/strings.xml @@ -1525,7 +1525,7 @@ Поморске дубинске тачке северне полулопте Поморске изобате Боја - Урачунај и податке висине земљишта (обезбеђених помоћу СРМ, АСТЕР и ЕУ-ДЕМ података). + Самоподели снимке после размака Почни нови одсечак после размака од 6 минута, нову путању после размака од 2 сата, или нови фајл после дужег размака ако је дан измењен. Прикажи путеве планинских бицикли diff --git a/OsmAnd/res/values-sv/strings.xml b/OsmAnd/res/values-sv/strings.xml index 6142457817..bb3003ee19 100644 --- a/OsmAnd/res/values-sv/strings.xml +++ b/OsmAnd/res/values-sv/strings.xml @@ -2097,7 +2097,7 @@ Vänligen tillhandahåll fullständig kod "Kartöverlägget har ändrats till \"%s\"." Tryck länge och dra knappen för att ändra dess position på skärmen. Använd höjddata - Använd terränghöjddata från SRTM, ASTER och EU-DEM. + Visa djupkonturer och punkter. Sluttning Höjdområde diff --git a/OsmAnd/res/values-tr/strings.xml b/OsmAnd/res/values-tr/strings.xml index 58ab73075e..2d2101489a 100644 --- a/OsmAnd/res/values-tr/strings.xml +++ b/OsmAnd/res/values-tr/strings.xml @@ -2307,7 +2307,7 @@ Ortalama yükseklik Yükseklikte dalgalanma seçin Yükseklik verisi kullan - Arazi kotunda faktör (SRTM, ASTER ve EU-DEM verileri aracılığıyla). + Şehir veya bölge %1$d çıkışa gir ve ilerle Henüz yol dosyanız yok diff --git a/OsmAnd/res/values-uk/strings.xml b/OsmAnd/res/values-uk/strings.xml index c23f7f22df..6fba4223b3 100644 --- a/OsmAnd/res/values-uk/strings.xml +++ b/OsmAnd/res/values-uk/strings.xml @@ -2130,7 +2130,7 @@ Час Загальна відстань Використовувати дані висоти - Фактор висоти рельєфу земної поверхні (дані від SRTM, ASTER та EU-DEM). + Показати контури глибини і точки. Контури морських глибин Авто-розрив запису після перерви diff --git a/OsmAnd/res/values-zh-rCN/strings.xml b/OsmAnd/res/values-zh-rCN/strings.xml index d11064956c..4f46e46e40 100644 --- a/OsmAnd/res/values-zh-rCN/strings.xml +++ b/OsmAnd/res/values-zh-rCN/strings.xml @@ -1382,7 +1382,7 @@ 平均海拔 选择海拔波动 使用标高数据 - 地形高程因素(通过 SRTM、ASTER 和欧盟 DEM 数据)。 + 显示等深线和标记。 航海等深线 自动拆分录音后的间隙 diff --git a/OsmAnd/res/values-zh-rTW/strings.xml b/OsmAnd/res/values-zh-rTW/strings.xml index 292ff3fdb6..21e5de09a5 100644 --- a/OsmAnd/res/values-zh-rTW/strings.xml +++ b/OsmAnd/res/values-zh-rTW/strings.xml @@ -2161,7 +2161,7 @@ 顯示等深線和標記。 航海等深線 使用海拔資料 - 將地勢海拔納入 (透過 SRTM、ASTER 和 EU-DEM 的資料)。 + 路線的海拔 下坡 上坡 diff --git a/OsmAnd/res/values/phrases.xml b/OsmAnd/res/values/phrases.xml index 4ffcb6202d..53138bcc18 100644 --- a/OsmAnd/res/values/phrases.xml +++ b/OsmAnd/res/values/phrases.xml @@ -4339,10 +4339,10 @@ Patrolled: no Piste status: open Piste status: closed - Summit register: yes Summit register: no - Mobile library stop position + Conference centre + Geodesist diff --git a/OsmAnd/res/values/sizes.xml b/OsmAnd/res/values/sizes.xml index a086849297..107bb45da7 100644 --- a/OsmAnd/res/values/sizes.xml +++ b/OsmAnd/res/values/sizes.xml @@ -413,4 +413,7 @@ 32dp 24dp + + 5sp + 3sp \ No newline at end of file diff --git a/OsmAnd/res/values/strings.xml b/OsmAnd/res/values/strings.xml index a706cf4b6b..69f4c6506e 100644 --- a/OsmAnd/res/values/strings.xml +++ b/OsmAnd/res/values/strings.xml @@ -12,8 +12,16 @@ --> + Routing could avoid strong uphills. + Application restart required to apply some settings. + On pause + Are you sure you want to stop recording?\nAll unsaved data will be lost. + Track recording stopped + Save and stop recording + Stop without saving + Delete %1$d files? + All regions Restart - Routing could avoid strong uphills Don\'t rotate map view if speed is less than a threshold Current location icon will be snapped to the current navigation route Select driving purpose to get shorter, faster or safer route @@ -39,6 +47,9 @@ Hillshade / Slope / Contour lines Select edits for upload Uploaded %1$d of %2$d + Segment %1$d + %1$s contains more than one segment, you need to select the needed part for the navigation. + Select segments Uploading %1$d of %2$d Upload completed Uploading @@ -1613,7 +1624,6 @@ Total distance Select elevation fluctuation Use elevation data - Factor in terrain elevation (via SRTM, ASTER, and EU-DEM data). Show depth contours and points. Nautical depth contours