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