Merge branch 'master' into add_custom_profile_color
# Conflicts: # OsmAnd/src/net/osmand/plus/views/mapwidgets/MapWidgetRegistry.java
This commit is contained in:
commit
8d1ce38f4f
318 changed files with 10795 additions and 4072 deletions
12
.github/ISSUE_TEMPLATE/2-faq-report.md
vendored
12
.github/ISSUE_TEMPLATE/2-faq-report.md
vendored
|
@ -1,12 +0,0 @@
|
|||
---
|
||||
name: "📚 Outdated FAQ"
|
||||
about: Report an issue in FAQ
|
||||
---
|
||||
|
||||
🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑
|
||||
|
||||
Please do not file FAQ issues on the GitHub issues tracker.
|
||||
|
||||
Instead use the [Google group](https://groups.google.com/forum/#!forum/osmand) to fix wrong or outdated FAQ.
|
||||
|
||||
🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑
|
4
.github/ISSUE_TEMPLATE/config.yml
vendored
Normal file
4
.github/ISSUE_TEMPLATE/config.yml
vendored
Normal file
|
@ -0,0 +1,4 @@
|
|||
contact_links:
|
||||
- name: Outdated FAQ
|
||||
url: https://groups.google.com/forum/#!forum/osmand
|
||||
about: Fix wrong or outdated FAQ on the forum instead
|
3
.gitignore
vendored
3
.gitignore
vendored
|
@ -16,7 +16,8 @@ OsmAndCore_*.aar
|
|||
*.iml
|
||||
.settings
|
||||
.idea
|
||||
.project
|
||||
**/.project
|
||||
**/.classpath
|
||||
out/
|
||||
|
||||
# Huawei
|
||||
|
|
|
@ -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";
|
||||
|
|
|
@ -25,6 +25,24 @@ public class ALocation extends AidlParams {
|
|||
private ALocation() {
|
||||
}
|
||||
|
||||
public ALocation(double latitude, double longitude, long time, boolean hasAltitude, double altitude,
|
||||
boolean hasSpeed, float speed, boolean hasBearing, float bearing,
|
||||
boolean hasAccuracy, float accuracy, boolean hasVerticalAccuracy, float verticalAccuracy) {
|
||||
this.latitude = latitude;
|
||||
this.longitude = longitude;
|
||||
this.time = time;
|
||||
this.hasAltitude = hasAltitude;
|
||||
this.altitude = altitude;
|
||||
this.hasSpeed = hasSpeed;
|
||||
this.speed = speed;
|
||||
this.hasBearing = hasBearing;
|
||||
this.bearing = bearing;
|
||||
this.hasAccuracy = hasAccuracy;
|
||||
this.accuracy = accuracy;
|
||||
this.hasVerticalAccuracy = hasVerticalAccuracy;
|
||||
this.verticalAccuracy = verticalAccuracy;
|
||||
}
|
||||
|
||||
public ALocation(Parcel in) {
|
||||
readFromParcel(in);
|
||||
}
|
||||
|
|
|
@ -23,7 +23,9 @@ public class PlatformUtil {
|
|||
}
|
||||
|
||||
public static XmlPullParser newXMLPullParser() throws XmlPullParserException{
|
||||
return new org.kxml2.io.KXmlParser();
|
||||
org.kxml2.io.KXmlParser xmlParser = new org.kxml2.io.KXmlParser();
|
||||
xmlParser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, true);
|
||||
return xmlParser;
|
||||
}
|
||||
|
||||
public static XmlSerializer newSerializer() {
|
||||
|
|
|
@ -8,6 +8,7 @@ import gnu.trove.set.hash.TIntHashSet;
|
|||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
|
||||
|
@ -627,7 +628,9 @@ public class BinaryMapAddressReaderAdapter {
|
|||
indexOffset = codedIS.getTotalBytesRead();
|
||||
int oldLimit = codedIS.pushLimit(length);
|
||||
// here offsets are sorted by distance
|
||||
map.readIndexedStringTable(stringMatcher.getCollator(), req.nameQuery, "", loffsets, 0);
|
||||
TIntArrayList charsList = new TIntArrayList();
|
||||
charsList.add(0);
|
||||
map.readIndexedStringTable(stringMatcher.getCollator(), Collections.singletonList(req.nameQuery), "", Collections.singletonList(loffsets), charsList);
|
||||
codedIS.popLimit(oldLimit);
|
||||
break;
|
||||
case OsmAndAddressNameIndexData.ATOM_FIELD_NUMBER:
|
||||
|
|
|
@ -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() {
|
||||
|
@ -2161,9 +2161,9 @@ public class BinaryMapIndexReader {
|
|||
private static boolean testAddressSearch = false;
|
||||
private static boolean testAddressSearchName = false;
|
||||
private static boolean testAddressJustifySearch = false;
|
||||
private static boolean testPoiSearch = false;
|
||||
private static boolean testPoiSearch = true;
|
||||
private static boolean testPoiSearchOnPath = false;
|
||||
private static boolean testTransportSearch = true;
|
||||
private static boolean testTransportSearch = false;
|
||||
|
||||
private static int sleft = MapUtils.get31TileNumberX(27.55079);
|
||||
private static int sright = MapUtils.get31TileNumberX(27.55317);
|
||||
|
@ -2177,7 +2177,7 @@ public class BinaryMapIndexReader {
|
|||
|
||||
public static void main(String[] args) throws IOException {
|
||||
File fl = new File(System.getProperty("maps") + "/Synthetic_test_rendering.obf");
|
||||
fl = new File("/home/madwasp79/OsmAnd-maps/Poly_center2.obf");
|
||||
fl = new File(System.getProperty("maps") +"/Wikivoyage.obf__");
|
||||
|
||||
RandomAccessFile raf = new RandomAccessFile(fl, "r");
|
||||
|
||||
|
@ -2325,7 +2325,7 @@ public class BinaryMapIndexReader {
|
|||
|
||||
private static void testPoiSearchByName(BinaryMapIndexReader reader) throws IOException {
|
||||
println("Searching by name...");
|
||||
SearchRequest<Amenity> req = buildSearchPoiRequest(0, 0, "Art",
|
||||
SearchRequest<Amenity> req = buildSearchPoiRequest(0, 0, "central ukraine",
|
||||
0, Integer.MAX_VALUE, 0, Integer.MAX_VALUE, null);
|
||||
|
||||
reader.searchPoiByName(req);
|
||||
|
@ -2385,54 +2385,72 @@ public class BinaryMapIndexReader {
|
|||
|
||||
}
|
||||
|
||||
int readIndexedStringTable(Collator instance, String query, String prefix, TIntArrayList list, int charMatches) throws IOException {
|
||||
void readIndexedStringTable(Collator instance, List<String> queries, String prefix, List<TIntArrayList> listOffsets, TIntArrayList matchedCharacters) throws IOException {
|
||||
String key = null;
|
||||
boolean[] matched = new boolean[matchedCharacters.size()];
|
||||
boolean shouldWeReadSubtable = false;
|
||||
while (true) {
|
||||
int t = codedIS.readTag();
|
||||
int tag = WireFormat.getTagFieldNumber(t);
|
||||
switch (tag) {
|
||||
case 0:
|
||||
return charMatches;
|
||||
return;
|
||||
case OsmandOdb.IndexedStringTable.KEY_FIELD_NUMBER :
|
||||
key = codedIS.readString();
|
||||
if(prefix.length() > 0){
|
||||
if (prefix.length() > 0) {
|
||||
key = prefix + key;
|
||||
}
|
||||
// check query is part of key (the best matching)
|
||||
if(CollatorStringMatcher.cmatches(instance, key, query, StringMatcherMode.CHECK_ONLY_STARTS_WITH)){
|
||||
if(query.length() >= charMatches){
|
||||
if(query.length() > charMatches){
|
||||
charMatches = query.length();
|
||||
list.clear();
|
||||
shouldWeReadSubtable = false;
|
||||
for (int i = 0; i < queries.size(); i++) {
|
||||
int charMatches = matchedCharacters.get(i);
|
||||
String query = queries.get(i);
|
||||
matched[i] = false;
|
||||
if (query == null) {
|
||||
continue;
|
||||
}
|
||||
} else {
|
||||
key = null;
|
||||
|
||||
// check query is part of key (the best matching)
|
||||
if (CollatorStringMatcher.cmatches(instance, key, query, StringMatcherMode.CHECK_ONLY_STARTS_WITH)) {
|
||||
if (query.length() >= charMatches) {
|
||||
if (query.length() > charMatches) {
|
||||
matchedCharacters.set(i, query.length());
|
||||
listOffsets.get(i).clear();
|
||||
}
|
||||
matched[i] = true;
|
||||
}
|
||||
// check key is part of query
|
||||
} else if (CollatorStringMatcher.cmatches(instance, query, key, StringMatcherMode.CHECK_ONLY_STARTS_WITH)) {
|
||||
if (key.length() >= charMatches) {
|
||||
if (key.length() > charMatches) {
|
||||
charMatches = key.length();
|
||||
list.clear();
|
||||
matchedCharacters.set(i, key.length());
|
||||
listOffsets.get(i).clear();
|
||||
}
|
||||
} else {
|
||||
key = null;
|
||||
matched[i] = true;
|
||||
}
|
||||
} else {
|
||||
key = null;
|
||||
}
|
||||
shouldWeReadSubtable |= matched[i];
|
||||
}
|
||||
break;
|
||||
case OsmandOdb.IndexedStringTable.VAL_FIELD_NUMBER :
|
||||
int val = readInt();
|
||||
if (key != null) {
|
||||
list.add(val);
|
||||
for (int i = 0; i < queries.size(); i++) {
|
||||
if (matched[i]) {
|
||||
listOffsets.get(i).add(val);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case OsmandOdb.IndexedStringTable.SUBTABLES_FIELD_NUMBER :
|
||||
int len = codedIS.readRawVarint32();
|
||||
int oldLim = codedIS.pushLimit(len);
|
||||
if (key != null) {
|
||||
charMatches = readIndexedStringTable(instance, query, key, list, charMatches);
|
||||
if (shouldWeReadSubtable && key != null) {
|
||||
List<String> subqueries = new ArrayList<>(queries);
|
||||
// reset query so we don't search what was not matched
|
||||
for(int i = 0; i < queries.size(); i++) {
|
||||
if(!matched[i]) {
|
||||
subqueries.set(i, null);
|
||||
}
|
||||
}
|
||||
readIndexedStringTable(instance, subqueries, key, listOffsets, matchedCharacters);
|
||||
} else {
|
||||
codedIS.skipRawBytes(codedIS.getBytesUntilLimit());
|
||||
}
|
||||
|
|
|
@ -1,10 +1,6 @@
|
|||
package net.osmand.binary;
|
||||
|
||||
|
||||
import gnu.trove.list.array.TIntArrayList;
|
||||
import gnu.trove.map.hash.TIntLongHashMap;
|
||||
import gnu.trove.set.hash.TLongHashSet;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
|
@ -12,6 +8,14 @@ import java.util.Comparator;
|
|||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
|
||||
import com.google.protobuf.CodedInputStream;
|
||||
import com.google.protobuf.WireFormat;
|
||||
|
||||
import gnu.trove.list.array.TIntArrayList;
|
||||
import gnu.trove.map.hash.TIntLongHashMap;
|
||||
import gnu.trove.set.hash.TLongHashSet;
|
||||
import net.osmand.Collator;
|
||||
import net.osmand.CollatorStringMatcher;
|
||||
import net.osmand.CollatorStringMatcher.StringMatcherMode;
|
||||
|
@ -26,11 +30,6 @@ import net.osmand.osm.MapPoiTypes;
|
|||
import net.osmand.osm.PoiCategory;
|
||||
import net.osmand.util.MapUtils;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
|
||||
import com.google.protobuf.CodedInputStream;
|
||||
import com.google.protobuf.WireFormat;
|
||||
|
||||
public class BinaryMapPoiReaderAdapter {
|
||||
private static final Log LOG = PlatformUtil.getLog(BinaryMapPoiReaderAdapter.class);
|
||||
|
||||
|
@ -38,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 = 5;
|
||||
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;
|
||||
|
@ -332,7 +336,7 @@ public class BinaryMapPoiReaderAdapter {
|
|||
});
|
||||
int p = BUCKET_SEARCH_BY_NAME * 3;
|
||||
if (p < offKeys.length) {
|
||||
for (int i = p + BUCKET_SEARCH_BY_NAME; ; i += BUCKET_SEARCH_BY_NAME) {
|
||||
for (int i = p + BUCKET_SEARCH_BY_NAME;; i += BUCKET_SEARCH_BY_NAME) {
|
||||
if (i > offKeys.length) {
|
||||
Arrays.sort(offKeys, p, offKeys.length);
|
||||
break;
|
||||
|
@ -344,7 +348,6 @@ public class BinaryMapPoiReaderAdapter {
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
LOG.info("Searched poi structure in " + (System.currentTimeMillis() - time) +
|
||||
"ms. Found " + offKeys.length + " subtrees");
|
||||
for (int j = 0; j < offKeys.length; j++) {
|
||||
|
@ -370,7 +373,8 @@ public class BinaryMapPoiReaderAdapter {
|
|||
|
||||
private TIntLongHashMap readPoiNameIndex(Collator instance, String query, SearchRequest<Amenity> req) throws IOException {
|
||||
TIntLongHashMap offsets = new TIntLongHashMap();
|
||||
TIntArrayList dataOffsets = null;
|
||||
List<TIntArrayList> listOffsets = null;
|
||||
List<TIntLongHashMap> listOfSepOffsets = new ArrayList<TIntLongHashMap>();
|
||||
int offset = 0;
|
||||
while (true) {
|
||||
int t = codedIS.readTag();
|
||||
|
@ -381,20 +385,34 @@ public class BinaryMapPoiReaderAdapter {
|
|||
case OsmandOdb.OsmAndPoiNameIndex.TABLE_FIELD_NUMBER: {
|
||||
int length = readInt();
|
||||
int oldLimit = codedIS.pushLimit(length);
|
||||
dataOffsets = new TIntArrayList();
|
||||
offset = codedIS.getTotalBytesRead();
|
||||
map.readIndexedStringTable(instance, query, "", dataOffsets, 0);
|
||||
List<String> queries = new ArrayList<>();
|
||||
for (String word : query.split(" ")) {
|
||||
if (word.trim().length() > 0) {
|
||||
queries.add(word.trim());
|
||||
}
|
||||
}
|
||||
TIntArrayList charsList = new TIntArrayList(queries.size());
|
||||
listOffsets = new ArrayList<TIntArrayList>(queries.size());
|
||||
while(listOffsets.size() < queries.size()) {
|
||||
charsList.add(0);
|
||||
listOffsets.add(new TIntArrayList());
|
||||
}
|
||||
map.readIndexedStringTable(instance, queries, "", listOffsets, charsList);
|
||||
codedIS.popLimit(oldLimit);
|
||||
break;
|
||||
}
|
||||
case OsmandOdb.OsmAndPoiNameIndex.DATA_FIELD_NUMBER: {
|
||||
if (dataOffsets != null) {
|
||||
if (listOffsets != null) {
|
||||
for (TIntArrayList dataOffsets : listOffsets) {
|
||||
TIntLongHashMap offsetMap = new TIntLongHashMap();
|
||||
listOfSepOffsets.add(offsetMap);
|
||||
dataOffsets.sort(); // 1104125
|
||||
for (int i = 0; i < dataOffsets.size(); i++) {
|
||||
codedIS.seek(dataOffsets.get(i) + offset);
|
||||
int len = codedIS.readRawVarint32();
|
||||
int oldLim = codedIS.pushLimit(len);
|
||||
readPoiNameIndexData(offsets, req);
|
||||
readPoiNameIndexData(offsetMap, req);
|
||||
codedIS.popLimit(oldLim);
|
||||
if (req.isCancelled()) {
|
||||
codedIS.skipRawBytes(codedIS.getBytesUntilLimit());
|
||||
|
@ -402,6 +420,19 @@ public class BinaryMapPoiReaderAdapter {
|
|||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (listOfSepOffsets.size() > 0) {
|
||||
offsets.putAll(listOfSepOffsets.get(0));
|
||||
for (int j = 1; j < listOfSepOffsets.size(); j++) {
|
||||
TIntLongHashMap mp = listOfSepOffsets.get(j);
|
||||
// offsets.retainAll(mp); -- calculate intresection of mp & offsets
|
||||
for (int chKey : offsets.keys()) {
|
||||
if (!mp.containsKey(chKey)) {
|
||||
offsets.remove(chKey);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
codedIS.skipRawBytes(codedIS.getBytesUntilLimit());
|
||||
return offsets;
|
||||
}
|
||||
|
@ -688,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<String> textTags = null;
|
||||
|
@ -714,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) {
|
||||
|
@ -728,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();
|
||||
|
@ -801,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;
|
||||
|
|
|
@ -54371,6 +54371,24 @@ public final class OsmandOdb {
|
|||
*/
|
||||
com.google.protobuf.ByteString
|
||||
getTextValuesBytes(int index);
|
||||
|
||||
// optional int32 precisionXY = 16;
|
||||
/**
|
||||
* <code>optional int32 precisionXY = 16;</code>
|
||||
*
|
||||
* <pre>
|
||||
* precision in 1-xy-xy-xy binary format
|
||||
* </pre>
|
||||
*/
|
||||
boolean hasPrecisionXY();
|
||||
/**
|
||||
* <code>optional int32 precisionXY = 16;</code>
|
||||
*
|
||||
* <pre>
|
||||
* precision in 1-xy-xy-xy binary format
|
||||
* </pre>
|
||||
*/
|
||||
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_;
|
||||
/**
|
||||
* <code>optional int32 precisionXY = 16;</code>
|
||||
*
|
||||
* <pre>
|
||||
* precision in 1-xy-xy-xy binary format
|
||||
* </pre>
|
||||
*/
|
||||
public boolean hasPrecisionXY() {
|
||||
return ((bitField0_ & 0x00000200) == 0x00000200);
|
||||
}
|
||||
/**
|
||||
* <code>optional int32 precisionXY = 16;</code>
|
||||
*
|
||||
* <pre>
|
||||
* precision in 1-xy-xy-xy binary format
|
||||
* </pre>
|
||||
*/
|
||||
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_ ;
|
||||
/**
|
||||
* <code>optional int32 precisionXY = 16;</code>
|
||||
*
|
||||
* <pre>
|
||||
* precision in 1-xy-xy-xy binary format
|
||||
* </pre>
|
||||
*/
|
||||
public boolean hasPrecisionXY() {
|
||||
return ((bitField0_ & 0x00002000) == 0x00002000);
|
||||
}
|
||||
/**
|
||||
* <code>optional int32 precisionXY = 16;</code>
|
||||
*
|
||||
* <pre>
|
||||
* precision in 1-xy-xy-xy binary format
|
||||
* </pre>
|
||||
*/
|
||||
public int getPrecisionXY() {
|
||||
return precisionXY_;
|
||||
}
|
||||
/**
|
||||
* <code>optional int32 precisionXY = 16;</code>
|
||||
*
|
||||
* <pre>
|
||||
* precision in 1-xy-xy-xy binary format
|
||||
* </pre>
|
||||
*/
|
||||
public Builder setPrecisionXY(int value) {
|
||||
bitField0_ |= 0x00002000;
|
||||
precisionXY_ = value;
|
||||
onChanged();
|
||||
return this;
|
||||
}
|
||||
/**
|
||||
* <code>optional int32 precisionXY = 16;</code>
|
||||
*
|
||||
* <pre>
|
||||
* precision in 1-xy-xy-xy binary format
|
||||
* </pre>
|
||||
*/
|
||||
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
|
||||
|
|
|
@ -4,6 +4,7 @@ import net.osmand.Location;
|
|||
import net.osmand.PlatformUtil;
|
||||
import net.osmand.binary.BinaryMapRouteReaderAdapter.RouteRegion;
|
||||
import net.osmand.binary.BinaryMapRouteReaderAdapter.RouteTypeRule;
|
||||
import net.osmand.data.LatLon;
|
||||
import net.osmand.util.Algorithms;
|
||||
import net.osmand.util.MapUtils;
|
||||
import net.osmand.util.TransliterationHelper;
|
||||
|
@ -37,7 +38,9 @@ public class RouteDataObject {
|
|||
public int[] nameIds;
|
||||
// mixed array [0, height, cumulative_distance height, cumulative_distance, height, ...] - length is length(points)*2
|
||||
public float[] heightDistanceArray = null;
|
||||
public float heightByCurrentLocation;
|
||||
private static final Log LOG = PlatformUtil.getLog(RouteDataObject.class);
|
||||
|
||||
public RouteDataObject(RouteRegion region) {
|
||||
this.region = region;
|
||||
}
|
||||
|
@ -165,53 +168,67 @@ public class RouteDataObject {
|
|||
}
|
||||
|
||||
public float[] calculateHeightArray() {
|
||||
if(heightDistanceArray != null) {
|
||||
return calculateHeightArray(null);
|
||||
}
|
||||
|
||||
public float[] calculateHeightArray(LatLon currentLocation) {
|
||||
if (heightDistanceArray != null) {
|
||||
return heightDistanceArray;
|
||||
}
|
||||
int startHeight = Algorithms.parseIntSilently(getValue("osmand_ele_start"), HEIGHT_UNDEFINED);
|
||||
int endHeight = Algorithms.parseIntSilently(getValue("osmand_ele_end"), startHeight);
|
||||
if(startHeight == HEIGHT_UNDEFINED) {
|
||||
if (startHeight == HEIGHT_UNDEFINED) {
|
||||
heightDistanceArray = new float[0];
|
||||
return heightDistanceArray;
|
||||
}
|
||||
|
||||
heightDistanceArray = new float[2*getPointsLength()];
|
||||
heightDistanceArray = new float[2 * getPointsLength()];
|
||||
double plon = 0;
|
||||
double plat = 0;
|
||||
float prevHeight = startHeight;
|
||||
for(int k = 0; k < getPointsLength(); k++) {
|
||||
float prevHeight = heightByCurrentLocation = startHeight;
|
||||
double prevDistance = 0;
|
||||
for (int k = 0; k < getPointsLength(); k++) {
|
||||
double lon = MapUtils.get31LongitudeX(getPoint31XTile(k));
|
||||
double lat = MapUtils.get31LatitudeY(getPoint31YTile(k));
|
||||
if(k > 0) {
|
||||
if (k > 0) {
|
||||
double dd = MapUtils.getDistance(plat, plon, lat, lon);
|
||||
float height = HEIGHT_UNDEFINED;
|
||||
if(k == getPointsLength() - 1) {
|
||||
if (k == getPointsLength() - 1) {
|
||||
height = endHeight;
|
||||
} else {
|
||||
String asc = getValue(k, "osmand_ele_asc");
|
||||
if(asc != null && asc.length() > 0) {
|
||||
if (asc != null && asc.length() > 0) {
|
||||
height = (prevHeight + Float.parseFloat(asc));
|
||||
} else {
|
||||
String desc = getValue(k, "osmand_ele_desc");
|
||||
if(desc != null && desc.length() > 0) {
|
||||
if (desc != null && desc.length() > 0) {
|
||||
height = (prevHeight - Float.parseFloat(desc));
|
||||
}
|
||||
}
|
||||
}
|
||||
heightDistanceArray[2*k] = (float) dd;
|
||||
heightDistanceArray[2*k+1] = height;
|
||||
if(height != HEIGHT_UNDEFINED) {
|
||||
heightDistanceArray[2 * k] = (float) dd;
|
||||
heightDistanceArray[2 * k + 1] = height;
|
||||
|
||||
if (currentLocation != null) {
|
||||
double distance = MapUtils.getDistance(currentLocation, lat, lon);
|
||||
if (height != HEIGHT_UNDEFINED && distance < prevDistance) {
|
||||
prevDistance = distance;
|
||||
heightByCurrentLocation = height;
|
||||
}
|
||||
}
|
||||
|
||||
if (height != HEIGHT_UNDEFINED) {
|
||||
// interpolate undefined
|
||||
double totalDistance = dd;
|
||||
int startUndefined = k;
|
||||
while(startUndefined - 1 >= 0 && heightDistanceArray[2*(startUndefined - 1)+1] == HEIGHT_UNDEFINED) {
|
||||
startUndefined --;
|
||||
totalDistance += heightDistanceArray[2*(startUndefined)];
|
||||
while (startUndefined - 1 >= 0 && heightDistanceArray[2 * (startUndefined - 1) + 1] == HEIGHT_UNDEFINED) {
|
||||
startUndefined--;
|
||||
totalDistance += heightDistanceArray[2 * (startUndefined)];
|
||||
}
|
||||
if(totalDistance > 0) {
|
||||
if (totalDistance > 0) {
|
||||
double angle = (height - prevHeight) / totalDistance;
|
||||
for(int j = startUndefined; j < k; j++) {
|
||||
heightDistanceArray[2*j+1] = (float) ((heightDistanceArray[2*j] * angle) + heightDistanceArray[2*j-1]);
|
||||
for (int j = startUndefined; j < k; j++) {
|
||||
heightDistanceArray[2 * j + 1] = (float) ((heightDistanceArray[2 * j] * angle) + heightDistanceArray[2 * j - 1]);
|
||||
}
|
||||
}
|
||||
prevHeight = height;
|
||||
|
@ -223,6 +240,9 @@ public class RouteDataObject {
|
|||
}
|
||||
plat = lat;
|
||||
plon = lon;
|
||||
if (currentLocation != null) {
|
||||
prevDistance = MapUtils.getDistance(currentLocation, plat, plon);
|
||||
}
|
||||
}
|
||||
return heightDistanceArray;
|
||||
}
|
||||
|
@ -231,34 +251,34 @@ public class RouteDataObject {
|
|||
return id;
|
||||
}
|
||||
|
||||
public String getName(){
|
||||
if(names != null ) {
|
||||
public String getName() {
|
||||
if (names != null) {
|
||||
return names.get(region.nameTypeRule);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
public String getName(String lang){
|
||||
public String getName(String lang) {
|
||||
return getName(lang, false);
|
||||
}
|
||||
|
||||
public String getName(String lang, boolean transliterate){
|
||||
if(names != null ) {
|
||||
if(Algorithms.isEmpty(lang)) {
|
||||
public String getName(String lang, boolean transliterate) {
|
||||
if (names != null) {
|
||||
if (Algorithms.isEmpty(lang)) {
|
||||
return names.get(region.nameTypeRule);
|
||||
}
|
||||
int[] kt = names.keys();
|
||||
for(int i = 0 ; i < kt.length; i++) {
|
||||
for (int i = 0; i < kt.length; i++) {
|
||||
int k = kt[i];
|
||||
if(region.routeEncodingRules.size() > k) {
|
||||
if(("name:"+lang).equals(region.routeEncodingRules.get(k).getTag())) {
|
||||
if (region.routeEncodingRules.size() > k) {
|
||||
if (("name:" + lang).equals(region.routeEncodingRules.get(k).getTag())) {
|
||||
return names.get(k);
|
||||
}
|
||||
}
|
||||
}
|
||||
String nmDef = names.get(region.nameTypeRule);
|
||||
if(transliterate && nmDef != null && nmDef.length() > 0) {
|
||||
if (transliterate && nmDef != null && nmDef.length() > 0) {
|
||||
return TransliterationHelper.transliterate(nmDef);
|
||||
}
|
||||
return nmDef;
|
||||
|
@ -279,20 +299,20 @@ public class RouteDataObject {
|
|||
// return getDestinationRef(direction);
|
||||
//}
|
||||
if (names != null) {
|
||||
if(Algorithms.isEmpty(lang)) {
|
||||
if (Algorithms.isEmpty(lang)) {
|
||||
return names.get(region.refTypeRule);
|
||||
}
|
||||
int[] kt = names.keys();
|
||||
for(int i = 0 ; i < kt.length; i++) {
|
||||
for (int i = 0; i < kt.length; i++) {
|
||||
int k = kt[i];
|
||||
if(region.routeEncodingRules.size() > k) {
|
||||
if(("ref:"+lang).equals(region.routeEncodingRules.get(k).getTag())) {
|
||||
if (region.routeEncodingRules.size() > k) {
|
||||
if (("ref:" + lang).equals(region.routeEncodingRules.get(k).getTag())) {
|
||||
return names.get(k);
|
||||
}
|
||||
}
|
||||
}
|
||||
String refDefault = names.get(region.refTypeRule);
|
||||
if(transliterate && refDefault != null && refDefault.length() > 0) {
|
||||
if (transliterate && refDefault != null && refDefault.length() > 0) {
|
||||
return TransliterationHelper.transliterate(refDefault);
|
||||
}
|
||||
return refDefault;
|
||||
|
@ -307,13 +327,13 @@ public class RouteDataObject {
|
|||
String refTagDefault = "destination:ref";
|
||||
String refDefault = null;
|
||||
|
||||
for(int i = 0 ; i < kt.length; i++) {
|
||||
for (int i = 0; i < kt.length; i++) {
|
||||
int k = kt[i];
|
||||
if(region.routeEncodingRules.size() > k) {
|
||||
if(refTag.equals(region.routeEncodingRules.get(k).getTag())) {
|
||||
if (region.routeEncodingRules.size() > k) {
|
||||
if (refTag.equals(region.routeEncodingRules.get(k).getTag())) {
|
||||
return names.get(k);
|
||||
}
|
||||
if(refTagDefault.equals(region.routeEncodingRules.get(k).getTag())) {
|
||||
if (refTagDefault.equals(region.routeEncodingRules.get(k).getTag())) {
|
||||
refDefault = names.get(k);
|
||||
}
|
||||
}
|
||||
|
@ -326,12 +346,12 @@ public class RouteDataObject {
|
|||
return null;
|
||||
}
|
||||
|
||||
public String getDestinationName(String lang, boolean transliterate, boolean direction){
|
||||
public String getDestinationName(String lang, boolean transliterate, boolean direction) {
|
||||
//Issue #3289: Treat destination:ref like a destination, not like a ref
|
||||
String destRef = ((getDestinationRef(direction) == null) || getDestinationRef(direction).equals(getRef(lang, transliterate, direction))) ? "" : getDestinationRef(direction);
|
||||
String destRef1 = Algorithms.isEmpty(destRef) ? "" : destRef + ", ";
|
||||
|
||||
if(names != null) {
|
||||
if (names != null) {
|
||||
int[] kt = names.keys();
|
||||
|
||||
// Issue #3181: Parse destination keys in this order:
|
||||
|
@ -341,35 +361,35 @@ public class RouteDataObject {
|
|||
// destination
|
||||
|
||||
String destinationTagLangFB = "destination:lang:XX";
|
||||
if(!Algorithms.isEmpty(lang)) {
|
||||
if (!Algorithms.isEmpty(lang)) {
|
||||
destinationTagLangFB = (direction == true) ? "destination:lang:" + lang + ":forward" : "destination:lang:" + lang + ":backward";
|
||||
}
|
||||
String destinationTagFB = (direction == true) ? "destination:forward" : "destination:backward";
|
||||
String destinationTagLang = "destination:lang:XX";
|
||||
if(!Algorithms.isEmpty(lang)) {
|
||||
if (!Algorithms.isEmpty(lang)) {
|
||||
destinationTagLang = "destination:lang:" + lang;
|
||||
}
|
||||
String destinationTagDefault = "destination";
|
||||
String destinationDefault = null;
|
||||
|
||||
for(int i = 0 ; i < kt.length; i++) {
|
||||
for (int i = 0; i < kt.length; i++) {
|
||||
int k = kt[i];
|
||||
if(region.routeEncodingRules.size() > k) {
|
||||
if(!Algorithms.isEmpty(lang) && destinationTagLangFB.equals(region.routeEncodingRules.get(k).getTag())) {
|
||||
if (region.routeEncodingRules.size() > k) {
|
||||
if (!Algorithms.isEmpty(lang) && destinationTagLangFB.equals(region.routeEncodingRules.get(k).getTag())) {
|
||||
return destRef1 + ((transliterate) ? TransliterationHelper.transliterate(names.get(k)) : names.get(k));
|
||||
}
|
||||
if(destinationTagFB.equals(region.routeEncodingRules.get(k).getTag())) {
|
||||
if (destinationTagFB.equals(region.routeEncodingRules.get(k).getTag())) {
|
||||
return destRef1 + ((transliterate) ? TransliterationHelper.transliterate(names.get(k)) : names.get(k));
|
||||
}
|
||||
if(!Algorithms.isEmpty(lang) && destinationTagLang.equals(region.routeEncodingRules.get(k).getTag())) {
|
||||
if (!Algorithms.isEmpty(lang) && destinationTagLang.equals(region.routeEncodingRules.get(k).getTag())) {
|
||||
return destRef1 + ((transliterate) ? TransliterationHelper.transliterate(names.get(k)) : names.get(k));
|
||||
}
|
||||
if(destinationTagDefault.equals(region.routeEncodingRules.get(k).getTag())) {
|
||||
if (destinationTagDefault.equals(region.routeEncodingRules.get(k).getTag())) {
|
||||
destinationDefault = names.get(k);
|
||||
}
|
||||
}
|
||||
}
|
||||
if(destinationDefault != null) {
|
||||
if (destinationDefault != null) {
|
||||
return destRef1 + ((transliterate) ? TransliterationHelper.transliterate(destinationDefault) : destinationDefault);
|
||||
}
|
||||
}
|
||||
|
@ -400,14 +420,14 @@ public class RouteDataObject {
|
|||
RestrictionInfo ri = new RestrictionInfo();
|
||||
ri.toWay = getRestrictionId(k);
|
||||
ri.type = getRestrictionType(k);
|
||||
if(restrictionsVia != null && k < restrictionsVia.length) {
|
||||
if (restrictionsVia != null && k < restrictionsVia.length) {
|
||||
ri.viaWay = restrictionsVia[k];
|
||||
}
|
||||
return ri;
|
||||
}
|
||||
|
||||
public long getRestrictionVia(int i) {
|
||||
if(restrictionsVia != null && restrictionsVia.length > i) {
|
||||
if (restrictionsVia != null && restrictionsVia.length > i) {
|
||||
return restrictionsVia[i];
|
||||
}
|
||||
return 0;
|
||||
|
@ -441,7 +461,7 @@ public class RouteDataObject {
|
|||
}
|
||||
if (insNames) {
|
||||
pointNames = new String[opointNames.length + 1][];
|
||||
pointNameTypes = new int[opointNameTypes.length +1][];
|
||||
pointNameTypes = new int[opointNameTypes.length + 1][];
|
||||
}
|
||||
int i = 0;
|
||||
for (; i < pos; i++) {
|
||||
|
@ -590,7 +610,7 @@ public class RouteDataObject {
|
|||
}
|
||||
|
||||
public static float parseSpeed(String v, float def) {
|
||||
if(v.equals("none")) {
|
||||
if (v.equals("none")) {
|
||||
return RouteDataObject.NONE_MAX_SPEED;
|
||||
} else {
|
||||
int i = Algorithms.findFirstNumberEndIndex(v);
|
||||
|
@ -614,20 +634,20 @@ public class RouteDataObject {
|
|||
f += Float.parseFloat(v.substring(0, i));
|
||||
String pref = v.substring(i, v.length()).trim();
|
||||
float add = 0;
|
||||
for(int ik = 0; ik < pref.length(); ik++) {
|
||||
if(Algorithms.isDigit(pref.charAt(ik)) || pref.charAt(ik) == '.' || pref.charAt(ik) == '-') {
|
||||
for (int ik = 0; ik < pref.length(); ik++) {
|
||||
if (Algorithms.isDigit(pref.charAt(ik)) || pref.charAt(ik) == '.' || pref.charAt(ik) == '-') {
|
||||
int first = Algorithms.findFirstNumberEndIndex(pref.substring(ik));
|
||||
if(first != -1) {
|
||||
if (first != -1) {
|
||||
add = parseLength(pref.substring(ik), 0);
|
||||
pref = pref.substring(0, ik);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(pref.contains("km")) {
|
||||
if (pref.contains("km")) {
|
||||
f *= 1000;
|
||||
}
|
||||
if(pref.contains("\"") || pref.contains("in")) {
|
||||
if (pref.contains("\"") || pref.contains("in")) {
|
||||
f *= 0.0254;
|
||||
} else if (pref.contains("\'") || pref.contains("ft") || pref.contains("feet")) {
|
||||
// foot to meters
|
||||
|
@ -673,27 +693,27 @@ public class RouteDataObject {
|
|||
return false;
|
||||
}
|
||||
|
||||
public boolean roundabout(){
|
||||
public boolean roundabout() {
|
||||
int sz = types.length;
|
||||
for(int i=0; i<sz; i++) {
|
||||
for (int i = 0; i < sz; i++) {
|
||||
RouteTypeRule r = region.quickGetEncodingRule(types[i]);
|
||||
if(r.roundabout()) {
|
||||
if (r.roundabout()) {
|
||||
return true;
|
||||
} else if(r.onewayDirection() != 0 && loop()) {
|
||||
} else if (r.onewayDirection() != 0 && loop()) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public boolean tunnel(){
|
||||
public boolean tunnel() {
|
||||
int sz = types.length;
|
||||
for(int i=0; i<sz; i++) {
|
||||
for (int i = 0; i < sz; i++) {
|
||||
RouteTypeRule r = region.quickGetEncodingRule(types[i]);
|
||||
if(r.getTag().equals("tunnel") && r.getValue().equals("yes")) {
|
||||
if (r.getTag().equals("tunnel") && r.getValue().equals("yes")) {
|
||||
return true;
|
||||
}
|
||||
if(r.getTag().equals("layer") && r.getValue().equals("-1")) {
|
||||
if (r.getTag().equals("layer") && r.getValue().equals("-1")) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
@ -882,7 +902,7 @@ public class RouteDataObject {
|
|||
|
||||
public boolean bearingVsRouteDirection(Location loc) {
|
||||
boolean direction = true;
|
||||
if(loc != null && loc.hasBearing()) {
|
||||
if (loc != null && loc.hasBearing()) {
|
||||
double diff = MapUtils.alignAngleDifference(directionRoute(0, true) - loc.getBearing() / 180f * Math.PI);
|
||||
direction = Math.abs(diff) < Math.PI / 2f;
|
||||
}
|
||||
|
@ -932,13 +952,13 @@ public class RouteDataObject {
|
|||
}
|
||||
|
||||
public double distance(int startPoint, int endPoint) {
|
||||
if(startPoint > endPoint) {
|
||||
if (startPoint > endPoint) {
|
||||
int k = endPoint;
|
||||
endPoint = startPoint;
|
||||
startPoint = k;
|
||||
}
|
||||
double d = 0;
|
||||
for(int k = startPoint; k < endPoint && k < getPointsLength() -1; k++) {
|
||||
for (int k = startPoint; k < endPoint && k < getPointsLength() - 1; k++) {
|
||||
int x = getPoint31XTile(k);
|
||||
int y = getPoint31YTile(k);
|
||||
int kx = getPoint31XTile(k + 1);
|
||||
|
@ -974,16 +994,16 @@ public class RouteDataObject {
|
|||
// translate into meters
|
||||
total += simplifyDistance(x, y, px, py);
|
||||
} while (total < dist);
|
||||
return -Math.atan2( x - px, y - py );
|
||||
return -Math.atan2(x - px, y - py);
|
||||
}
|
||||
|
||||
private double simplifyDistance(int x, int y, int px, int py) {
|
||||
return Math.abs(px - x) * 0.011d + Math.abs(py - y) * 0.01863d;
|
||||
}
|
||||
|
||||
private static void assertTrueLength(String vl, float exp){
|
||||
private static void assertTrueLength(String vl, float exp) {
|
||||
float dest = parseLength(vl, 0);
|
||||
if(exp != dest) {
|
||||
if (exp != dest) {
|
||||
System.err.println("FAIL " + vl + " " + dest);
|
||||
} else {
|
||||
System.out.println("OK " + vl);
|
||||
|
@ -1054,7 +1074,7 @@ public class RouteDataObject {
|
|||
public RestrictionInfo next; // optional to simulate linked list
|
||||
|
||||
public int length() {
|
||||
if(next == null) {
|
||||
if (next == null) {
|
||||
return 1;
|
||||
}
|
||||
return next.length() + 1;
|
||||
|
@ -1064,13 +1084,13 @@ public class RouteDataObject {
|
|||
public void setRestriction(int k, long to, int type, long viaWay) {
|
||||
long valto = (to << RouteDataObject.RESTRICTION_SHIFT) | ((long) type & RouteDataObject.RESTRICTION_MASK);
|
||||
restrictions[k] = valto;
|
||||
if(viaWay != 0) {
|
||||
if (viaWay != 0) {
|
||||
setRestrictionVia(k, viaWay);
|
||||
}
|
||||
}
|
||||
|
||||
public void setRestrictionVia(int k, long viaWay) {
|
||||
if(restrictionsVia != null) {
|
||||
if (restrictionsVia != null) {
|
||||
long[] nrestrictionsVia = new long[Math.max(k + 1, restrictions.length)];
|
||||
System.arraycopy(restrictions, 0, nrestrictionsVia, 0, restrictions.length);
|
||||
restrictionsVia = nrestrictionsVia;
|
||||
|
|
|
@ -279,6 +279,19 @@ public class Amenity extends MapObject {
|
|||
}
|
||||
|
||||
public String getTagContent(String tag, String lang) {
|
||||
String translateName = getStrictTagContent(tag, lang);
|
||||
if (translateName != null) {
|
||||
return translateName;
|
||||
}
|
||||
for (String nm : getAdditionalInfoKeys()) {
|
||||
if (nm.startsWith(tag + ":")) {
|
||||
return getAdditionalInfo(nm);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public String getStrictTagContent(String tag, String lang) {
|
||||
if (lang != null) {
|
||||
String translateName = getAdditionalInfo(tag + ":" + lang);
|
||||
if (!Algorithms.isEmpty(translateName)) {
|
||||
|
@ -293,11 +306,6 @@ public class Amenity extends MapObject {
|
|||
if (!Algorithms.isEmpty(enName)) {
|
||||
return enName;
|
||||
}
|
||||
for (String nm : getAdditionalInfoKeys()) {
|
||||
if (nm.startsWith(tag + ":")) {
|
||||
return getAdditionalInfo(nm);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
|
|
@ -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<String> it = object.getObjectNames().iterator();
|
||||
|
|
|
@ -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;
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
266
OsmAnd-java/src/main/java/net/osmand/osm/RouteActivityType.java
Normal file
266
OsmAnd-java/src/main/java/net/osmand/osm/RouteActivityType.java
Normal file
|
@ -0,0 +1,266 @@
|
|||
package net.osmand.osm;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class RouteActivityType {
|
||||
private static final List<RouteActivityType> values = new ArrayList<>();
|
||||
public static final String DEFAULT_ICON = "special_marker";
|
||||
public static final String DEFAULT_COLOR = "orange";
|
||||
|
||||
public static final RouteActivityType WATER = createType("water", "yellow").icon("special_kayak").reg();
|
||||
public static final RouteActivityType WINTER = createType("winter", "yellow").icon("special_skiing").reg();
|
||||
public static final RouteActivityType SNOWMOBILE = createType("snowmobile", "yellow").icon("special_snowmobile").reg();
|
||||
public static final RouteActivityType RIDING = createType("riding", "yellow").icon("special_horse").reg();
|
||||
public static final RouteActivityType RACING = createType("racing", "yellow").icon("raceway").reg();
|
||||
public static final RouteActivityType MOUNTAINBIKE = createType("mountainbike", "blue").icon("sport_cycling").reg();
|
||||
public static final RouteActivityType CYCLING = createType("cycling", "blue").icon("special_bicycle").reg();
|
||||
public static final RouteActivityType HIKING = createType("hiking", "orange").icon("special_trekking").reg();
|
||||
public static final RouteActivityType RUNNING = createType("running", "orange").icon("running").reg();
|
||||
public static final RouteActivityType WALKING = createType("walking", "orange").icon("special_walking").reg();
|
||||
public static final RouteActivityType OFFROAD = createType("offroad", "yellow").icon("special_offroad").reg();
|
||||
public static final RouteActivityType MOTORBIKE = createType("motorbike", "green").icon("special_motorcycle").reg();
|
||||
public static final RouteActivityType CAR = createType("car", "green").icon("shop_car").reg();
|
||||
// less specific bottom order
|
||||
String name;
|
||||
String color;
|
||||
String icon;
|
||||
|
||||
RouteActivityType(String nm, String clr) {
|
||||
this.name = nm;
|
||||
this.color = clr;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public String getColor() {
|
||||
return color;
|
||||
}
|
||||
|
||||
public String getIcon() {
|
||||
return icon;
|
||||
}
|
||||
|
||||
public static RouteActivityType getOrCreateTypeFromName(String name) {
|
||||
for (RouteActivityType rat : values) {
|
||||
if (rat.name.equalsIgnoreCase(name)) {
|
||||
return rat;
|
||||
}
|
||||
}
|
||||
return createType(name.toLowerCase(), DEFAULT_COLOR).icon(DEFAULT_ICON).reg();
|
||||
}
|
||||
|
||||
private static RouteActivityTypeBuilder createType(String name, String color) {
|
||||
RouteActivityTypeBuilder builder = new RouteActivityTypeBuilder();
|
||||
builder.routeActivityType = new RouteActivityType(name, color);
|
||||
return builder;
|
||||
}
|
||||
|
||||
public static RouteActivityType getTypeFromTags(String[] tags) {
|
||||
RouteActivityType activityType = null;
|
||||
for (String tg : tags) {
|
||||
RouteActivityType rat = RouteActivityType.convertFromOsmGPXTag(tg);
|
||||
if (rat != null) {
|
||||
if (activityType == null || values.indexOf(activityType) > values.indexOf(rat)) {
|
||||
activityType = rat;
|
||||
}
|
||||
}
|
||||
}
|
||||
return activityType;
|
||||
}
|
||||
|
||||
public static RouteActivityType convertFromOsmGPXTag(String tg) {
|
||||
String t = tg.toLowerCase();
|
||||
if ("mountain hiking".equalsIgnoreCase(t)) {
|
||||
return HIKING;
|
||||
}
|
||||
if ("motorcar".equalsIgnoreCase(t)) {
|
||||
return CAR;
|
||||
}
|
||||
if ("laufen".equalsIgnoreCase(t)) {
|
||||
return RUNNING;
|
||||
}
|
||||
if ("pedestrian".equalsIgnoreCase(t)) {
|
||||
return WALKING;
|
||||
}
|
||||
switch (t) {
|
||||
case "mountainbiking":
|
||||
case "mtb":
|
||||
case "mountainbike":
|
||||
case "mountain bike":
|
||||
case "mountain biking":
|
||||
case "mountbarker":
|
||||
case "mtb-tour":
|
||||
case "ciclismo-mtb-gravel":
|
||||
case "vtt":
|
||||
case "btt":
|
||||
case "vth":
|
||||
case "mtb ride":
|
||||
return MOUNTAINBIKE;
|
||||
case "hiking":
|
||||
case "route=hiking":
|
||||
case "mountain hiking":
|
||||
case "hiking trail":
|
||||
case "wandern":
|
||||
case "hike":
|
||||
case "randonnée":
|
||||
case "trekking":
|
||||
case "climbing":
|
||||
return HIKING;
|
||||
case "bike":
|
||||
case "biking":
|
||||
case "bicycling":
|
||||
case "bicycle":
|
||||
case "cycling":
|
||||
case "cycle":
|
||||
case "cycleway":
|
||||
case "cykel":
|
||||
case "handcycle":
|
||||
case "cyclotourisme":
|
||||
case "route=bicycle":
|
||||
case "cyclotourism":
|
||||
case "fietsen":
|
||||
case "вело":
|
||||
case "велосипед":
|
||||
case "rower":
|
||||
case "trasa rowerem":
|
||||
case "vélo":
|
||||
case "velo":
|
||||
case "radtour":
|
||||
case "bici":
|
||||
case "fiets":
|
||||
case "fahrrad":
|
||||
case "ncn":
|
||||
case "icn":
|
||||
case "lcn":
|
||||
case "network=ncn":
|
||||
case "network=icn":
|
||||
case "network=lcn":
|
||||
return CYCLING;
|
||||
case "car":
|
||||
case "motorcar":
|
||||
case "by car":
|
||||
case "auto":
|
||||
case "автомобиль":
|
||||
case "automobile":
|
||||
case "autós":
|
||||
case "driving":
|
||||
case "drive":
|
||||
case "van":
|
||||
case "авто":
|
||||
case "на автомобиле":
|
||||
case "bus":
|
||||
case "truck":
|
||||
case "taxi":
|
||||
return CAR;
|
||||
case "running":
|
||||
case "run":
|
||||
case "rungis":
|
||||
case "trail running":
|
||||
case "trailrunning":
|
||||
case "бег":
|
||||
case "laufen":
|
||||
case "langlauf":
|
||||
case "lauf":
|
||||
case "course":
|
||||
case "jogging":
|
||||
case "fitotrack":
|
||||
return RUNNING;
|
||||
case "wanderung":
|
||||
case "walking":
|
||||
case "walk":
|
||||
case "nightwalk":
|
||||
case "walkway":
|
||||
case "пешком":
|
||||
case "пеший":
|
||||
case "pěšky":
|
||||
case "marche":
|
||||
case "pedestrian":
|
||||
case "foot":
|
||||
case "footing":
|
||||
case "on_foot":
|
||||
case "byfoot":
|
||||
case "onfoot":
|
||||
case "sightseeing":
|
||||
case "geocaching":
|
||||
case "etnanatura":
|
||||
case "etna":
|
||||
case "iwn":
|
||||
case "lwn":
|
||||
case "rwn":
|
||||
case "network=iwn":
|
||||
case "network=lwn":
|
||||
case "network=rwn":
|
||||
return WALKING;
|
||||
case "ling-moto":
|
||||
case "motorbiking":
|
||||
case "motorcycle":
|
||||
case "motorrad":
|
||||
case "motorbike":
|
||||
case "motor bike":
|
||||
case "FVbike":
|
||||
case "Motorrad":
|
||||
return MOTORBIKE;
|
||||
case "offroad":
|
||||
case "off-road":
|
||||
case "off road":
|
||||
case "4x4":
|
||||
case "terrain":
|
||||
case "quad":
|
||||
case "enduro":
|
||||
case "feldwege":
|
||||
case "feldweg":
|
||||
return OFFROAD;
|
||||
case "boat":
|
||||
case "water":
|
||||
case "boating":
|
||||
case "kayak":
|
||||
case "river":
|
||||
case "lake":
|
||||
case "lakes":
|
||||
case "canal":
|
||||
return WATER;
|
||||
case "ski":
|
||||
case "skiing":
|
||||
case "skating":
|
||||
case "skitour":
|
||||
case "winter":
|
||||
case "wintersports":
|
||||
case "snowboard":
|
||||
case "лыжи":
|
||||
case "лыжня":
|
||||
case "nordic":
|
||||
case "piste":
|
||||
return WINTER;
|
||||
case "snowmobile=designated":
|
||||
case "snowmobile=permissive":
|
||||
case "snowmobile=yes":
|
||||
case "snowmobile":
|
||||
return SNOWMOBILE;
|
||||
case "ride":
|
||||
case "horse":
|
||||
case "horse trail":
|
||||
return RIDING;
|
||||
case "racing":
|
||||
return RACING;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static class RouteActivityTypeBuilder {
|
||||
|
||||
private RouteActivityType routeActivityType;
|
||||
|
||||
public RouteActivityTypeBuilder icon(String icon) {
|
||||
routeActivityType.icon = icon;
|
||||
return this;
|
||||
}
|
||||
|
||||
private RouteActivityType reg() {
|
||||
values.add(routeActivityType);
|
||||
return routeActivityType;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -202,8 +202,6 @@ public class EntityParser {
|
|||
return amenitiesList;
|
||||
}
|
||||
|
||||
|
||||
|
||||
private static boolean checkAmenitiesToAdd(Amenity a, List<Amenity> amenitiesList){
|
||||
// check amenity for duplication
|
||||
for(Amenity b : amenitiesList){
|
||||
|
|
|
@ -183,7 +183,7 @@ public class OsmBaseStorage {
|
|||
protected static final int moduleProgress = 1 << 10;
|
||||
|
||||
public void startElement(XmlPullParser parser, String name) {
|
||||
if(!parseStarted){
|
||||
if (!parseStarted) {
|
||||
initRootElement(parser, name);
|
||||
}
|
||||
if (ELEM_MODIFY.equals(name) ) {
|
||||
|
@ -283,13 +283,14 @@ public class OsmBaseStorage {
|
|||
if (type != null) {
|
||||
if(currentParsedEntity != null){
|
||||
EntityId entityId = new EntityId(type, currentParsedEntity.getId());
|
||||
if(acceptEntityToLoad(entityId, currentParsedEntity)){
|
||||
if (acceptEntityToLoad(entityId, currentParsedEntity)) {
|
||||
Entity oldEntity = entities.put(entityId, currentParsedEntity);
|
||||
if(parseEntityInfo && currentParsedEntityInfo != null){
|
||||
if (parseEntityInfo && currentParsedEntityInfo != null) {
|
||||
entityInfo.put(entityId, currentParsedEntityInfo);
|
||||
}
|
||||
if(!supressWarnings && oldEntity!= null){
|
||||
throw new UnsupportedOperationException("Entity with id=" + oldEntity.getId() +" is duplicated in osm map"); //$NON-NLS-1$ //$NON-NLS-2$
|
||||
if (!supressWarnings && oldEntity != null) {
|
||||
throw new UnsupportedOperationException(
|
||||
"Entity with id=" + oldEntity.getId() + " is duplicated in osm map"); //$NON-NLS-1$ //$NON-NLS-2$
|
||||
}
|
||||
} else {
|
||||
// System.gc();
|
||||
|
@ -308,8 +309,8 @@ public class OsmBaseStorage {
|
|||
|
||||
|
||||
protected boolean acceptEntityToLoad(EntityId entityId, Entity entity) {
|
||||
for(IOsmStorageFilter f : filters){
|
||||
if(!f.acceptEntityToLoad(this, entityId, entity)){
|
||||
for (IOsmStorageFilter f : filters) {
|
||||
if (!f.acceptEntityToLoad(this, entityId, entity)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -620,9 +620,7 @@ public class GeneralRouter implements VehicleRouter {
|
|||
public double calculateTurnTime(RouteSegment segment, int segmentEnd, RouteSegment prev, int prevSegmentEnd) {
|
||||
float ts = getPenaltyTransition(segment.getRoad());
|
||||
float prevTs = getPenaltyTransition(prev.getRoad());
|
||||
|
||||
float totalPenalty = 0;
|
||||
|
||||
if (prevTs != ts) {
|
||||
totalPenalty += Math.abs(ts - prevTs) / 2;
|
||||
}
|
||||
|
@ -638,7 +636,9 @@ public class GeneralRouter implements VehicleRouter {
|
|||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
if (shortestRoute) {
|
||||
return totalPenalty;
|
||||
}
|
||||
if(segment.getRoad().roundabout() && !prev.getRoad().roundabout()) {
|
||||
double rt = getRoundaboutTurn();
|
||||
if(rt > 0) {
|
||||
|
|
448
OsmAnd-java/src/main/java/net/osmand/router/RouteColorize.java
Normal file
448
OsmAnd-java/src/main/java/net/osmand/router/RouteColorize.java
Normal file
|
@ -0,0 +1,448 @@
|
|||
package net.osmand.router;
|
||||
|
||||
import net.osmand.GPXUtilities;
|
||||
import net.osmand.PlatformUtil;
|
||||
import net.osmand.osm.edit.Node;
|
||||
import net.osmand.osm.edit.OsmMapUtils;
|
||||
import net.osmand.util.MapUtils;
|
||||
import org.apache.commons.logging.Log;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class RouteColorize {
|
||||
|
||||
public int zoom;
|
||||
public double[] latitudes;
|
||||
public double[] longitudes;
|
||||
public double[] values;
|
||||
public double minValue;
|
||||
public double maxValue;
|
||||
public double[][] palette;
|
||||
|
||||
private List<RouteColorizationPoint> dataList;
|
||||
|
||||
public static final int DARK_GREY = rgbaToDecimal(92, 92, 92, 255);
|
||||
public static final int LIGHT_GREY = rgbaToDecimal(200, 200, 200, 255);
|
||||
public static final int RED = rgbaToDecimal(255,1,1,255);
|
||||
public static final int GREEN = rgbaToDecimal(46,185,0,191);
|
||||
public static final int YELLOW = rgbaToDecimal(255,222,2,227);
|
||||
|
||||
public enum ValueType {
|
||||
ELEVATION,
|
||||
SPEED,
|
||||
SLOPE,
|
||||
NONE
|
||||
}
|
||||
|
||||
private final int VALUE_INDEX = 0;
|
||||
private final int DECIMAL_COLOR_INDEX = 1;//sRGB decimal format
|
||||
private final int RED_COLOR_INDEX = 1;//RGB
|
||||
private final int GREEN_COLOR_INDEX = 2;//RGB
|
||||
private final int BLUE_COLOR_INDEX = 3;//RGB
|
||||
private final int ALPHA_COLOR_INDEX = 4;//RGBA
|
||||
|
||||
private ValueType valueType;
|
||||
|
||||
public static int SLOPE_RANGE = 150;//150 meters
|
||||
private static final double MIN_DIFFERENCE_SLOPE = 0.05d;//5%
|
||||
|
||||
private static final Log LOG = PlatformUtil.getLog(RouteColorize.class);
|
||||
|
||||
/**
|
||||
* @param minValue can be NaN
|
||||
* @param maxValue can be NaN
|
||||
* @param palette array {{value,color},...} - color in sRGB (decimal) format OR {{value,RED,GREEN,BLUE,ALPHA},...} - color in RGBA format
|
||||
*/
|
||||
public RouteColorize(int zoom, double[] latitudes, double[] longitudes, double[] values, double minValue, double maxValue, double[][] palette) {
|
||||
this.zoom = zoom;
|
||||
this.latitudes = latitudes;
|
||||
this.longitudes = longitudes;
|
||||
this.values = values;
|
||||
this.minValue = minValue;
|
||||
this.maxValue = maxValue;
|
||||
this.palette = palette;
|
||||
|
||||
if (Double.isNaN(minValue) || Double.isNaN(maxValue)) {
|
||||
calculateMinMaxValue();
|
||||
}
|
||||
checkPalette();
|
||||
sortPalette();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param type ELEVATION, SPEED, SLOPE
|
||||
*/
|
||||
public RouteColorize(int zoom, GPXUtilities.GPXFile gpxFile, ValueType type) {
|
||||
|
||||
if (!gpxFile.hasTrkPt()) {
|
||||
LOG.warn("GPX file is not consist of track points");
|
||||
return;
|
||||
}
|
||||
|
||||
List<Double> latList = new ArrayList<>();
|
||||
List<Double> lonList = new ArrayList<>();
|
||||
List<Double> valList = new ArrayList<>();
|
||||
for (GPXUtilities.Track t : gpxFile.tracks) {
|
||||
for (GPXUtilities.TrkSegment ts : t.segments) {
|
||||
for (GPXUtilities.WptPt p : ts.points) {
|
||||
latList.add(p.lat);
|
||||
lonList.add(p.lon);
|
||||
if (type == ValueType.SPEED) {
|
||||
valList.add(p.speed);
|
||||
} else {
|
||||
valList.add(p.ele);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
this.zoom = zoom;
|
||||
latitudes = listToArray(latList);
|
||||
longitudes = listToArray(lonList);
|
||||
|
||||
if (type == ValueType.SLOPE) {
|
||||
values = calculateSlopesByElevations(latitudes, longitudes, listToArray(valList), SLOPE_RANGE);
|
||||
} else {
|
||||
values = listToArray(valList);
|
||||
}
|
||||
|
||||
calculateMinMaxValue();
|
||||
valueType = type;
|
||||
checkPalette();
|
||||
sortPalette();
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculate slopes from elevations needs for right colorizing
|
||||
*
|
||||
* @param slopeRange - in what range calculate the derivative, usually we used 150 meters
|
||||
* @return slopes array, in the begin and the end present NaN values!
|
||||
*/
|
||||
public double[] calculateSlopesByElevations(double[] latitudes, double[] longitudes, double[] elevations, double slopeRange) {
|
||||
|
||||
double[] newElevations = elevations;
|
||||
for (int i = 2; i < elevations.length - 2; i++) {
|
||||
newElevations[i] = elevations[i - 2]
|
||||
+ elevations[i - 1]
|
||||
+ elevations[i]
|
||||
+ elevations[i + 1]
|
||||
+ elevations[i + 2];
|
||||
newElevations[i] /= 5;
|
||||
}
|
||||
elevations = newElevations;
|
||||
|
||||
double[] slopes = new double[elevations.length];
|
||||
if (latitudes.length != longitudes.length || latitudes.length != elevations.length) {
|
||||
LOG.warn("Sizes of arrays latitudes, longitudes and values are not match");
|
||||
return slopes;
|
||||
}
|
||||
|
||||
double[] distances = new double[elevations.length];
|
||||
double totalDistance = 0.0d;
|
||||
distances[0] = totalDistance;
|
||||
for (int i = 0; i < elevations.length - 1; i++) {
|
||||
totalDistance += MapUtils.getDistance(latitudes[i], longitudes[i], latitudes[i + 1], longitudes[i + 1]);
|
||||
distances[i + 1] = totalDistance;
|
||||
}
|
||||
|
||||
for (int i = 0; i < elevations.length; i++) {
|
||||
if (distances[i] < slopeRange / 2 || distances[i] > totalDistance - slopeRange / 2) {
|
||||
slopes[i] = Double.NaN;
|
||||
} else {
|
||||
double[] arg = findDerivativeArguments(distances, elevations, i, slopeRange);
|
||||
slopes[i] = (arg[1] - arg[0]) / (arg[3] - arg[2]);
|
||||
}
|
||||
}
|
||||
return slopes;
|
||||
}
|
||||
|
||||
public List<RouteColorizationPoint> getResult(boolean simplify) {
|
||||
List<RouteColorizationPoint> result = new ArrayList<>();
|
||||
if (simplify) {
|
||||
result = simplify();
|
||||
} else {
|
||||
for (int i = 0; i < latitudes.length; i++) {
|
||||
result.add(new RouteColorizationPoint(i, latitudes[i], longitudes[i], values[i]));
|
||||
}
|
||||
}
|
||||
for (RouteColorizationPoint data : result) {
|
||||
data.color = getColorByValue(data.val);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
public int getColorByValue(double value) {
|
||||
if (Double.isNaN(value)) {
|
||||
value = (minValue + maxValue) / 2;
|
||||
}
|
||||
for (int i = 0; i < palette.length - 1; i++) {
|
||||
if (value == palette[i][VALUE_INDEX])
|
||||
return (int) palette[i][DECIMAL_COLOR_INDEX];
|
||||
if (value >= palette[i][VALUE_INDEX] && value <= palette[i + 1][VALUE_INDEX]) {
|
||||
int minPaletteColor = (int) palette[i][DECIMAL_COLOR_INDEX];
|
||||
int maxPaletteColor = (int) palette[i + 1][DECIMAL_COLOR_INDEX];
|
||||
double minPaletteValue = palette[i][VALUE_INDEX];
|
||||
double maxPaletteValue = palette[i + 1][VALUE_INDEX];
|
||||
double percent = (value - minPaletteValue) / (maxPaletteValue - minPaletteValue);
|
||||
double resultRed = getRed(minPaletteColor) + percent * (getRed(maxPaletteColor) - getRed(minPaletteColor));
|
||||
double resultGreen = getGreen(minPaletteColor) + percent * (getGreen(maxPaletteColor) - getGreen(minPaletteColor));
|
||||
double resultBlue = getBlue(minPaletteColor) + percent * (getBlue(maxPaletteColor) - getBlue(minPaletteColor));
|
||||
double resultAlpha = getAlpha(minPaletteColor) + percent * (getAlpha(maxPaletteColor) - getAlpha(minPaletteColor));
|
||||
return rgbaToDecimal((int) resultRed, (int) resultGreen, (int) resultBlue, (int) resultAlpha);
|
||||
}
|
||||
}
|
||||
return getDefaultColor();
|
||||
}
|
||||
|
||||
public void setPalette(double[][] palette) {
|
||||
this.palette = palette;
|
||||
checkPalette();
|
||||
sortPalette();
|
||||
}
|
||||
|
||||
private int getDefaultColor() {
|
||||
return rgbaToDecimal(0, 0, 0, 0);
|
||||
}
|
||||
|
||||
private List<RouteColorizationPoint> simplify() {
|
||||
if (dataList == null) {
|
||||
dataList = new ArrayList<>();
|
||||
for (int i = 0; i < latitudes.length; i++) {
|
||||
//System.out.println(latitudes[i] + " " + longitudes[i] + " " + values[i]);
|
||||
dataList.add(new RouteColorizationPoint(i, latitudes[i], longitudes[i], values[i]));
|
||||
}
|
||||
}
|
||||
List<Node> nodes = new ArrayList<>();
|
||||
List<Node> result = new ArrayList<>();
|
||||
for (RouteColorizationPoint data : dataList) {
|
||||
nodes.add(new net.osmand.osm.edit.Node(data.lat, data.lon, data.id));
|
||||
}
|
||||
OsmMapUtils.simplifyDouglasPeucker(nodes, zoom + 5, 1, result, true);
|
||||
|
||||
List<RouteColorizationPoint> simplified = new ArrayList<>();
|
||||
|
||||
for (int i = 1; i < result.size() - 1; i++) {
|
||||
int prevId = (int) result.get(i - 1).getId();
|
||||
int currentId = (int) result.get(i).getId();
|
||||
List<RouteColorizationPoint> sublist = dataList.subList(prevId, currentId);
|
||||
simplified.addAll(getExtremums(sublist));
|
||||
}
|
||||
return simplified;
|
||||
}
|
||||
|
||||
private List<RouteColorizationPoint> getExtremums(List<RouteColorizationPoint> subDataList) {
|
||||
if (subDataList.size() <= 2) {
|
||||
return subDataList;
|
||||
}
|
||||
|
||||
List<RouteColorizationPoint> result = new ArrayList<>();
|
||||
double min;
|
||||
double max;
|
||||
min = max = subDataList.get(0).val;
|
||||
for (RouteColorizationPoint pt : subDataList) {
|
||||
if (min > pt.val) {
|
||||
min = pt.val;
|
||||
}
|
||||
if (max < pt.val) {
|
||||
max = pt.val;
|
||||
}
|
||||
}
|
||||
|
||||
double diff = max - min;
|
||||
|
||||
result.add(subDataList.get(0));
|
||||
for (int i = 1; i < subDataList.size() - 1; i++) {
|
||||
double prev = subDataList.get(i - 1).val;
|
||||
double current = subDataList.get(i).val;
|
||||
double next = subDataList.get(i + 1).val;
|
||||
RouteColorizationPoint currentData = subDataList.get(i);
|
||||
|
||||
if ((current > prev && current > next) || (current < prev && current < next)
|
||||
|| (current < prev && current == next) || (current == prev && current < next)
|
||||
|| (current > prev && current == next) || (current == prev && current > next)) {
|
||||
RouteColorizationPoint prevInResult;
|
||||
if (result.size() > 0) {
|
||||
prevInResult = result.get(0);
|
||||
if (prevInResult.val / diff > MIN_DIFFERENCE_SLOPE) {
|
||||
result.add(currentData);
|
||||
}
|
||||
} else
|
||||
result.add(currentData);
|
||||
}
|
||||
}
|
||||
result.add(subDataList.get(subDataList.size() - 1));
|
||||
return result;
|
||||
}
|
||||
|
||||
private void checkPalette() {
|
||||
if (palette == null || palette.length < 2 || palette[0].length < 2 || palette[1].length < 2) {
|
||||
LOG.info("Will use default palette");
|
||||
palette = new double[3][2];
|
||||
|
||||
double[][] defaultPalette = {
|
||||
{minValue, GREEN},
|
||||
{valueType == ValueType.SLOPE ? 0 : (minValue + maxValue) / 2, YELLOW},
|
||||
{maxValue, RED}
|
||||
};
|
||||
palette = defaultPalette;
|
||||
}
|
||||
double min;
|
||||
double max = min = palette[0][VALUE_INDEX];
|
||||
int minIndex = 0;
|
||||
int maxIndex = 0;
|
||||
double[][] sRGBPalette = new double[palette.length][2];
|
||||
for (int i = 0; i < palette.length; i++) {
|
||||
double[] p = palette[i];
|
||||
if (p.length == 2) {
|
||||
sRGBPalette[i] = p;
|
||||
} else if (p.length == 4) {
|
||||
int color = rgbaToDecimal((int) p[RED_COLOR_INDEX], (int) p[GREEN_COLOR_INDEX], (int) p[BLUE_COLOR_INDEX], 255);
|
||||
sRGBPalette[i] = new double[]{p[VALUE_INDEX], color};
|
||||
} else if (p.length >= 5) {
|
||||
int color = rgbaToDecimal((int) p[RED_COLOR_INDEX], (int) p[GREEN_COLOR_INDEX], (int) p[BLUE_COLOR_INDEX], (int) p[ALPHA_COLOR_INDEX]);
|
||||
sRGBPalette[i] = new double[]{p[VALUE_INDEX], color};
|
||||
}
|
||||
if (p[VALUE_INDEX] > max) {
|
||||
max = p[VALUE_INDEX];
|
||||
maxIndex = i;
|
||||
}
|
||||
if (p[VALUE_INDEX] < min) {
|
||||
min = p[VALUE_INDEX];
|
||||
minIndex = i;
|
||||
}
|
||||
}
|
||||
palette = sRGBPalette;
|
||||
if (minValue < min) {
|
||||
palette[minIndex][VALUE_INDEX] = minValue;
|
||||
}
|
||||
if (maxValue > max) {
|
||||
palette[maxIndex][VALUE_INDEX] = maxValue;
|
||||
}
|
||||
}
|
||||
|
||||
private void sortPalette() {
|
||||
java.util.Arrays.sort(palette, new java.util.Comparator<double[]>() {
|
||||
public int compare(double[] a, double[] b) {
|
||||
return Double.compare(a[VALUE_INDEX], b[VALUE_INDEX]);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* @return double[minElevation, maxElevation, minDist, maxDist]
|
||||
*/
|
||||
private double[] findDerivativeArguments(double[] distances, double[] elevations, int index, double slopeRange) {
|
||||
double[] result = new double[4];
|
||||
double minDist = distances[index] - slopeRange / 2;
|
||||
double maxDist = distances[index] + slopeRange / 2;
|
||||
result[0] = Double.NaN;
|
||||
result[1] = Double.NaN;
|
||||
result[2] = minDist;
|
||||
result[3] = maxDist;
|
||||
int closestMaxIndex = -1;
|
||||
int closestMinIndex = -1;
|
||||
for (int i = index; i < distances.length; i++) {
|
||||
if (distances[i] == maxDist) {
|
||||
result[1] = elevations[i];
|
||||
break;
|
||||
}
|
||||
if (distances[i] > maxDist) {
|
||||
closestMaxIndex = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
for (int i = index; i >= 0; i--) {
|
||||
if (distances[i] == minDist) {
|
||||
result[0] = elevations[i];
|
||||
break;
|
||||
}
|
||||
if (distances[i] < minDist) {
|
||||
closestMinIndex = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (closestMaxIndex > 0) {
|
||||
double diff = distances[closestMaxIndex] - distances[closestMaxIndex - 1];
|
||||
double coef = (maxDist - distances[closestMaxIndex - 1]) / diff;
|
||||
if (coef > 1 || coef < 0) {
|
||||
LOG.warn("Coefficient fo max must be 0..1 , coef=" + coef);
|
||||
}
|
||||
result[1] = (1 - coef) * elevations[closestMaxIndex - 1] + coef * elevations[closestMaxIndex];
|
||||
}
|
||||
if (closestMinIndex >= 0) {
|
||||
double diff = distances[closestMinIndex + 1] - distances[closestMinIndex];
|
||||
double coef = (minDist - distances[closestMinIndex]) / diff;
|
||||
if (coef > 1 || coef < 0) {
|
||||
LOG.warn("Coefficient for min must be 0..1 , coef=" + coef);
|
||||
}
|
||||
result[0] = (1 - coef) * elevations[closestMinIndex] + coef * elevations[closestMinIndex + 1];
|
||||
}
|
||||
if (Double.isNaN(result[0]) || Double.isNaN(result[1])) {
|
||||
LOG.warn("Elevations wasn't calculated");
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
private void calculateMinMaxValue() {
|
||||
if (values.length == 0)
|
||||
return;
|
||||
minValue = maxValue = Double.NaN;
|
||||
for (double value : values) {
|
||||
if ((Double.isNaN(maxValue) || Double.isNaN(minValue)) && !Double.isNaN(value))
|
||||
maxValue = minValue = value;
|
||||
if (minValue > value)
|
||||
minValue = value;
|
||||
if (maxValue < value)
|
||||
maxValue = value;
|
||||
}
|
||||
}
|
||||
|
||||
private double[] listToArray(List<Double> doubleList) {
|
||||
double[] result = new double[doubleList.size()];
|
||||
for (int i = 0; i < doubleList.size(); i++) {
|
||||
result[i] = doubleList.get(i);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
private static int rgbaToDecimal(int r, int g, int b, int a) {
|
||||
int value = ((a & 0xFF) << 24) |
|
||||
((r & 0xFF) << 16) |
|
||||
((g & 0xFF) << 8) |
|
||||
((b & 0xFF) << 0);
|
||||
return value;
|
||||
}
|
||||
|
||||
private int getRed(int value) {
|
||||
return (value >> 16) & 0xFF;
|
||||
}
|
||||
|
||||
private int getGreen(int value) {
|
||||
return (value >> 8) & 0xFF;
|
||||
}
|
||||
|
||||
private int getBlue(int value) {
|
||||
return (value >> 0) & 0xFF;
|
||||
}
|
||||
|
||||
private int getAlpha(int value) {
|
||||
return (value >> 24) & 0xff;
|
||||
}
|
||||
|
||||
public static class RouteColorizationPoint {
|
||||
int id;
|
||||
public double lat;
|
||||
public double lon;
|
||||
public double val;
|
||||
public int color;
|
||||
|
||||
RouteColorizationPoint(int id, double lat, double lon, double val) {
|
||||
this.id = id;
|
||||
this.lat = lat;
|
||||
this.lon = lon;
|
||||
this.val = val;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -367,8 +367,9 @@ public class RouteStatisticsHelper {
|
|||
RouteDataObject obj = segment.obj;
|
||||
for (int type : obj.getTypes()) {
|
||||
BinaryMapRouteReaderAdapter.RouteTypeRule tp = obj.region.quickGetEncodingRule(type);
|
||||
if (tp.getTag().equals("highway") || tp.getTag().equals("route") ||
|
||||
tp.getTag().equals("railway") || tp.getTag().equals("aeroway") || tp.getTag().equals("aerialway")) {
|
||||
if (tp.getTag().equals("highway") || tp.getTag().equals("route")
|
||||
|| tp.getTag().equals("railway") || tp.getTag().equals("aeroway")
|
||||
|| tp.getTag().equals("aerialway") || tp.getTag().equals("piste:type")) {
|
||||
if (!mainTagAdded) {
|
||||
req.setStringFilter(rrs.PROPS.R_TAG, tp.getTag());
|
||||
req.setStringFilter(rrs.PROPS.R_VALUE, tp.getValue());
|
||||
|
|
|
@ -53,6 +53,8 @@ public class Algorithms {
|
|||
public static final int XML_FILE_SIGNATURE = 0x3c3f786d;
|
||||
public static final int OBF_FILE_SIGNATURE = 0x08029001;
|
||||
public static final int SQLITE_FILE_SIGNATURE = 0x53514C69;
|
||||
public static final int BZIP_FILE_SIGNATURE = 0x425a;
|
||||
public static final int GZIP_FILE_SIGNATURE = 0x1f8b;
|
||||
|
||||
public static String normalizeSearchText(String s) {
|
||||
boolean norm = false;
|
||||
|
@ -127,6 +129,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());
|
||||
}
|
||||
|
@ -311,6 +324,24 @@ public class Algorithms {
|
|||
return test == ZIP_FILE_SIGNATURE;
|
||||
}
|
||||
|
||||
public static boolean checkFileSignature(InputStream inputStream, int fileSignature) throws IOException {
|
||||
if (inputStream == null) return false;
|
||||
int firstBytes;
|
||||
if (isSmallFileSignature(fileSignature)) {
|
||||
firstBytes = readSmallInt(inputStream);
|
||||
} else {
|
||||
firstBytes = readInt(inputStream);
|
||||
}
|
||||
if (inputStream.markSupported()) {
|
||||
inputStream.reset();
|
||||
}
|
||||
return firstBytes == fileSignature;
|
||||
}
|
||||
|
||||
public static boolean isSmallFileSignature(int fileSignature) {
|
||||
return fileSignature == BZIP_FILE_SIGNATURE || fileSignature == GZIP_FILE_SIGNATURE;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks, whether the child directory is a subdirectory of the parent
|
||||
* directory.
|
||||
|
@ -347,6 +378,14 @@ public class Algorithms {
|
|||
return ((ch1 << 24) + (ch2 << 16) + (ch3 << 8) + ch4);
|
||||
}
|
||||
|
||||
public static int readSmallInt(InputStream in) throws IOException {
|
||||
int ch1 = in.read();
|
||||
int ch2 = in.read();
|
||||
if ((ch1 | ch2) < 0)
|
||||
throw new EOFException();
|
||||
return ((ch1 << 8) + ch2);
|
||||
}
|
||||
|
||||
public static String capitalizeFirstLetterAndLowercase(String s) {
|
||||
if (s != null && s.length() > 1) {
|
||||
// not very efficient algorithm
|
||||
|
@ -526,6 +565,13 @@ public class Algorithms {
|
|||
}
|
||||
}
|
||||
|
||||
public static ByteArrayInputStream createByteArrayIS(InputStream in) throws IOException {
|
||||
ByteArrayOutputStream out = new ByteArrayOutputStream();
|
||||
streamCopy(in, out);
|
||||
in.close();
|
||||
return new ByteArrayInputStream(out.toByteArray());
|
||||
}
|
||||
|
||||
@SuppressWarnings("ResultOfMethodCallIgnored")
|
||||
public static void updateAllExistingImgTilesToOsmandFormat(File f) {
|
||||
if (f.isDirectory()) {
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -36,7 +36,7 @@
|
|||
<string name="shared_string_close">Κλείσιμο</string>
|
||||
<string name="shared_string_off">Ανενεργό</string>
|
||||
<string name="shared_string_install">Εγκατάσταση</string>
|
||||
<string name="shared_string_share">Διαμοιρασμός</string>
|
||||
<string name="shared_string_share">Κοινοποίηση</string>
|
||||
<string name="shared_string_back">Προηγούμενο</string>
|
||||
<string name="shared_string_continue">Συνέχεια</string>
|
||||
<string name="shared_string_cancel">Ακύρωση</string>
|
||||
|
|
|
@ -135,10 +135,10 @@
|
|||
<string name="mile">мл</string>
|
||||
<string name="km">км</string>
|
||||
<string name="m">м</string>
|
||||
<string name="nm">мор.м.</string>
|
||||
<string name="nm">nmi</string>
|
||||
<string name="min_mile">хв/м</string>
|
||||
<string name="min_km">хв/км</string>
|
||||
<string name="nm_h">вузл</string>
|
||||
<string name="nm_h">вузлів</string>
|
||||
<string name="m_s">м/с</string>
|
||||
<string name="km_h">км/г</string>
|
||||
<string name="mile_per_hour">мл/г</string>
|
||||
|
|
|
@ -46,8 +46,8 @@ class TelegramLocationProvider(private val app: TelegramApplication) : SensorEve
|
|||
private var fusedLocationProviderClient: FusedLocationProviderClient? = null
|
||||
private val locationRequest = LocationRequest().apply {
|
||||
interval = 1000
|
||||
fastestInterval = 500
|
||||
maxWaitTime = 2000
|
||||
//fastestInterval = 500
|
||||
maxWaitTime = 0
|
||||
priority = LocationRequest.PRIORITY_HIGH_ACCURACY
|
||||
}
|
||||
private val locationCallback = object : LocationCallback() {
|
||||
|
|
|
@ -82,11 +82,11 @@ class TelegramService : Service(), TelegramIncomingMessagesListener,
|
|||
|
||||
// Sets the fastest rate for active location updates. This interval is exact, and your
|
||||
// application will never receive updates more frequently than this value.
|
||||
fastestInterval = 500
|
||||
//fastestInterval = 500
|
||||
|
||||
// Sets the maximum time when batched location updates are delivered. Updates may be
|
||||
// delivered sooner than this interval.
|
||||
maxWaitTime = 2000
|
||||
maxWaitTime = 0
|
||||
|
||||
priority = LocationRequest.PRIORITY_HIGH_ACCURACY
|
||||
}
|
||||
|
|
11
OsmAnd/.gitignore
vendored
11
OsmAnd/.gitignore
vendored
|
@ -39,11 +39,7 @@ mx_*
|
|||
valgrind/
|
||||
bin/
|
||||
dist/
|
||||
assets/specialphrases/*
|
||||
assets/voice/*
|
||||
assets/fonts/*
|
||||
assets/feature_articles/*
|
||||
assets/World_basemap_mini*
|
||||
|
||||
gen/
|
||||
local.properties
|
||||
raw/
|
||||
|
@ -56,6 +52,11 @@ out/
|
|||
use/
|
||||
osmand.properties
|
||||
osmand.xml
|
||||
assets/specialphrases/*
|
||||
assets/voice/*
|
||||
assets/fonts/*
|
||||
assets/feature_articles/*
|
||||
assets/*.obf
|
||||
assets/style.css
|
||||
assets/poi_categories.json
|
||||
assets/help/*.html
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
|
||||
<application
|
||||
android:icon="@mipmap/icon_free"
|
||||
android:label="OsmAnd — Offline Maps & GPS Navigation"
|
||||
android:label="OsmAnd - Offline Maps and GPS Navigation"
|
||||
tools:replace="android:icon, android:label">
|
||||
|
||||
<meta-data
|
||||
|
|
|
@ -109,4 +109,5 @@
|
|||
<asset source="sounds/camera_click.ogg" destination="sounds/camera_click.ogg" mode="copyOnlyIfDoesNotExist" />
|
||||
|
||||
<asset source="World_basemap_mini.obf" destination="World_basemap_mini.obf" mode="alwaysOverwriteOrCopy" />
|
||||
<asset source="Default_wikivoyage.travel.obf" destination="travel/Default_wikivoyage.travel.obf" mode="copyOnlyIfDoesNotExist" />
|
||||
</assets>
|
||||
|
|
Binary file not shown.
|
@ -106,6 +106,14 @@ android {
|
|||
}
|
||||
}
|
||||
|
||||
clean.doFirst {
|
||||
delete fileTree('assets') {
|
||||
include '*.obf'
|
||||
include 'fonts/**'
|
||||
include 'feature_articles/**'
|
||||
include 'voice/**'
|
||||
}
|
||||
}
|
||||
|
||||
task validateTranslate {
|
||||
println "Validating translations"
|
||||
|
@ -126,9 +134,15 @@ task validateTranslate {
|
|||
}
|
||||
}
|
||||
|
||||
task downloadDefaultWikivoyage {
|
||||
doLast {
|
||||
ant.get(src: 'https://builder.osmand.net/wikivoyage-gen/sqlite/Default_wikivoyage_2.travel.obf', dest: 'assets/Default_wikivoyage.travel.obf', skipexisting: 'true')
|
||||
}
|
||||
}
|
||||
|
||||
task downloadWorldMiniBasemap {
|
||||
doLast {
|
||||
ant.get(src: 'http://builder.osmand.net/basemap/World_basemap_mini_2.obf', dest: 'assets/World_basemap_mini.obf', skipexisting: 'true')
|
||||
ant.get(src: 'https://builder.osmand.net/basemap/World_basemap_mini_2.obf', dest: 'assets/World_basemap_mini.obf', skipexisting: 'true')
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -254,7 +268,8 @@ task collectExternalResources {
|
|||
copyWidgetIconsHdpi,
|
||||
copyWidgetIconsXhdpi,
|
||||
copyPoiCategories,
|
||||
downloadWorldMiniBasemap
|
||||
downloadWorldMiniBasemap,
|
||||
downloadDefaultWikivoyage
|
||||
}
|
||||
|
||||
// Legacy core build
|
||||
|
@ -358,4 +373,5 @@ dependencies {
|
|||
}
|
||||
implementation 'com.jaredrummler:colorpicker:1.1.0'
|
||||
implementation 'org.bouncycastle:bcpkix-jdk15on:1.56'
|
||||
implementation 'com.google.android.play:core:1.9.1'
|
||||
}
|
|
@ -24,6 +24,7 @@ android {
|
|||
// Build that doesn't include 3D OpenGL
|
||||
legacy {
|
||||
dimension "coreversion"
|
||||
resValue "string", "app_edition", ""
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -56,5 +57,5 @@ project.afterEvaluate {
|
|||
}
|
||||
|
||||
dependencies {
|
||||
implementation 'com.google.android.gms:play-services-location:17.1.0'
|
||||
implementation 'com.google.android.gms:play-services-location:18.0.0'
|
||||
}
|
||||
|
|
|
@ -85,6 +85,7 @@ android {
|
|||
}
|
||||
amazonFree {
|
||||
java.srcDirs = ["src-nogms", "src-google"]
|
||||
manifest.srcFile "AndroidManifest-gplayFree.xml"
|
||||
}
|
||||
amazonFull {
|
||||
java.srcDirs = ["src-nogms", "src-google"]
|
||||
|
@ -186,21 +187,9 @@ dependencies {
|
|||
opengldebugImplementation "net.osmand:OsmAndCore_android:0.1-SNAPSHOT@aar"
|
||||
openglImplementation "net.osmand:OsmAndCore_androidNativeRelease:0.1-SNAPSHOT@aar"
|
||||
openglImplementation "net.osmand:OsmAndCore_android:0.1-SNAPSHOT@aar"
|
||||
implementation ("com.getkeepsafe.taptargetview:taptargetview:1.12.0"){
|
||||
exclude group: 'com.android.support'
|
||||
}
|
||||
implementation 'com.github.PhilJay:MPAndroidChart:v3.0.1'
|
||||
implementation ("com.github.HITGIF:TextFieldBoxes:1.4.5"){
|
||||
exclude group: 'com.android.support'
|
||||
}
|
||||
implementation('com.github.scribejava:scribejava-apis:7.1.1'){
|
||||
exclude group: "com.fasterxml.jackson.core"
|
||||
}
|
||||
implementation 'com.jaredrummler:colorpicker:1.1.0'
|
||||
implementation "org.bouncycastle:bcpkix-jdk15on:1.56"
|
||||
|
||||
huaweiImplementation 'com.huawei.hms:iap:5.0.2.300'
|
||||
|
||||
gplayFreeImplementation 'com.google.android.gms:play-services-location:17.1.0'
|
||||
gplayFullImplementation 'com.google.android.gms:play-services-location:17.1.0'
|
||||
gplayFreeImplementation 'com.google.android.gms:play-services-location:18.0.0'
|
||||
gplayFullImplementation 'com.google.android.gms:play-services-location:18.0.0'
|
||||
}
|
||||
|
|
6
OsmAnd/res/drawable-mdpi/btn_background_active_dark.xml
Normal file
6
OsmAnd/res/drawable-mdpi/btn_background_active_dark.xml
Normal file
|
@ -0,0 +1,6 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="rectangle">
|
||||
<solid android:color="@color/active_buttons_and_links_bg_pressed_dark" />
|
||||
<corners android:radius="3dp" />
|
||||
</shape>
|
|
@ -0,0 +1,6 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="rectangle">
|
||||
<solid android:color="@color/inactive_buttons_and_links_bg_dark" />
|
||||
<corners android:radius="3dp" />
|
||||
</shape>
|
|
@ -0,0 +1,6 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="rectangle">
|
||||
<solid android:color="@color/inactive_buttons_and_links_bg_light" />
|
||||
<corners android:radius="3dp" />
|
||||
</shape>
|
|
@ -0,0 +1,6 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="rectangle">
|
||||
<stroke android:width="1dp" android:color="@color/active_buttons_and_links_bg_pressed_dark" />
|
||||
<corners android:radius="3dp" />
|
||||
</shape>
|
|
@ -0,0 +1,6 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="rectangle">
|
||||
<stroke android:width="1dp" android:color="@color/active_buttons_and_links_bg_pressed_light" />
|
||||
<corners android:radius="3dp" />
|
||||
</shape>
|
|
@ -0,0 +1,6 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="rectangle">
|
||||
<stroke android:width="1dp" android:color="@color/inactive_buttons_and_links_bg_dark" />
|
||||
<corners android:radius="3dp" />
|
||||
</shape>
|
|
@ -0,0 +1,6 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="rectangle">
|
||||
<stroke android:width="1dp" android:color="@color/inactive_buttons_and_links_bg_light" />
|
||||
<corners android:radius="3dp" />
|
||||
</shape>
|
BIN
OsmAnd/res/drawable-xxhdpi/img_plugin_mapillary.webp
Normal file
BIN
OsmAnd/res/drawable-xxhdpi/img_plugin_mapillary.webp
Normal file
Binary file not shown.
After Width: | Height: | Size: 26 KiB |
6
OsmAnd/res/drawable/btn_background_active_light.xml
Normal file
6
OsmAnd/res/drawable/btn_background_active_light.xml
Normal file
|
@ -0,0 +1,6 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="rectangle">
|
||||
<solid android:color="@color/active_buttons_and_links_bg_pressed_light" />
|
||||
<corners android:radius="3dp" />
|
||||
</shape>
|
15
OsmAnd/res/drawable/btn_unstroked_dark.xml
Normal file
15
OsmAnd/res/drawable/btn_unstroked_dark.xml
Normal file
|
@ -0,0 +1,15 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item android:state_pressed="true">
|
||||
<shape android:shape="rectangle">
|
||||
<solid android:color="@color/active_buttons_and_links_bg_pressed_dark" />
|
||||
<corners android:radius="@dimen/dlg_button_rect_rad" />
|
||||
</shape>
|
||||
</item>
|
||||
<item>
|
||||
<shape android:shape="rectangle">
|
||||
<solid android:color="@null" />
|
||||
<corners android:radius="@dimen/dlg_button_rect_rad" />
|
||||
</shape>
|
||||
</item>
|
||||
</selector>
|
15
OsmAnd/res/drawable/btn_unstroked_light.xml
Normal file
15
OsmAnd/res/drawable/btn_unstroked_light.xml
Normal file
|
@ -0,0 +1,15 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item android:state_pressed="true">
|
||||
<shape android:shape="rectangle">
|
||||
<solid android:color="@color/active_buttons_and_links_bg_pressed_light" />
|
||||
<corners android:radius="@dimen/dlg_button_rect_rad" />
|
||||
</shape>
|
||||
</item>
|
||||
<item>
|
||||
<shape android:shape="rectangle">
|
||||
<solid android:color="@null" />
|
||||
<corners android:radius="@dimen/dlg_button_rect_rad" />
|
||||
</shape>
|
||||
</item>
|
||||
</selector>
|
30
OsmAnd/res/drawable/ic_action_file_report.xml
Normal file
30
OsmAnd/res/drawable/ic_action_file_report.xml
Normal file
|
@ -0,0 +1,30 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24">
|
||||
<path
|
||||
android:pathData="M6,2C4.8954,2 4,2.8954 4,4V20C4,21.1046 4.8954,22 6,22H18C19.1046,22 20,21.1046 20,20V8H16C14.8954,8 14,7.1046 14,6V2H6ZM9,9H7V11H9V9ZM7,13H9V15H7V13ZM7,17H9V19H7V17ZM11,11V9H17V11H11ZM17,15V13H11V15H17ZM17,19V17H11V19H17Z"
|
||||
android:fillColor="#ffffff"
|
||||
android:fillType="evenOdd"/>
|
||||
<path
|
||||
android:pathData="M14,2L20,8H16C14.8954,8 14,7.1046 14,6V2Z"
|
||||
android:strokeAlpha="0.5"
|
||||
android:fillColor="#ffffff"
|
||||
android:fillAlpha="0.5"/>
|
||||
<path
|
||||
android:pathData="M17,9H11V11H17V9Z"
|
||||
android:strokeAlpha="0.2"
|
||||
android:fillColor="#ffffff"
|
||||
android:fillAlpha="0.2"/>
|
||||
<path
|
||||
android:pathData="M11,13H17V15H11V13Z"
|
||||
android:strokeAlpha="0.2"
|
||||
android:fillColor="#ffffff"
|
||||
android:fillAlpha="0.2"/>
|
||||
<path
|
||||
android:pathData="M11,17H17V19H11V17Z"
|
||||
android:strokeAlpha="0.2"
|
||||
android:fillColor="#ffffff"
|
||||
android:fillAlpha="0.2"/>
|
||||
</vector>
|
20
OsmAnd/res/drawable/ic_action_multi_download.xml
Normal file
20
OsmAnd/res/drawable/ic_action_multi_download.xml
Normal file
|
@ -0,0 +1,20 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24">
|
||||
<path
|
||||
android:pathData="M3,19V16H5V19H19V16H21V19C21,20.1046 20.1046,21 19,21H5C3.8954,21 3,20.1046 3,19Z"
|
||||
android:fillColor="#ffffff"
|
||||
android:fillType="evenOdd"/>
|
||||
<path
|
||||
android:pathData="M8,12.5858V4H10V12.5858L12.2929,10.2929L13.7071,11.7071L9,16.4142L4.2929,11.7071L5.7071,10.2929L8,12.5858Z"
|
||||
android:fillColor="#ffffff"
|
||||
android:fillType="evenOdd"/>
|
||||
<path
|
||||
android:pathData="M14,12.5858V4H16V12.5858L18.2929,10.2929L19.7071,11.7071L15,16.4142L11.2929,12.7071L12.7071,11.2929L14,12.5858Z"
|
||||
android:strokeAlpha="0.5"
|
||||
android:fillColor="#ffffff"
|
||||
android:fillType="evenOdd"
|
||||
android:fillAlpha="0.5"/>
|
||||
</vector>
|
23
OsmAnd/res/drawable/ic_action_ruler_line.xml
Normal file
23
OsmAnd/res/drawable/ic_action_ruler_line.xml
Normal file
|
@ -0,0 +1,23 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24">
|
||||
<path
|
||||
android:pathData="M16,3C16.5523,3 17,3.4477 17,4V5.1707C17.8524,5.472 18.528,6.1476 18.8293,7H20C20.5523,7 21,7.4477 21,8C21,8.5523 20.5523,9 20,9H18.8293C18.528,9.8524 17.8524,10.528 17,10.8293V12C17,12.5523 16.5523,13 16,13C15.4477,13 15,12.5523 15,12V10.8293C14.1476,10.528 13.472,9.8524 13.1707,9H12C11.4477,9 11,8.5523 11,8C11,7.4477 11.4477,7 12,7H13.1707C13.472,6.1476 14.1476,5.472 15,5.1707V4C15,3.4477 15.4477,3 16,3ZM17,8C17,8.5523 16.5523,9 16,9C15.4477,9 15,8.5523 15,8C15,7.4477 15.4477,7 16,7C16.5523,7 17,7.4477 17,8Z"
|
||||
android:fillColor="#ffffff"
|
||||
android:fillType="evenOdd"/>
|
||||
<path
|
||||
android:pathData="M6,19.5C6,20.3284 5.3284,21 4.5,21C3.6716,21 3,20.3284 3,19.5C3,18.6716 3.6716,18 4.5,18C5.3284,18 6,18.6716 6,19.5Z"
|
||||
android:fillColor="#ffffff"/>
|
||||
<path
|
||||
android:pathData="M12.7071,12.7071C13.0976,12.3166 13.0976,11.6834 12.7071,11.2929C12.3166,10.9024 11.6834,10.9024 11.2929,11.2929L10.2929,12.2929C9.9024,12.6834 9.9024,13.3166 10.2929,13.7071C10.6834,14.0976 11.3166,14.0976 11.7071,13.7071L12.7071,12.7071Z"
|
||||
android:strokeAlpha="0.5"
|
||||
android:fillColor="#ffffff"
|
||||
android:fillAlpha="0.5"/>
|
||||
<path
|
||||
android:pathData="M9.7071,15.7071C10.0976,15.3166 10.0976,14.6834 9.7071,14.2929C9.3166,13.9024 8.6834,13.9024 8.2929,14.2929L7.2929,15.2929C6.9024,15.6834 6.9024,16.3166 7.2929,16.7071C7.6834,17.0976 8.3166,17.0976 8.7071,16.7071L9.7071,15.7071Z"
|
||||
android:strokeAlpha="0.5"
|
||||
android:fillColor="#ffffff"
|
||||
android:fillAlpha="0.5"/>
|
||||
</vector>
|
12
OsmAnd/res/drawable/ic_action_update.xml
Normal file
12
OsmAnd/res/drawable/ic_action_update.xml
Normal file
|
@ -0,0 +1,12 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24">
|
||||
<path
|
||||
android:pathData="M12,0.9999L16,4.9999L12,8.9999L12,6C8.6863,6 6,8.6863 6,12C6,12.7351 6.1322,13.4394 6.3741,14.0903L4.8574,15.6071C4.309,14.5232 4,13.2977 4,12C4,7.5817 7.5817,4 12,4V0.9999Z"
|
||||
android:fillColor="#ffffff"/>
|
||||
<path
|
||||
android:pathData="M12,15.0001L12,18C15.3137,18 18,15.3137 18,12C18,11.2649 17.8678,10.5606 17.6258,9.9097L19.1426,8.3929C19.691,9.4768 20,10.7023 20,12C20,16.4183 16.4183,20 12,20V23.0001L8,19.0001L12,15.0001Z"
|
||||
android:fillColor="#ffffff"/>
|
||||
</vector>
|
71
OsmAnd/res/layout/bottom_sheet_button_with_icon.xml
Normal file
71
OsmAnd/res/layout/bottom_sheet_button_with_icon.xml
Normal file
|
@ -0,0 +1,71 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:osmand="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/button_container"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:clickable="true"
|
||||
android:focusable="true"
|
||||
android:gravity="center_vertical"
|
||||
android:minHeight="@dimen/bottom_sheet_list_item_height"
|
||||
android:orientation="horizontal"
|
||||
android:paddingStart="@dimen/content_padding_small"
|
||||
android:paddingLeft="@dimen/content_padding_small"
|
||||
android:paddingTop="@dimen/text_margin_small"
|
||||
android:paddingEnd="@dimen/content_padding_small"
|
||||
android:paddingRight="@dimen/content_padding_small"
|
||||
android:paddingBottom="@dimen/text_margin_small"
|
||||
tools:background="@drawable/btn_background_inactive_dark"
|
||||
tools:ignore="UselessParent">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:duplicateParentState="true"
|
||||
android:orientation="vertical">
|
||||
|
||||
<net.osmand.plus.widgets.TextViewEx
|
||||
android:id="@+id/button_text"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:duplicateParentState="true"
|
||||
android:letterSpacing="@dimen/text_button_letter_spacing"
|
||||
android:textSize="@dimen/default_desc_text_size"
|
||||
osmand:typeface="@string/font_roboto_medium"
|
||||
tools:text="Title"
|
||||
tools:textColor="@color/active_color_primary_dark" />
|
||||
|
||||
<net.osmand.plus.widgets.TextViewEx
|
||||
android:id="@+id/desc"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:duplicateParentState="true"
|
||||
android:letterSpacing="@dimen/text_button_letter_spacing"
|
||||
android:textSize="@dimen/default_desc_text_size"
|
||||
android:visibility="gone"
|
||||
osmand:typeface="@string/font_roboto_medium"
|
||||
tools:text="Description"
|
||||
tools:textColor="@color/text_color_secondary_dark"
|
||||
tools:visibility="visible" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<androidx.appcompat.widget.AppCompatImageView
|
||||
android:id="@+id/icon"
|
||||
android:layout_width="@dimen/map_widget_icon"
|
||||
android:layout_height="@dimen/map_widget_icon"
|
||||
android:layout_marginStart="@dimen/context_menu_padding_margin_large"
|
||||
android:layout_marginLeft="@dimen/context_menu_padding_margin_large"
|
||||
android:duplicateParentState="true"
|
||||
tools:srcCompat="@drawable/ic_action_appearance"
|
||||
tools:tint="@color/icon_color_active_dark" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</FrameLayout>
|
72
OsmAnd/res/layout/bottom_sheet_select_segment.xml
Normal file
72
OsmAnd/res/layout/bottom_sheet_select_segment.xml
Normal file
|
@ -0,0 +1,72 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:osmand="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical"
|
||||
android:paddingStart="@dimen/content_padding"
|
||||
android:paddingLeft="@dimen/content_padding"
|
||||
android:paddingTop="@dimen/measurement_tool_menu_title_padding_top"
|
||||
android:paddingEnd="@dimen/content_padding"
|
||||
android:paddingRight="@dimen/content_padding"
|
||||
android:paddingBottom="@dimen/measurement_tool_button_padding_top">
|
||||
|
||||
<net.osmand.plus.widgets.TextViewEx
|
||||
android:id="@+id/title"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="@dimen/widget_turn_lane_margin"
|
||||
android:ellipsize="end"
|
||||
android:gravity="center_vertical"
|
||||
android:letterSpacing="@dimen/text_button_letter_spacing"
|
||||
android:lineSpacingExtra="@dimen/titleLineSpacingExtra"
|
||||
android:maxLines="1"
|
||||
android:text="@string/select_segments"
|
||||
android:textColor="?android:textColorPrimary"
|
||||
android:textSize="@dimen/default_list_text_size"
|
||||
osmand:typeface="@string/font_roboto_medium" />
|
||||
|
||||
<net.osmand.plus.widgets.TextViewEx
|
||||
android:id="@+id/description"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="@dimen/list_header_settings_top_margin"
|
||||
android:letterSpacing="@dimen/description_letter_spacing"
|
||||
android:lineSpacingMultiplier="@dimen/bottom_sheet_text_spacing_multiplier"
|
||||
android:lineSpacingExtra="@dimen/descriptionLineSpacingExtra"
|
||||
android:text="@string/select_segments_description"
|
||||
android:textColor="?android:textColorSecondary"
|
||||
android:textSize="@dimen/default_desc_text_size"
|
||||
osmand:typeface="@string/font_roboto_regular" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<include
|
||||
android:id="@+id/gpx_track_container"
|
||||
layout="@layout/gpx_track_item"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="@dimen/dashPluginMargin" />
|
||||
|
||||
<View
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="1dp"
|
||||
android:background="?attr/dashboard_divider" />
|
||||
|
||||
<androidx.recyclerview.widget.RecyclerView
|
||||
android:id="@+id/gpx_segment_list"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0dp"
|
||||
android:layout_weight="1"
|
||||
tools:itemCount="1"
|
||||
tools:listitem="@layout/gpx_segment_list_item">
|
||||
|
||||
</androidx.recyclerview.widget.RecyclerView>
|
||||
|
||||
</LinearLayout>
|
|
@ -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">
|
||||
|
||||
<androidx.appcompat.widget.AppCompatImageView
|
||||
android:layout_width="@dimen/favorites_icon_size_small"
|
||||
android:layout_height="@dimen/favorites_icon_size_small"
|
||||
android:background="?attr/selectableItemBackgroundBorderless"
|
||||
android:tint="?attr/default_icon_color"
|
||||
osmand:srcCompat="@drawable/ic_action_close" />
|
||||
</FrameLayout>
|
||||
|
@ -43,18 +45,20 @@
|
|||
osmand:typeface="@string/font_roboto_medium" />
|
||||
|
||||
<FrameLayout
|
||||
android:id="@+id/btn_save"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginRight="@dimen/content_padding_half"
|
||||
android:layout_marginEnd="@dimen/content_padding_half"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:background="@drawable/btn_border_active">
|
||||
android:layout_gravity="center_vertical">
|
||||
|
||||
<net.osmand.plus.widgets.TextViewEx
|
||||
android:id="@+id/btn_save"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:layout_gravity="start"
|
||||
android:gravity="center_vertical"
|
||||
android:duplicateParentState="true"
|
||||
android:background="@drawable/btn_border_active"
|
||||
android:paddingStart="@dimen/content_padding"
|
||||
android:paddingLeft="@dimen/content_padding"
|
||||
android:paddingTop="@dimen/content_padding_half"
|
||||
|
@ -77,18 +81,18 @@
|
|||
|
||||
<ScrollView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<net.osmand.plus.widgets.EditTextEx
|
||||
android:id="@+id/description"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
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:layout_marginBottom="@dimen/content_padding_half">
|
||||
|
||||
<net.osmand.plus.widgets.EditTextEx
|
||||
android:id="@+id/description"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="?attr/card_and_list_background_basic"
|
||||
android:textColor="?android:attr/textColorPrimary"
|
||||
android:textSize="@dimen/default_list_text_size"
|
||||
|
|
|
@ -1,31 +1,79 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:osmand="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:id="@+id/root"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical"
|
||||
android:background="?attr/list_background_color">
|
||||
android:orientation="vertical">
|
||||
|
||||
<com.google.android.material.appbar.AppBarLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="?attr/pstsTabBackground">
|
||||
|
||||
<androidx.appcompat.widget.Toolbar
|
||||
android:id="@+id/toolbar"
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/action_bar_height"
|
||||
app:titleTextColor="?attr/list_background_color" />
|
||||
android:background="?attr/pstsTabBackground"
|
||||
android:orientation="horizontal"
|
||||
android:gravity="center_vertical">
|
||||
|
||||
</com.google.android.material.appbar.AppBarLayout>
|
||||
<FrameLayout
|
||||
android:id="@+id/toolbar_back"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="@dimen/content_padding_small"
|
||||
android:layout_marginLeft="@dimen/content_padding_small"
|
||||
android:background="@null"
|
||||
android:padding="@dimen/content_padding_half"
|
||||
android:paddingStart="@dimen/content_padding_half"
|
||||
android:paddingEnd="@dimen/content_padding_half">
|
||||
|
||||
<androidx.appcompat.widget.AppCompatImageView
|
||||
android:layout_width="@dimen/standard_icon_size"
|
||||
android:layout_height="@dimen/standard_icon_size"
|
||||
android:background="?attr/selectableItemBackgroundBorderless"
|
||||
osmand:srcCompat="@drawable/ic_arrow_back"/>
|
||||
|
||||
</FrameLayout>
|
||||
|
||||
<net.osmand.plus.widgets.TextViewEx
|
||||
android:id="@+id/toolbar_title"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="@dimen/dialog_button_height"
|
||||
android:layout_marginLeft="@dimen/dialog_button_height"
|
||||
android:layout_weight="1"
|
||||
android:ellipsize="end"
|
||||
android:textColor="@color/list_background_color_light"
|
||||
android:textSize="@dimen/dialog_header_text_size"
|
||||
osmand:typeface="@string/font_roboto_medium"
|
||||
tools:text="Amsterdam" />
|
||||
|
||||
<FrameLayout
|
||||
android:id="@+id/toolbar_edit"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="@dimen/content_padding_small"
|
||||
android:layout_marginLeft="@dimen/content_padding_small"
|
||||
android:layout_marginRight="@dimen/content_padding_small"
|
||||
android:layout_marginEnd="@dimen/content_padding_small"
|
||||
android:background="@null"
|
||||
android:padding="@dimen/content_padding_half"
|
||||
android:paddingStart="@dimen/content_padding_half"
|
||||
android:paddingEnd="@dimen/content_padding_half">
|
||||
|
||||
<androidx.appcompat.widget.AppCompatImageView
|
||||
android:layout_width="@dimen/standard_icon_size"
|
||||
android:layout_height="@dimen/standard_icon_size"
|
||||
android:background="?attr/selectableItemBackgroundBorderless"
|
||||
osmand:srcCompat="@drawable/ic_action_edit_dark"/>
|
||||
|
||||
</FrameLayout>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<ScrollView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
android:layout_height="match_parent"
|
||||
android:background="?attr/activity_background_basic">
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/ll"
|
||||
|
@ -61,33 +109,32 @@
|
|||
tools:visibility="visible"/>
|
||||
|
||||
<FrameLayout
|
||||
android:id="@+id/btn_edit"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginLeft="@dimen/content_padding"
|
||||
android:layout_marginStart="@dimen/content_padding"
|
||||
android:layout_marginTop="@dimen/context_menu_padding_margin_small"
|
||||
android:layout_marginBottom="@dimen/context_menu_padding_margin_small"
|
||||
android:background="@drawable/rounded_background_3dp">
|
||||
android:visibility="gone"
|
||||
tools:visibility="visible">
|
||||
|
||||
<net.osmand.plus.widgets.TextViewEx
|
||||
android:id="@+id/btn_edit"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center_vertical"
|
||||
android:background="?attr/selectableItemBackgroundBorderless"
|
||||
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: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"
|
||||
android:drawablePadding="@dimen/list_content_padding_large"
|
||||
osmand:drawableLeftCompat="@drawable/ic_action_edit_dark"
|
||||
osmand:drawableStartCompat="@drawable/ic_action_edit_dark"
|
||||
osmand:drawableLeftCompat="@drawable/ic_action_edit_dark"
|
||||
osmand:drawableTint="?attr/active_color_basic"
|
||||
android:visibility="gone"
|
||||
android:text="@string/shared_string_edit"
|
||||
android:textColor="?attr/active_color_basic"
|
||||
android:textSize="@dimen/default_list_text_size"
|
||||
osmand:typeface="@string/font_roboto_medium"
|
||||
tools:visibility="visible" />
|
||||
osmand:typeface="@string/font_roboto_medium" />
|
||||
|
||||
</FrameLayout>
|
||||
|
||||
|
|
|
@ -1,25 +1,27 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:osmand="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
xmlns:osmand="http://schemas.android.com/apk/res-auto"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<Button
|
||||
android:id="@+id/button"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
osmand:drawableLeftCompat="@drawable/ic_action_folder"
|
||||
osmand:drawableStartCompat="@drawable/ic_action_folder"
|
||||
android:paddingLeft="10dp"
|
||||
android:paddingRight="10dp"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:text="Restaurant"
|
||||
android:gravity="start|center_vertical"
|
||||
android:textSize="@dimen/default_list_text_size"
|
||||
android:letterSpacing="@dimen/text_button_letter_spacing"
|
||||
android:paddingStart="10dp"
|
||||
android:paddingLeft="10dp"
|
||||
android:paddingEnd="10dp"
|
||||
android:paddingRight="10dp"
|
||||
android:textAllCaps="false"
|
||||
android:textColor="?attr/textColorAlertDialogListItem"
|
||||
android:paddingStart="10dp"
|
||||
android:paddingEnd="10dp" />
|
||||
android:textSize="@dimen/default_list_text_size"
|
||||
osmand:drawableLeftCompat="@drawable/ic_action_folder"
|
||||
osmand:drawableStartCompat="@drawable/ic_action_folder"
|
||||
tools:text="@string/poi_filter_restaurants" />
|
||||
|
||||
</LinearLayout>
|
|
@ -1,7 +1,6 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:osmand="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
|
@ -14,22 +13,22 @@
|
|||
android:layout_width="match_parent"
|
||||
android:layout_height="1dp"
|
||||
android:background="?attr/dashboard_divider"
|
||||
android:visibility="gone"/>
|
||||
android:visibility="gone" />
|
||||
|
||||
<View
|
||||
android:id="@+id/list_divider"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="1dp"
|
||||
android:background="?attr/dashboard_divider"
|
||||
android:visibility="gone"
|
||||
android:layout_marginStart="@dimen/settings_divider_margin_start"
|
||||
android:layout_marginLeft="@dimen/settings_divider_margin_start"
|
||||
android:layout_marginStart="@dimen/settings_divider_margin_start" />
|
||||
android:background="?attr/dashboard_divider"
|
||||
android:visibility="gone" />
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:minHeight="@dimen/favorites_list_item_height"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:minHeight="@dimen/favorites_list_item_height"
|
||||
android:orientation="horizontal"
|
||||
android:paddingStart="@dimen/favorites_my_places_icon_left_padding"
|
||||
android:paddingLeft="@dimen/favorites_my_places_icon_left_padding"
|
||||
|
@ -56,19 +55,19 @@
|
|||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center"
|
||||
android:contentDescription="@string/favorite"
|
||||
tools:src="@drawable/bg_point_circle"/>
|
||||
tools:src="@drawable/bg_point_circle" />
|
||||
</FrameLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:layout_weight="1"
|
||||
android:orientation="vertical"
|
||||
android:layout_marginStart="@dimen/favorites_my_places_icon_right_padding"
|
||||
android:layout_marginLeft="@dimen/favorites_my_places_icon_right_padding"
|
||||
android:layout_marginEnd="@dimen/favorites_my_places_icon_right_padding"
|
||||
android:layout_marginRight="@dimen/favorites_my_places_icon_right_padding"
|
||||
android:layout_weight="1"
|
||||
android:orientation="vertical"
|
||||
android:paddingTop="@dimen/context_menu_padding_margin_small"
|
||||
android:paddingBottom="@dimen/context_menu_padding_margin_small">
|
||||
|
||||
|
@ -76,10 +75,10 @@
|
|||
android:id="@+id/favourite_label"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="@dimen/subHeaderPadding"
|
||||
android:maxLines="2"
|
||||
android:scrollbars="none"
|
||||
android:textColor="?android:textColorPrimary"
|
||||
android:layout_marginBottom="@dimen/subHeaderPadding"
|
||||
android:textSize="@dimen/default_list_text_size"
|
||||
tools:text="@string/lorem_ipsum" />
|
||||
|
||||
|
@ -93,6 +92,7 @@
|
|||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:layout_marginTop="1sp"
|
||||
android:contentDescription="@string/show_view_angle"
|
||||
osmand:srcCompat="@drawable/ic_direction_arrow" />
|
||||
|
||||
|
@ -104,8 +104,8 @@
|
|||
android:layout_marginLeft="@dimen/gpx_small_icon_margin"
|
||||
android:maxLines="1"
|
||||
android:textColor="?android:textColorSecondary"
|
||||
osmand:typeface="@string/font_roboto_medium"
|
||||
android:textSize="@dimen/default_desc_text_size"
|
||||
osmand:typeface="@string/font_roboto_medium"
|
||||
tools:text="100500 km" />
|
||||
|
||||
<androidx.appcompat.widget.AppCompatImageView
|
||||
|
@ -141,8 +141,8 @@
|
|||
android:layout_marginLeft="@dimen/dashFavIconMargin"
|
||||
android:background="?attr/dashboard_button"
|
||||
android:contentDescription="@string/context_menu_item_directions_to"
|
||||
osmand:srcCompat="@drawable/ic_action_remove_dark"
|
||||
android:visibility="gone" />
|
||||
android:visibility="gone"
|
||||
osmand:srcCompat="@drawable/ic_action_remove_dark" />
|
||||
|
||||
<ImageButton
|
||||
android:id="@+id/options"
|
||||
|
@ -151,8 +151,8 @@
|
|||
android:layout_gravity="center_vertical"
|
||||
android:background="?attr/dashboard_button"
|
||||
android:contentDescription="@string/shared_string_more"
|
||||
osmand:srcCompat="@drawable/ic_overflow_menu_white"
|
||||
android:visibility="gone" />
|
||||
android:visibility="gone"
|
||||
osmand:srcCompat="@drawable/ic_overflow_menu_white" />
|
||||
</LinearLayout>
|
||||
|
||||
</LinearLayout>
|
|
@ -66,14 +66,20 @@
|
|||
|
||||
<include layout="@layout/divider" />
|
||||
|
||||
<FrameLayout
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/dialog_button_height"
|
||||
android:layout_marginStart="@dimen/content_padding"
|
||||
android:layout_marginTop="@dimen/content_padding_small"
|
||||
android:layout_marginEnd="@dimen/content_padding"
|
||||
android:layout_marginBottom="@dimen/content_padding_small"
|
||||
android:background="?attr/dlg_btn_secondary">
|
||||
android:orientation="horizontal" >
|
||||
|
||||
<FrameLayout
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:background="?attr/dlg_btn_secondary"
|
||||
android:layout_weight="1">
|
||||
|
||||
<net.osmand.plus.widgets.TextViewEx
|
||||
android:id="@+id/button_close"
|
||||
|
@ -84,11 +90,41 @@
|
|||
android:text="@string/shared_string_close"
|
||||
android:textColor="?attr/active_color_basic"
|
||||
android:textSize="@dimen/default_desc_text_size"
|
||||
osmand:typeface="@string/font_roboto_medium"
|
||||
tools:text="Button" />
|
||||
osmand:typeface="@string/font_roboto_medium" />
|
||||
|
||||
</FrameLayout>
|
||||
|
||||
<View
|
||||
android:id="@+id/buttons_divider"
|
||||
android:layout_width="@dimen/content_padding"
|
||||
android:layout_height="match_parent"
|
||||
android:visibility="gone"
|
||||
tools:visibility="visible" />
|
||||
|
||||
<FrameLayout
|
||||
android:id="@+id/button_restart_container"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:background="?attr/dlg_btn_secondary"
|
||||
android:layout_weight="1"
|
||||
android:visibility="gone"
|
||||
tools:visibility="visible">
|
||||
|
||||
<net.osmand.plus.widgets.TextViewEx
|
||||
android:id="@+id/button_restart"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:gravity="center"
|
||||
android:text="@string/restart"
|
||||
android:textColor="?attr/active_color_basic"
|
||||
android:textSize="@dimen/default_desc_text_size"
|
||||
osmand:typeface="@string/font_roboto_medium" />
|
||||
|
||||
</FrameLayout>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<com.google.android.material.appbar.AppBarLayout
|
||||
|
|
|
@ -68,19 +68,18 @@
|
|||
android:orientation="horizontal">
|
||||
|
||||
<FrameLayout
|
||||
android:id="@+id/btn_read_full"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="@dimen/context_menu_padding_margin_small"
|
||||
android:layout_marginLeft="@dimen/context_menu_padding_margin_small"
|
||||
android:background="@drawable/rounded_background_3dp">
|
||||
android:layout_marginStart="@dimen/content_padding_half"
|
||||
android:layout_marginLeft="@dimen/content_padding_half">
|
||||
|
||||
<net.osmand.plus.widgets.TextViewEx
|
||||
android:id="@+id/btn_read_full"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="start"
|
||||
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"
|
||||
|
@ -96,19 +95,19 @@
|
|||
</FrameLayout>
|
||||
|
||||
<FrameLayout
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginRight="@dimen/context_menu_padding_margin_small"
|
||||
android:layout_marginEnd="@dimen/context_menu_padding_margin_small"
|
||||
android:layout_gravity="end"
|
||||
android:background="@drawable/rounded_background_3dp">
|
||||
|
||||
<net.osmand.plus.widgets.TextViewEx
|
||||
android:id="@+id/btn_edit"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginRight="@dimen/content_padding_half"
|
||||
android:layout_marginEnd="@dimen/content_padding_half"
|
||||
android:layout_gravity="end">
|
||||
|
||||
<net.osmand.plus.widgets.TextViewEx
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="start"
|
||||
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"
|
||||
|
@ -134,7 +133,6 @@
|
|||
android:layout_marginStart="@dimen/card_padding"
|
||||
android:layout_marginLeft="@dimen/card_padding"
|
||||
android:layout_marginTop="@dimen/content_padding"
|
||||
android:background="@drawable/rounded_background_3dp"
|
||||
android:visibility="gone"
|
||||
tools:visibility="visible">
|
||||
|
||||
|
@ -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"
|
||||
|
|
|
@ -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">
|
||||
|
||||
<androidx.appcompat.widget.AppCompatImageView
|
||||
android:id="@+id/direction"
|
||||
android:layout_width="@dimen/context_menu_transport_icon_size"
|
||||
android:layout_height="@dimen/context_menu_transport_icon_size"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:layout_marginTop="1sp"
|
||||
osmand:srcCompat="@drawable/ic_direction_arrow" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/distance"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:layout_marginStart="@dimen/content_padding_small_half"
|
||||
android:layout_marginLeft="@dimen/content_padding_small_half"
|
||||
android:maxLines="1"
|
||||
|
|
98
OsmAnd/res/layout/gpx_segment_list_item.xml
Normal file
98
OsmAnd/res/layout/gpx_segment_list_item.xml
Normal file
|
@ -0,0 +1,98 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:osmand="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:minHeight="@dimen/favorites_list_item_height"
|
||||
android:paddingTop="@dimen/list_header_settings_top_margin"
|
||||
android:paddingBottom="@dimen/list_header_settings_top_margin"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<androidx.appcompat.widget.AppCompatImageView
|
||||
android:id="@+id/icon"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:layout_marginStart="@dimen/list_content_padding"
|
||||
android:layout_marginLeft="@dimen/list_content_padding"
|
||||
android:layout_marginEnd="@dimen/list_content_padding"
|
||||
android:layout_marginRight="@dimen/list_content_padding"
|
||||
android:contentDescription="@string/shared_string_icon"
|
||||
android:visibility="visible"
|
||||
osmand:srcCompat="@drawable/ic_action_split_interval" />
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:layout_marginStart="@dimen/list_content_padding"
|
||||
android:layout_marginLeft="@dimen/list_content_padding"
|
||||
android:layout_marginEnd="@dimen/list_content_padding"
|
||||
android:layout_marginRight="@dimen/list_content_padding"
|
||||
android:layout_weight="1"
|
||||
android:orientation="vertical">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/name"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="start"
|
||||
android:textColor="?android:textColorPrimary"
|
||||
android:textSize="@dimen/default_list_text_size"
|
||||
tools:text="Segment" />
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/read_section"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center_vertical"
|
||||
android:orientation="horizontal"
|
||||
android:paddingTop="@dimen/subHeaderPadding"
|
||||
android:paddingBottom="@dimen/subHeaderPadding"
|
||||
android:visibility="visible">
|
||||
|
||||
<androidx.appcompat.widget.AppCompatImageView
|
||||
android:id="@+id/distance_icon"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginEnd="@dimen/content_padding_half"
|
||||
android:layout_marginRight="@dimen/content_padding_half"
|
||||
android:contentDescription="@string/distance"
|
||||
osmand:srcCompat="@drawable/ic_action_distance_16" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/distance"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginEnd="@dimen/content_padding"
|
||||
android:layout_marginRight="@dimen/content_padding"
|
||||
android:textColor="?android:textColorSecondary"
|
||||
android:textSize="@dimen/default_desc_text_size"
|
||||
tools:text="0" />
|
||||
|
||||
<androidx.appcompat.widget.AppCompatImageView
|
||||
android:id="@+id/time_icon"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginEnd="@dimen/content_padding_half"
|
||||
android:layout_marginRight="@dimen/content_padding_half"
|
||||
android:contentDescription="@string/track_points"
|
||||
osmand:srcCompat="@drawable/ic_action_time_moving_16" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/time_interval"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginEnd="@dimen/content_padding"
|
||||
android:layout_marginRight="@dimen/content_padding"
|
||||
android:textColor="?android:textColorSecondary"
|
||||
android:textSize="@dimen/default_desc_text_size"
|
||||
tools:text="0" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</LinearLayout>
|
|
@ -37,6 +37,7 @@
|
|||
android:layout_marginRight="@dimen/dialog_content_margin"
|
||||
android:layout_marginEnd="@dimen/dialog_content_margin"
|
||||
android:clickable="false"
|
||||
android:scrollbars="none"
|
||||
android:focusableInTouchMode="false" />
|
||||
|
||||
<androidx.appcompat.widget.AppCompatImageView
|
||||
|
@ -50,6 +51,7 @@
|
|||
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/name_and_read_section_container"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingTop="@dimen/gpx_text_top_margin"
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
android:layout_height="@dimen/list_header_height"
|
||||
android:layout_marginStart="@dimen/content_padding"
|
||||
android:layout_marginLeft="@dimen/content_padding"
|
||||
android:gravity="center_vertical"
|
||||
android:gravity="start|center_vertical"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<LinearLayout
|
||||
|
@ -14,14 +14,13 @@
|
|||
android:layout_height="match_parent"
|
||||
android:layout_marginEnd="@dimen/content_padding"
|
||||
android:layout_marginRight="@dimen/content_padding"
|
||||
android:gravity="center_vertical"
|
||||
android:maxWidth="@dimen/grid_menu_item_width"
|
||||
android:gravity="start|center_vertical"
|
||||
android:orientation="vertical">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center_vertical"
|
||||
android:gravity="start|center_vertical"
|
||||
android:orientation="horizontal"
|
||||
android:weightSum="2">
|
||||
|
||||
|
@ -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" />
|
||||
|
|
|
@ -73,6 +73,7 @@
|
|||
android:paddingBottom="@dimen/content_padding_small">
|
||||
|
||||
<net.osmand.plus.widgets.TextViewEx
|
||||
android:id="@+id/check_box_title"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginEnd="@dimen/content_padding"
|
||||
|
|
20
OsmAnd/res/layout/track_groups_card.xml
Normal file
20
OsmAnd/res/layout/track_groups_card.xml
Normal file
|
@ -0,0 +1,20 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/bottom_sheet_list_item_height"
|
||||
android:orientation="vertical">
|
||||
|
||||
<androidx.recyclerview.widget.RecyclerView
|
||||
android:id="@+id/recycler_view"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/bottom_sheet_list_item_height"
|
||||
android:background="?attr/bg_color"
|
||||
android:orientation="horizontal"
|
||||
android:paddingLeft="@dimen/content_padding"
|
||||
android:paddingRight="@dimen/content_padding"
|
||||
android:paddingStart="@dimen/content_padding"
|
||||
android:paddingEnd="@dimen/content_padding"
|
||||
android:clipToPadding="false"
|
||||
android:scrollbars="none" />
|
||||
|
||||
</LinearLayout>
|
|
@ -24,6 +24,7 @@
|
|||
android:id="@+id/name_edit_text"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:inputType="textCapSentences"
|
||||
android:lineSpacingMultiplier="@dimen/bottom_sheet_text_spacing_multiplier" />
|
||||
|
||||
</com.google.android.material.textfield.TextInputLayout>
|
||||
|
|
|
@ -1,198 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:osmand="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginLeft="@dimen/text_margin_small"
|
||||
android:layout_marginRight="@dimen/text_margin_small"
|
||||
android:background="?attr/wikivoyage_travel_card_bg"
|
||||
android:orientation="vertical"
|
||||
android:layout_marginEnd="@dimen/text_margin_small"
|
||||
android:layout_marginStart="@dimen/text_margin_small">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_margin="@dimen/content_padding"
|
||||
android:orientation="vertical">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="@dimen/bottom_sheet_content_padding_small">
|
||||
|
||||
<net.osmand.plus.widgets.TextViewEx
|
||||
android:id="@+id/title"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginEnd="@dimen/content_padding"
|
||||
android:layout_marginRight="@dimen/content_padding"
|
||||
android:layout_marginTop="4dp"
|
||||
android:layout_weight="1"
|
||||
android:ellipsize="end"
|
||||
android:maxLines="1"
|
||||
android:textColor="?attr/wikivoyage_primary_text_color"
|
||||
android:textSize="@dimen/travel_card_primary_text_size"
|
||||
osmand:typeface="@string/font_roboto_medium"
|
||||
tools:text="Download file"/>
|
||||
|
||||
<androidx.appcompat.widget.AppCompatImageView
|
||||
android:id="@+id/icon"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
tools:ignore="ContentDescription"
|
||||
tools:src="@drawable/travel_card_download_icon"/>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<net.osmand.plus.widgets.TextViewEx
|
||||
android:id="@+id/description"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:lineSpacingMultiplier="@dimen/text_button_line_spacing_multiplier"
|
||||
android:textColor="@color/wikivoyage_secondary_text"
|
||||
android:textSize="@dimen/travel_card_primary_text_size"
|
||||
osmand:typeface="@string/font_roboto_regular"
|
||||
tools:text="Download this Wikivoyage travel guides file to view articles about places around the world without an internet connection."/>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/file_data_container"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="@dimen/content_padding"
|
||||
android:layout_marginLeft="@dimen/bottom_sheet_content_margin_small"
|
||||
android:layout_marginRight="@dimen/bottom_sheet_content_margin_small"
|
||||
android:background="?attr/wikivoyage_travel_card_stroke_bg"
|
||||
android:minHeight="@dimen/bottom_sheet_selected_item_title_height"
|
||||
android:paddingLeft="@dimen/content_padding"
|
||||
android:paddingRight="@dimen/content_padding"
|
||||
android:layout_marginStart="@dimen/bottom_sheet_content_margin_small"
|
||||
android:paddingEnd="@dimen/content_padding"
|
||||
android:paddingStart="@dimen/content_padding"
|
||||
android:layout_marginEnd="@dimen/bottom_sheet_content_margin_small">
|
||||
|
||||
<androidx.appcompat.widget.AppCompatImageView
|
||||
android:id="@+id/file_icon"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:layout_marginEnd="@dimen/content_padding"
|
||||
android:layout_marginRight="@dimen/content_padding"
|
||||
tools:ignore="ContentDescription"
|
||||
tools:src="@drawable/ic_action_read_article"
|
||||
tools:tint="?attr/wikivoyage_active_color"/>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:layout_weight="1"
|
||||
android:orientation="vertical">
|
||||
|
||||
<net.osmand.plus.widgets.TextViewEx
|
||||
android:id="@+id/file_title"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:ellipsize="end"
|
||||
android:maxLines="1"
|
||||
android:textColor="?attr/wikivoyage_primary_text_color"
|
||||
android:textSize="@dimen/default_list_text_size"
|
||||
osmand:typeface="@string/font_roboto_regular"
|
||||
tools:text="Wikivoyage"/>
|
||||
|
||||
<net.osmand.plus.widgets.TextViewEx
|
||||
android:id="@+id/file_description"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:ellipsize="end"
|
||||
android:maxLines="1"
|
||||
android:textColor="@color/wikivoyage_secondary_text"
|
||||
android:textSize="@dimen/default_sub_text_size"
|
||||
osmand:typeface="@string/font_roboto_regular"
|
||||
tools:text="255 Mb • Update 11 April"/>
|
||||
|
||||
<ProgressBar
|
||||
android:id="@+id/progress_bar"
|
||||
style="?android:attr/progressBarStyleHorizontal"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="2dp"
|
||||
android:minHeight="0dp"
|
||||
android:visibility="gone"
|
||||
tools:visibility="visible"/>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="@dimen/bottom_sheet_content_margin_small"
|
||||
android:layout_marginLeft="@dimen/bottom_sheet_content_margin_small"
|
||||
android:layout_marginRight="@dimen/bottom_sheet_content_margin_small"
|
||||
android:layout_marginEnd="@dimen/bottom_sheet_content_margin_small"
|
||||
android:layout_marginStart="@dimen/bottom_sheet_content_margin_small">
|
||||
|
||||
<FrameLayout
|
||||
android:id="@+id/secondary_btn_container"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:background="?attr/wikivoyage_secondary_btn_bg">
|
||||
|
||||
<net.osmand.plus.widgets.TextViewEx
|
||||
android:id="@+id/secondary_button"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/wikivoyage_card_button_height"
|
||||
android:layout_gravity="center"
|
||||
android:background="?attr/selectableItemBackgroundBorderless"
|
||||
android:ellipsize="end"
|
||||
android:gravity="center"
|
||||
android:letterSpacing="@dimen/text_button_letter_spacing"
|
||||
android:maxLines="1"
|
||||
android:textColor="?attr/wikivoyage_active_color"
|
||||
android:textSize="@dimen/text_button_text_size"
|
||||
osmand:typeface="@string/font_roboto_medium"
|
||||
tools:ignore="UnusedAttribute"
|
||||
tools:text="Later"/>
|
||||
|
||||
</FrameLayout>
|
||||
|
||||
<View
|
||||
android:id="@+id/buttons_divider"
|
||||
android:layout_width="@dimen/bottom_sheet_content_margin_small"
|
||||
android:layout_height="match_parent"/>
|
||||
|
||||
<FrameLayout
|
||||
android:id="@+id/primary_btn_container"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:background="?attr/wikivoyage_primary_btn_bg">
|
||||
|
||||
<net.osmand.plus.widgets.TextViewEx
|
||||
android:id="@+id/primary_button"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/wikivoyage_card_button_height"
|
||||
android:layout_gravity="center"
|
||||
android:background="?attr/selectableItemBackgroundBorderless"
|
||||
android:ellipsize="end"
|
||||
android:gravity="center"
|
||||
android:letterSpacing="@dimen/text_button_letter_spacing"
|
||||
android:maxLines="1"
|
||||
android:textColor="?attr/wikivoyage_primary_btn_text_color"
|
||||
android:textSize="@dimen/text_button_text_size"
|
||||
osmand:typeface="@string/font_roboto_medium"
|
||||
tools:ignore="UnusedAttribute"
|
||||
tools:text="Update"/>
|
||||
|
||||
</FrameLayout>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</LinearLayout>
|
|
@ -78,20 +78,20 @@
|
|||
<Button
|
||||
android:id="@+id/button_action"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="33dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:layout_marginLeft="@dimen/content_padding"
|
||||
android:layout_marginStart="@dimen/content_padding"
|
||||
android:background="@drawable/buy_btn_background_light"
|
||||
android:minWidth="40dp"
|
||||
android:paddingLeft="18dp"
|
||||
android:paddingRight="18dp"
|
||||
android:minWidth="@dimen/list_header_height"
|
||||
android:minHeight="@dimen/list_content_padding_large"
|
||||
android:paddingLeft="@dimen/bottom_sheet_exit_button_margin"
|
||||
android:paddingRight="@dimen/bottom_sheet_exit_button_margin"
|
||||
android:text="@string/get_plugin"
|
||||
android:textColor="@color/buy_button_color"
|
||||
android:textColor="@color/text_color_tab_active_light"
|
||||
android:visibility="gone"
|
||||
tools:visibility="visible"
|
||||
android:paddingEnd="18dp"
|
||||
android:paddingStart="18dp" />
|
||||
android:paddingEnd="@dimen/bottom_sheet_exit_button_margin"
|
||||
android:paddingStart="@dimen/bottom_sheet_exit_button_margin" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
|
|
|
@ -18,16 +18,34 @@
|
|||
android:layout_margin="@dimen/content_padding"
|
||||
android:orientation="vertical">
|
||||
|
||||
<net.osmand.plus.widgets.TextViewEx
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="@dimen/content_padding"
|
||||
android:layout_marginBottom="@dimen/bottom_sheet_content_padding_small">
|
||||
|
||||
<net.osmand.plus.widgets.TextViewEx
|
||||
android:id="@+id/title"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginEnd="@dimen/content_padding"
|
||||
android:layout_marginRight="@dimen/content_padding"
|
||||
android:layout_marginTop="4dp"
|
||||
android:layout_weight="1"
|
||||
android:ellipsize="end"
|
||||
android:maxLines="1"
|
||||
android:text="@string/maps_you_need"
|
||||
android:textColor="?attr/wikivoyage_primary_text_color"
|
||||
android:textSize="@dimen/travel_card_primary_text_size"
|
||||
osmand:typeface="@string/font_roboto_medium"/>
|
||||
osmand:typeface="@string/font_roboto_medium"
|
||||
tools:text="Download file" />
|
||||
|
||||
<androidx.appcompat.widget.AppCompatImageView
|
||||
android:id="@+id/icon"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
tools:ignore="ContentDescription"
|
||||
tools:src="@drawable/travel_card_download_icon" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<net.osmand.plus.widgets.TextViewEx
|
||||
android:id="@+id/description"
|
||||
|
|
172
OsmAnd/res/layout/trip_recording_active_fragment.xml
Normal file
172
OsmAnd/res/layout/trip_recording_active_fragment.xml
Normal file
|
@ -0,0 +1,172 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:osmand="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center_vertical"
|
||||
android:orientation="horizontal"
|
||||
android:paddingStart="@dimen/content_padding"
|
||||
android:paddingLeft="@dimen/content_padding"
|
||||
android:paddingTop="@dimen/content_padding_small"
|
||||
android:paddingEnd="@dimen/content_padding"
|
||||
android:paddingRight="@dimen/content_padding"
|
||||
android:paddingBottom="@dimen/content_padding_small"
|
||||
android:weightSum="2">
|
||||
|
||||
<net.osmand.plus.widgets.TextViewEx
|
||||
android:id="@+id/title"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:letterSpacing="@dimen/text_button_letter_spacing"
|
||||
android:text="@string/monitoring_settings"
|
||||
android:textSize="@dimen/default_list_text_size"
|
||||
osmand:typeface="@string/font_roboto_medium" />
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/status_container"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:clickable="true"
|
||||
android:focusable="true"
|
||||
android:gravity="end|center_vertical"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<net.osmand.plus.widgets.TextViewEx
|
||||
android:id="@+id/text_status"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:letterSpacing="@dimen/description_letter_spacing"
|
||||
android:textSize="@dimen/default_desc_text_size"
|
||||
osmand:typeface="@string/font_roboto_medium"
|
||||
tools:text="@string/recording_default_name"
|
||||
tools:textColor="@color/icon_color_osmand_light" />
|
||||
|
||||
<androidx.appcompat.widget.AppCompatImageView
|
||||
android:id="@+id/icon_status"
|
||||
android:layout_width="@dimen/map_widget_icon"
|
||||
android:layout_height="@dimen/map_widget_icon"
|
||||
android:layout_marginStart="@dimen/content_padding_small"
|
||||
android:layout_marginLeft="@dimen/content_padding_small"
|
||||
tools:srcCompat="@drawable/ic_action_polygom_dark"
|
||||
tools:tint="@color/icon_color_osmand_light" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<androidx.recyclerview.widget.RecyclerView
|
||||
android:id="@+id/block_statistics"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/list_header_height"
|
||||
android:layout_marginTop="@dimen/content_padding_small_half"
|
||||
android:clipToPadding="false"
|
||||
android:orientation="horizontal"
|
||||
tools:itemCount="4"
|
||||
tools:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
|
||||
tools:listitem="@layout/item_gpx_stat_block" />
|
||||
|
||||
<include
|
||||
android:id="@+id/show_track_on_map"
|
||||
layout="@layout/bottom_sheet_with_switch_divider_and_additional_button"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="@dimen/content_padding"
|
||||
android:layout_marginLeft="@dimen/content_padding"
|
||||
android:layout_marginTop="@dimen/content_padding_half"
|
||||
android:layout_marginEnd="@dimen/content_padding"
|
||||
android:layout_marginRight="@dimen/content_padding"
|
||||
android:layout_marginBottom="@dimen/content_padding" />
|
||||
|
||||
<View
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="1dp"
|
||||
android:background="?attr/dashboard_divider" />
|
||||
|
||||
<include
|
||||
android:id="@+id/button_clear"
|
||||
layout="@layout/bottom_sheet_button_with_icon"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="@dimen/content_padding"
|
||||
android:layout_marginLeft="@dimen/content_padding"
|
||||
android:layout_marginTop="@dimen/content_padding"
|
||||
android:layout_marginEnd="@dimen/content_padding"
|
||||
android:layout_marginRight="@dimen/content_padding"
|
||||
android:layout_marginBottom="@dimen/content_padding" />
|
||||
|
||||
<include
|
||||
android:id="@+id/button_online"
|
||||
layout="@layout/bottom_sheet_button_with_icon"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="@dimen/content_padding"
|
||||
android:layout_marginLeft="@dimen/content_padding"
|
||||
android:layout_marginTop="@dimen/content_padding_half"
|
||||
android:layout_marginEnd="@dimen/content_padding"
|
||||
android:layout_marginRight="@dimen/content_padding"
|
||||
android:layout_marginBottom="@dimen/content_padding"
|
||||
android:visibility="gone" />
|
||||
|
||||
<include
|
||||
android:id="@+id/button_segment"
|
||||
layout="@layout/bottom_sheet_button_with_icon"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="@dimen/content_padding"
|
||||
android:layout_marginLeft="@dimen/content_padding"
|
||||
android:layout_marginTop="@dimen/content_padding_half"
|
||||
android:layout_marginEnd="@dimen/content_padding"
|
||||
android:layout_marginRight="@dimen/content_padding" />
|
||||
|
||||
<include
|
||||
android:id="@+id/button_save"
|
||||
layout="@layout/bottom_sheet_button_with_icon"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="@dimen/content_padding"
|
||||
android:layout_marginLeft="@dimen/content_padding"
|
||||
android:layout_marginTop="@dimen/content_padding_small"
|
||||
android:layout_marginEnd="@dimen/content_padding"
|
||||
android:layout_marginRight="@dimen/content_padding"
|
||||
android:layout_marginBottom="@dimen/content_padding" />
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="@dimen/content_padding"
|
||||
android:layout_marginLeft="@dimen/content_padding"
|
||||
android:layout_marginTop="@dimen/content_padding_half"
|
||||
android:layout_marginEnd="@dimen/content_padding"
|
||||
android:layout_marginRight="@dimen/content_padding"
|
||||
android:layout_marginBottom="@dimen/content_padding"
|
||||
android:baselineAligned="false"
|
||||
android:orientation="horizontal"
|
||||
android:weightSum="2">
|
||||
|
||||
<include
|
||||
android:id="@+id/button_pause"
|
||||
layout="@layout/bottom_sheet_button_with_icon"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1" />
|
||||
|
||||
<include
|
||||
android:id="@+id/button_stop"
|
||||
layout="@layout/bottom_sheet_button_with_icon"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="@dimen/content_padding"
|
||||
android:layout_marginLeft="@dimen/content_padding"
|
||||
android:layout_weight="1" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</LinearLayout>
|
|
@ -94,10 +94,10 @@
|
|||
android:layout_marginRight="@dimen/list_header_padding"
|
||||
android:minWidth="@dimen/list_header_height"
|
||||
android:minHeight="@dimen/list_content_padding_large"
|
||||
android:paddingStart="@dimen/context_menu_progress_padding_left"
|
||||
android:paddingLeft="@dimen/context_menu_progress_padding_left"
|
||||
android:paddingEnd="@dimen/context_menu_progress_padding_left"
|
||||
android:paddingRight="@dimen/context_menu_progress_padding_left"
|
||||
android:paddingStart="@dimen/bottom_sheet_exit_button_margin"
|
||||
android:paddingLeft="@dimen/bottom_sheet_exit_button_margin"
|
||||
android:paddingEnd="@dimen/bottom_sheet_exit_button_margin"
|
||||
android:paddingRight="@dimen/bottom_sheet_exit_button_margin"
|
||||
android:text="@string/buy"
|
||||
android:textColor="@color/text_color_tab_active_light"
|
||||
android:visibility="gone" />
|
||||
|
|
26
OsmAnd/res/layout/wikivoyage_button_card.xml
Normal file
26
OsmAnd/res/layout/wikivoyage_button_card.xml
Normal file
|
@ -0,0 +1,26 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:padding="@dimen/content_padding"
|
||||
android:background="?attr/wikivoyage_card_bg_color"
|
||||
android:gravity="center_vertical">
|
||||
|
||||
<include
|
||||
android:id="@+id/button"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/dialog_button_height"
|
||||
layout="@layout/bottom_sheet_dialog_button" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<include
|
||||
android:id="@+id/shadow"
|
||||
layout="@layout/card_bottom_divider"
|
||||
android:visibility="visible" />
|
||||
</LinearLayout>
|
|
@ -139,31 +139,83 @@
|
|||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical"
|
||||
android:paddingTop="@dimen/content_padding_half"
|
||||
android:paddingBottom="@dimen/content_padding_small">
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/user_label"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="?attr/btn_border_bg"
|
||||
android:layout_marginLeft="@dimen/content_padding_half"
|
||||
android:layout_marginStart="@dimen/content_padding_half">
|
||||
|
||||
<androidx.appcompat.widget.AppCompatImageView
|
||||
android:id="@+id/user_icon"
|
||||
android:layout_width="@dimen/poi_icon_size"
|
||||
android:layout_height="@dimen/poi_icon_size"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:layout_marginLeft="@dimen/content_padding_small_half"
|
||||
android:layout_marginStart="@dimen/content_padding_small_half"
|
||||
android:contentDescription="@string/shared_string_icon"
|
||||
tools:src="@drawable/ic_action_user_account_16" />
|
||||
|
||||
<net.osmand.plus.widgets.TextViewEx
|
||||
android:id="@+id/user_name"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@drawable/btn_border_bg_light"
|
||||
android:gravity="center_vertical"
|
||||
android:ellipsize="end"
|
||||
android:maxLines="1"
|
||||
android:paddingTop="@dimen/subHeaderPadding"
|
||||
android:paddingBottom="@dimen/subHeaderPadding"
|
||||
android:paddingLeft="@dimen/bottom_sheet_content_padding_small"
|
||||
android:paddingRight="@dimen/bottom_sheet_content_padding_small"
|
||||
android:paddingLeft="@dimen/content_padding_small_half"
|
||||
android:paddingRight="@dimen/content_padding_small_half"
|
||||
android:textAppearance="@style/TextAppearance.ContextMenuSubtitle"
|
||||
android:textColor="?attr/active_color_basic"
|
||||
android:textSize="@dimen/default_desc_text_size"
|
||||
osmand:typeface="@string/font_roboto_medium"
|
||||
android:drawablePadding="@dimen/content_padding_small_half"
|
||||
android:drawableStart="@drawable/ic_action_user_account_16"
|
||||
android:drawableLeft="@drawable/ic_action_user_account_16"
|
||||
tools:drawableTint="?attr/wikivoyage_active_color"
|
||||
tools:text="Lorem Ipsum" />
|
||||
tools:text="@string/mapillary_menu_title_username" />
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/activity_type_label"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="?attr/btn_border_bg"
|
||||
android:visibility="gone"
|
||||
android:layout_marginLeft="@dimen/content_padding_half"
|
||||
android:layout_marginStart="@dimen/content_padding_half">
|
||||
|
||||
<androidx.appcompat.widget.AppCompatImageView
|
||||
android:id="@+id/activity_type_icon"
|
||||
android:layout_width="@dimen/poi_icon_size"
|
||||
android:layout_height="@dimen/poi_icon_size"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:layout_marginLeft="@dimen/content_padding_small_half"
|
||||
android:layout_marginStart="@dimen/content_padding_small_half"
|
||||
android:contentDescription="@string/shared_string_icon"
|
||||
tools:src="@drawable/ic_action_bicycle_dark" />
|
||||
|
||||
<net.osmand.plus.widgets.TextViewEx
|
||||
android:id="@+id/activity_type"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center_vertical"
|
||||
android:ellipsize="end"
|
||||
android:maxLines="1"
|
||||
android:paddingTop="@dimen/subHeaderPadding"
|
||||
android:paddingBottom="@dimen/subHeaderPadding"
|
||||
android:paddingLeft="@dimen/content_padding_small_half"
|
||||
android:paddingRight="@dimen/content_padding_small_half"
|
||||
android:textAppearance="@style/TextAppearance.ContextMenuSubtitle"
|
||||
android:textColor="?attr/active_color_basic"
|
||||
android:textSize="@dimen/default_desc_text_size"
|
||||
osmand:typeface="@string/font_roboto_medium"
|
||||
tools:drawableTint="?attr/wikivoyage_active_color"
|
||||
tools:text="@string/shared_string_profiles" />
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
||||
|
||||
</LinearLayout>
|
||||
|
@ -172,7 +224,6 @@
|
|||
|
||||
<View
|
||||
android:layout_width="match_parent"
|
||||
android:visibility="invisible"
|
||||
android:layout_height="1dp"
|
||||
android:background="?attr/wikivoyage_card_divider_color" />
|
||||
|
||||
|
|
|
@ -103,6 +103,7 @@
|
|||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:maxLines="2"
|
||||
android:scrollbars="none"
|
||||
android:textColor="@color/wikivoyage_secondary_text"
|
||||
android:textSize="@dimen/default_sub_text_size"
|
||||
osmand:typeface="@string/font_roboto_regular"
|
||||
|
|
|
@ -795,7 +795,6 @@
|
|||
<string name="poi_filter_sightseeing">Besigtigingstoere</string>
|
||||
<string name="show_warnings_descr">Verstel verkeer waarskuwings (spoedbeperkings, geforseerde stoppe, spoedhobbels), spoed kameras, en laan inligting</string>
|
||||
<string name="avoid_motorway">Vermy snelweë</string>
|
||||
<string name="snap_to_road_descr">Knip posisie aan paaie vas gedurende navigasie</string>
|
||||
<string name="snap_to_road">Knip vas aan pad</string>
|
||||
<string name="osmand_long_description_1000_chars">
|
||||
OsmAnd (OSM Automated Navigation Directions) is `n ope bron navigasie toepassing met toegang tot `n wye verskeidenheid wêreldwye OpenStreetMap (OSM) inligting. Alle kaart inligting (vektor of teël kaarte) kan gestoor word op die foon geheue kaart vir aflyn gebruik. OsmAnd bied ook aan- en aflyn routeberekening funksionaliteit insluitend draai-vir-draai stem begeleiding. Sommige van die kern funksies: - Volledege aflyn funksionaliteit (stoor afgelaaide vektor of teël kaarte in `n kiesbare leër) - Kompakte aflyn vektor kaarte vir die hele wëreld beskikbaar - aflaai van land of streek kaarte direk uit die toepassing - Oorlegging van verskeie kaart lae moontlik, bv GPX of navigasie spore, Belangepunte, gunstelinge, kontoerlyne, publieke vervoer haltes, ekstra kaarte met verstelbare deurskynendheid - Aflyn
|
||||
|
|
|
@ -2133,7 +2133,7 @@
|
|||
<string name="poi_water_characteristic_mineral">المعدنيه</string>
|
||||
<string name="poi_pump_powered">تعمل بالطاقة</string>
|
||||
<string name="poi_pump_manual">يدوي</string>
|
||||
<string name="poi_source_biomass">مصدر الطاقة: الكتلة الحيوية</string>
|
||||
<string name="poi_generator_source_biomass">مصدر الطاقة: الكتلة الحيوية</string>
|
||||
<string name="poi_deadlock">طريق مسدود</string>
|
||||
<string name="poi_architecture_umgebinde">العمارة: umgebinde</string>
|
||||
<string name="poi_architecture_constructivism">العمارة: البنائية</string>
|
||||
|
@ -3075,7 +3075,7 @@
|
|||
<string name="poi_motorcar_destination">السماح بدخول السيارات: للعبور للوجهة</string>
|
||||
<string name="poi_motorcar_no">السماح بدخول السيارات: لا</string>
|
||||
<string name="poi_motorcar_private">السماح بدخول السيارات:خاص</string>
|
||||
<string name="poi_motorcar_yes">السماح بدخول السيارات:</string>
|
||||
<string name="poi_motorcar_yes">السماح بدخول السيارات:نعم</string>
|
||||
<string name="poi_vehicle_forestry">السماح بدخول المركبات: الخاصة بالغابات</string>
|
||||
<string name="poi_vehicle_delivery">السماح بدخول المركبات: لتسليم الطلبات</string>
|
||||
<string name="poi_vehicle_military">السماح بدخول المركبات: العسكرية</string>
|
||||
|
@ -3586,7 +3586,7 @@
|
|||
<string name="poi_internet_access_service">الوصول إلى الإنترنت: خدمة</string>
|
||||
<string name="poi_internet_access_public">الوصول إلى الإنترنت: عام</string>
|
||||
<string name="poi_internet_access_wired">ولوج الإنترنت: سلكي</string>
|
||||
<string name="poi_internet_access_terminal">"ولوج الإنترنت: terminal"</string>
|
||||
<string name="poi_internet_access_terminal">ولوج الإنترنت: terminal</string>
|
||||
<string name="poi_internet_access_wlan">ولوج الإنترنت: wlan</string>
|
||||
<string name="poi_denomination_mahayana">ماهايانا</string>
|
||||
<string name="poi_denomination_maronite">ماروني</string>
|
||||
|
@ -3678,4 +3678,15 @@
|
|||
<string name="poi_wildlife_crossing_bat_tunnel">نفق خفافيش</string>
|
||||
<string name="poi_wildlife_crossing_bat_bridge">جسر خفافيش</string>
|
||||
<string name="poi_wildlife_crossing">معبر الحيوانات البرية</string>
|
||||
<string name="poi_attraction_slide">شريط التمرير</string>
|
||||
<string name="poi_craft_winery">مصنع شراب</string>
|
||||
<string name="poi_hanami">هانامي</string>
|
||||
<string name="poi_wayside_shrine">ضريح على جانب الطريق</string>
|
||||
<string name="poi_wayside_cross">صليب جانبي</string>
|
||||
<string name="poi_monastery">ديرصومعة</string>
|
||||
<string name="poi_denomination_wesleyan">الديانة</string>
|
||||
<string name="poi_denomination_dutch_reformed">كنيسة المصلحة الهولندية</string>
|
||||
<string name="poi_denomination_united_methodist">الكنيسة الميثودية</string>
|
||||
<string name="poi_denomination_pentecostal">الخمسينية</string>
|
||||
<string name="poi_denomination_presbyterian">المشيخية</string>
|
||||
</resources>
|
|
@ -353,13 +353,12 @@
|
|||
<string name="use_compass_navigation_descr">استخدم البوصلة عندما لا تكون هناك أي وجهة محددة.</string>
|
||||
<string name="auto_zoom_map_descr">ملائمة تقريب الخريطة تزامناً مع موقعك.</string>
|
||||
<string name="auto_zoom_map">التكبير التلقائي</string>
|
||||
<string name="snap_to_road_descr">التقط الموقع إلى الطرق أثناء الملاحة.</string>
|
||||
<string name="snap_to_road">التقاط الطريق</string>
|
||||
<string name="osmand_play_title_30_chars">خرائط أوسماند والملاحة</string>
|
||||
<string name="osmand_short_description_80_chars">برنامج عرض الخرائط العالمية والملاحة باستخدام خرائط الشوارع المفتوحة OSM أثناء الاتصال بالإنترنت أو من دونه</string>
|
||||
<string name="osmand_plus_play_title_30_chars">أوسماند+ للخرائط و الملاحة</string>
|
||||
<string name="osmand_plus_short_description_80_chars">برنامج عرض الخرائط العالمية والملاحة باستخدام خرائط الشوارع المفتوحة OSM أثناء الاتصال بالإنترنت أو من دونه</string>
|
||||
<string name="filterpoi_activity">أنشئ مُرشِّح نقاط مهمة</string>
|
||||
<string name="filterpoi_activity">إنشاء فلتر نقاط الاهتمام</string>
|
||||
<string name="recalculate_route_to_your_location">نمط المواصلات:</string>
|
||||
<string name="select_navigation_mode">وسائل النقل:</string>
|
||||
<string name="day_night_info_description">الشروق: %1$s
|
||||
|
@ -563,14 +562,14 @@
|
|||
<string name="srtm_plugin_description">يوفر هذا الملحق خطوط كنتورية وطبقة تضاريس (طبيعية) تظهر على خرائط أوسماند. هذه الوظيفة ستعجب كثيرا الرياضيين، المتجولين، الرحالة، و كل من تهمه بنية التضاريس الطبيعية (يرجى ملاحظة أن بيانات الخطوط الكنتورية/أو المساعدة منفصلة ، وتتوفر تنزيلات إضافية بعد تنشيط الملحق.)
|
||||
\nالبيانات العالمية (ما بين 70 درجة شمالاً و70 جنوباً) مبنية على مقاييس SRTM (مكوك رادار البعثة الطبوغرافية) و ASTER (الانبعاث الحراري الفضائي المتقدم والإنعكاس الإشعاعي)، أداة التصوير على متن Terra، القمر الصناعي الرئيسي لنظام رصد الأرض التابع لناسا.
|
||||
\n ASTER هو جهد تعاوني بين كل من وكالة ناسا، وزارة الاقتصاد اليابانية، التجارة والصناعة (METI)، ونظم الفضاء اليابانية (J-spacesystems).</string>
|
||||
<string name="osmand_long_description_1000_chars">أوسماند (اتجاهات التنقل الآلية OSM)
|
||||
<string name="osmand_long_description_1000_chars">أوسماند (اتجاهات التنقل الآلي OSM)
|
||||
\n
|
||||
\n أوسماند هو تطبيق تنقل مفتوح المصدر مع إمكانية الوصول إلى مجموعة واسعة من بيانات OpenStreetMap (OSM) العالمية. يمكن تخزين جميع بيانات الخريطة (خرائط متجهة أو خرائط تجانبية) على بطاقة ذاكرة الهاتف للاستخدام في وضع عدم الاتصال. كما يتم توفير وظائف التوجيه عبر الإنترنت وغير متصل ، بما في ذلك التوجيه الصوتي خطوة بخطوة.
|
||||
\n أوسماند هو تطبيق ملاحة مفتوح المصدر مع إمكانية الوصول إلى مجموعة واسعة من بيانات OpenStreetMap (OSM) العالمية. يمكن تخزين جميع بيانات الخريطة (خرائط التوجيه أو خرائط جانبية) على ذاكرة الهاتف للاستخدام في وضع عدم الاتصال. كما يتم توفير وظائف التوجيه عبر الإنترنت وبدونه ، بما في ذلك التوجيه الصوتي خطوة بخطوة.
|
||||
\n
|
||||
\n بعض الميزات الأساسية:
|
||||
\n - وظيفة كاملة في وضع عدم الاتصال (قم بتخزين خرائط المتجهات أو الخرائط التي تم تنزيلها في وحدة تخزين الجهاز)
|
||||
\n - خرائط ناقل متواجد حاليا المدمجة للعالم بأسره المتاحة
|
||||
\n - قم بتنزيل خرائط البلد أو المنطقة مباشرة من التطبيق
|
||||
\n - تشغيل كامل دون إنترنت( خزن خرائط التوجيه أو الخرائط الجانبيةالمنزلة في ذاكرة الجهاز)
|
||||
\n - خرائط التوجيه المدمجة للعالم ككل متاحة لتعمل دون إنترنت
|
||||
\n - تحميل غير محدود لخرائط البلدان أو المناطق مباشرة من التطبيق
|
||||
\n - تراكب العديد من طبقات الخريطة ممكن ، مثل GPX أو مسارات التنقل ، النقاط المثيرة للاهتمام ، المفضلة ، خطوط الكنتور ، محطات النقل العام ، خرائط إضافية مع شفافية قابلة للتخصيص
|
||||
\n - البحث دون اتصال عن العناوين والأماكن (النقاط المهمة)
|
||||
\n - التوجيه دون اتصال للمسافات متوسطة المدى
|
||||
|
@ -593,14 +592,18 @@
|
|||
<string name="update_poi_does_not_change_indexes">التغييرات POI داخل التطبيق لا تؤثرعلى ملفات الخرائط المحملة، يتم حفظ التغييرات إلى ملف محلي بدلا من ذلك.</string>
|
||||
<string name="av_camera_focus_descr">وضع تركيز الكاميرا:</string>
|
||||
<string name="osmand_plus_long_description_1000_chars">أوسماند+ (OSM اتجاهات التنقل التلقائية)
|
||||
\n
|
||||
\n عبارة عن تطبيق ملاحة مفتوح المصدر مع إمكانية الوصول إلى العديد من بيانات عالمية للموقع. كل بيانات الخرائط (خرائط التوجيه أو الخرائط الجزئية) يمكن تخزينها في ذاكرة الجهاز للإستخدام دون إنترنت. يوفر التطبيق كذلك وظائف توجيه بما في ذلك التوجيه الصوتي.
|
||||
\n
|
||||
\nبعض الميزات الأساسية:
|
||||
\n OsmAnd + هو إصدار التطبيق المدفوع ، بشرائه فإنك تدعم المشروع ، وتمول تطوير ميزات جديدة ، وتتلقى آخر التحديثات.
|
||||
\n
|
||||
\n بعض الميزات الأساسية:
|
||||
\n - تشغيل كامل دون إنترنت( خزن خرائط التوجيه أو الخرائط الجزئية المنزلة في ذاكرة الجهاز)
|
||||
\n - خرائط التوجيه المدمجة للعالم ككل متاحة لتعمل دون إنترنت
|
||||
\n - تحميل غير محدود لخرائط البلدان أو المناطق مباشرة من التطبيق
|
||||
\n - ميزة ويكيبيديا المحلية ( قم بتحميل نقاط الاهتمام لويكيبيديا)، الأمثل لمشاهدة المعالم الأثرية
|
||||
\n - يمكن تراكب عدة طبقات للخرائط، ك GPX أو مسارات الملاحة، مواقع ذات الاهتمام ، الأماكن المفضلة، الحدود الكنتورية، أماكن توقف النقل العمومي، خرائط إضافية بشفافية قابلة للتعديل
|
||||
\n - يمكن تراكب عدة طبقات للخرائط، ك GPX أو مسارات الملاحة، مواقع ذات الاهتمام ، الأماكن المفضلة، الخطوط المحيطية ، أماكن توقف النقل العمومي
|
||||
\n خرائط إضافية بشفافية قابلة للتعديل
|
||||
\n - البحث عن العناوين وأماكن الاهتمام دون إنترنت
|
||||
\n - تحديد الطريق لمسافات متوسطة المدى
|
||||
\n - وضع السيارة، الدراجة والمشاة متوفر مع:
|
||||
|
@ -1830,7 +1833,7 @@
|
|||
<string name="osm_edit_commented_note">ملاحظة OSM معلق عليها</string>
|
||||
<string name="rendering_attr_pisteGrooming_name">مسار زلق</string>
|
||||
<string name="world_ski_missing">لإظهار خرائط التزلج، يجب تحميل خريطة خاصة محلية.</string>
|
||||
<string name="rendering_attr_publicTransportMode_name">حافلة، ترامواي وغيرها</string>
|
||||
<string name="rendering_attr_publicTransportMode_name">حافلة، عربة وغيرها</string>
|
||||
<string name="osm_edit_created_note">إنشاء ملاحظة OSM</string>
|
||||
<string name="osn_add_dialog_error">حدث استثناء: لم يتم إنشاء الملاحظة.</string>
|
||||
<string name="osn_close_dialog_error">حدث استثناء: لم يتم غلق الملاحظة.</string>
|
||||
|
@ -1962,8 +1965,7 @@
|
|||
\nليست هناك حاجة لتحميل خريطة خاصة،الرؤية يتم إنشاؤها من خلال خرائطنا المحلية.
|
||||
\n
|
||||
\nهذه الرؤية يمكن التراجع عنها إما عن طريق تعطيلها هنا، أو تغيير \'نمط الخريطة\' في \'ضبط الخريطة\' حسب الرغبة.</string>
|
||||
<string name="create_poi_link_to_osm_doc">
|
||||
<u>Online OSM</u> تصنيف الخريطة مع الصور.</string>
|
||||
<string name="create_poi_link_to_osm_doc"><u>Online OSM</u> تصنيف الخريطة مع الصور.</string>
|
||||
<string name="background_service_wait_int_descr">تعيين الحد الأقصى لوقت الانتظار لكل إصلاح موقع في الخلفية.</string>
|
||||
<string name="background_service_wait_int">الانتظار الأقصى للإصلاح</string>
|
||||
<string name="voice_data_not_supported">إصدار غير معتمد من البيانات الصوتية</string>
|
||||
|
@ -1996,7 +1998,6 @@
|
|||
<string name="shared_string_change">تغيير</string>
|
||||
<string name="get_started">ابدأ</string>
|
||||
<string name="routing_attr_short_way_name">طريق أقل استهلاكاً للوقود</string>
|
||||
<string name="routing_attr_short_way_description">استخدم طريق أقل استهلاكا للوقود (عادة أقصر).</string>
|
||||
<string name="replace_favorite_confirmation">هل تريد استبدال المفضلة %1$s؟</string>
|
||||
<string name="clear_tile_data">حذف جميع الطبقات</string>
|
||||
<string name="update_all_maps_now">هل تريد تحديث كافة الخرائط الآن؟</string>
|
||||
|
@ -2072,7 +2073,7 @@
|
|||
<string name="rendering_value_fine_name">اللون والسمك</string>
|
||||
<string name="route_roundabout_short">خذ المخرج %1$d ثم واصل</string>
|
||||
<string name="search_map_hint">المدينة أو المنطقة</string>
|
||||
<string name="wiki_around">مقالات ويكيبيديا قريبة</string>
|
||||
<string name="wiki_around">مقالات ويكيبيديا مجاورة</string>
|
||||
<string name="routing_attr_allow_motorway_name">استخدام الطرق السريعة</string>
|
||||
<string name="routing_attr_allow_motorway_description">السماح للطرق السريعة.</string>
|
||||
<string name="lang_sr_latn">الصربية (اللاتينية)</string>
|
||||
|
@ -2219,18 +2220,19 @@
|
|||
<string name="select_gpx_folder">حدد مجلد المسار</string>
|
||||
<string name="shared_string_gpx_tracks">المسارات</string>
|
||||
<string name="shared_string_time">الوقت</string>
|
||||
<string name="osmand_plus_extended_description_part8">التغطية التقريبية للخريطة و جودتها :
|
||||
\n• أوروبا الغربية : ****
|
||||
\n• أوروبا الشرقية : ***
|
||||
\n• روسيا : ***
|
||||
\n• أمريكا الشمالية : ***
|
||||
\n• امريكا الجنوبية : **
|
||||
\n• آسيا : **
|
||||
\n• اليابان وكوريا : ***
|
||||
\n• الشرق الأوسط : **
|
||||
\n• إفريقيا : **
|
||||
\n• أنتاركتيكا : *
|
||||
\n معظم البلدان في جميع أنحاء العالم متاحة للتنزيل ! من أفغانستان إلى زيمبابوي، من أستراليا إلى الولايات المتحدة الأمريكية. الأرجنتين، البرازيل، كندا، فرنسا، ألمانيا، المكسيك، المملكة المتحدة، إسبانيا
|
||||
<string name="osmand_plus_extended_description_part8">التغطية التقريبية للخريطة و جودتها:
|
||||
\n • أوروبا الغربية: ****
|
||||
\n • أوروبا الشرقية: ***
|
||||
\n • روسيا: ***
|
||||
\n • أمريكا الشمالية: ***
|
||||
\n • امريكا الجنوبية: **
|
||||
\n • آسيا: **
|
||||
\n • اليابان وكوريا: ***
|
||||
\n • الشرق الأوسط : **
|
||||
\n • إفريقيا: **
|
||||
\n • أنتاركتيكا: *
|
||||
\n معظم البلدان في جميع أنحاء العالم متاحة للتنزيل
|
||||
\n من أفغانستان إلى زيمبابوي، من أستراليا إلى الولايات المتحدة الأمريكية. الأرجنتين، البرازيل، كندا، فرنسا، ألمانيا، المكسيك، المملكة المتحدة، أسبانيا , …
|
||||
\n</string>
|
||||
<string name="restart_search">إعادة البحث</string>
|
||||
<string name="osmand_extended_description_part7">المساهمة في OSM
|
||||
|
@ -2307,7 +2309,7 @@
|
|||
<string name="relief_smoothness_factor_descr">التضاريس المفضلة : مسطحة أو تلال.</string>
|
||||
<string name="shared_string_slope">الانحدار</string>
|
||||
<string name="shared_string_move">نقل</string>
|
||||
<string name="routing_attr_height_obstacles_description">استخدام بيانات ارتفاع التضاريس المقدمة بواسطة SRTM, ASTER, EU-DEM.</string>
|
||||
|
||||
<string name="rendering_attr_depthContours_description">إظهار نقاط ومعالم العمق.</string>
|
||||
<string name="auto_split_recording_descr">بدء مقطع جديدة بعد فارق 6 دقائق، مسار جديد بعد فارق 2 ساعة، أو ملف جديد بعد فارق أطول إذا تغير التاريخ.</string>
|
||||
<string name="shared_string_paused">متوقف مؤقتاً</string>
|
||||
|
@ -2372,12 +2374,13 @@
|
|||
\n
|
||||
\n بعض الميزات الرئيسية:</string>
|
||||
<string name="osmand_plus_extended_description_part2">الملاحة
|
||||
\n• يعمل على الإنترنت (سريع) أو في وضع غير متصل (لا رسوم تجوال خارج الوطن)
|
||||
\n• توجيه صوتي بالتفصيل (الأصوات المسجلة أو مدرجة)
|
||||
\n• موجه مسار اختياري، عرض اسم الشارع، والوقت المقدر للوصول
|
||||
\n• يدعم نقاط وسيطة خلال مسارك
|
||||
\n• إعادة تلقائية للتوجيه كلما انحرفت عن الطريق
|
||||
\n• البحث عن الأماكن حسب العنوان، النوع (مثل: مطعم، فندق، محطة وقود، متحف)،أو حسب الإحداثيات الجغرافية</string>
|
||||
\n • يعمل على الإنترنت (سريع) أو في وضع غير متصل (لا رسوم تجوال خارج الوطن)
|
||||
\n • توجيه صوتي بالتفصيل (الأصوات المسجلة أو مدرجة)
|
||||
\n • موجه مسار اختياري، عرض اسم الشارع، والوقت المقدر للوصول
|
||||
\n • يدعم نقاط وسيطة خلال مسارك
|
||||
\n • إعادة تلقائية للتوجيه كلما انحرفت عن الطريق
|
||||
\n • البحث عن الأماكن حسب العنوان، النوع (مثل: مطعم، فندق، محطة وقود، متحف)،أو حسب الإحداثيات الجغرافية
|
||||
\n</string>
|
||||
<string name="osmand_plus_extended_description_part3">عرض الخريطة
|
||||
\n• عرض موقعك والتوجيه
|
||||
\n• محاذاة اختيارية للصورة وفق البوصلة أو توجيه الحركة
|
||||
|
@ -2418,7 +2421,8 @@
|
|||
<string name="quick_action_duplicates">اسم الاختصار السريع المحدد قيد الاستخدام، لقد تم تغييره إلى %1$s لتجنب التكرار.</string>
|
||||
<string name="quick_action_page_list_descr">الضغط على زر الإجراء سيطبق أحد الأنماط من القائمة أدناه.</string>
|
||||
<string name="route_points_category_name">تنقلاتك على هذا الطريق</string>
|
||||
<string name="navigate_point_olc_info_area">OLC الصالحة بالكامل\nتمثل المنطقة: %1$s x %2$s</string>
|
||||
<string name="navigate_point_olc_info_area">الصالحة بالكامل OLC
|
||||
\nيمثل المنطقة: %1$s x %2$s</string>
|
||||
<string name="wrong_user_name">اسم المستخدم خاطئ</string>
|
||||
<string name="shared_string_to">إلى</string>
|
||||
<string name="mapillary_menu_date_from">مِن</string>
|
||||
|
@ -2616,7 +2620,7 @@
|
|||
<string name="south_abbreviation">ج</string>
|
||||
<string name="north_abbreviation">ش</string>
|
||||
<string name="optional_point_name">اسم النقطة</string>
|
||||
<string name="transport_nearby_routes_within">الطرق القريبة التي في الداخل</string>
|
||||
<string name="transport_nearby_routes_within">الطرق الداخلية المجاورة</string>
|
||||
<string name="enter_the_file_name">أدخل اسم الملف.</string>
|
||||
<string name="map_import_error">خطأ أثناء استرجاع الخريطة</string>
|
||||
<string name="map_imported_successfully">تمت عملية استيراد الخريطة</string>
|
||||
|
@ -3335,7 +3339,7 @@
|
|||
<string name="routing_attr_allow_expert_name">السماح بطرق المتخصصين</string>
|
||||
<string name="routing_attr_allow_expert_description">طرق صعبة للغاية ، مع عقبات خطيرة والمناطق المحيطة بها.</string>
|
||||
<string name="routing_attr_allow_skating_only_name">السماح بالتزلج على الطرق فقط</string>
|
||||
<string name="routing_attr_allow_skating_only_description">الطريق مصممة خصيصا بحرية أو التزلج على الجليد.</string>
|
||||
<string name="routing_attr_allow_skating_only_description">طرق مصممة للأسلوب الحر أو التزلج فقط بدون المسارات الكلاسيكية.</string>
|
||||
<string name="routing_attr_allow_classic_only_name">السماح للطرق الكلاسيكية فقط</string>
|
||||
<string name="routing_attr_allow_classic_only_description">تم إعداد الطرق للأسلوب الكلاسيكي فقط دون مسارات التزلج. يشمل ذلك الطرق التي يتم إعدادها بواسطة عربة ثلجية أصغر مع زحلقة مرنة ومسارات مصنوعة يدوياً بواسطة المتزلجين.</string>
|
||||
<string name="routing_attr_difficulty_preference_name">الصعوبة المفضلة</string>
|
||||
|
@ -3378,7 +3382,7 @@
|
|||
<string name="select_color">اختر اللون</string>
|
||||
<string name="edit_profiles_descr">لا يمكنك حذف أوضاع أوسماند الافتراضية ، ولكن يمكنك تعطيلها في الشاشة السابقة ، أو نقلها إلى الأسفل.</string>
|
||||
<string name="edit_profiles">تحرير الأوضاع</string>
|
||||
<string name="select_nav_profile_dialog_message">يؤثر نوع التنقل على قواعد حسابات المسار.</string>
|
||||
<string name="select_nav_profile_dialog_message">يؤثر نوع التنقل على كييفية حساب المسارات.</string>
|
||||
<string name="profile_appearance">مظهر الوضع</string>
|
||||
<string name="choose_icon_color_name">اختر الايقونة واللون والاسم</string>
|
||||
<string name="reorder_profiles">تحرير قائمة الأوضاع</string>
|
||||
|
@ -3841,7 +3845,7 @@
|
|||
<string name="pass_whole_track_descr">نقطة المسار للتنقل</string>
|
||||
<string name="start_of_the_track">بداية المسار</string>
|
||||
<string name="nearest_point">أقرب نقطة</string>
|
||||
<string name="attach_to_the_roads">إرفاق الطرق</string>
|
||||
<string name="attach_to_the_roads">إرفاق بالطرق</string>
|
||||
<string name="delete_address">حذف عنوان</string>
|
||||
<string name="add_address">إضافة عنوان</string>
|
||||
<string name="access_hint_enter_address">أدخل العنوان</string>
|
||||
|
@ -3864,7 +3868,7 @@
|
|||
<string name="open_saved_track">فتح المسار المحفوظ</string>
|
||||
<string name="shared_string_is_saved">محفوظ</string>
|
||||
<string name="simplified_track">مسار مبسط</string>
|
||||
<string name="simplified_track_description">سيتم حفظ خط التوجيه فقط، وسيتم حذف نقاط الطريق.</string>
|
||||
<string name="simplified_track_description">سيتم حفظ خط الطريق فقط، وسيتم حذف نقاط المسار.</string>
|
||||
<string name="shared_string_file_name">اسم الملف</string>
|
||||
<string name="one_point_error">الرجاء إضافة نقطتين على الأقل.</string>
|
||||
<string name="shared_string_redo">إعادة</string>
|
||||
|
@ -3982,7 +3986,6 @@
|
|||
<string name="select_picture">تحديد صورة</string>
|
||||
<string name="ltr_or_rtl_combine_via_star">%1$s * %2$s</string>
|
||||
<string name="lang_de_casual">الألمانية (تقليدية)</string>
|
||||
<string name="elevation_data">يمكنك استخدام بيانات الارتفاع للنظر في الارتفاع / النزول لرحلتك</string>
|
||||
<string name="app_mode_light_aircraft">طائرة</string>
|
||||
<string name="plan_route_join_segments">ربط الأجزاء</string>
|
||||
<string name="plan_route_split_before">تقسيم قبل</string>
|
||||
|
@ -4069,4 +4072,31 @@
|
|||
<string name="delete_waypoints">حذف نقاط الطريق</string>
|
||||
<string name="copy_to_map_markers">نسخ لعلامات الخريطة</string>
|
||||
<string name="copy_to_map_favorites">نسخ للمفضلة</string>
|
||||
<string name="upload_photo">يتم الرفع</string>
|
||||
<string name="upload_photo_completed">اكتمال الرفع</string>
|
||||
<string name="uploading_count">رفع %1$d من %2$d</string>
|
||||
<string name="uploaded_count">تم رفع %1$d من %2$d</string>
|
||||
<string name="toast_select_edits_for_upload">تحديد التعديلات للتحميل</string>
|
||||
<string name="hillshade_slope_contour_lines">التضاريس / الانحدار / الخطوط المحيطية</string>
|
||||
<string name="open_place_reviews_plugin_description">OpenPlaceReviews هو مشروع يحركه المجتمع حول الأماكن العامة مثل المطاعم والفنادق والمتاحف ونقاط الطريق. يقوم بجمع جميع المعلومات العامة المتعلقة بهم مثل الصور والتعليقات والروابط إلى ارتباط الأنظمة الأخرى OpenStreetMap و Wikipedia.
|
||||
\n
|
||||
\nجميع بيانات OpenPlaceReview مفتوحة ومتاحة للجميع: http://openplacereviews.org/data.
|
||||
\n
|
||||
\nيمكنك قراءة المزيد على: http://openplacereviews.org</string>
|
||||
<string name="open_place_reviews">موقع OpenPlaceReviews</string>
|
||||
<string name="opr_use_dev_url">استخدام test.openplacereviews.org</string>
|
||||
<string name="login_open_place_reviews">الدخول إلى OpenPlaceReviews</string>
|
||||
<string name="activity_type_water_name">ماء</string>
|
||||
<string name="activity_type_winter_name">شتاء</string>
|
||||
<string name="activity_type_snowmobile_name">الثلج</string>
|
||||
<string name="activity_type_riding_name">ركوب</string>
|
||||
<string name="activity_type_racing_name">سباق</string>
|
||||
<string name="activity_type_mountainbike_name">دراجة جبلية</string>
|
||||
<string name="activity_type_cycling_name">دراجة</string>
|
||||
<string name="activity_type_hiking_name">مشي</string>
|
||||
<string name="activity_type_running_name">الجري</string>
|
||||
<string name="activity_type_walking_name">مشي</string>
|
||||
<string name="activity_type_offroad_name">الطرق الوعرة</string>
|
||||
<string name="activity_type_motorbike_name">دراجة نارية</string>
|
||||
<string name="activity_type_car_name">سيارة</string>
|
||||
</resources>
|
|
@ -779,7 +779,7 @@
|
|||
<string name="altitude_descent">Eniş</string>
|
||||
<string name="altitude_ascent">Yoxuş</string>
|
||||
<string name="routing_attr_height_obstacles_name">Yüksəklik məlumatlarını istifadə et</string>
|
||||
<string name="routing_attr_height_obstacles_description">SRTM, ASTER və EU-DEM tərəfindən təmin edilən ərazi yüksəklik məlumatlarını istifadə et.</string>
|
||||
|
||||
<string name="rendering_attr_depthContours_description">Dərinlik konturlarını və nöqtələrini göstər.</string>
|
||||
<string name="rendering_attr_depthContours_name">Dəniz dərinliyi konturları</string>
|
||||
<string name="rendering_attr_contourDensity_description">Kontur xəttinin sıxlığı</string>
|
||||
|
@ -979,7 +979,6 @@
|
|||
<string name="impassable_road">Yollardan yayın…</string>
|
||||
<string name="routing_attr_avoid_toll_name">Pullu yollardan yayın</string>
|
||||
<string name="ending_point_too_far">Son nöqtə ən yaxın yoldan çox uzaqdır.</string>
|
||||
<string name="snap_to_road_descr">Naviqasiya zamanı mövqeni yollara bərkit.</string>
|
||||
<string name="snap_to_road">Yola bərkit</string>
|
||||
<string name="avoid_unpaved">Asfaltsız yollardan yayın</string>
|
||||
<string name="avoid_toll_roads">Pullu yollardan yayın</string>
|
||||
|
@ -1967,7 +1966,6 @@
|
|||
<string name="save_track_precision_descr">Filtr: Nöqtənin qeydiyyatı üçün minimum dəqiqlik seçin.</string>
|
||||
<string name="rendering_attr_surfaceIntegrity_name">Yol səthinin keyfiyyəti</string>
|
||||
<string name="routing_attr_short_way_name">Yanacağa qənaətli yol</string>
|
||||
<string name="routing_attr_short_way_description">Yanacağa qənaətli yoldan istifadə et (adətən daha qısa).</string>
|
||||
<string name="access_direction_haptic_feedback_descr">Hədəf nöqtənin istiqamətini titrəmə ilə göstər.</string>
|
||||
<string name="use_osm_live_routing_description">OsmAnd Live dəyişiklikləri üçün naviqasiyanı aktivləşdir.</string>
|
||||
<string name="storage_permission_restart_is_required">İndi proqramın xarici yaddaşa yazmasına icazə verilir, lakin bunun üçün yenidən başlatmaq lazımdır.</string>
|
||||
|
|
|
@ -519,7 +519,7 @@
|
|||
<string name="shared_string_time">Tiempu</string>
|
||||
<string name="total_distance">Distancia total</string>
|
||||
<string name="routing_attr_height_obstacles_name">Usar datos d\'elevación</string>
|
||||
<string name="routing_attr_height_obstacles_description">Inclúi la elevación del tarrén (pelos datos de SRTM, ASTER y EU-DEM).</string>
|
||||
|
||||
<string name="search_another_country">Esbillar otra rexón</string>
|
||||
<string name="shared_string_change">Camudar</string>
|
||||
<string name="mapillary_image">Imaxe de Mapillary</string>
|
||||
|
@ -1278,7 +1278,6 @@
|
|||
<string name="speak_poi">PdI cercanos</string>
|
||||
<string name="routing_attr_avoid_unpaved_name">Evitar carreteres ensin pavimentar</string>
|
||||
<string name="routing_attr_avoid_motorway_name">Evitar autopistes</string>
|
||||
<string name="snap_to_road_descr">Axusta la posición a los caminos na navegación.</string>
|
||||
<string name="snap_to_road">Axustar a la carretera</string>
|
||||
<string name="keep_informing_never">Namái a mano (toca na flecha)</string>
|
||||
<string name="keep_informing">Repitir les instrucciones de navegación</string>
|
||||
|
|
|
@ -562,7 +562,6 @@ Punktaŭ maršrutu %2$s</string>
|
|||
<string name="avoid_motorway">Paźbiahać aŭtamahіstralaŭ</string>
|
||||
<string name="auto_zoom_map_descr">Uzrovień pavieličennia zhodna vašaj chutkasci (kali mapa sinchranizujecca z ciapierašnim stanoviščam).</string>
|
||||
<string name="auto_zoom_map">Aŭtamatyčnaje pamianšeńnie/pavieličeńnie</string>
|
||||
<string name="snap_to_road_descr">Pryviazvacca da daroh padčas navihacyi.</string>
|
||||
<string name="snap_to_road">Pryviazvacca da daroh</string>
|
||||
<string name="interrupt_music_descr">Halasavyja padkazki prypyniajuć muzyku, a nie toĺki pryhlušajuć jaje.</string>
|
||||
<string name="interrupt_music">Pierapynieńnie muzykі</string>
|
||||
|
@ -1983,7 +1982,6 @@ Praparcyjnaj pamiacі %4$s MB (Abmiežavańnie Android %5$s MB, Dalvik %6$s MB).
|
|||
<string name="update_all_maps_now">Abnavić usie mapy zaraz?</string>
|
||||
<string name="clear_tile_data">Ačyścіć keš siecіŭnych mapaŭ</string>
|
||||
<string name="routing_attr_short_way_name">Paliŭna-aščadny maršrut</string>
|
||||
<string name="routing_attr_short_way_description">Različvaje paliva-aščadny maršrut (zvyčajna najkaraciejšy).</string>
|
||||
<string name="replace_favorite_confirmation">Vy sapraŭdy chočacie zamianić upadabanaje %1$s?</string>
|
||||
<string name="rendering_attr_hideOverground_name">Nadziemnyja abjekty</string>
|
||||
<string name="shared_string_change">Źmianіć</string>
|
||||
|
@ -2191,7 +2189,7 @@ Praparcyjnaj pamiacі %4$s MB (Abmiežavańnie Android %5$s MB, Dalvik %6$s MB).
|
|||
<string name="mapillary_image">Vyjava Mapillary</string>
|
||||
<string name="mapillary_widget_descr">Dazvaliaje chutki ŭniosak ŭ Mapillary.</string>
|
||||
<string name="relief_smoothness_factor_descr">Pieravažny reĺjef: raŭninny ci harysty.</string>
|
||||
<string name="routing_attr_height_obstacles_description">Faktar vyšyni ziamnoj pavierchni (danyja z SRTM, ASTER i EU-DEM).</string>
|
||||
|
||||
<string name="rendering_attr_depthContours_description">Pakazvać kontury i punkty hlybini.</string>
|
||||
<string name="rendering_attr_contourDensity_description">Ščyĺnasć haryzantaliaŭ</string>
|
||||
<string name="rendering_attr_contourWidth_description">Taŭščynia haryzantaliaŭ (izahipsy)</string>
|
||||
|
|
|
@ -444,7 +444,6 @@
|
|||
<string name="avoid_motorway">Awtodróhi wobeńć</string>
|
||||
<string name="auto_zoom_map_descr">Přiměrja wulkosć karty wotpowědujo aktualnej spěšnosći (karta so z tuchwilnym stejišćom synchronizuje).</string>
|
||||
<string name="auto_zoom_map">Awtomatiski zoom</string>
|
||||
<string name="snap_to_road_descr">W běhu nawigacije poziciski dypk na dróhach zdźeržować.</string>
|
||||
<string name="snap_to_road">Na dróze wostać</string>
|
||||
<string name="interrupt_music_descr">Připowědźenje přetorhnje hudźbu.</string>
|
||||
<string name="interrupt_music">Wothrawanje hudźby přetorhować</string>
|
||||
|
@ -1360,7 +1359,6 @@
|
|||
<string name="give_permission">Dowolić</string>
|
||||
<string name="allow_access_location">Přistup k stejišću dowolić</string>
|
||||
<string name="routing_attr_short_way_name">Naftu lutowacy puć</string>
|
||||
<string name="routing_attr_short_way_description">Naftu lutowacy puć wužić (zwjetša krótši).</string>
|
||||
<string name="confirmation_to_delete_history_items">Wubrane objekty z archiwa wotstronić?</string>
|
||||
<string name="select_map_marker">Chorhojčku wubrać</string>
|
||||
<string name="map_markers_other">Druhe chorhojčki</string>
|
||||
|
|
|
@ -3582,7 +3582,7 @@
|
|||
<string name="poi_historic_tank">Танк</string>
|
||||
<string name="poi_charcoal_pile">Куча вуголля</string>
|
||||
<string name="poi_hookah_lounge">Кальянная</string>
|
||||
<string name="poi_source_biomass">Крыніца энергіі: біямаса</string>
|
||||
<string name="poi_generator_source_biomass">Крыніца энергіі: біямаса</string>
|
||||
<string name="poi_snowmobile_filter">Даступна для снегаходаў</string>
|
||||
<string name="poi_access_bus">Даступна для аўтобусаў</string>
|
||||
<string name="poi_access_caravan">Даступна для прычапных дамоў на колах</string>
|
||||
|
@ -3823,5 +3823,11 @@
|
|||
<string name="poi_recycling_small_electrical_appliances">Маленькія электрапрыборы</string>
|
||||
<string name="poi_beehive">Вулей</string>
|
||||
<string name="poi_nuts">Крама арэхаў</string>
|
||||
<string name="poi_fuel_lng"></string>
|
||||
<string name="poi_fuel_lng"/>
|
||||
<string name="poi_diplomatic_services_citizen_services_filter">Паслугі для грамадзян</string>
|
||||
<string name="poi_diplomatic_services_immigrant_visas_filter">Іміграцыйныя візы</string>
|
||||
<string name="poi_diplomatic_services_non_immigrant_visas_filter">Неіміграцыйныя візы</string>
|
||||
<string name="poi_liaison_filter">Сувязь</string>
|
||||
<string name="poi_consulate_filter">Консульства</string>
|
||||
<string name="poi_embassy_filter">Амбасада</string>
|
||||
</resources>
|
|
@ -88,7 +88,7 @@
|
|||
<string name="files_limit">засталося %1$d файлаў</string>
|
||||
<string name="available_downloads_left">Засталося %1$d файлаў для спампоўвання</string>
|
||||
<string name="install_paid">Поўная версія</string>
|
||||
<string name="cancel_route">Скасаваць маршрут</string>
|
||||
<string name="cancel_route">Скасаваць маршрут\?</string>
|
||||
<string name="cancel_navigation">Спыніць навігацыю</string>
|
||||
<string name="clear_destination">Выдаліць месца прызначэння</string>
|
||||
<string name="download_using_mobile_internet">Wi-Fi не падлучаны. Выкарыстаць дзейнае падлучэнне да Інтэрнэту для спампоўвання?</string>
|
||||
|
@ -232,7 +232,6 @@
|
|||
<string name="avoid_motorway">Без аўтамагістраляў</string>
|
||||
<string name="auto_zoom_map_descr">Узровень павелічэння згодна вашай хуткасці (калі мапа сінхранізуецца з цяперашнім становішчам).</string>
|
||||
<string name="auto_zoom_map">Аўтаматычнае памяншэнне/павелічэнне</string>
|
||||
<string name="snap_to_road_descr">Прывязвацца да дарог падчас навігацыі.</string>
|
||||
<string name="snap_to_road">Прывязвацца да дарог</string>
|
||||
<string name="osmand_play_title_30_chars">OsmAnd Мапы і навігацыя</string>
|
||||
<string name="osmand_short_description_80_chars">Прагляд глабальнай мабільнай мапы і навігатар для аўтаномных і сеціўных мапаў OSM</string>
|
||||
|
@ -515,7 +514,7 @@
|
|||
<string name="use_fluorescent_overlays">Флюарэсцэнтныя пласты</string>
|
||||
<string name="use_fluorescent_overlays_descr">Ужываць флюарэсцэнтныя колеры для слядоў і шляхоў.</string>
|
||||
<string name="offline_edition">Пазасеціўнае рэдагаванне</string>
|
||||
<string name="offline_edition_descr">Заўсёды выкарыстоўваць аўтаномнае рэдагаванне.</string>
|
||||
<string name="offline_edition_descr">Калі выкарыстоўваецца рэдагаванне на прыладзе, то змены будуць захаваныя лакальна і загружаныя на сервер толькі па запыце, інакш яны будуць загружацца неадкладна.</string>
|
||||
<string name="update_poi_does_not_change_indexes">Змены цікавых пунктаў (POI) у праграме не паўплываюць на cпампаваныя файлы мапаў, змены захоўваюцца як файлы на вашай прыладзе.</string>
|
||||
<string name="local_openstreetmap_uploading">Запампоўка…</string>
|
||||
<string name="local_openstreetmap_were_uploaded">{0} POI/нататкі запампаваныя</string>
|
||||
|
@ -1574,7 +1573,7 @@
|
|||
<string name="routing_attr_height_name">Абмежаванне па вышыні</string>
|
||||
<string name="routing_attr_height_description">Пазначыць вышыню транспартнага сродку для разліку маршруту.</string>
|
||||
<string name="use_fast_recalculation">Разумны пераразлік маршруту</string>
|
||||
<string name="use_fast_recalculation_desc">Пераразлічваць толькі пачатак маршруту. Падыходзіць для доўгіх паездак.</string>
|
||||
<string name="use_fast_recalculation_desc">Пераразлічваць толькі пачатак маршруту. Карысна для доўгіх паездак.</string>
|
||||
<string name="shared_string_logoff">Выйсці</string>
|
||||
<string name="rendering_value_disabled_name">Выключана</string>
|
||||
<string name="rendering_value_walkingRoutesOSMC_name">Афарбоўка па пешаходнаму сімвалу OSMC</string>
|
||||
|
@ -1985,7 +1984,7 @@
|
|||
<string name="map_widget_bearing">Адносны азімут</string>
|
||||
<string name="map_widget_magnetic_bearing">Магнітны азімут</string>
|
||||
<string name="use_osm_live_routing">Навігацыя OsmAnd Live</string>
|
||||
<string name="access_no_destination">Пункт прызначэння не зададзены</string>
|
||||
<string name="access_no_destination">Убудова спецыяльных магчымасцей: Пункт прызначэння не зададзены</string>
|
||||
<string name="follow_us">Сачыце за намі</string>
|
||||
<string name="access_direction_audio_feedback">Гукавая напрамкі</string>
|
||||
<string name="access_direction_audio_feedback_descr">Індыцыраваць гукам кірунак на мэтавы пункт.</string>
|
||||
|
@ -2028,7 +2027,6 @@
|
|||
<string name="shared_string_change">Змяніць</string>
|
||||
<string name="get_started">Пачаць</string>
|
||||
<string name="routing_attr_short_way_name">Паліўна-ашчадны маршрут</string>
|
||||
<string name="routing_attr_short_way_description">Разлічвае паліва-ашчадны маршрут (звычайна найкарацейшы).</string>
|
||||
<string name="replace_favorite_confirmation">Вы сапраўды хочаце замяніць улюбёную мясціну %1$s\?</string>
|
||||
<string name="update_all_maps_now">Абнавіць усе мапы зараз?</string>
|
||||
<string name="clear_tile_data">Ачысціць кэш сеціўных мапаў</string>
|
||||
|
@ -2196,7 +2194,7 @@
|
|||
<string name="shared_string_time">Час</string>
|
||||
<string name="total_distance">Агульная даўжыня</string>
|
||||
<string name="routing_attr_height_obstacles_name">Выкарыстоўваць даныя вышыні</string>
|
||||
<string name="routing_attr_height_obstacles_description">Фактар вышыні зямной паверхні (даныя з SRTM, ASTER і EU-DEM).</string>
|
||||
|
||||
<string name="auto_split_recording_title">Аўтаматычнае дзяленне запісаў пасля перапынку</string>
|
||||
<string name="auto_split_recording_descr">Пачаць новы сегмент пасля 6-хвіліннага перапынку, новы след — пасля 2-гадзіннага перапынку, ці новы файл пасля доўгага перапынку (як змяніляся дата).</string>
|
||||
<string name="lang_ber">Берберская</string>
|
||||
|
@ -2483,7 +2481,7 @@
|
|||
<string name="average">Сярэдняя</string>
|
||||
<string name="of">%1$d з %2$d</string>
|
||||
<string name="ascent_descent">Пад\'ём/Cпуск</string>
|
||||
<string name="moving_time">Час руху</string>
|
||||
<string name="moving_time">Час у руху</string>
|
||||
<string name="max_min">Макс/Мін</string>
|
||||
<string name="min_max">Мін/Макс</string>
|
||||
<string name="rendering_value_translucent_pink_name">Паўпразрысты ружовы</string>
|
||||
|
@ -2671,7 +2669,7 @@
|
|||
<string name="first_intermediate_dest_description">Дадае першы прыпынак</string>
|
||||
<string name="subsequent_dest_description">Перамясціць прызначэнне далей і стварыць яго</string>
|
||||
<string name="show_closed_notes">Паказаць закрытыя нататкі</string>
|
||||
<string name="switch_osm_notes_visibility_desc">Паказаць/схаваць OSM-нататкі на мапе.</string>
|
||||
<string name="switch_osm_notes_visibility_desc">Паказаць або схаваць OSM-нататкі на мапе.</string>
|
||||
<string name="gpx_file_desc">GPX падыходзіць для экспарту ў JOSM і іншыя OSM-рэдактары.</string>
|
||||
<string name="osc_file_desc">OSC падыходзіць для экспарту ў OpenStreetMap.</string>
|
||||
<string name="shared_string_gpx_file">GPX-файл</string>
|
||||
|
@ -3159,9 +3157,9 @@
|
|||
<string name="osmand_default_routing">Навігацыя OsmAnd</string>
|
||||
<string name="third_party_routing_type">Іншая навігацыя</string>
|
||||
<string name="quick_action_need_to_add_item_to_list">Дадаць прынамсі адзін элемент у спіс \"Хуткае дзеянне\" у наладах</string>
|
||||
<string name="routing_attr_piste_type_downhill_name">Альпійская/горныя лыжы</string>
|
||||
<string name="routing_attr_piste_type_downhill_name">Альпійскія і горныя лыжы</string>
|
||||
<string name="routing_attr_piste_type_downhill_description">Схілы для горных лыжаў і доступ да пад\'ёмнікаў.</string>
|
||||
<string name="routing_attr_piste_type_nordic_name">Лыжныя гонкі / паўночныя тыпы</string>
|
||||
<string name="routing_attr_piste_type_nordic_name">Бегавыя і скандынаўскія лыжы</string>
|
||||
<string name="routing_attr_piste_type_nordic_description">Трасы для лыжных гонак і іх паўночных тыпаў.</string>
|
||||
<string name="routing_attr_allow_intermediate_name">Дазволіць прамежкавыя маршруты</string>
|
||||
<string name="routing_attr_allow_intermediate_description">Больш складаныя трасы са стромкімі ўчасткамі. Пэўныя перашкоды, якіх варта пазбягаць.</string>
|
||||
|
@ -3429,9 +3427,9 @@
|
|||
<string name="osmand_purchases_item">Пакупкі OsmAnd</string>
|
||||
<string name="legend_item_description">Даведка па знаках мапы.</string>
|
||||
<string name="navigation_profiles_item">Профілі навігацыі</string>
|
||||
<string name="create_edit_poi">Стварыць/Рэдагаваць POI</string>
|
||||
<string name="create_edit_poi">Стварыць ці Рэдагаваць POI</string>
|
||||
<string name="parking_positions">Месца паркоўкі</string>
|
||||
<string name="add_edit_favorite">Дадаць / рэдагаваць улюбёнае</string>
|
||||
<string name="add_edit_favorite">Дадаць ці рэдагаваць улюбёнае</string>
|
||||
<string name="reset_deafult_order">Аднавіць прадвызначаны парадак элементаў</string>
|
||||
<string name="back_to_editing">Вярнуцца да рэдагавання</string>
|
||||
<string name="quick_action_transport_show">Паказаць грамадскі транспарт</string>
|
||||
|
@ -3439,7 +3437,7 @@
|
|||
<string name="shared_string_add_profile">Дадаць профіль</string>
|
||||
<string name="n_items_of_z">%1$s з %2$s</string>
|
||||
<string name="download_slope_maps">Схілы</string>
|
||||
<string name="quick_action_show_hide_terrain">Паказаць/схаваць рэльеф</string>
|
||||
<string name="quick_action_show_hide_terrain">Паказаць ці схаваць рэльеф</string>
|
||||
<string name="quick_action_terrain_hide">Схаваць рэльеф</string>
|
||||
<string name="quick_action_terrain_show">Паказаць рэльеф</string>
|
||||
<string name="delete_description">Выдаліць апісанне</string>
|
||||
|
@ -3517,7 +3515,7 @@
|
|||
<string name="change_application_profile">Змяніць профіль праграмы</string>
|
||||
<string name="index_item_world_basemap_detailed">Аглядная мапа свету (падрабязная)</string>
|
||||
<string name="quick_action_transport_hide">Схаваць грамадскі транспарт</string>
|
||||
<string name="quick_action_show_hide_transport">Паказаць/схаваць грамадскі транспарт</string>
|
||||
<string name="quick_action_show_hide_transport">Паказаць ці схаваць грамадскі транспарт</string>
|
||||
<string name="recalculate_route_in_deviation">Пералічыць маршрут у выпадку адхілення</string>
|
||||
<string name="shared_string_uninstall">Выдаліць</string>
|
||||
<string name="vessel_width_limit_description">Вызначце шырыню судна, каб пазбягаць вузкіх мастоў</string>
|
||||
|
@ -3531,7 +3529,7 @@
|
|||
<string name="item_deleted">Выдалена: %1$s</string>
|
||||
<string name="speed_cameras_restart_descr">Перазапусціце праграму для поўнага выдалення даных камер кантролю хуткасці.</string>
|
||||
<string name="use_volume_buttons_as_zoom_descr">Кіраванне ўзроўнем маштабавання мапы пры дапамозе кнопак рэгулявання гучнасці.</string>
|
||||
<string name="plugin_wikipedia_description">Інфармацыя пра славутасці з Вікіпедыі. Гэта ваш кішэнны даведнік - уключыце ўбудову вікіпедыі і чытайце артыкулы пра аб’екты вакол вас.</string>
|
||||
<string name="plugin_wikipedia_description">Інфармацыя пра славутасці з Вікіпедыі, вашага кішэннага даведніка з артыкуламі пра аб’екты вакол вас.</string>
|
||||
<string name="app_mode_enduro_motorcycle">Матацыкл Эндура</string>
|
||||
<string name="app_mode_motor_scooter">Мотаролер</string>
|
||||
<string name="shared_string_uninstall_and_restart">Выдаліць і перазапусціць</string>
|
||||
|
@ -3549,8 +3547,8 @@
|
|||
<string name="open_saved_track">Адкрыць захаваны след</string>
|
||||
<string name="shared_string_is_saved">захавана</string>
|
||||
<string name="save_track_to_gpx">Аўтаматычна запісваць след падчас навігацыі</string>
|
||||
<string name="disable_recording_once_app_killed_descrp">Запіс GPX прыпыніцца, калі праграма будзе забітая (праз надаўнія праграмы). (Апавяшчэнне ў вобласці падказак Android пра фонавы рэжым OsmAnd знікне.)</string>
|
||||
<string name="save_global_track_interval_descr">Вызначце інтэрвал запісу следу (уключаецца праз віджэт запісу GPX на мапе).</string>
|
||||
<string name="disable_recording_once_app_killed_descrp">Спыненне запісу GPX, падчас прымусовага спынення (праз апошнія прыкладанні). (Апавяшчэнне ў вобласці падказак Android пра фонавы рэжым OsmAnd знікне.)</string>
|
||||
<string name="save_global_track_interval_descr">Вызначце інтэрвал запісу трэка (уключаецца праз віджэт \"Запіс паездкі\" на мапе).</string>
|
||||
<string name="monitoring_control_start">ЗАПІС</string>
|
||||
<string name="shared_string_done">Завершана</string>
|
||||
<string name="shared_string_save_as_gpx">Захаваць як новы файл следу</string>
|
||||
|
@ -3655,7 +3653,7 @@
|
|||
<string name="previous_segment">Папярэдні сегмент</string>
|
||||
<string name="all_previous_segments">Усе папярэднія сегменты</string>
|
||||
<string name="only_selected_segment_recalc">Толькі абраны сегмент пералічыцца з выкарыстаннем абранага профілю.</string>
|
||||
<string name="osm_edits_view_descr">Прагляд вашых правак альбо хібаў OSM, яшчэ не адпраўленых у %1$s. Запампаваныя пункты больш не будуць паказвацца.</string>
|
||||
<string name="osm_edits_view_descr">Прагледзець усе вашы яшчэ не загружаныя паўкі OSM або памылкі ў %1$s. Ужо загружаныя змены больш не будуць паказвацца.</string>
|
||||
<string name="live_monitoring_adress_descr">Пазначце сеціўны адрас з наступнымі параметрамі: lat={0}, lon={1}, timestamp={2}, hdop={3}, altitude={4}, speed={5}, bearing={6}.</string>
|
||||
<string name="monitoring_min_distance_descr_recommendation">Рэкамендацыя: наладка ў 5 метраў можа вас задаволіць, калі вам не патрэбна фіксаваць больш кароткія перамяшчэнні, і вы не хочаце відавочна збіраць даныя ў стане спакою.</string>
|
||||
<string name="monitoring_min_distance_descr_side_effect">Пабочныя эфекты: перыяды ў стане спакою не запісваюцца наогул альбо па адным пункце кожны. Невялікія (у рэальным свеце) перамяшчэнні (напрыклад, убок, што адзначаюць магчымы паварот у вашай паездцы) могуць быць адфільтраваныя. Файл змяшчае менш інфармацыі для наступнай апрацоўкі і мае горшую статыстыку, адфільтроўваючы відавочна лішнія пункты падчас запісу. Пры гэтым патэнцыйна захоўваюцца артэфакты, выкліканыя дрэнным прыёмам альбо эфектамі модуля GPS.</string>
|
||||
|
@ -3861,7 +3859,7 @@
|
|||
<string name="shared_string_redo">Вярнуць</string>
|
||||
<string name="release_3_8">• Абноўлена функцыя планавання маршруту. З’явілася магчымасць выкарыстоўваць розныя тыпы навігацыі для кожнага сегмента і прымацоўваць сляды
|
||||
\n
|
||||
\n • Новае меню \"Выгляд\" для слядоў. Можна абраць колер, таўшчыню, уключыць стрэлкі кірунку, адзнакі старту / фінішу
|
||||
\n • Новае меню \"Выгляд\" для слядоў. Можна абраць колер, таўшчыню, уключыць стрэлкі кірунку, адзнакі старту і фінішу
|
||||
\n
|
||||
\n • Палепшана бачнасць роварных вузлоў.
|
||||
\n
|
||||
|
@ -3892,12 +3890,199 @@
|
|||
<string name="use_native_pt">Натыўны грамадскі транспарт (у распрацоўцы)</string>
|
||||
<string name="perform_oauth_authorization">Увайсці праз OAuth</string>
|
||||
<string name="use_two_phase_routing">Выкарыстоўваць 2-фазны алгарытм маршрутызацыі A *</string>
|
||||
<string name="use_native_pt_desc">Перайсці на разлік маршруту грамадскага транспарту на Java (бяспечны)</string>
|
||||
<string name="use_native_pt_desc">Перайсці на разлік маршруту грамадскага транспарту з дапамогай Java (бяспечны)</string>
|
||||
<string name="file_already_imported">Файл ужо імпартаваны ў OsmAnd</string>
|
||||
<string name="start_finish_icons">Значкі старту і фінішу</string>
|
||||
<string name="perform_oauth_authorization_description">Увайдзіце праз OAuth, каб выкарыстоўваць функцыі osmedit</string>
|
||||
<string name="perform_oauth_authorization_description">Выканайце ўваход з дапамогай OAuth, каб выкарыстоўваць функцыі osmedit</string>
|
||||
<string name="clear_osm_token">Ачысціць токен OpenStreetMap OAuth</string>
|
||||
<string name="osm_edit_logout_success">Выхад выкананы</string>
|
||||
<string name="osm_edit_logout_success">Вы выйшлі</string>
|
||||
<string name="use_live_public_transport">Даныя OsmAnd Live</string>
|
||||
<string name="use_live_routing">Даныя OsmAnd Live</string>
|
||||
<string name="voice_prompts_timetable">Час галасавых падказак</string>
|
||||
<string name="lang_de_casual">Нямецкая (неафіцыйная)</string>
|
||||
<string name="navigate_point_mgrs">MGRS</string>
|
||||
<string name="snowmobile_render_descr">Для язды на снегаходах па вызначаных дарогах і трасах.</string>
|
||||
<string name="navigate_point_format_mgrs">MGRS</string>
|
||||
<string name="mgrs_format_descr">OsmAnd выкарыстоўвае MGRS, які падобны да фармату UTM NATO.</string>
|
||||
<string name="shared_string_graph">Графік</string>
|
||||
<string name="message_need_calculate_route_before_show_graph">Даныя %1$s даступныя толькі для дарог, разлічылі маршрут, выкарыстоўваючы \"Маршрут паміж кропкамі\", каб убачыць графікі.</string>
|
||||
<string name="message_graph_will_be_available_after_recalculation">Калі ласка пачакайце.
|
||||
\nГрафік будзе даступны пасля пераразліку маршруту.</string>
|
||||
<string name="shared_string_local_maps">Лакальныя мапы</string>
|
||||
<string name="ltr_or_rtl_combine_via_dash">%1$s — %2$s</string>
|
||||
<string name="app_mode_gap">Разрыў</string>
|
||||
<string name="icon_group_amenity">Выгады</string>
|
||||
<string name="icon_group_special">Спецыяльныя</string>
|
||||
<string name="icon_group_transport">Транспарт</string>
|
||||
<string name="icon_group_service">Паслугі</string>
|
||||
<string name="icon_group_symbols">Сімвалы</string>
|
||||
<string name="icon_group_sport">Спорт</string>
|
||||
<string name="icon_group_emergency">Экстраныя службы</string>
|
||||
<string name="icon_group_travel">Вандроўка</string>
|
||||
<string name="message_you_need_add_two_points_to_show_graphs">Дадайце прынамсі два пункты</string>
|
||||
<string name="login_open_street_map">Увайсці ў OpenStreetMap</string>
|
||||
<string name="login_open_street_map_org">Увайсці ў OpenStreetMap.org</string>
|
||||
<string name="sign_in_with_open_street_map">Увайсці з дапамогай OpenStreetMap</string>
|
||||
<string name="open_street_map_login_mode">Вам неабходна ўвайсці ў сістэму, каб загрузіць новыя або адрэдагаваныя змены.
|
||||
\n
|
||||
\nВы можаце ўвайсці, выкарыстоўваючы бяспечны метад OAuth, або з дапамогай сваіх імя карыстальніка і пароля.</string>
|
||||
<string name="use_login_password">Выкарыстоўваць імя карыстальніка і пароль</string>
|
||||
<string name="login_account">Уліковы запіс</string>
|
||||
<string name="user_login">Аўтарызавацца</string>
|
||||
<string name="manage_subscription">Кіраванне падпіскай</string>
|
||||
<string name="subscription_payment_issue_title">Націсніце кнопку, каб перайсці ў налады падпіскі Google Play і выправіць спосаб аплаты.</string>
|
||||
<string name="subscription_expired_title">Мінуў тэрмін дзеяння падпіскі OsmAnd Live</string>
|
||||
<string name="subscription_paused_title">Падпіска OsmAnd Live была прыпынена</string>
|
||||
<string name="subscription_on_hold_title">Падпіска OsmAnd Live прыпынена</string>
|
||||
<string name="markers_history">Гісторыя маркераў</string>
|
||||
<string name="send_files_to_openstreetmap">Адправіць файл GPX на OpenStreetMap</string>
|
||||
<string name="enter_text_separated">Увадзіце тэгі праз коску.</string>
|
||||
<string name="gpx_upload_public_visibility_descr">\"Агульнадаступны\" азначае, што трасіроўка публічна адлюстроўваецца ў вашых GPS-трасіроўках і ў агульнадаступных спісах GPS-трасіровак, а таксама ў агульнадаступным спісе трасіровак з пазнакамі часу ў неапрацаваным выглядзе. Даныя, прадстаўленыя праз API, не спасылаюцца на вашу старонку трасіроўкі. Меткі часу трасіроўкі недаступныя праз агульнадаступны API GPS і не размяшчаюцца ў храналагічным парадку.</string>
|
||||
<string name="gpx_upload_private_visibility_descr">\"Прыватны\" азначае, што след не з\'явіцца ў любым агульнадаступным спісе, але кантрольныя пункты з яго даступныя ў адвольным парадку праз агульнадаступны GPS API без пазнак часу.</string>
|
||||
<string name="gpx_upload_identifiable_visibility_descr">\"Ідэнтыфікаваны\" азначае, што трасіроўка будзе публічна адлюстроўвацца ў вашай GPS-трасіроўкі і ў агульнадаступных спісах GPS-трасіровак, гэта значыць, што іншыя карыстальнікі змогуць загрузіць неапрацаваны след і звязаць яго з вашым імем карыстальніка. Агульнадаступныя даныя трасіроўкі з GPS API, якія абслугоўваюцца з дапамогай API пунктаў адсочвання, спасылаюцца на пачатковую старонку трасіроўкі.</string>
|
||||
<string name="gpx_upload_trackable_visibility_descr">\"Адсочванне\" азначае, што трэк не з\'явіцца ў любым агульнадаступным спісе, але апрацоўка маршрутных пунктаў з яго (якія не могуць быць непасрэдна звязаны з вамі) ажыццяўляецца з выкарыстаннем загрузак з агульнадаступнага API GPS.</string>
|
||||
<string name="osm_edit_close_note">Закрыць нататку OSM</string>
|
||||
<string name="osm_edit_comment_note">Каментаваць нататку OSM</string>
|
||||
<string name="osm_login_descr">Вы можаце ўвайсці, выкарыстоўваючы бяспечны метад OAuth або з дапамогай сваіх імя карыстальніка і пароля.</string>
|
||||
<string name="shared_string_add_photo">Дадаць фотаздымак</string>
|
||||
<string name="register_on_openplacereviews">Зарэгістравацца на
|
||||
\nOpenPlaceReviews.org</string>
|
||||
<string name="register_on_openplacereviews_desc">Фотаздымкі прадастаўлены праектам з адкрытымі данымі OpenPlaceReviews.org. Каб загрузіць фатаграфіі, зарэгіструйцеся на іх сайце.</string>
|
||||
<string name="register_opr_create_new_account">Стварыць уліковы запіс</string>
|
||||
<string name="register_opr_have_account">У мяне ўжо ёсць уліковы запіс</string>
|
||||
<string name="shared_string_search_history">Гісторыя пошуку</string>
|
||||
<string name="app_mode_kayak">Каяк</string>
|
||||
<string name="app_mode_motorboat">Маторная лодка</string>
|
||||
<string name="cannot_upload_image">Немагчыма загрузіць выяву, паўтарыце спробу пазней</string>
|
||||
<string name="select_picture">Выберыце выявы</string>
|
||||
<string name="shared_string_resources">Рэсурсы</string>
|
||||
<string name="approximate_file_size">Прыблізны памер файла</string>
|
||||
<string name="select_data_to_export">Выберыце даныя, якія вы хочаце экспартаваць у файл.</string>
|
||||
<string name="file_size_needed_for_import">Неабходна для імпартавання</string>
|
||||
<string name="export_not_enough_space_descr">На вашай прыладзе свабодна толькі %1$s. Вызваліце месца альбо зніміце пазнаку з некаторых элементаў для экспартавання.</string>
|
||||
<string name="export_not_enough_space">Недастаткова месца</string>
|
||||
<string name="select_groups_for_import">Выберыце групы, якія трэба імпартаваць.</string>
|
||||
<string name="select_items_for_import">Выберыце элементы, якія трэба імпартаваць.</string>
|
||||
<string name="add_to_mapillary">Дадаць да Mapillary</string>
|
||||
<string name="add_to_opr">Дадаць да OpenPlaceReviews</string>
|
||||
<string name="use_dev_url_descr">Пераключыцца на выкарыстанне dev.openstreetmap.org замест openstreetmap.org для тэсціравання адпраўкі нататак OSM / POI / GPX.</string>
|
||||
<string name="use_dev_url">Выкарыстоўваць dev.openstreetmap.org</string>
|
||||
<string name="add_photos_descr">OsmAnd паказвае фотаздымкі з некалькіх крыніц;
|
||||
\nOpenPlaceReviews - фотаздымкі POI;
|
||||
\nMapillary - выявы вуліц;
|
||||
\nWeb / Wikimedia - фотаздымкі POI паводле дадзеных з OpenStreetMap.</string>
|
||||
<string name="ltr_or_rtl_combine_via_star">%1$s * %2$s</string>
|
||||
<string name="elevation_data">Вы можаце выкарыстоўваць даныя пра вышыні, каб улічыць ўздымы/спускі падчас вашай паездкі</string>
|
||||
<string name="app_mode_light_aircraft">Лёгкі самалёт</string>
|
||||
<string name="plan_route_join_segments">Аб\'яднаць сегменты</string>
|
||||
<string name="plan_route_split_before">Падзяліць да</string>
|
||||
<string name="plan_route_split_after">Падзяліць пасля</string>
|
||||
<string name="plan_route_add_new_segment">Дадаць новы сегмент</string>
|
||||
<string name="profile_type_user_string">Профіль карыстальніка</string>
|
||||
<string name="release_3_9">"• Дададзена магчымасць экспарту і імпарту ўсіх даных, уключаючы налады, рэсурсы, мае месцы.
|
||||
\n
|
||||
\n • Планаванне маршруту: графікі для сегментаў трэка з маршрутам, дададзена магчымасць ствараць і рэдагаваць некалькі сегментаў трэка.
|
||||
\n
|
||||
\n • Дададзены OAuth метад аўтэнтыфікацыі для OpenStreetMap, палепшаны інтэрфейс дыялогаў OSM.
|
||||
\n
|
||||
\n • Падтрымка карыстальніцкіх колераў для абранага і маршрутных пунктаў трэка.
|
||||
\n
|
||||
\n"</string>
|
||||
<string name="reverse_all_points">Вярнуць назад усе пункты</string>
|
||||
<string name="profile_by_default_description">Выберыце профіль, які будзе выкарыстоўвацца падчас запуску прыкладання.</string>
|
||||
<string name="shared_string_last_used">Апошні раз выкарыстоўвалася</string>
|
||||
<string name="routing_attr_prefer_hiking_routes_description">Аддаваць перавагу пешаходным маршрутам</string>
|
||||
<string name="routing_attr_prefer_hiking_routes_name">Аддаваць перавагу пешаходным маршрутам</string>
|
||||
<string name="routing_attr_allow_streams_description">Дазвольце ручаі і меліярацыйныя каналы</string>
|
||||
<string name="routing_attr_allow_streams_name">Дазвольце ручаі і меліярацыйныя каналы</string>
|
||||
<string name="routing_attr_allow_intermittent_description">Дазволіць перарывістыя водныя маршруты</string>
|
||||
<string name="routing_attr_allow_intermittent_name">Дазволіць перарывістыя водныя маршруты</string>
|
||||
<string name="add_online_routing_engine">Дадаць анлайн-маршрутызатар</string>
|
||||
<string name="edit_online_routing_engine">Рэдагаваць анлайн-маршрутызатар</string>
|
||||
<string name="shared_string_subtype">Падтып</string>
|
||||
<string name="shared_string_vehicle">Транспартны сродак</string>
|
||||
<string name="shared_string_api_key">Ключ API</string>
|
||||
<string name="shared_string_server_url">URL-адрас сервера</string>
|
||||
<string name="shared_string_enter_param">Увядзіце параметр</string>
|
||||
<string name="keep_it_empty_if_not">Пакінуць пустым, калі не</string>
|
||||
<string name="online_routing_example_hint">URL-адрас з усімі параметрамі будзе выглядаць так:</string>
|
||||
<string name="test_route_calculation">Тэст разліку маршруту</string>
|
||||
<string name="routing_engine_vehicle_type_driving">Ваджэнне</string>
|
||||
<string name="routing_engine_vehicle_type_foot">Пешшу</string>
|
||||
<string name="routing_engine_vehicle_type_bike">Ровар</string>
|
||||
<string name="routing_engine_vehicle_type_car">Аўтамабіль</string>
|
||||
<string name="copy_address">Капіраваць адрас</string>
|
||||
<string name="online_routing_engine">Анлайн-маршрутызатар</string>
|
||||
<string name="online_routing_engines">Анлайн-маршрутызатары</string>
|
||||
<string name="shared_string_folders">Папкі</string>
|
||||
<string name="select_folder">Выберыце папку</string>
|
||||
<string name="select_folder_descr">Выберыце папку або стварыце новую</string>
|
||||
<string name="shared_string_empty">Пуста</string>
|
||||
<string name="analyze_by_intervals">Аналіз паводле інтэрвалаў</string>
|
||||
<string name="upload_to_openstreetmap">Выгрузіць на OpenStreetMap</string>
|
||||
<string name="edit_track">Змяніць трэк</string>
|
||||
<string name="rename_track">Перайменаваць трэк</string>
|
||||
<string name="change_folder">Змяніць папку</string>
|
||||
<string name="shared_string_sec">сек.</string>
|
||||
<string name="announcement_time_passing">Пры праходжанні</string>
|
||||
<string name="announcement_time_approach">Набліжэнне</string>
|
||||
<string name="announcement_time_prepare_long">Заўчасная падрыхтоўка</string>
|
||||
<string name="announcement_time_prepare">Падрыхтавацца</string>
|
||||
<string name="announcement_time_off_route">Па-за маршрутам</string>
|
||||
<string name="announcement_time_arrive">Прыбыццё ў пункт прызначэння</string>
|
||||
<string name="shared_string_turn">Паварот</string>
|
||||
<string name="announcement_time_intervals">Інтэрвалы часу і адлегласці</string>
|
||||
<string name="profile_type_osmand_string">Профіль OsmAnd</string>
|
||||
<string name="announcement_time_title">Час абвяшчэння</string>
|
||||
<string name="announcement_time_descr">Час розных галасавых падказак залежыць ад тыпу запыту, бягучай хуткасці навігацыі і хуткасці навігацыі па змаўчанні.</string>
|
||||
<string name="start_recording">Пачаць запіс</string>
|
||||
<string name="show_track_on_map">Паказаць трэк на мапе</string>
|
||||
<string name="routing_engine_vehicle_type_wheelchair">Інвалідны вазок</string>
|
||||
<string name="routing_engine_vehicle_type_hiking">Пешы турызм</string>
|
||||
<string name="routing_engine_vehicle_type_walking">Хадзьба</string>
|
||||
<string name="routing_engine_vehicle_type_cycling_electric">Электраровар</string>
|
||||
<string name="routing_engine_vehicle_type_cycling_mountain">Горны ровар</string>
|
||||
<string name="routing_engine_vehicle_type_cycling_road">Дарожны ровар</string>
|
||||
<string name="routing_engine_vehicle_type_cycling_regular">Звычайны ровар</string>
|
||||
<string name="routing_engine_vehicle_type_hgv">Грузавік</string>
|
||||
<string name="routing_engine_vehicle_type_small_truck">Малы грузавік</string>
|
||||
<string name="routing_engine_vehicle_type_truck">Грузавік</string>
|
||||
<string name="routing_engine_vehicle_type_scooter">Скутэр</string>
|
||||
<string name="routing_engine_vehicle_type_racingbike">Гоначны ровар</string>
|
||||
<string name="routing_engine_vehicle_type_mtb">Горны ровар</string>
|
||||
<string name="message_server_error">Памылка сервера: %1$s</string>
|
||||
<string name="message_name_is_already_exists">Назва ўжо існуе</string>
|
||||
<string name="delete_online_routing_engine">Выдаліць анлайн-маршрутызатар\?</string>
|
||||
<string name="context_menu_read_full">Чытаць цалкам</string>
|
||||
<string name="context_menu_edit_descr">Змяніць апісанне</string>
|
||||
<string name="delete_waypoints">Выдаліць маршрутныя пункты</string>
|
||||
<string name="copy_to_map_markers">Капіраваць да пазнак мапы</string>
|
||||
<string name="copy_to_map_favorites">Капіраваць да абранага</string>
|
||||
<string name="upload_photo">Выгрузка</string>
|
||||
<string name="upload_photo_completed">Выгрузка завершана</string>
|
||||
<string name="uploading_count">Выгрузка %1$d з %2$d</string>
|
||||
<string name="uploaded_count">Выгружана %1$d з %2$d</string>
|
||||
<string name="toast_select_edits_for_upload">Выберыце змены для выгрузкі</string>
|
||||
<string name="hillshade_slope_contour_lines">Рэльеф мясцовасці / Схілы / Гарызанталі</string>
|
||||
<string name="open_place_reviews_plugin_description">OpenPlaceReviews — гэта грамадскі праект пра месцы агульнага карыстання, такія як, рэстараны, гатэлі, музеі, пункты шляху. Ён збірае ўсе агульнадаступныя даныя пра іх, такія як, выявы, водгукі, спасылкі на іншыя сістэмы, спасылкі OpenStreetMap, Вікіпедыя.
|
||||
\n
|
||||
\nУсе даныя OpenPlaceReview з\'яўляюцца адкрытымі і даступны тут: http://openplacereviews.org/data.
|
||||
\n
|
||||
\nВы можаце прачытаць больш па адрасу: http://openplacereviews.org</string>
|
||||
<string name="open_place_reviews">OpenPlaceReviews</string>
|
||||
<string name="opr_use_dev_url">Выкарыстаць test.openplacereviews.org</string>
|
||||
<string name="login_open_place_reviews">Увайсці ў OpenPlaceReviews</string>
|
||||
<string name="activity_type_water_name">Вада</string>
|
||||
<string name="activity_type_winter_name">Зіма</string>
|
||||
<string name="activity_type_snowmobile_name">Снегаход</string>
|
||||
<string name="activity_type_riding_name">Язда</string>
|
||||
<string name="activity_type_racing_name">Гонка</string>
|
||||
<string name="activity_type_mountainbike_name">Горны ровар</string>
|
||||
<string name="activity_type_cycling_name">Язда на ровары</string>
|
||||
<string name="activity_type_hiking_name">Пешы турызм</string>
|
||||
<string name="activity_type_running_name">Бег</string>
|
||||
<string name="activity_type_walking_name">Пешаход</string>
|
||||
<string name="activity_type_offroad_name">Пазадарожнік</string>
|
||||
<string name="activity_type_motorbike_name">Матацыкл</string>
|
||||
<string name="activity_type_car_name">Аўтамабіль</string>
|
||||
</resources>
|
|
@ -208,7 +208,6 @@
|
|||
<string name="avoid_motorway">Без магистрали</string>
|
||||
<string name="auto_zoom_map_descr">Авто-мащабиране съобразно вашата скорост (само за синхронизирани карти)</string>
|
||||
<string name="auto_zoom_map">Авто-мащабиране</string>
|
||||
<string name="snap_to_road_descr">Позицията да се придържа към пътя по време на пътуване</string>
|
||||
<string name="snap_to_road">Придържай мястото към пътя</string>
|
||||
<string name="osmand_play_title_30_chars">OsmAnd за карти и навигация</string>
|
||||
<string name="osmand_short_description_80_chars">Мобилни карти и навигация от OSM</string>
|
||||
|
@ -1925,7 +1924,6 @@
|
|||
<string name="update_all_maps_now">Обновяване на всички карти сега\?</string>
|
||||
<string name="clear_tile_data">Изчистване на всички плочки</string>
|
||||
<string name="routing_attr_short_way_name">Икономичен маршрут</string>
|
||||
<string name="routing_attr_short_way_description">Използване на икономичен маршрут (обичайно по-кратък).</string>
|
||||
<string name="replace_favorite_confirmation">Наистина ли искате да заместите %1$s?</string>
|
||||
<string name="rendering_attr_hideOverground_name">Надземни обекти</string>
|
||||
<string name="osm_live_payment_desc">Абонаментна такса се начислява всеки месец. Можете да я отмените от Google Play по всяко време.</string>
|
||||
|
|
|
@ -641,7 +641,6 @@
|
|||
<string name="avoid_motorway">Sense autopistes</string>
|
||||
<string name="auto_zoom_map_descr">Nivell de zoom en funció de la velocitat (mentre el mapa estigui sincronitzat amb la posició actual).</string>
|
||||
<string name="auto_zoom_map">Zoom automàtic del mapa</string>
|
||||
<string name="snap_to_road_descr">Ajusta la posició a les carreteres durant la navegació.</string>
|
||||
<string name="snap_to_road">Desplaça a la carretera</string>
|
||||
<string name="asap">MCP</string>
|
||||
<string name="prefs_plugins_descr">Els connectors activen els paràmetres del mode expert i de funcionalitats addicionals.</string>
|
||||
|
@ -1987,7 +1986,6 @@
|
|||
<string name="shared_string_change">Modifica</string>
|
||||
<string name="get_started">Comença</string>
|
||||
<string name="routing_attr_short_way_name">Ruta amb menys consum</string>
|
||||
<string name="routing_attr_short_way_description">Utilitza la ruta de menys consum (normalment la més curta).</string>
|
||||
<string name="replace_favorite_confirmation">Confirmeu que voleu substituir el Preferit %1$s?</string>
|
||||
<string name="update_all_maps_now">Voleu actualitzar tots els mapes ara mateix?</string>
|
||||
<string name="clear_tile_data">Esborra totes les tessel·les</string>
|
||||
|
@ -2164,7 +2162,7 @@
|
|||
<string name="rendering_attr_depthContours_description">Mostra isòbates i fondàries puntuals.</string>
|
||||
<string name="rendering_attr_depthContours_name">Isòbates</string>
|
||||
<string name="routing_attr_height_obstacles_name">Utilitza les cotes d\'elevació</string>
|
||||
<string name="routing_attr_height_obstacles_description">Revisa l\'elevació del terreny (mitjançant dades SRTM, ASTER i EU-DEM).</string>
|
||||
|
||||
<string name="route_altitude">Alçat de la ruta</string>
|
||||
<string name="altitude_descent">Descens</string>
|
||||
<string name="altitude_ascent">Ascens</string>
|
||||
|
@ -3813,7 +3811,6 @@
|
|||
\nWeb / Wikimedia: fotos dels PDIs d\'OpenStreetMap.</string>
|
||||
<string name="ltr_or_rtl_combine_via_star">%1$s * %2$s</string>
|
||||
<string name="icon_group_amenity">Equipament</string>
|
||||
<string name="elevation_data">Podeu utilitzar les dades d’elevació per acumular l\'ascens/descens de la vostra ruta</string>
|
||||
<string name="app_mode_light_aircraft">Avioneta</string>
|
||||
<string name="gpx_upload_identifiable_visibility_descr">\"Identificable\" vol dir que la traça es mostrarà públicament a les vostres traces GPS i als llistats públics de traces GPS, és a dir, els altres usuaris la podran baixar en brut i associada al vostre usuari. Les dades cronològiques de pas per les fites de l’API GPS que es publiquen mitjançant l’API de fites faran referència a la pàgina de la vostra traça original.</string>
|
||||
<string name="gpx_upload_private_visibility_descr">\"Privada\" vol dir que la traça no es mostra a cap llistat públic, però les fites que conté estan disponibles a través de l\'API pública GPS, desordenades i sense enregistraments temporals.</string>
|
||||
|
|
|
@ -3561,7 +3561,7 @@
|
|||
<string name="poi_charcoal_pile">Milíř</string>
|
||||
<string name="poi_historic_tank">Historický tank</string>
|
||||
<string name="poi_hookah_lounge">Salonek s vodní dýmkou</string>
|
||||
<string name="poi_source_biomass">Zdroj energie: biomasa</string>
|
||||
<string name="poi_generator_source_biomass">Zdroj energie: biomasa</string>
|
||||
<string name="poi_glacier_type_hanging">Převislý</string>
|
||||
<string name="poi_glacier_type_shelf">Šelfový</string>
|
||||
<string name="poi_substation_compensation">Kompenzační</string>
|
||||
|
@ -3601,7 +3601,7 @@
|
|||
<string name="poi_vehicle_military">Přístup vozidel: vojenské</string>
|
||||
<string name="poi_vehicle_delivery">Přístup vozidel: zásobování</string>
|
||||
<string name="poi_vehicle_forestry">Přístup vozidel: lesnictví</string>
|
||||
<string name="poi_motorcar_yes">Přístup aut:</string>
|
||||
<string name="poi_motorcar_yes">Přístup aut: ano</string>
|
||||
<string name="poi_motorcar_private">Přístup aut: soukromý</string>
|
||||
<string name="poi_motorcar_no">Přístup aut: ne</string>
|
||||
<string name="poi_motorcar_destination">Přístup aut: cíl</string>
|
||||
|
@ -3835,4 +3835,50 @@
|
|||
<string name="poi_diplomatic_services_non_immigrant_visas_filter">Neimigrační víza</string>
|
||||
<string name="poi_consulate_filter">Konzulát</string>
|
||||
<string name="poi_embassy_filter">Ambasáda</string>
|
||||
<string name="poi_mobile_money_agent">Mobilní směnárna</string>
|
||||
<string name="poi_diplomatic_liaison">Prostředník</string>
|
||||
<string name="poi_liaison_filter">Prostředník</string>
|
||||
<string name="poi_wildlife_crossing_bat_tunnel">Netopýří tunel</string>
|
||||
<string name="poi_wildlife_crossing_bat_bridge">Netopýří most</string>
|
||||
<string name="poi_wildlife_crossing">Ekodukt</string>
|
||||
<string name="poi_swimming_area">Plovárna</string>
|
||||
<string name="poi_lavoir">Veřejná prádelna</string>
|
||||
<string name="poi_waste_transfer_station">Překladiště odpadů</string>
|
||||
<string name="poi_weightbridge">Mostní váha</string>
|
||||
<string name="poi_ranger_station">Stanice rangera</string>
|
||||
<string name="poi_water_source_lake">Jezero</string>
|
||||
<string name="poi_water_source_river">Řeka</string>
|
||||
<string name="poi_water_source_well">Studna</string>
|
||||
<string name="poi_water_source_powered_pump">Poháněné čerpadlo</string>
|
||||
<string name="poi_water_source_water_tank">Vodní nádrž</string>
|
||||
<string name="poi_water_source_tap">Kohoutek</string>
|
||||
<string name="poi_water_source_water_works">Zásobování vodou</string>
|
||||
<string name="poi_water_source_tube_well">Trubková studna</string>
|
||||
<string name="poi_vaccination_covid19">Očkování: COVID19</string>
|
||||
<string name="poi_health_specialty_vaccination_yes">Očkování</string>
|
||||
<string name="poi_lifeguard_base">Záchranářská základna</string>
|
||||
<string name="poi_siren">Siréna</string>
|
||||
<string name="poi_nurse">Zdravotní sestra</string>
|
||||
<string name="poi_diplomatic_services_citizen_services_no">Ne</string>
|
||||
<string name="poi_diplomatic_services_citizen_services_yes">Ano</string>
|
||||
<string name="poi_diplomatic_services_immigrant_visas_no">Ne</string>
|
||||
<string name="poi_diplomatic_services_immigrant_visas_yes">Ano</string>
|
||||
<string name="poi_diplomatic_services_non_immigrant_visas_no">Ne</string>
|
||||
<string name="poi_diplomatic_services_non_immigrant_visas_yes">Ano</string>
|
||||
<string name="poi_liaison_subnational">Podnárodní</string>
|
||||
<string name="poi_liaison_representative_office">Reprezentační kancelář</string>
|
||||
<string name="poi_liaison_liaison_office">Kancelář</string>
|
||||
<string name="poi_consulate_honorary_consul">Honorární konzul</string>
|
||||
<string name="poi_consulate_consulate_general">Generální konzulát</string>
|
||||
<string name="poi_consulate_consular_office">Kancelář konzula</string>
|
||||
<string name="poi_consulate_consular_agency">Konzulární zastupitelstvo</string>
|
||||
<string name="poi_consulate_yes">Vedená konzulem</string>
|
||||
<string name="poi_embassy_residence">Rezidence</string>
|
||||
<string name="poi_embassy_nunciature">Nunciatura</string>
|
||||
<string name="poi_embassy_mission">Mise</string>
|
||||
<string name="poi_embassy_interests_section">Zájmová sekce</string>
|
||||
<string name="poi_embassy_high_commission">Vysoký komisař</string>
|
||||
<string name="poi_embassy_delegation">Delegace</string>
|
||||
<string name="poi_embassy_branch_embassy">Pobočka</string>
|
||||
<string name="poi_embassy_yes">Vedená velvyslancem</string>
|
||||
</resources>
|
|
@ -781,7 +781,6 @@
|
|||
<string name="day_night_info">Denní/noční info</string>
|
||||
<string name="map_widget_renderer">Styl mapy</string>
|
||||
<string name="avoid_motorway">Žádné dálnice</string>
|
||||
<string name="snap_to_road_descr">Zachytí kurzor na nejbližší silnici/cestu během navigace.</string>
|
||||
<string name="map_widget_vector_attributes">Vlastnosti vykreslování</string>
|
||||
<string name="poi_filter_parking">Parkoviště</string>
|
||||
<string name="poi_filter_public_transport">Veřejná doprava</string>
|
||||
|
@ -2004,7 +2003,6 @@
|
|||
<string name="update_all_maps_now">Aktualizovat všechny mapy ihned?</string>
|
||||
<string name="clear_tile_data">Vymazat všechny dlaždice</string>
|
||||
<string name="routing_attr_short_way_name">Ekonomická trasa</string>
|
||||
<string name="routing_attr_short_way_description">Použít ekonomickou trasu (obvykle kratší).</string>
|
||||
<string name="replace_favorite_confirmation">Opravdu chcete nahradit Oblíbené místo „%1$s“\?</string>
|
||||
<string name="rendering_attr_hideOverground_name">Nadzemní objekty</string>
|
||||
<string name="shared_string_change">Změnit</string>
|
||||
|
@ -2176,7 +2174,7 @@
|
|||
<string name="shared_string_time">Čas</string>
|
||||
<string name="total_distance">Celková vzdálenost</string>
|
||||
<string name="routing_attr_height_obstacles_name">Použít údaje o nadmořské výšce</string>
|
||||
<string name="routing_attr_height_obstacles_description">Zohlednit převýšení terénu (data od SRTM, ASTER a EU-DEM).</string>
|
||||
|
||||
<string name="routing_attr_driving_style_name">Styl jízdy</string>
|
||||
<string name="select_gpx_folder">Vyberte složku pro soubor GPX</string>
|
||||
<string name="file_can_not_be_moved">Soubor se nepodařilo přesunout.</string>
|
||||
|
@ -2314,7 +2312,7 @@
|
|||
<string name="average">Průměr</string>
|
||||
<string name="of">%1$d z %2$d</string>
|
||||
<string name="ascent_descent">Stoupání/Klesání</string>
|
||||
<string name="moving_time">Čas pohybu</string>
|
||||
<string name="moving_time">Doba pohybu</string>
|
||||
<string name="max_min">Max/Min</string>
|
||||
<string name="min_max">Min/Max</string>
|
||||
<string name="quick_action_resume_pause_navigation">Pozastavit/pokračovat v navigaci</string>
|
||||
|
@ -3425,7 +3423,7 @@
|
|||
<string name="gpx_direction_arrows">Směrové šipky</string>
|
||||
<string name="plan_route_last_edited">Naposledy upraveno</string>
|
||||
<string name="plan_route_import_track">Importovat trasu</string>
|
||||
<string name="plan_route_open_existing_track">Otevřít existující trasu</string>
|
||||
<string name="plan_route_open_existing_track">Otevřít existující stopu</string>
|
||||
<string name="plan_route_create_new_route">Vytvořit novou trasu</string>
|
||||
<string name="plan_route_select_track_file_for_open">Vyberte stopu k otevření.</string>
|
||||
<string name="shared_string_done">Hotovo</string>
|
||||
|
@ -3442,10 +3440,10 @@
|
|||
<string name="quick_action_add_gpx">Přidat mezicíl</string>
|
||||
<string name="map_widget_monitoring">Záznam trasy</string>
|
||||
<string name="marker_save_as_track">Uložit jako soubor trasy</string>
|
||||
<string name="follow_track">Sledovat trasu</string>
|
||||
<string name="follow_track">Sledovat stopu</string>
|
||||
<string name="follow_track_descr">Zvolte soubor trasy, kterou chcete sledovat</string>
|
||||
<string name="import_track_descr">Zvolte soubor stopy, kterou chcete sledovat, nebo jej importujte ze svého zařízení.</string>
|
||||
<string name="select_another_track">Zvolit jinou trasu</string>
|
||||
<string name="select_another_track">Zvolit jinou stopu</string>
|
||||
<string name="navigate_to_track_descr">Navigovat z mé polohy k trase</string>
|
||||
<string name="pass_whole_track_descr">Bod trasy pro navigování</string>
|
||||
<string name="start_of_the_track">Začátek trasy</string>
|
||||
|
@ -3490,7 +3488,7 @@
|
|||
<string name="save_track_to_gpx_globally">Ukládat trasu do GPX souboru</string>
|
||||
<string name="shared_string_gpx_route">Trasa ze stopy</string>
|
||||
<string name="empty_state_my_tracks">Přidat soubory stop</string>
|
||||
<string name="simplified_track">Zjednodušená trasa</string>
|
||||
<string name="simplified_track">Zjednodušená stopa</string>
|
||||
<string name="simplified_track_description">Uloží se pouze linie trasy, mezicíle budou odstraněny.</string>
|
||||
<string name="shared_string_file_name">Název souboru</string>
|
||||
<string name="number_of_gpx_files_selected_pattern">%s vybraných souborů stop</string>
|
||||
|
@ -3505,7 +3503,7 @@
|
|||
<string name="only_selected_segment_recalc">Pouze vybraný úsek bude přepočítán pomocí vybraného profilu.</string>
|
||||
<string name="all_next_segments_will_be_recalc">Všechny následující úseky budou přepočítány pomocí vybraného profilu.</string>
|
||||
<string name="all_previous_segments_will_be_recalc">Všechny předcházející úseky budou přepočítány pomocí vybraného profilu.</string>
|
||||
<string name="open_saved_track">Otevřít uloženou trasu</string>
|
||||
<string name="open_saved_track">Otevřít uloženou stopu</string>
|
||||
<string name="shared_string_is_saved">je uloženo</string>
|
||||
<string name="one_point_error">Přidejte prosím alespoň dva body.</string>
|
||||
<string name="shared_string_redo">Znovu</string>
|
||||
|
@ -3919,7 +3917,6 @@
|
|||
<string name="use_dev_url">Použít dev.openstreetmap.org</string>
|
||||
<string name="ltr_or_rtl_combine_via_star">%1$s * %2$s</string>
|
||||
<string name="lang_de_casual">Němčina (hovorová)</string>
|
||||
<string name="elevation_data">Můžete použít výšková data pro započítání výstupu/sestupu na trase</string>
|
||||
<string name="app_mode_light_aircraft">Lehké letadlo</string>
|
||||
<string name="plan_route_join_segments">Spojit úseky</string>
|
||||
<string name="plan_route_split_before">Rozdělit před</string>
|
||||
|
@ -3967,7 +3964,7 @@
|
|||
<string name="select_folder">Zvolte složku</string>
|
||||
<string name="select_folder_descr">Zvolte složku nebo vytvořte novou</string>
|
||||
<string name="shared_string_empty">Prázdné</string>
|
||||
<string name="analyze_by_intervals">Analyzovat podle intervalů (rozdělit interval)</string>
|
||||
<string name="analyze_by_intervals">Analyzovat rozdělené intervaly</string>
|
||||
<string name="upload_to_openstreetmap">Nahrát do OpenStreetMap</string>
|
||||
<string name="edit_track">Editovat stopu</string>
|
||||
<string name="rename_track">Přejmenovat stopu</string>
|
||||
|
@ -4000,4 +3997,24 @@
|
|||
<string name="routing_engine_vehicle_type_mtb">Horské kolo</string>
|
||||
<string name="message_server_error">Chyba serveru: %1$s</string>
|
||||
<string name="message_name_is_already_exists">Název již existuje</string>
|
||||
<string name="delete_online_routing_engine">Odstranit tuto online navigační službu\?</string>
|
||||
<string name="context_menu_read_full">Přečíst celé</string>
|
||||
<string name="context_menu_edit_descr">Upravit popis</string>
|
||||
<string name="delete_waypoints">Odstranit body trasy</string>
|
||||
<string name="copy_to_map_markers">Kopírovat do mapových značek</string>
|
||||
<string name="copy_to_map_favorites">Kopírovat do oblíbených</string>
|
||||
<string name="upload_photo">Nahrávání</string>
|
||||
<string name="upload_photo_completed">Nahrávání dokončeno</string>
|
||||
<string name="uploading_count">Nahrávám %1$d z %2$d</string>
|
||||
<string name="uploaded_count">Nahráno %1$d z %2$d</string>
|
||||
<string name="toast_select_edits_for_upload">Vyberte úpravy pro nahrání</string>
|
||||
<string name="hillshade_slope_contour_lines">Stínované svahy / Sklon svahů / Vrstevnice</string>
|
||||
<string name="open_place_reviews_plugin_description">OpenPlaceReviews je komunitní projekt o veřejných místech, jako jsou restaurace, hotely, muzea a další. Shromažďuje o nich veškeré veřejné informace, např. fotografie, hodnocení, odkazy do dalších systémů jako OpenStreetMap či Wikipedie.
|
||||
\n
|
||||
\nVšechna data OpenPlaceReviews jsou otevřená a přístupná každému: http://openplacereviews.org/data.
|
||||
\n
|
||||
\nPřečtěte si více na http://openplacereviews.org</string>
|
||||
<string name="open_place_reviews">OpenPlaceReviews</string>
|
||||
<string name="opr_use_dev_url">Použít test.openplacereviews.org</string>
|
||||
<string name="login_open_place_reviews">Přihlásit se do OpenPlaceReviews</string>
|
||||
</resources>
|
|
@ -51,7 +51,6 @@
|
|||
<string name="avoid_motorway">Ceisiwch osgoi traffyrdd</string>
|
||||
<string name="auto_zoom_map_descr">Zoom Auto mapio yn ôl eich cyflymder (tra map wedi eu cydamseru gyda\'r sefyllfa bresennol)</string>
|
||||
<string name="auto_zoom_map">Auto chwyddo map</string>
|
||||
<string name="snap_to_road_descr">Snap sefyllfa i ffyrdd yn ystod llywio</string>
|
||||
<string name="snap_to_road">Snap i\'r ffordd</string>
|
||||
<string name="osmand_short_description_80_chars">OsmAnd yn gais ffynhonnell agored ar gyfer llywio fapiau all-lein ac ar-lein</string>
|
||||
<string name="osmand_plus_short_description_80_chars">OsmAnd yn gais ffynhonnell agored ar gyfer llywio fapiau all-lein ac ar-lein</string>
|
||||
|
|
|
@ -3582,7 +3582,7 @@
|
|||
<string name="poi_charcoal_pile">Trækulsbunke</string>
|
||||
<string name="poi_historic_tank">Historisk tank</string>
|
||||
<string name="poi_hookah_lounge">Vandpibe bar</string>
|
||||
<string name="poi_source_biomass">Energikilde: biomasse</string>
|
||||
<string name="poi_generator_source_biomass">Energikilde: biomasse</string>
|
||||
<string name="poi_snowmobile_filter">Snescooter adgang</string>
|
||||
<string name="poi_access_bus">Busadgang</string>
|
||||
<string name="poi_access_caravan">Campingvogn adgang</string>
|
||||
|
|
|
@ -128,7 +128,6 @@
|
|||
<string name="av_use_external_camera">Brug kamera</string>
|
||||
<string name="route_descr_lat_lon">Lat %1$.3f, Lon %2$.3f</string>
|
||||
<string name="intermediate_point">Mellemliggende destination %1$s</string>
|
||||
<string name="snap_to_road_descr">Hold position på vejen under navigation.</string>
|
||||
<string name="snap_to_road">Fastgør til vejen</string>
|
||||
<string name="osmand_short_description_80_chars">Globale mobilkort og navigation til offline og online OSM-kort</string>
|
||||
<string name="osmand_plus_short_description_80_chars">Global mobilkortvisning og navigation til offline og online OSM-kort</string>
|
||||
|
@ -1995,7 +1994,6 @@
|
|||
<string name="route_stops_before">%1$s stop før</string>
|
||||
<string name="rendering_attr_hideOverground_name">Objekter over jorden</string>
|
||||
<string name="routing_attr_short_way_name">Brændstofbesparende rute</string>
|
||||
<string name="routing_attr_short_way_description">Brug brændstofbesparende rute (normalt kortere).</string>
|
||||
<string name="replace_favorite_confirmation">Erstat Favorit %1$s?</string>
|
||||
<string name="shared_string_change">Skift</string>
|
||||
<string name="get_started">Kom i gang</string>
|
||||
|
@ -2174,7 +2172,7 @@
|
|||
<string name="rendering_attr_depthContours_description">Vis dybdekonturer og -punkter.</string>
|
||||
<string name="rendering_attr_depthContours_name">Havdybdekonturer</string>
|
||||
<string name="routing_attr_height_obstacles_name">Brug højdedata</string>
|
||||
<string name="routing_attr_height_obstacles_description">Terrænhøjde-faktor (via SRTM, ASTER og EU-DEM data).</string>
|
||||
|
||||
<string name="route_altitude">Rutehøjde</string>
|
||||
<string name="altitude_descent">Fald</string>
|
||||
<string name="altitude_ascent">Stigning</string>
|
||||
|
|
|
@ -3582,7 +3582,7 @@
|
|||
<string name="poi_charcoal_pile">Kohlenmeiler</string>
|
||||
<string name="poi_historic_tank">Historischer Panzer</string>
|
||||
<string name="poi_hookah_lounge">Wasserpfeifen-Lounge</string>
|
||||
<string name="poi_source_biomass">Energiequelle: Biomasse</string>
|
||||
<string name="poi_generator_source_biomass">Energiequelle: Biomasse</string>
|
||||
<string name="poi_snowmobile_filter">Zufahrt Schneemobil</string>
|
||||
<string name="poi_access_bus">Anbindung Linienbus</string>
|
||||
<string name="poi_access_caravan">Zufahrt Wohnwagen</string>
|
||||
|
@ -3881,4 +3881,14 @@
|
|||
<string name="poi_wildlife_crossing_bat_tunnel">Fledermaustunnel</string>
|
||||
<string name="poi_wildlife_crossing_bat_bridge">Fledermausbrücke</string>
|
||||
<string name="poi_wildlife_crossing">Wildwechsel</string>
|
||||
<string name="poi_mobile_library">Halteposition der Fahrbücherei</string>
|
||||
<string name="poi_summit_register_no">Gipfelbuch: nein</string>
|
||||
<string name="poi_summit_register_yes">Gipfelbuch: ja</string>
|
||||
<string name="poi_piste_status_closed">Pistenstatus: geschlossen</string>
|
||||
<string name="poi_piste_status_open">Pistenstatus: geöffnet</string>
|
||||
<string name="poi_patrolled_no">Bewacht: nein</string>
|
||||
<string name="poi_patrolled_yes">Bewacht: ja</string>
|
||||
<string name="poi_gladed_yes">Geglättet: ja</string>
|
||||
<string name="poi_piste_name">Pistenname</string>
|
||||
<string name="poi_piste_ski_jump">Skispringen</string>
|
||||
</resources>
|
|
@ -97,7 +97,6 @@
|
|||
<string name="avoid_motorway">Keine Autobahnen</string>
|
||||
<string name="auto_zoom_map_descr">Kartenvergrößerung der Geschwindigkeit anpassen (während der Kartennachführung).</string>
|
||||
<string name="auto_zoom_map">Automatische Vergrößerung</string>
|
||||
<string name="snap_to_road_descr">Standort während der Navigation auf Straßen einrasten.</string>
|
||||
<string name="snap_to_road">Auf Straße einrasten</string>
|
||||
<string name="osmand_play_title_30_chars">OsmAnd Karten & Navigation</string>
|
||||
<string name="osmand_short_description_80_chars">Globale Landkarten- und Navigationsanwendung für Offline- und Online-OSM-Karten</string>
|
||||
|
@ -1999,7 +1998,6 @@
|
|||
<string name="route_stops_before">%1$s Haltestellen davor</string>
|
||||
<string name="rendering_attr_hideOverground_name">Oberirdische Objekte</string>
|
||||
<string name="routing_attr_short_way_name">Kraftstoffsparende Route</string>
|
||||
<string name="routing_attr_short_way_description">Kraftstoffsparende Route verwenden (in der Regel kürzer).</string>
|
||||
<string name="replace_favorite_confirmation">Wollen Sie den Favoriten \'%1$s\' wirklich ersetzen?</string>
|
||||
<string name="shared_string_change">Ändern</string>
|
||||
<string name="get_started">Erste Schritte</string>
|
||||
|
@ -2173,7 +2171,7 @@
|
|||
<string name="navigate_point_olc">Offener Standortcode (OLC)</string>
|
||||
<string name="quick_action_page_list_descr">Eine Schaltfläche, um durch die Liste unten zu blättern.</string>
|
||||
<string name="routing_attr_height_obstacles_name">Höhendaten berücksichtigen</string>
|
||||
<string name="routing_attr_height_obstacles_description">Faktor im Geländeprofil (über SRTM, ASTER und EU-DEM-Daten).</string>
|
||||
|
||||
<string name="rendering_attr_depthContours_name">Nautische Tiefenlinien</string>
|
||||
<string name="rendering_attr_depthContours_description">Tiefenlinien und -punkte einblenden.</string>
|
||||
<string name="route_altitude">Routenhöhenprofil</string>
|
||||
|
@ -3694,7 +3692,7 @@
|
|||
<string name="quick_action_showhide_mapillary_title">Mapillary ein-/ausblenden</string>
|
||||
<string name="quick_action_mapillary_hide">Mapillary ausblenden</string>
|
||||
<string name="quick_action_mapillary_show">Mapillary anzeigen</string>
|
||||
<string name="quick_action_showhide_mapillary_descr">Eine Umschaltfläche zum ein- oder ausblenden der Mapillary-Layer auf der Karte.</string>
|
||||
<string name="quick_action_showhide_mapillary_descr">Eine Umschaltfläche zum Ein- oder Ausblenden des Mapillary-Layers auf der Karte.</string>
|
||||
<string name="uninstall_speed_cameras">Blitzer deinstallieren</string>
|
||||
<string name="shared_string_legal">Rechtliches</string>
|
||||
<string name="speed_camera_pois">Blitzer-POIs</string>
|
||||
|
@ -3923,7 +3921,6 @@
|
|||
<string name="cannot_upload_image">Bild kann nicht hochgeladen werden, bitte versuchen Sie es später erneut</string>
|
||||
<string name="select_picture">Bild auswählen</string>
|
||||
<string name="ltr_or_rtl_combine_via_star">%1$s * %2$s</string>
|
||||
<string name="elevation_data">Sie können Höhendaten verwenden, um Steigungen und Gefälle auf Ihrer Reise zu berücksichtigen</string>
|
||||
<string name="app_mode_light_aircraft">Kleinflugzeug</string>
|
||||
<string name="plan_route_split_before">Teilen vor</string>
|
||||
<string name="plan_route_split_after">Teilen nach</string>
|
||||
|
@ -3972,7 +3969,7 @@
|
|||
<string name="select_folder">Ordner auswählen</string>
|
||||
<string name="select_folder_descr">Ordner auswählen oder neuen hinzufügen</string>
|
||||
<string name="shared_string_empty">Leer</string>
|
||||
<string name="analyze_by_intervals">Nach Intervallen auswerten (geteiltes Intervall)</string>
|
||||
<string name="analyze_by_intervals">Nach Intervallen auswerten</string>
|
||||
<string name="upload_to_openstreetmap">Hochladen zu OpenStreetMap</string>
|
||||
<string name="edit_track">Track editieren</string>
|
||||
<string name="rename_track">Track umbenennen</string>
|
||||
|
@ -4008,4 +4005,34 @@
|
|||
<string name="delete_waypoints">Wegpunkte löschen</string>
|
||||
<string name="copy_to_map_favorites">In Favoriten kopieren</string>
|
||||
<string name="copy_to_map_markers">In Kartenmarkierungen kopieren</string>
|
||||
<string name="upload_photo">Lade hoch</string>
|
||||
<string name="upload_photo_completed">Hochladen abgeschlossen</string>
|
||||
<string name="uploading_count">Lade %1$d von %2$d hoch</string>
|
||||
<string name="uploaded_count">%1$d von %2$d hochgeladen</string>
|
||||
<string name="toast_select_edits_for_upload">Bearbeitungen zum Hochladen auswählen</string>
|
||||
<string name="hillshade_slope_contour_lines">Relief / Hangneigung / Höhenlinien</string>
|
||||
<string name="open_place_reviews_plugin_description">OpenPlaceReviews ist ein von der Gemeinschaft betriebenes Projekt über öffentliche Orte wie Restaurants, Hotels, Museen, Wegpunkte. Es sammelt alle öffentlichen Informationen über sie wie Fotos, Bewertungen, Links zu anderen Systemen, Link OpenStreetMap, Wikipedia.
|
||||
\n
|
||||
\nAlle OpenPlaceReview-Daten sind offen und für jedermann zugänglich: http://openplacereviews.org/data.
|
||||
\n
|
||||
\nMehr Informationen finden Sie unter: http://openplacereviews.org</string>
|
||||
<string name="open_place_reviews">OpenPlaceReviews</string>
|
||||
<string name="opr_use_dev_url">test.openplacereviews.org verwenden</string>
|
||||
<string name="login_open_place_reviews">Anmelden bei OpenPlaceReviews</string>
|
||||
<string name="activity_type_water_name">Wasser</string>
|
||||
<string name="activity_type_winter_name">Winter</string>
|
||||
<string name="activity_type_snowmobile_name">Schneemobil</string>
|
||||
<string name="activity_type_riding_name">Reiten</string>
|
||||
<string name="activity_type_mountainbike_name">Mountainbike</string>
|
||||
<string name="activity_type_cycling_name">Fahrrad</string>
|
||||
<string name="activity_type_hiking_name">Wandern</string>
|
||||
<string name="activity_type_running_name">Laufen</string>
|
||||
<string name="activity_type_walking_name">Fußgänger</string>
|
||||
<string name="activity_type_offroad_name">Geländegängig</string>
|
||||
<string name="activity_type_motorbike_name">Motorrad</string>
|
||||
<string name="activity_type_car_name">Auto</string>
|
||||
<string name="announcement_time_prepare">Zweite Ankündigung (mittlere Distanz)</string>
|
||||
<string name="shared_string_sec">sek</string>
|
||||
<string name="activity_type_racing_name">Rennsport</string>
|
||||
<string name="announcement_time_prepare_long">Erste Ankündigung (größere Distanz)</string>
|
||||
</resources>
|
|
@ -1212,7 +1212,7 @@
|
|||
<string name="poi_description">Περιγραφή</string>
|
||||
<string name="poi_phone">Τηλέφωνο</string>
|
||||
<string name="poi_website">Ιστότοπος</string>
|
||||
<string name="poi_email">Ηλ. διεύθυνση</string>
|
||||
<string name="poi_email">Ηλεκτρονικό ταχυδρομείο</string>
|
||||
<string name="poi_fax">Τηλεομοιότυπο (φαξ)</string>
|
||||
<string name="facebook">Facebook</string>
|
||||
<string name="twitter">Twitter</string>
|
||||
|
@ -3534,7 +3534,7 @@
|
|||
<string name="poi_climbing_crag">Ναι</string>
|
||||
<string name="reddit">Reddit</string>
|
||||
<string name="poi_historic_tank">Ιστορική δεξαμενή</string>
|
||||
<string name="poi_source_biomass">Πηγή ενέργειας: βιομάζα</string>
|
||||
<string name="poi_generator_source_biomass">Πηγή ενέργειας: βιομάζα</string>
|
||||
<string name="poi_snowmobile_filter">Πρόσβαση σε χιονοόχημα</string>
|
||||
<string name="poi_access_bus">Πρόσβαση σε λεωφορείο</string>
|
||||
<string name="poi_access_caravan">Πρόσβαση σε τροχόσπιτο</string>
|
||||
|
|
|
@ -20,7 +20,6 @@
|
|||
<string name="avoid_motorway">Όχι αυτοκινητόδρομους</string>
|
||||
<string name="auto_zoom_map_descr">Επίπεδο εστίασης χάρτη ανάλογα με την ταχύτητά σας (ενώ ο χάρτης συγχρονίζεται με την τρέχουσα θέση).</string>
|
||||
<string name="auto_zoom_map">Αυτόματη εστίαση χάρτη</string>
|
||||
<string name="snap_to_road_descr">Προσανατολισμός στους δρόμους κατά τη διάρκεια της πλοήγησης.</string>
|
||||
<string name="snap_to_road">Προσανατολισμός στο δρόμο</string>
|
||||
<string name="osmand_short_description_80_chars">Προβολή φορητού παγκόσμιου χάρτη & πλοήγηση για χάρτες OSM χωρίς και με διαδίκτυο</string>
|
||||
<string name="osmand_long_description_1000_chars">OsmAnd (OSM Αυτοματοποιημένες Οδηγίες Πλοήγησης)
|
||||
|
@ -267,7 +266,7 @@
|
|||
<string name="offline_edition">Επεξεργασία χωρίς διαδίκτυο</string>
|
||||
<string name="offline_edition_descr">Χρήση πάντα της επεξεργασίας χωρίς διαδίκτυο.</string>
|
||||
<string name="update_poi_does_not_change_indexes">Οι αλλαγές στα ΣΕ μέσω της εφαρμογής δεν επηρεάζουν τα ληφθέντα αρχεία χάρτη, οι αλλαγές αποθηκεύονται ως αρχείο στη συσκευή σας.</string>
|
||||
<string name="local_openstreetmap_uploading">Αποστολή …</string>
|
||||
<string name="local_openstreetmap_uploading">Αποστολή…</string>
|
||||
<string name="local_openstreetmap_were_uploaded">{0} ΣΕ/Οι σημειώσεις απεστάλησαν</string>
|
||||
<string name="local_openstreetmap_uploadall">Αποστολή όλων</string>
|
||||
<string name="local_openstreetmap_upload">Αποστολή επεξεργασίας στο OSM</string>
|
||||
|
@ -778,7 +777,7 @@
|
|||
<string name="context_menu_item_update_map">Ενημέρωση χάρτη</string>
|
||||
<string name="context_menu_item_create_poi">Δημιουργία ΣΕ</string>
|
||||
<string name="shared_string_yes">Ναι</string>
|
||||
<string name="shared_string_cancel">Ακύρωση</string>
|
||||
<string name="shared_string_cancel">Άκυρο</string>
|
||||
<string name="shared_string_apply">Εφαρμογή</string>
|
||||
<string name="shared_string_no">Όχι</string>
|
||||
<string name="add_favorite_dialog_top_text">Εισαγωγή ονόματος αγαπημένου</string>
|
||||
|
@ -813,7 +812,7 @@
|
|||
<string name="edit_filter_delete_dialog_title">Διαγραφή αυτού του φίλτρου;</string>
|
||||
<string name="edit_filter_delete_message">Το φίλτρο \'%1$s\' διαγράφηκε</string>
|
||||
<string name="edit_filter_create_message">Το φίλτρο \'%1$s\' δημιουργήθηκε</string>
|
||||
<string name="email">ηλ. διεύθυνση</string>
|
||||
<string name="email">ηλεκτρονικό ταχυδρομείο</string>
|
||||
<string name="intermediate_point_too_far">Ο ενδιάμεσος προορισμός %1$s είναι πολύ μακριά από τον πλησιέστερο δρόμο.</string>
|
||||
<string name="arrived_at_intermediate_point">Φτάσατε στον ενδιάμεσο προορισμό σας</string>
|
||||
<string name="context_menu_item_intermediate_point">Προσθήκη ως ενδιάμεσου προορισμού</string>
|
||||
|
@ -1175,7 +1174,7 @@
|
|||
<string name="keep_informing_never">Μόνο χειροκίνητα (πατήστε το βέλος)</string>
|
||||
<string name="keep_informing">Επανάληψη οδηγιών πλοήγησης</string>
|
||||
<string name="import_file_favourites">Αποθήκευση δεδομένων ως αρχείο GPX ή εισαγωγή σημείων διαδρομής στα \'Αγαπημένα\';</string>
|
||||
<string name="shared_string_share">Διαμοιρασμός</string>
|
||||
<string name="shared_string_share">Κοινοποίηση</string>
|
||||
<string name="navigation_intent_invalid">Μη έγκυρη μορφή: %s</string>
|
||||
<string name="stop_navigation_service">Διακοπή</string>
|
||||
<string name="sleep_mode_stop_dialog">Διακοπή λειτουργίας παρασκηνίου του GPS;</string>
|
||||
|
@ -1270,7 +1269,7 @@
|
|||
<string name="dash_download_new_one">Λήψη Νέου Χάρτη</string>
|
||||
<string name="map_locale">Γλώσσα χάρτη</string>
|
||||
<string name="rendering_attr_roadStyle_name">Μορφή δρόμου</string>
|
||||
<string name="rendering_value_default_name">Προκαθορισμένο</string>
|
||||
<string name="rendering_value_default_name">Προεπιλογή</string>
|
||||
<string name="rendering_value_orange_name">Πορτοκαλί</string>
|
||||
<string name="traffic_warning_railways">Διασταύρωση σιδηροτροχιάς</string>
|
||||
<string name="show_railway_warnings">Διασταυρώσεις σιδηροτροχιάς</string>
|
||||
|
@ -1467,7 +1466,7 @@
|
|||
<string name="track_segments">Τμήματα διαδρομής</string>
|
||||
<string name="track_points">Σημεία της διαδρομής</string>
|
||||
<string name="location_on_map">Τοποθεσία:\n Γ. Πλ %1$s\n Γ. Μηκ %2$s</string>
|
||||
<string name="rendering_value__name">Προκαθορισμένο</string>
|
||||
<string name="rendering_value__name">Προεπιλογή</string>
|
||||
<string name="print_route">Εκτύπωση διαδρομής</string>
|
||||
<string name="osmand_parking_overdue">εκπρόθεσμο</string>
|
||||
<string name="simulate_your_location">Προσομοίωση της θέση σας</string>
|
||||
|
@ -1877,7 +1876,7 @@
|
|||
<string name="total_distance">Συνολική απόσταση</string>
|
||||
<string name="routing_attr_relief_smoothness_factor_name">Επιλέξτε διακύμανση ανύψωσης</string>
|
||||
<string name="routing_attr_height_obstacles_name">Χρήση υψομετρικών δεδομένων</string>
|
||||
<string name="routing_attr_height_obstacles_description">Συντελεστής σε ανύψωση εδάφους (μέσω SRTM, ASTER και δεδομένων EU-DEM).</string>
|
||||
|
||||
<string name="rendering_attr_depthContours_description">Εμφάνιση ισοβαθών καμπυλών και σημείων.</string>
|
||||
<string name="rendering_attr_depthContours_name">Ναυτικές ισοβαθείς καμπύλες</string>
|
||||
<string name="auto_split_recording_title">Αυτόματος διαχωρισμός καταγραφών μετά από κενό</string>
|
||||
|
@ -1965,7 +1964,6 @@
|
|||
<string name="update_all_maps_now">Θέλετε να ενημερώσετε όλους τους χάρτες τώρα;</string>
|
||||
<string name="clear_tile_data">Καθαρισμός όλων των πλακιδίων</string>
|
||||
<string name="routing_attr_short_way_name">Διαδρομή με οικονομία καυσίμων</string>
|
||||
<string name="routing_attr_short_way_description">Χρησιμοποιήστε τη διαδρομή με οικονομία καυσίμων (συνήθως συντομότερη).</string>
|
||||
<string name="replace_favorite_confirmation">Είσαστε σίγουρος/η ότι θέλετε να αντικαταστήσετε το Αγαπημένο %1$s;</string>
|
||||
<string name="rendering_attr_hideOverground_name">Υπέργεια αντικείμενα</string>
|
||||
<string name="shared_string_change">Αλλαγή</string>
|
||||
|
@ -3013,7 +3011,7 @@
|
|||
<string name="rendering_attr_showLez_description">Εμφάνιση στον χάρτη ζωνών για χαμηλή εκπομπή καυσαερίων. Δεν επηρεάζει τη δρομολόγηση.</string>
|
||||
<string name="rendering_attr_showLez_name">Εμφάνιση ζωνών χαμηλής εκπομπής καυσαερίων</string>
|
||||
<string name="temporary_conditional_routing">Λάβετε υπόψη τους προσωρινούς περιορισμούς</string>
|
||||
<string name="shared_string_default">Προεπιλεγμένο</string>
|
||||
<string name="shared_string_default">Προεπιλογή</string>
|
||||
<string name="app_mode_pickup_truck">Ημιφορτηγό</string>
|
||||
<string name="day">Ημέρα</string>
|
||||
<string name="days_2_4">Ημέρες</string>
|
||||
|
@ -3385,7 +3383,7 @@
|
|||
<string name="monitoring_min_accuracy_descr_recommendation">Σύσταση: Είναι δύσκολο να προβλεφθεί τι θα εγγραφεί και τι όχι, ίσως είναι καλύτερο να απενεργοποιήσετε αυτό το φίλτρο.</string>
|
||||
<string name="monitoring_min_accuracy_descr_remark">Παρατήρηση: Εάν το GPS είχε απενεργοποιηθεί αμέσως πριν μια εγγραφή, το πρώτο μετρούμενο σημείο μπορεί να έχει μειωμένη ακρίβεια, έτσι μπορεί να θέλουμε να περιμένουμε λιγάκι πριν την καταγραφή σημείου (ή να εγγράψουμε τα καλύτερα 3 διαδοχικά σημεία, κλπ.), αλλά αυτό δεν έχει ακόμα υλοποιηθεί.</string>
|
||||
<string name="monitoring_min_distance_descr">Αυτό το φίλτρο αποφεύγει διπλά σημεία να εγγραφούν όταν έχει συμβεί πολύ λίγη ενεργή κίνηση, καθιστώντας καλύτερη τη χωροταξική εμφάνιση των ιχνών που δεν επεξεργάζονται αργότερα.</string>
|
||||
<string name="button_rate">Τιμή</string>
|
||||
<string name="button_rate">Βαθμολόγηση</string>
|
||||
<string name="monitoring_min_distance_descr_side_effect">Παράπλευρα αποτελέσματα: Περίοδοι σε ακινησία δεν καταγράφονται καθόλου ή μόνο με ένα σημείο καθεμιά. Μικρές (πραγματικός κόσμος) κινήσεις (π.χ. πλάγιες, για να σημειώσουν έξοδο στο ταξίδι σας) μπορεί να φιλτραριστούν. Το αρχείο σας περιέχει λιγότερες πληροφορίες για μετεπεξεργασία και έχει χειρότερα στατιστικά φιλτράροντας προφανώς περιττά σημεία κατά τον χρόνο εγγραφής, ενώ δυνητικά διατηρεί παράσιτα που προκαλούνται από κακή λήψη ή επιπτώσεις κυκλωμάτων GPS.</string>
|
||||
<string name="monitoring_min_distance_descr_recommendation">Σύσταση: Ρύθμιση 5 μέτρων μπορεί να λειτουργήσει καλά για σας, εάν δεν χρειάζεστε να πιάσετε λεπτομέρειες πιο ακριβείς από αυτό και δεν θέλετε να πάρετε δεδομένα σε ακινησία.</string>
|
||||
<string name="live_monitoring_time_buffer">Ενδιάμεσος χρόνος</string>
|
||||
|
|
|
@ -3582,7 +3582,7 @@
|
|||
<string name="poi_charcoal_pile">Karbigejo</string>
|
||||
<string name="poi_historic_tank">Tanko historia</string>
|
||||
<string name="poi_hookah_lounge">Salono por fumi akvopipon</string>
|
||||
<string name="poi_source_biomass">Energifonto: biomaso</string>
|
||||
<string name="poi_generator_source_biomass">Energifonto: biomaso</string>
|
||||
<string name="poi_snowmobile_filter">Aliro por motorsledoj</string>
|
||||
<string name="poi_access_bus">Aliro por aŭtobusoj</string>
|
||||
<string name="poi_access_caravan">Aliro por kampad-postveturiloj</string>
|
||||
|
@ -3881,4 +3881,14 @@
|
|||
<string name="poi_wildlife_crossing_bat_bridge">Ponto por vespertoj</string>
|
||||
<string name="poi_wildlife_crossing">Trairejo por sovaĝaj bestoj</string>
|
||||
<string name="poi_swimming_area">Naĝejo natura</string>
|
||||
<string name="poi_piste_status_closed">Stato de skivojo: fermita</string>
|
||||
<string name="poi_piste_status_open">Stato de skivojo: malfermita</string>
|
||||
<string name="poi_patrolled_no">Kontrolata: ne</string>
|
||||
<string name="poi_patrolled_yes">Kontrolata: jes</string>
|
||||
<string name="poi_gladed_yes">Senarbigita: jes</string>
|
||||
<string name="poi_piste_name">Nomo de skivojo</string>
|
||||
<string name="poi_piste_ski_jump">Skisaltejo</string>
|
||||
<string name="poi_mobile_library">Movebla biblioteko (haltloko)</string>
|
||||
<string name="poi_summit_register_no">Pint‑taglibro: ne</string>
|
||||
<string name="poi_summit_register_yes">Pint‑taglibro: jes</string>
|
||||
</resources>
|
|
@ -654,7 +654,7 @@
|
|||
<string name="select_index_file_to_download">Trovis nenion. Se vi ne povas trovi vian regionon, vi povas fari ĝin mem (rigardu https://osmand.net).</string>
|
||||
<string name="none_selected_gpx">Unue elektu GPX‑dosieron per frapetadi.</string>
|
||||
<string name="local_index_select_gpx_file">Elektu kurson</string>
|
||||
<string name="gpx_split_interval">Intertempo de divido</string>
|
||||
<string name="gpx_split_interval">Fragmento</string>
|
||||
<string name="sort_by_distance">Ordigi laŭ distanco</string>
|
||||
<string name="sort_by_name">Ordigi laŭ nomo</string>
|
||||
<string name="plugin_touringview_name">Turisma map-vido</string>
|
||||
|
@ -1056,7 +1056,6 @@
|
|||
<string name="avoid_motorway">Sen aŭtovojojn</string>
|
||||
<string name="auto_zoom_map">Aŭtomate skali mapon</string>
|
||||
<string name="auto_zoom_map_descr">Skali mapon depende de via rapido (kiam mapo estas samtempigita kun aktuala pozicio).</string>
|
||||
<string name="snap_to_road_descr">Proksimumigi pozicion al vojo dum navigado.</string>
|
||||
<string name="snap_to_road">Proksimumigi al vojo</string>
|
||||
<string name="interrupt_music">Paŭzigi muzikon</string>
|
||||
<string name="interrupt_music_descr">Voĉaj anoncoj paǔzigas ludadon de muziko.</string>
|
||||
|
@ -1991,7 +1990,6 @@
|
|||
<string name="shared_string_change">Ŝanĝi</string>
|
||||
<string name="get_started">Ekigi</string>
|
||||
<string name="routing_attr_short_way_name">Brulaĵ-ŝparema kurso</string>
|
||||
<string name="routing_attr_short_way_description">Kalkuli brulaĵ-ŝpareman kurson (kutime plej mallongan).</string>
|
||||
<string name="replace_favorite_confirmation">Ĉu vi volas anstataŭigi la ŝatatan ejon %1$s?</string>
|
||||
<string name="clear_tile_data">Forviŝi ĉiujn kahelojn</string>
|
||||
<string name="update_all_maps_now">Ĉu ĝisdatigi ĉiujn mapojn nun?</string>
|
||||
|
@ -2168,7 +2166,7 @@
|
|||
<string name="rendering_attr_depthContours_description">Montri punktojn kaj kurbojn de profundo.</string>
|
||||
<string name="rendering_attr_depthContours_name">Maraj profundec-kurboj</string>
|
||||
<string name="routing_attr_height_obstacles_name">Uzi datumojn pri altitudo</string>
|
||||
<string name="routing_attr_height_obstacles_description">Konsideri nivelon de tereno (laŭ datumoj el SRTM, ASTER kaj EU-DEM).</string>
|
||||
|
||||
<string name="route_altitude">Kursa altitudo</string>
|
||||
<string name="altitude_descent">Malsupreniro</string>
|
||||
<string name="altitude_ascent">Supreniro</string>
|
||||
|
@ -2405,7 +2403,7 @@
|
|||
<string name="mapillary_action_descr">Kontribui viajn strat-nivelajn vidaĵojn pri tiu ĉi loko al Mapillary.</string>
|
||||
<string name="plugin_mapillary_descr">Strat-nivelaj fotoj por ĉiuj. Esplori lokojn, kunlabori kaj foti la mondon.</string>
|
||||
<string name="online_photos">Enretaj fotoj</string>
|
||||
<string name="no_photos_descr">Neniuj fotoj tie ĉi.</string>
|
||||
<string name="no_photos_descr">Neniu foto tie ĉi.</string>
|
||||
<string name="shared_string_install">Instali</string>
|
||||
<string name="improve_coverage_mapillary">Pliigi fotan atingon de Mapillary</string>
|
||||
<string name="improve_coverage_install_mapillary_desc">Instalu la aplikaĵon Mapillary por aldoni fotojn al tiu ĉi loko sur la mapo.</string>
|
||||
|
@ -2433,7 +2431,7 @@
|
|||
<string name="average">Mezumo</string>
|
||||
<string name="of">%1$d el %2$d</string>
|
||||
<string name="ascent_descent">Supreniroj/malsupreniroj</string>
|
||||
<string name="moving_time">Movada tempo</string>
|
||||
<string name="moving_time">Tempo dum movo</string>
|
||||
<string name="max_min">Maks./min.</string>
|
||||
<string name="min_max">Min./maks.</string>
|
||||
<string name="rendering_value_translucent_pink_name">Rozkolora diafana</string>
|
||||
|
@ -3919,7 +3917,6 @@
|
|||
<string name="select_picture">Elektu bildon</string>
|
||||
<string name="ltr_or_rtl_combine_via_star">%1$s * %2$s</string>
|
||||
<string name="lang_de_casual">Germana (ordinara)</string>
|
||||
<string name="elevation_data">Vi povas uzi datumojn pri altitudo por kalkuli suprenirojn/malsuprenirojn de via kurso</string>
|
||||
<string name="app_mode_light_aircraft">Malpeza aviadilo</string>
|
||||
<string name="plan_route_join_segments">Kunigi segmentojn</string>
|
||||
<string name="plan_route_split_before">Dividi antaŭ</string>
|
||||
|
@ -3967,7 +3964,7 @@
|
|||
<string name="select_folder">Elekti dosierujon</string>
|
||||
<string name="select_folder_descr">Elekti dosierujon aŭ krei novan</string>
|
||||
<string name="shared_string_empty">Malplena</string>
|
||||
<string name="analyze_by_intervals">Analizi laŭ intertempoj (dividoj)</string>
|
||||
<string name="analyze_by_intervals">Analizi laŭ fragmentoj</string>
|
||||
<string name="upload_to_openstreetmap">Alŝuti al OpenStreetMap</string>
|
||||
<string name="edit_track">Redakti spuron</string>
|
||||
<string name="rename_track">Renomi spuron</string>
|
||||
|
@ -4006,4 +4003,31 @@
|
|||
<string name="context_menu_edit_descr">Redakti priskribon</string>
|
||||
<string name="delete_waypoints">Forigi navigadpunktojn</string>
|
||||
<string name="copy_to_map_markers">Kopii al map‑markoj</string>
|
||||
<string name="upload_photo">Sendado</string>
|
||||
<string name="upload_photo_completed">Sendado finita</string>
|
||||
<string name="uploading_count">Sendado de %1$d el %2$d</string>
|
||||
<string name="uploaded_count">Sendis %1$d el %2$d</string>
|
||||
<string name="toast_select_edits_for_upload">Elektu redaktojn por sendi</string>
|
||||
<string name="hillshade_slope_contour_lines">Nivelombrumo / dekliveco / nivelkurboj</string>
|
||||
<string name="open_place_reviews_plugin_description">OpenPlaceReviews estas komunuma projekto pri publikaj lokoj, kiel restoracioj, hoteloj, muzeoj, rekoniloj, ktp. Ĝi kolektas diversajn publikajn informojn pri tiuj punktoj: fotojn, opiniojn, ligilojn al OpenStreetMap kaj Vikipedio.
|
||||
\n
|
||||
\nĈiuj OpenPlaceReview‑datumoj estas malfermaj kaj disponeblaj por ĉiu: http://openplacereviews.org/data
|
||||
\n
|
||||
\nPliaj informoj ĉe http://openplacereviews.org</string>
|
||||
<string name="open_place_reviews">OpenPlaceReviews</string>
|
||||
<string name="opr_use_dev_url">Uzi test.openplacereviews.org</string>
|
||||
<string name="login_open_place_reviews">Ensaluti al OpenPlaceReviews</string>
|
||||
<string name="activity_type_water_name">Akvo</string>
|
||||
<string name="activity_type_winter_name">Vintro</string>
|
||||
<string name="activity_type_snowmobile_name">Motorsledo</string>
|
||||
<string name="activity_type_riding_name">Rajdado</string>
|
||||
<string name="activity_type_racing_name">Kurkonkurso</string>
|
||||
<string name="activity_type_mountainbike_name">Montbiciklo</string>
|
||||
<string name="activity_type_cycling_name">Biciklado</string>
|
||||
<string name="activity_type_hiking_name">Marŝado</string>
|
||||
<string name="activity_type_running_name">Kurado</string>
|
||||
<string name="activity_type_walking_name">Piedirado</string>
|
||||
<string name="activity_type_offroad_name">Ekstervoje</string>
|
||||
<string name="activity_type_motorbike_name">Motorciklo</string>
|
||||
<string name="activity_type_car_name">Aŭto</string>
|
||||
</resources>
|
|
@ -2723,7 +2723,7 @@
|
|||
<string name="poi_aquaculture_mussels">Acuicultura: mejillones</string>
|
||||
<string name="poi_min_age">Edad mínima</string>
|
||||
<string name="poi_organic_yes">Sí</string>
|
||||
<string name="poi_organic_no">No</string>
|
||||
<string name="poi_organic_no">Productos orgánicos: no</string>
|
||||
<string name="poi_organic_only">Únicamente</string>
|
||||
<string name="poi_traffic_mirror">Espejo de tráfico</string>
|
||||
<string name="poi_diplomatic_consulate">Consulado</string>
|
||||
|
@ -3222,7 +3222,7 @@
|
|||
<string name="poi_water_supply_pump">Bomba</string>
|
||||
<string name="poi_water_supply_borehole">Perforación</string>
|
||||
<string name="poi_water_supply_water_trucking">Camión de agua</string>
|
||||
<string name="poi_water_supply_water_tank">Depósito de agua</string>
|
||||
<string name="poi_water_supply_water_tank">Tanque de agua</string>
|
||||
<string name="poi_water_supply_bottled_water">Botella de agua</string>
|
||||
<string name="poi_water_place_access_community">Comunidad</string>
|
||||
<string name="poi_water_place_access_family">Familia</string>
|
||||
|
@ -3582,7 +3582,7 @@
|
|||
<string name="poi_charcoal_pile">Carbonera;Pila de carbón</string>
|
||||
<string name="poi_historic_tank">Tanque histórico</string>
|
||||
<string name="poi_hookah_lounge">Bar de cachimbas;Salón Hookah</string>
|
||||
<string name="poi_source_biomass">Fuente de energía: biomasa</string>
|
||||
<string name="poi_generator_source_biomass">Fuente de energía: biomasa</string>
|
||||
<string name="poi_snowmobile_filter">Acceso para motonieves</string>
|
||||
<string name="poi_access_bus">Acceso para colectivos</string>
|
||||
<string name="poi_access_caravan">Acceso para casas móviles</string>
|
||||
|
@ -3869,7 +3869,7 @@
|
|||
<string name="poi_water_source_river">Río</string>
|
||||
<string name="poi_water_source_well">Pozo</string>
|
||||
<string name="poi_water_source_powered_pump">Bomba accionada</string>
|
||||
<string name="poi_water_source_water_tank">Depósito de agua</string>
|
||||
<string name="poi_water_source_water_tank">Tanque de agua</string>
|
||||
<string name="poi_water_source_tap">Canilla</string>
|
||||
<string name="poi_water_source_water_works">Planta potabilizadora</string>
|
||||
<string name="poi_water_source_tube_well">Pozo entubado</string>
|
||||
|
@ -3881,4 +3881,14 @@
|
|||
<string name="poi_wildlife_crossing_bat_bridge">Puente para murciélagos</string>
|
||||
<string name="poi_wildlife_crossing">Cruce de vida silvestre</string>
|
||||
<string name="poi_swimming_area">Área de natación</string>
|
||||
<string name="poi_mobile_library">Biblioteca móvil (parada)</string>
|
||||
<string name="poi_summit_register_no">Registro de la cumbre: no</string>
|
||||
<string name="poi_summit_register_yes">Registro de la cumbre: sí</string>
|
||||
<string name="poi_piste_status_closed">Estado de la pista: cerrado</string>
|
||||
<string name="poi_piste_status_open">Estado de la pista: abierto</string>
|
||||
<string name="poi_patrolled_no">Patrullado: no</string>
|
||||
<string name="poi_patrolled_yes">Patrullado: sí</string>
|
||||
<string name="poi_gladed_yes">Arboleda: sí</string>
|
||||
<string name="poi_piste_name">Nombre de la pista</string>
|
||||
<string name="poi_piste_ski_jump">Salto con esquís</string>
|
||||
</resources>
|
|
@ -742,7 +742,6 @@
|
|||
<string name="avoid_motorway">Sin autopistas</string>
|
||||
<string name="auto_zoom_map_descr">Nivel de zoom según la velocidad (mientras el mapa se sincroniza con la ubicación actual).</string>
|
||||
<string name="auto_zoom_map">Zoom automático del mapa</string>
|
||||
<string name="snap_to_road_descr">Ajusta la ubicación al camino durante la navegación.</string>
|
||||
<string name="snap_to_road">Ajustar al camino</string>
|
||||
<string name="interrupt_music_descr">Las indicaciones por voz pausan la reproducción de música.</string>
|
||||
<string name="interrupt_music">Pausar música</string>
|
||||
|
@ -774,7 +773,7 @@
|
|||
<string name="osmand_plus_short_description_80_chars">Visor y navegador móvil global de mapas OSM con y sin conexión</string>
|
||||
<string name="osmand_plus_long_description_1000_chars">OsmAnd+ (OSM Automated Navigation Directions, y en español, Guía de Navegación Automatizada de OSM)
|
||||
\n
|
||||
\nOsmAnd+ es un software de navegación de código abierto con acceso a una amplia variedad de datos globales de OSM. Todos los datos del mapa (vectores y teselas), pueden ser almacenados en la memoria del teléfono para su uso sin conexión. Ofrece funcionalidades de rutas con y sin conexión, incluyendo guía de giro-a-giro por voz.
|
||||
\n OsmAnd+ es un software de navegación de código abierto con acceso a una amplia variedad de datos globales de OSM. Todos los datos del mapa (vectores y teselas), pueden ser almacenados en la memoria del teléfono para su uso sin conexión. Ofrece funcionalidades de rutas con y sin conexión, incluyendo guía de giro-a-giro por voz.
|
||||
\n
|
||||
\n OsmAnd+ es la versión de pago de la aplicación, comprándola ayudas al proyecto, financias el desarrollo de nuevas funciones, y recibes las últimas actualizaciones.
|
||||
\n
|
||||
|
@ -1222,8 +1221,7 @@
|
|||
<string name="osmand_net_previously_installed">Todos los datos sin conexión en la versión vieja de OsmAnd son compatibles con la nueva versión, pero los puntos de Favoritos deben exportarse desde la versión vieja y luego, importarse en la nueva.</string>
|
||||
<string name="build_installed">Compilación {0} instalada ({1}).</string>
|
||||
<string name="downloading_build">Descargando compilación…</string>
|
||||
<string name="install_selected_build">¿Instalar OsmAnd?
|
||||
\nVersión: {0}
|
||||
<string name="install_selected_build">¿Instalar OsmAnd {0}\?
|
||||
\nFecha: {1}
|
||||
\nTamaño: {2} MB</string>
|
||||
<string name="loading_builds_failed">Error al recuperar la lista de compilaciones de OsmAnd</string>
|
||||
|
@ -1993,7 +1991,6 @@
|
|||
<string name="rendering_attr_hideOverground_name">Objetos en superficie</string>
|
||||
<string name="replace_favorite_confirmation">¿Reemplazar el Favorito «%1$s»?</string>
|
||||
<string name="routing_attr_short_way_name">Ruta de bajo consumo (corta)</string>
|
||||
<string name="routing_attr_short_way_description">Usa la ruta de menor consumo en combustible (usualmente la más corta).</string>
|
||||
<string name="shared_string_change">Cambiar</string>
|
||||
<string name="get_started">Empezar</string>
|
||||
<string name="update_all_maps_now">¿Actualizar todos los mapas ahora?</string>
|
||||
|
@ -2063,7 +2060,7 @@
|
|||
<string name="shared_string_notifications">Notificaciones</string>
|
||||
<string name="gpx_no_tracks_title">Sin archivos de trazas aún</string>
|
||||
<string name="gpx_no_tracks_title_folder">También puedes añadir archivos de trazas a la carpeta</string>
|
||||
<string name="gpx_add_track">Añadir GPX</string>
|
||||
<string name="gpx_add_track">Añadir más…</string>
|
||||
<string name="shared_string_appearance">Aspecto</string>
|
||||
<string name="rendering_value_fine_name">Muy fino</string>
|
||||
<string name="route_calculation">Cálculo de la ruta</string>
|
||||
|
@ -2178,7 +2175,7 @@
|
|||
<string name="shared_string_time">Tiempo</string>
|
||||
<string name="total_distance">Distancia total</string>
|
||||
<string name="routing_attr_height_obstacles_name">Usar datos de elevación</string>
|
||||
<string name="routing_attr_height_obstacles_description">Incluye como factor, la elevación del terreno (según datos de SRTM, ASTER y EU-DEM).</string>
|
||||
|
||||
<string name="routing_attr_driving_style_name">Estilo de conducción</string>
|
||||
<string name="select_gpx_folder">Marcar la carpeta del archivo GPX</string>
|
||||
<string name="file_can_not_be_moved">No se pudo mover el archivo.</string>
|
||||
|
@ -2438,7 +2435,7 @@
|
|||
<string name="average">Promedio</string>
|
||||
<string name="of">%1$d de %2$d</string>
|
||||
<string name="ascent_descent">Ascenso/Descenso</string>
|
||||
<string name="moving_time">Tiempo moviéndose</string>
|
||||
<string name="moving_time">Tiempo en movimiento</string>
|
||||
<string name="max_min">Máx/Min</string>
|
||||
<string name="min_max">Min/Máx</string>
|
||||
<string name="rendering_value_translucent_pink_name">Rosa translúcido</string>
|
||||
|
@ -3675,7 +3672,7 @@
|
|||
<string name="height_limit_description">Proporciona la altura del vehículo, pueden aplicarse algunas restricciones de ruta para vehículos altos.</string>
|
||||
<string name="weight_limit_description">Proporciona el peso del vehículo, pueden aplicarse algunas restricciones de ruta para vehículos pesados.</string>
|
||||
<string name="screen_timeout">Tiempo de espera de la pantalla</string>
|
||||
<string name="shared_string_tones">tonos</string>
|
||||
<string name="shared_string_tones">toneladas</string>
|
||||
<string name="shared_string_meters">metros</string>
|
||||
<string name="details_dialog_decr">Muestra u oculta los detalles adicionales del mapa</string>
|
||||
<string name="shared_string_night_map">Mapa nocturno</string>
|
||||
|
@ -3732,8 +3729,8 @@
|
|||
<string name="add_hidden_group_info">El punto añadido no será visible en el mapa, ya que el grupo elegido está oculto, se puede encontrar en «%s».</string>
|
||||
<string name="track_show_start_finish_icons">Mostrar los iconos de inicio y fin</string>
|
||||
<string name="select_track_width">Elegir la anchura</string>
|
||||
<string name="gpx_split_interval_descr">Marca el intervalo en el que se mostrarán las marcas con distancia o tiempo en la traza.</string>
|
||||
<string name="gpx_split_interval_none_descr">Marca la opción de división deseada: por tiempo o por distancia.</string>
|
||||
<string name="gpx_split_interval_descr">Elige el intervalo de la traza en el que se mostrarán las marcas con la distancia o el tiempo.</string>
|
||||
<string name="gpx_split_interval_none_descr">Elige la opción de división deseada: por tiempo o por distancia.</string>
|
||||
<string name="shared_string_custom">Personalizado</string>
|
||||
<string name="gpx_direction_arrows">Flechas de dirección</string>
|
||||
<string name="track_coloring_solid">Sólido</string>
|
||||
|
@ -3922,7 +3919,6 @@
|
|||
<string name="select_picture">Elegir imagen</string>
|
||||
<string name="lang_de_casual">Alemán (casual)</string>
|
||||
<string name="ltr_or_rtl_combine_via_star">%1$s * %2$s</string>
|
||||
<string name="elevation_data">Puedes usar los datos de elevación para tener en cuenta el ascenso y descenso del viaje</string>
|
||||
<string name="app_mode_light_aircraft">Avión ligero</string>
|
||||
<string name="plan_route_join_segments">Unir segmentos</string>
|
||||
<string name="plan_route_split_before">Dividir antes</string>
|
||||
|
@ -3970,7 +3966,7 @@
|
|||
<string name="select_folder">Elegir carpeta</string>
|
||||
<string name="select_folder_descr">Elegir carpeta o añadir una nueva</string>
|
||||
<string name="shared_string_empty">Vacío</string>
|
||||
<string name="analyze_by_intervals">Analizar por intervalos (intervalo de división)</string>
|
||||
<string name="analyze_by_intervals">Analizar intervalos divididos</string>
|
||||
<string name="upload_to_openstreetmap">Subir a OpenStreetMap</string>
|
||||
<string name="edit_track">Editar traza</string>
|
||||
<string name="rename_track">Renombrar traza</string>
|
||||
|
@ -4009,4 +4005,31 @@
|
|||
<string name="delete_waypoints">Borrar puntos de referencia</string>
|
||||
<string name="copy_to_map_markers">Copiar a «Marcadores del mapa»</string>
|
||||
<string name="copy_to_map_favorites">Copiar a favoritos</string>
|
||||
<string name="upload_photo">Subiendo</string>
|
||||
<string name="upload_photo_completed">Subida completa</string>
|
||||
<string name="uploading_count">Subiendo %1$d de %2$d</string>
|
||||
<string name="uploaded_count">Se subieron %1$d de %2$d</string>
|
||||
<string name="toast_select_edits_for_upload">Marcar ediciones a subir</string>
|
||||
<string name="hillshade_slope_contour_lines">Sombreado / Pendiente / Curvas de nivel</string>
|
||||
<string name="open_place_reviews_plugin_description">OpenPlaceReviews es un proyecto impulsado por la comunidad sobre lugares públicos como restaurantes, hoteles, museos, puntos de referencia. Recoge toda la información pública sobre ellos como fotos, reseñas, enlaces a otros servicios como OpenStreetMap y Wikipedia.
|
||||
\n
|
||||
\nTodos los datos de OpenPlaceReviews son abiertos y están disponibles para todos: http://openplacereviews.org/data.
|
||||
\n
|
||||
\nPuedes leer más en: https://openplacereviews.org</string>
|
||||
<string name="open_place_reviews">OpenPlaceReviews</string>
|
||||
<string name="opr_use_dev_url">Usar test.openplacereviews.org</string>
|
||||
<string name="login_open_place_reviews">Acceder a OpenPlaceReviews</string>
|
||||
<string name="activity_type_water_name">Agua</string>
|
||||
<string name="activity_type_winter_name">Invierno</string>
|
||||
<string name="activity_type_snowmobile_name">Motonieve</string>
|
||||
<string name="activity_type_riding_name">Equitación</string>
|
||||
<string name="activity_type_racing_name">Carreras</string>
|
||||
<string name="activity_type_mountainbike_name">Bicicleta de montaña</string>
|
||||
<string name="activity_type_cycling_name">Bicicleta</string>
|
||||
<string name="activity_type_hiking_name">Senderismo</string>
|
||||
<string name="activity_type_running_name">Correr</string>
|
||||
<string name="activity_type_walking_name">Peatón</string>
|
||||
<string name="activity_type_offroad_name">Todo terreno</string>
|
||||
<string name="activity_type_motorbike_name">Motocicleta</string>
|
||||
<string name="activity_type_car_name">Automóvil</string>
|
||||
</resources>
|
|
@ -844,7 +844,7 @@
|
|||
<string name="poi_nwn_ref">Nodo de red nacional de senderismo</string>
|
||||
<string name="poi_rwn_ref">Nodo de red regional de senderismo</string>
|
||||
<string name="poi_lwn_ref">Nodo de red local de senderismo</string>
|
||||
<string name="poi_opening_hours">Horario de atención;Horario de apertura</string>
|
||||
<string name="poi_opening_hours">Horario de apertura</string>
|
||||
<string name="poi_collection_times">Horario de recolección</string>
|
||||
<string name="poi_description">Descripción</string>
|
||||
<string name="poi_phone">Teléfono</string>
|
||||
|
@ -2723,7 +2723,7 @@
|
|||
<string name="poi_aquaculture_mussels">Acuicultura: mejillones</string>
|
||||
<string name="poi_min_age">Edad mínima</string>
|
||||
<string name="poi_organic_yes">Sí</string>
|
||||
<string name="poi_organic_no">No</string>
|
||||
<string name="poi_organic_no">Productos orgánicos: no</string>
|
||||
<string name="poi_organic_only">Únicamente</string>
|
||||
<string name="poi_traffic_mirror">Espejo de tráfico</string>
|
||||
<string name="poi_diplomatic_consulate">Consulado</string>
|
||||
|
@ -3582,7 +3582,7 @@
|
|||
<string name="poi_charcoal_pile">Carbonera;Pila de carbón</string>
|
||||
<string name="poi_historic_tank">Tanque histórico</string>
|
||||
<string name="poi_hookah_lounge">Bar de cachimbas;Salón Hookah</string>
|
||||
<string name="poi_source_biomass">Fuente de energía: biomasa</string>
|
||||
<string name="poi_generator_source_biomass">Fuente de energía: biomasa</string>
|
||||
<string name="poi_snowmobile_filter">Acceso para motonieves</string>
|
||||
<string name="poi_access_bus">Acceso para autobuses</string>
|
||||
<string name="poi_access_caravan">Acceso para caravanas</string>
|
||||
|
@ -3868,7 +3868,7 @@
|
|||
<string name="poi_lavoir">Lavadero público de ropa</string>
|
||||
<string name="poi_waste_transfer_station">Estación de transferencia de residuos</string>
|
||||
<string name="poi_weightbridge">Báscula puente</string>
|
||||
<string name="poi_ranger_station">Estación de guardabosque</string>
|
||||
<string name="poi_ranger_station">Estación de guardabosques</string>
|
||||
<string name="poi_water_source_lake">Lago</string>
|
||||
<string name="poi_water_source_river">Río</string>
|
||||
<string name="poi_water_source_well">Pozo</string>
|
||||
|
@ -3881,4 +3881,14 @@
|
|||
<string name="poi_wildlife_crossing_bat_bridge">Puente para murciélagos</string>
|
||||
<string name="poi_wildlife_crossing">Cruce de vida silvestre</string>
|
||||
<string name="poi_swimming_area">Área de natación</string>
|
||||
<string name="poi_summit_register_yes">Registro de la cumbre: sí</string>
|
||||
<string name="poi_summit_register_no">Registro de la cumbre: no</string>
|
||||
<string name="poi_piste_status_open">Estado de la pista: abierto</string>
|
||||
<string name="poi_piste_status_closed">Estado de la pista: cerrado</string>
|
||||
<string name="poi_piste_ski_jump">Salto con esquís</string>
|
||||
<string name="poi_piste_name">Nombre de la pista</string>
|
||||
<string name="poi_patrolled_yes">Patrullado: sí</string>
|
||||
<string name="poi_patrolled_no">Patrullado: no</string>
|
||||
<string name="poi_mobile_library">Biblioteca móvil (parada)</string>
|
||||
<string name="poi_gladed_yes">Arboleda: sí</string>
|
||||
</resources>
|
|
@ -742,7 +742,6 @@
|
|||
<string name="avoid_motorway">Sin autopistas</string>
|
||||
<string name="auto_zoom_map_descr">Nivel de zoom según la velocidad (mientras el mapa se sincroniza con la ubicación actual).</string>
|
||||
<string name="auto_zoom_map">Zoom automático del mapa</string>
|
||||
<string name="snap_to_road_descr">Ajusta la ubicación al camino durante la navegación.</string>
|
||||
<string name="snap_to_road">Ajustar al camino</string>
|
||||
<string name="interrupt_music_descr">Las indicaciones por voz pausan la reproducción de música.</string>
|
||||
<string name="interrupt_music">Pausar música</string>
|
||||
|
@ -774,7 +773,7 @@
|
|||
<string name="osmand_plus_short_description_80_chars">Visor y navegador móvil global de mapas OSM con y sin conexión</string>
|
||||
<string name="osmand_plus_long_description_1000_chars">OsmAnd+ (OSM Automated Navigation Directions, y en español, Guía de Navegación Automatizada de OSM)
|
||||
\n
|
||||
\nOsmAnd+ es un software de navegación de código abierto con acceso a una amplia variedad de datos globales de OSM. Todos los datos del mapa (vectores y teselas), pueden ser almacenados en la memoria del teléfono para su uso sin conexión. Ofrece funcionalidades de rutas con y sin conexión, incluyendo guía de giro-a-giro por voz.
|
||||
\n OsmAnd+ es un software de navegación de código abierto con acceso a una amplia variedad de datos globales de OSM. Todos los datos del mapa (vectores y teselas), pueden ser almacenados en la memoria del teléfono para su uso sin conexión. Ofrece funcionalidades de rutas con y sin conexión, incluyendo guía de giro-a-giro por voz.
|
||||
\n
|
||||
\n OsmAnd+ es la versión de pago de la aplicación, comprándola ayudas al proyecto, financias el desarrollo de nuevas funciones, y recibes las últimas actualizaciones.
|
||||
\n
|
||||
|
@ -1222,8 +1221,7 @@
|
|||
<string name="osmand_net_previously_installed">Todos los datos sin conexión en la versión vieja de OsmAnd son compatibles con la nueva versión, pero los puntos de Favoritos deben exportarse desde la versión vieja y luego, importarse en la nueva.</string>
|
||||
<string name="build_installed">Compilación {0} instalada ({1}).</string>
|
||||
<string name="downloading_build">Descargando compilación…</string>
|
||||
<string name="install_selected_build">¿Instalar OsmAnd?
|
||||
\nVersión: {0}
|
||||
<string name="install_selected_build">¿Instalar OsmAnd {0}\?
|
||||
\nFecha: {1}
|
||||
\nTamaño: {2} MB</string>
|
||||
<string name="loading_builds_failed">Error al recuperar la lista de compilaciones de OsmAnd</string>
|
||||
|
@ -1992,7 +1990,6 @@
|
|||
<string name="route_stops_before">%1$s parada(s) anterior(es)</string>
|
||||
<string name="rendering_attr_hideOverground_name">Objetos en superficie</string>
|
||||
<string name="routing_attr_short_way_name">Ruta de bajo consumo (corta)</string>
|
||||
<string name="routing_attr_short_way_description">Usa la ruta de menor consumo en combustible (usualmente la más corta).</string>
|
||||
<string name="replace_favorite_confirmation">¿Reemplazar el Favorito «%1$s»?</string>
|
||||
<string name="shared_string_change">Cambiar</string>
|
||||
<string name="get_started">Empezar</string>
|
||||
|
@ -2063,7 +2060,7 @@
|
|||
<string name="shared_string_notifications">Notificaciones</string>
|
||||
<string name="gpx_no_tracks_title">Sin archivos de trazas aún</string>
|
||||
<string name="gpx_no_tracks_title_folder">También puedes añadir archivos de trazas a la carpeta</string>
|
||||
<string name="gpx_add_track">Añadir GPX</string>
|
||||
<string name="gpx_add_track">Añadir más…</string>
|
||||
<string name="shared_string_appearance">Aspecto</string>
|
||||
<string name="rendering_value_fine_name">Muy fino</string>
|
||||
<string name="route_calculation">Cálculo de la ruta</string>
|
||||
|
@ -2178,7 +2175,7 @@
|
|||
<string name="shared_string_time">Tiempo</string>
|
||||
<string name="total_distance">Distancia total</string>
|
||||
<string name="routing_attr_height_obstacles_name">Usar datos de elevación</string>
|
||||
<string name="routing_attr_height_obstacles_description">Incluye como factor, la elevación del terreno (según datos de SRTM, ASTER y EU-DEM).</string>
|
||||
|
||||
<string name="routing_attr_driving_style_name">Estilo de conducción</string>
|
||||
<string name="select_gpx_folder">Marcar la carpeta del archivo GPX</string>
|
||||
<string name="file_can_not_be_moved">No se pudo mover el archivo.</string>
|
||||
|
@ -2438,7 +2435,7 @@
|
|||
<string name="average">Promedio</string>
|
||||
<string name="of">%1$d de %2$d</string>
|
||||
<string name="ascent_descent">Ascenso/Descenso</string>
|
||||
<string name="moving_time">Tiempo moviéndose</string>
|
||||
<string name="moving_time">Tiempo en movimiento</string>
|
||||
<string name="max_min">Máx/Min</string>
|
||||
<string name="min_max">Min/Máx</string>
|
||||
<string name="rendering_value_translucent_pink_name">Rosa translúcido</string>
|
||||
|
@ -3650,7 +3647,7 @@
|
|||
<string name="system_screen_timeout">Usar el tiempo de espera de la pantalla del sistema</string>
|
||||
<string name="storage_format">Formato de almacenamiento</string>
|
||||
<string name="sqlite_db_file">Archivo SQLiteDB</string>
|
||||
<string name="shared_string_tones">tonos</string>
|
||||
<string name="shared_string_tones">toneladas</string>
|
||||
<string name="shared_string_night_map">Mapa nocturno</string>
|
||||
<string name="shared_string_meters">metros</string>
|
||||
<string name="shared_string_delete_all_q">¿Borrar todo\?</string>
|
||||
|
@ -3728,8 +3725,8 @@
|
|||
<string name="route_between_points">Ruta entre puntos</string>
|
||||
<string name="plan_a_route">Planificar ruta</string>
|
||||
<string name="osm_edit_closed_note">Nota de OSM cerrada</string>
|
||||
<string name="gpx_split_interval_none_descr">Marca la opción de división deseada: por tiempo o por distancia.</string>
|
||||
<string name="gpx_split_interval_descr">Marca el intervalo en el que se mostrarán las marcas con distancia o tiempo en la traza.</string>
|
||||
<string name="gpx_split_interval_none_descr">Elige la opción de división deseada: por tiempo o por distancia.</string>
|
||||
<string name="gpx_split_interval_descr">Elige el intervalo de la traza en el que se mostrarán las marcas con la distancia o el tiempo.</string>
|
||||
<string name="gpx_direction_arrows">Flechas de dirección</string>
|
||||
<string name="app_mode_wheelchair_forward">Silla de ruedas (hacia adelante)</string>
|
||||
<string name="app_mode_wheelchair">Silla de ruedas</string>
|
||||
|
@ -3934,7 +3931,6 @@
|
|||
<string name="plan_route_add_new_segment">Añadir nuevo segmento</string>
|
||||
<string name="ltr_or_rtl_combine_via_star">%1$s * %2$s</string>
|
||||
<string name="lang_de_casual">Alemán (casual)</string>
|
||||
<string name="elevation_data">Puedes usar los datos de elevación para tener en cuenta el ascenso y descenso del viaje</string>
|
||||
<string name="app_mode_light_aircraft">Avión ligero</string>
|
||||
<string name="shared_string_last_used">Usado por última vez</string>
|
||||
<string name="routing_attr_prefer_hiking_routes_name">Preferir rutas de senderismo</string>
|
||||
|
@ -3947,32 +3943,93 @@
|
|||
<string name="profile_type_user_string">Perfil de usuario</string>
|
||||
<string name="profile_type_osmand_string">Perfil de OsmAnd</string>
|
||||
<string name="profile_by_default_description">Elige el perfil que será usado al iniciar la aplicación.</string>
|
||||
<string name="voice_prompts_timetable">Tiempo de indicaciones por voz</string>
|
||||
<string name="voice_prompts_timetable">Tiempo de los avisos por voz</string>
|
||||
<string name="select_folder">Elegir carpeta</string>
|
||||
<string name="shared_string_folders">Carpetas</string>
|
||||
<string name="change_folder">Cambiar carpeta</string>
|
||||
<string name="add_online_routing_engine"></string>
|
||||
<string name="edit_online_routing_engine"></string>
|
||||
<string name="shared_string_subtype"></string>
|
||||
<string name="shared_string_vehicle"></string>
|
||||
<string name="shared_string_api_key"></string>
|
||||
<string name="shared_string_server_url"></string>
|
||||
<string name="shared_string_enter_param"></string>
|
||||
<string name="keep_it_empty_if_not"></string>
|
||||
<string name="online_routing_example_hint"></string>
|
||||
<string name="test_route_calculation"></string>
|
||||
<string name="routing_engine_vehicle_type_driving"></string>
|
||||
<string name="routing_engine_vehicle_type_foot"></string>
|
||||
<string name="routing_engine_vehicle_type_bike"></string>
|
||||
<string name="routing_engine_vehicle_type_car"></string>
|
||||
<string name="message_error_recheck_parameters"></string>
|
||||
<string name="copy_address"></string>
|
||||
<string name="online_routing_engine"></string>
|
||||
<string name="online_routing_engines"></string>
|
||||
<string name="select_folder_descr"></string>
|
||||
<string name="shared_string_empty"></string>
|
||||
<string name="analyze_by_intervals"></string>
|
||||
<string name="upload_to_openstreetmap"></string>
|
||||
<string name="edit_track"></string>
|
||||
<string name="rename_track"></string>
|
||||
<string name="add_online_routing_engine">Añadir motor de navegación en línea</string>
|
||||
<string name="edit_online_routing_engine">Editar motor de navegación en línea</string>
|
||||
<string name="shared_string_subtype">Subtipo</string>
|
||||
<string name="shared_string_vehicle">Vehículo</string>
|
||||
<string name="shared_string_api_key">Clave de la API</string>
|
||||
<string name="shared_string_server_url">URL del servidor</string>
|
||||
<string name="shared_string_enter_param">Ingresa parámetro</string>
|
||||
<string name="keep_it_empty_if_not">Si no, mantenerlo vacío</string>
|
||||
<string name="online_routing_example_hint">La URL con todos los parámetros se verá así:</string>
|
||||
<string name="test_route_calculation">Cálculo de la ruta de prueba</string>
|
||||
<string name="routing_engine_vehicle_type_driving">Automóvil</string>
|
||||
<string name="routing_engine_vehicle_type_foot">Peatón</string>
|
||||
<string name="routing_engine_vehicle_type_bike">Bicicleta</string>
|
||||
<string name="routing_engine_vehicle_type_car">Automóvil</string>
|
||||
<string name="message_error_recheck_parameters"/>
|
||||
<string name="copy_address">Copiar dirección</string>
|
||||
<string name="online_routing_engine">Motor de navegación en línea</string>
|
||||
<string name="online_routing_engines">Motores de navegación en línea</string>
|
||||
<string name="select_folder_descr">Elegir carpeta o añadir una nueva</string>
|
||||
<string name="shared_string_empty">Vacío</string>
|
||||
<string name="analyze_by_intervals">Analizar intervalos divididos</string>
|
||||
<string name="upload_to_openstreetmap">Subir a OpenStreetMap</string>
|
||||
<string name="edit_track">Editar traza</string>
|
||||
<string name="rename_track">Renombrar traza</string>
|
||||
<string name="uploading_count">Subiendo %1$d de %2$d</string>
|
||||
<string name="uploaded_count">Se subieron %1$d de %2$d</string>
|
||||
<string name="upload_photo_completed">Subida completa</string>
|
||||
<string name="upload_photo">Subiendo</string>
|
||||
<string name="toast_select_edits_for_upload">Marcar ediciones a subir</string>
|
||||
<string name="start_recording">Iniciar grabación</string>
|
||||
<string name="show_track_on_map">Mostrar traza en el mapa</string>
|
||||
<string name="shared_string_turn">Girar</string>
|
||||
<string name="shared_string_sec">seg</string>
|
||||
<string name="routing_engine_vehicle_type_wheelchair">Silla de ruedas</string>
|
||||
<string name="routing_engine_vehicle_type_walking">Peatón</string>
|
||||
<string name="routing_engine_vehicle_type_truck">Camión</string>
|
||||
<string name="routing_engine_vehicle_type_small_truck">Camión pequeño</string>
|
||||
<string name="routing_engine_vehicle_type_scooter">Motoneta</string>
|
||||
<string name="routing_engine_vehicle_type_racingbike">Bicicleta de carreras</string>
|
||||
<string name="routing_engine_vehicle_type_mtb">Bicicleta de montaña</string>
|
||||
<string name="routing_engine_vehicle_type_hiking">Senderismo</string>
|
||||
<string name="routing_engine_vehicle_type_hgv">Vehículos pesados</string>
|
||||
<string name="routing_engine_vehicle_type_cycling_road">Ciclismo de ruta</string>
|
||||
<string name="routing_engine_vehicle_type_cycling_regular">Ciclismo regular</string>
|
||||
<string name="routing_engine_vehicle_type_cycling_mountain">Ciclismo de montaña</string>
|
||||
<string name="routing_engine_vehicle_type_cycling_electric">Ciclismo eléctrico</string>
|
||||
<string name="opr_use_dev_url">Usar test.openplacereviews.org</string>
|
||||
<string name="open_place_reviews_plugin_description">OpenPlaceReviews es un proyecto impulsado por la comunidad sobre lugares públicos como restaurantes, hoteles, museos, puntos de referencia. Recoge toda la información pública sobre ellos como fotos, reseñas, enlaces a otros servicios como OpenStreetMap y Wikipedia.
|
||||
\n
|
||||
\nTodos los datos de OpenPlaceReviews son abiertos y están disponibles para todos: http://openplacereviews.org/data.
|
||||
\n
|
||||
\nPuedes leer más en: https://openplacereviews.org</string>
|
||||
<string name="open_place_reviews">OpenPlaceReviews</string>
|
||||
<string name="message_server_error">Error de servidor: %1$s</string>
|
||||
<string name="message_name_is_already_exists">El nombre ya existe</string>
|
||||
<string name="login_open_place_reviews">Acceder a OpenPlaceReviews</string>
|
||||
<string name="hillshade_slope_contour_lines">Sombreado / Pendiente / Curvas de nivel</string>
|
||||
<string name="delete_waypoints">Borrar puntos de referencia</string>
|
||||
<string name="delete_online_routing_engine">¿Borrar este motor de navegación en línea\?</string>
|
||||
<string name="copy_to_map_markers">Copiar a «Marcadores del mapa»</string>
|
||||
<string name="copy_to_map_favorites">Copiar a favoritos</string>
|
||||
<string name="context_menu_read_full">Leer completo</string>
|
||||
<string name="context_menu_edit_descr">Editar descripción</string>
|
||||
<string name="announcement_time_title">Tiempo de anuncio</string>
|
||||
<string name="announcement_time_prepare_long">Preparación larga</string>
|
||||
<string name="announcement_time_prepare">Preparar</string>
|
||||
<string name="announcement_time_passing">Pasando</string>
|
||||
<string name="announcement_time_off_route">Fuera de la ruta</string>
|
||||
<string name="announcement_time_intervals">Intervalos de tiempo y distancia</string>
|
||||
<string name="announcement_time_descr">El tiempo de anuncio de las diferentes indicaciones por voz depende del tipo de mensaje, la velocidad de navegación actual y la velocidad de navegación predefinida.</string>
|
||||
<string name="announcement_time_arrive">Has llegado al destino</string>
|
||||
<string name="announcement_time_approach">Acercarse</string>
|
||||
<string name="activity_type_winter_name">Invierno</string>
|
||||
<string name="activity_type_water_name">Agua</string>
|
||||
<string name="activity_type_walking_name">Peatón</string>
|
||||
<string name="activity_type_snowmobile_name">Motonieve</string>
|
||||
<string name="activity_type_running_name">Correr</string>
|
||||
<string name="activity_type_riding_name">Equitación</string>
|
||||
<string name="activity_type_racing_name">Carreras</string>
|
||||
<string name="activity_type_offroad_name">Todo terreno</string>
|
||||
<string name="activity_type_mountainbike_name">Bicicleta de montaña</string>
|
||||
<string name="activity_type_motorbike_name">Motocicleta</string>
|
||||
<string name="activity_type_hiking_name">Senderismo</string>
|
||||
<string name="activity_type_cycling_name">Bicicleta</string>
|
||||
<string name="activity_type_car_name">Automóvil</string>
|
||||
</resources>
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue