diff --git a/OsmAnd-java/src/net/osmand/binary/BinaryInspector.java b/OsmAnd-java/src/net/osmand/binary/BinaryInspector.java index 2f24bddba8..0626ed9183 100644 --- a/OsmAnd-java/src/net/osmand/binary/BinaryInspector.java +++ b/OsmAnd-java/src/net/osmand/binary/BinaryInspector.java @@ -64,7 +64,7 @@ public class BinaryInspector { "-vmap", "-vmapobjects", // "-vrouting", // "-vaddress", "-vcities", "-vstreets", "-vstreetgroups","-vbuildings", - //"-zoom=16", +// "-zoom=16", // "-bbox=1.74,51.17,1.75,51.16", "/home/victor/projects/osmand/osm-gen/Map.obf" }); diff --git a/OsmAnd-java/src/net/osmand/data/RotatedTileBox.java b/OsmAnd-java/src/net/osmand/data/RotatedTileBox.java index 42e69f8f9e..707db0b662 100644 --- a/OsmAnd-java/src/net/osmand/data/RotatedTileBox.java +++ b/OsmAnd-java/src/net/osmand/data/RotatedTileBox.java @@ -11,6 +11,7 @@ public class RotatedTileBox { private int zoom; private double mapDensity = 1; private double zoomAnimation; + private double zoomFloatPart; private int cx; private int cy; private int pixWidth; @@ -42,6 +43,7 @@ public class RotatedTileBox { this.lon = r.lon; this.zoom = r.zoom; this.mapDensity = r.mapDensity; + this.zoomFloatPart = r.zoomFloatPart; this.zoomAnimation = r.zoomAnimation; this.rotate = r.rotate; this.density = r.density; @@ -67,7 +69,7 @@ public class RotatedTileBox { } public void calculateDerivedFields() { - zoomFactor = Math.pow(2, zoomAnimation ) * 256 * mapDensity; + zoomFactor = Math.pow(2, zoomAnimation + zoomFloatPart) * 256 * mapDensity; double rad = Math.toRadians(this.rotate); rotateCos = Math.cos(rad); rotateSin = Math.sin(rad); @@ -341,12 +343,18 @@ public class RotatedTileBox { public double getZoomAnimation() { return zoomAnimation; } - - public void setZoomAnimation(double z) { - this.zoomAnimation = z; - calculateDerivedFields(); + + public double getZoomFloatPart() { + return zoomFloatPart; } + public void setZoomAndAnimation(int zoom, double zoomAnimation, double zoomFloatPart) { + this.zoomAnimation = zoomAnimation; + this.zoomFloatPart = zoomFloatPart; + this.zoom = zoom; + calculateDerivedFields(); + } + public void setZoomAndAnimation(int zoom, double zoomAnimation) { this.zoomAnimation = zoomAnimation; this.zoom = zoom; @@ -406,12 +414,6 @@ public class RotatedTileBox { calculateDerivedFields(); } - public void setZoomWithAnimate(int zoom,double zoomToAnimate) { - this.zoom = zoom; - this.zoomAnimation = zoomToAnimate; - calculateDerivedFields(); - } - public float getRotate() { return rotate; } diff --git a/OsmAnd-java/src/net/osmand/render/RenderingRulesStorage.java b/OsmAnd-java/src/net/osmand/render/RenderingRulesStorage.java index 6cca8467bb..766cbb39b5 100644 --- a/OsmAnd-java/src/net/osmand/render/RenderingRulesStorage.java +++ b/OsmAnd-java/src/net/osmand/render/RenderingRulesStorage.java @@ -107,12 +107,10 @@ public class RenderingRulesStorage { if (renderingAttributes.containsKey(e.getKey())) { RenderingRule root = renderingAttributes.get(e.getKey()); List list = e.getValue().getIfElseChildren(); - e.getValue().addToBeginIfElseChildren(root); for (RenderingRule every : list) { - if(every != root) { - root.addIfElseChildren(every); - } + root.addIfElseChildren(every); } + e.getValue().addToBeginIfElseChildren(root); } else { renderingAttributes.put(e.getKey(), e.getValue()); } diff --git a/OsmAnd-java/src/net/osmand/router/RouteResultPreparation.java b/OsmAnd-java/src/net/osmand/router/RouteResultPreparation.java index 3e1d852af1..2cd20bb3a3 100644 --- a/OsmAnd-java/src/net/osmand/router/RouteResultPreparation.java +++ b/OsmAnd-java/src/net/osmand/router/RouteResultPreparation.java @@ -42,8 +42,10 @@ public class RouteResultPreparation { splitRoadsAndAttachRoadSegments(ctx, result); // calculate time calculateTimeSpeed(ctx, result); - + addTurnInfo(ctx.leftSideNavigation, result); + determineTurnsToMerge(ctx.leftSideNavigation, result); + addTurnInfoDescriptions(result); return result; } @@ -331,8 +333,6 @@ public class RouteResultPreparation { private void addTurnInfo(boolean leftside, List result) { - int prevSegment = -1; - float dist = 0; int next = 1; for (int i = 0; i <= result.size(); i = next) { TurnType t = null; @@ -341,47 +341,31 @@ public class RouteResultPreparation { t = getTurnInfo(result, i, leftside); // justify turn if(t != null && i < result.size() - 1) { - boolean tl = TurnType.TL == t.getValue(); - boolean tr = TurnType.TR == t.getValue(); - if(tl || tr) { - TurnType tnext = getTurnInfo(result, i + 1, leftside); - if (tnext != null && result.get(i).getDistance() < 35) { // - boolean ut = true; - if (i > 0) { - double uTurn = MapUtils.degreesDiff(result.get(i - 1).getBearingEnd(), result - .get(i + 1).getBearingBegin()); - if (Math.abs(uTurn) < 120) { - ut = false; - } - } - String highway = result.get(i).getObject().getHighway(); - if(highway == null || highway.endsWith("track") || highway.endsWith("services") || highway.endsWith("service") - || highway.endsWith("path")) { - ut = false; - } - if (ut) { - if (tl && TurnType.TL == tnext.getValue()) { - next = i + 2; - t = TurnType.valueOf(TurnType.TU, false); - } else if (tr && TurnType.TR == tnext.getValue()) { - next = i + 2; - t = TurnType.valueOf(TurnType.TU, true); - } - } - } + TurnType jt = justifyUTurn(leftside, result, i, t); + if(jt != null) { + t = jt; + next = i + 2; } } result.get(i).setTurnType(t); } - if (t != null || i == result.size()) { + } + } + + protected void addTurnInfoDescriptions(List result) { + int prevSegment = -1; + float dist = 0; + for (int i = 0; i <= result.size(); i++) { + if (i == result.size() || result.get(i).getTurnType() != null) { if (prevSegment >= 0) { String turn = result.get(prevSegment).getTurnType().toString(); if (result.get(prevSegment).getTurnType().getLanes() != null) { turn += Arrays.toString(result.get(prevSegment).getTurnType().getLanes()); } - result.get(prevSegment).setDescription(turn + MessageFormat.format(" and go {0,number,#.##} meters", dist)); - if(result.get(prevSegment).getTurnType().isSkipToSpeak()) { - result.get(prevSegment).setDescription("-*"+result.get(prevSegment).getDescription()); + result.get(prevSegment).setDescription( + turn + MessageFormat.format(" and go {0,number,#.##} meters", dist)); + if (result.get(prevSegment).getTurnType().isSkipToSpeak()) { + result.get(prevSegment).setDescription("-*" + result.get(prevSegment).getDescription()); } } prevSegment = i; @@ -391,8 +375,37 @@ public class RouteResultPreparation { dist += result.get(i).getDistance(); } } + } - determineTurnsToMerge(leftside, result); + protected TurnType justifyUTurn(boolean leftside, List result, int i, TurnType t) { + boolean tl = TurnType.TL == t.getValue(); + boolean tr = TurnType.TR == t.getValue(); + if(tl || tr) { + TurnType tnext = getTurnInfo(result, i + 1, leftside); + if (tnext != null && result.get(i).getDistance() < 35) { // + boolean ut = true; + if (i > 0) { + double uTurn = MapUtils.degreesDiff(result.get(i - 1).getBearingEnd(), result + .get(i + 1).getBearingBegin()); + if (Math.abs(uTurn) < 120) { + ut = false; + } + } + String highway = result.get(i).getObject().getHighway(); + if(highway == null || highway.endsWith("track") || highway.endsWith("services") || highway.endsWith("service") + || highway.endsWith("path")) { + ut = false; + } + if (ut) { + if (tl && TurnType.TL == tnext.getValue()) { + return TurnType.valueOf(TurnType.TU, false); + } else if (tr && TurnType.TR == tnext.getValue()) { + return TurnType.valueOf(TurnType.TU, true); + } + } + } + } + return null; } private void determineTurnsToMerge(boolean leftside, List result) { @@ -420,14 +433,21 @@ public class RouteResultPreparation { continue; } - // Only allow slight turns that are nearby to be merged. - if (currentSegment.getDistance() < 60 && nextTurn.getLanes().length <= currentTurn.getLanes().length - && TurnType.isSlightTurn(currentTurn.getValue())) { + // Only allow slight turns that are nearby to be merged. + // [disabled cause it is valuable for two consequent sharp turns as well] + // the distance could be longer on highways and shorter in city + String hw = currentSegment.getObject().getHighway(); + double mergeDistance = 200; + if(hw != null && (hw.startsWith("trunk") || hw.startsWith("motorway"))) { + mergeDistance = 400; + } + if (currentSegment.getDistance() < mergeDistance/* + && TurnType.isSlightTurn(currentTurn.getValue())*/) { mergeTurnLanes(leftside, currentSegment, nextSegment); } } } - + private void mergeTurnLanes(boolean leftSide, RouteSegmentResult currentSegment, RouteSegmentResult nextSegment) { TurnType currentTurn = currentSegment.getTurnType(); TurnType nextTurn = nextSegment.getTurnType(); @@ -435,36 +455,75 @@ public class RouteResultPreparation { && TurnType.getPrimaryTurn(nextTurn.getLanes()[0]) != 0; if (isUsingTurnLanes) { int[] lanes = new int[currentTurn.getLanes().length]; - // Unset the allowed lane bit - for (int i = 0; i < lanes.length; i++) { - lanes[i] = currentTurn.getLanes()[i] & ~1; - } - - // Find the first lane that matches (based on the turn being taken), and how many lanes match - int matchingIndex = 0; - int maxMatchedLanes = 0; - for (int i = 0; i < lanes.length; i++) { - int matchedLanes = 0; - for (int j = 0; j < nextTurn.getLanes().length - i; j++) { - if (TurnType.getPrimaryTurn(nextTurn.getLanes()[j]) - == TurnType.getPrimaryTurn(currentTurn.getLanes()[i + j])) { - matchedLanes++; + int activeIndex = -1; + int activeLen = 0; + // define enabled lanes + for(int i = 0; i < lanes.length; i++) { + int ln = currentTurn.getLanes()[i]; + lanes[i] = ln & ~1; + if((ln & 1) > 0) { + if(activeIndex == -1) { + activeIndex = i; + activeLen++; } else { - break; + activeLen++; } } - if (matchedLanes > maxMatchedLanes) { - matchingIndex = i; - maxMatchedLanes = matchedLanes; - } } - if (maxMatchedLanes <= 1) { + if(activeLen < 2) { return; } - - // Copy the allowed bit from the next segment's lanes to the current segment's matching lanes - for (int i = matchingIndex; i - matchingIndex < nextTurn.getLanes().length; i++) { - lanes[i] |= nextTurn.getLanes()[i - matchingIndex] & 1; + int targetActiveIndex = -1; + int targetActiveLen = 0; + int[] nextLanes = nextTurn.getLanes(); + for(int i = 0; i < nextLanes.length; i++) { + int ln = nextLanes[i]; + if((ln & 1) > 0) { + if(targetActiveIndex == -1) { + targetActiveIndex = i; + targetActiveLen++; + } else { + targetActiveLen++; + } + } + } + if(targetActiveIndex == -1) { + return; + } + boolean changed = false; + // next turn is left + if(targetActiveIndex == 0) { + // let only the most left lanes be enabled + if(targetActiveLen <= activeLen) { + activeLen = targetActiveLen; + changed = true; + } + } else if(targetActiveIndex + targetActiveLen == nextLanes.length) { + // next turn is right + // let only the most right lanes be enabled + if(targetActiveLen <= activeLen) { + activeIndex += (activeLen - targetActiveLen); + changed = true; + } + } else { + // next turn is get through (take out the left and the right turn) + if(nextLanes.length >= activeLen) { + float ratio = (nextLanes.length / (float)activeLen); + activeLen = (int) Math.ceil(targetActiveLen * ratio); + activeIndex = (int) Math.floor(targetActiveIndex / ratio); + changed = true; + } + } + if(!changed) { + return; + } + + + // set the allowed lane bit + for (int i = 0; i < lanes.length; i++) { + if(i >= activeIndex && i < activeIndex + activeLen) { + lanes[i] |= 1; + } } currentTurn.setLanes(lanes); int turn = inferTurnFromLanes(lanes); diff --git a/OsmAnd/res/layout/dashboard.xml b/OsmAnd/res/layout/dashboard.xml index c271e98699..e295b7919f 100644 --- a/OsmAnd/res/layout/dashboard.xml +++ b/OsmAnd/res/layout/dashboard.xml @@ -55,13 +55,12 @@ android:layout_width="match_parent" android:layout_height="wrap_content"/> - + + + + + + Можна сьцягнуць: %1$s Максымальнае павелічэньне: %1$s Мінімальнае павелічэньне: %1$s - Зьвесткі квадрата: %1$s - Крыніца квадратаў мапы %1$s пасьпяхова захаваная + Зьвесткі фрагмэнту: %1$s + Крыніца фрагмэнтаў мапы %1$s пасьпяхова захаваная Эліптычны меркатар Максімальнае павелічэньне Тэрмін дзеяньня (у хвілінах) @@ -611,12 +611,12 @@ OsmAnd мае адкрыты зыходны код і актыўна разві Сьцягваньне і кіраваньне файламі мапаў, што захоўваюцца на вашым прыстасаваньні Актывуйце модуль онлайн мапаў, каб выбіраць розныя крыніцы для мапаў Сеціўныя і растравыя мапы - Карыстацца сеціўнымі мапамі (cьцягнуць і захоўваць на картцы SD) + Карыстацца сеціўнымі мапамі (cьцягнуць і захоўваць фрагмэнты на картцы SD) Сеціўныя мапы - Настройка крыніц анлайн або кэшаваных растравых мапаў + Настройка крыніц сеціўных або кэшаваных растравых мапаў Налады мапы Налады адлюстраваньня мапы - Паказаць налады для канфігураваньня сеткавых ці кэшаваных мапаў як базавых мапаў ці як overlay/underlay мапаў. Гэтыя мапы могуць быць падрыхтаваныя папярэдне й скапіяваныя ў каталёг зьвестак OsmAnd. + Паказаць налады для канфігураваньня сеткавых ці кэшаваных растравых мапаў у якасьці асноўнай мапы ці дадатковым слоем. Гэтыя мапы могуць быць падрыхтаваныя папярэдне й скапіяваныя ў каталёг зьвестак OsmAnd. Паказаць налады для спэцыяльных магчымасьцяў даступнасьці. Пашыраныя налады @@ -978,7 +978,7 @@ OsmAnd мае адкрыты зыходны код і актыўна разві Мапа для накладаньня Абраць мапу для накладаньня Мапа ўжо ўсталявана, налады будуць абноўлены - Выберыце (растравыя) мапы для ўстаноўкі або абнаўленьня + Выберыце (растравыя) мапы для ўсталёўкі або абнаўленьня Патрабуецца падключэнне да Інтэрнэту для выкананьня аперацыі, але яго няма Усталяваць яшчэ… Мінімальнае павелічэньне для выкарыстаньня вектарных мапаў @@ -992,7 +992,7 @@ OsmAnd мае адкрыты зыходны код і актыўна разві Немагчыма апрацаваць запыт \'%s\' Пошук ў лакальных картах Сістэма - Абраць мову інтэрфэйсу + Выбар мовы інтэрфэйсу (перазапусьціце OsmAnd пасьля зьмены) Мова інтэрфэйсу няскончана Абраць крыніцу мапы @@ -1060,7 +1060,7 @@ OsmAnd мае адкрыты зыходны код і актыўна разві Бліжэйшыя POI Свой фільтар Сеткавы NameFinder - Чытаньне кэшаваных растравых мапаў… + Чытаньне захаваных фрагмэнтаў… Недастаткова памяці для лакальнай мапы \'\'{0}\'\' Версія індэкса \'\'{0}\'\' не падтрымліваецца Навігацыя OsmAnd > 20 км @@ -1076,7 +1076,7 @@ OsmAnd мае адкрыты зыходны код і актыўна разві Не ўдалося атрымаць сьпіс зборак OsmAnd Загружаюцца зборкі OsmAnd… Выберыце зборку OsmAnd для ўстаноўкі - Праграма статуса GPS не ўсталяваная. Пашукаць яе ў Market? + Праграма стану GPS не ўсталяваная. Шукаць яе ў Google Play? Галасавыя каманды не даступныя. Калі ласка, перайдзіце ў \"Налады\" → \"Агульныя\" → \"Галасавыя дадзеныя\" і абярыце ці сьцягніце пакет галасавых падказак. Галасавыя падказкі не абраныя Дзень @@ -1109,7 +1109,7 @@ OsmAnd мае адкрыты зыходны код і актыўна разві Паказаць тэлефон POI набярыце каб фільтраваць Дысплей высокай рэзалюцыі - Не расьцягваць (з размыццём) растравыя мапы на дысплеях з высокай шчыльнасьцю + Не расьцягваць (з размыццём) фрагмэнты мапы на дысплеях з высокай шчыльнасьцю Сьцягнуць Шукаць грамадзкi транспарт Вынiк пошуку транспарту (няма цэлі): @@ -1249,7 +1249,7 @@ OsmAnd мае адкрыты зыходны код і актыўна разві Пазасеціўны пошук Сеціўны пошук Максімальнае павелічэньне онлайн мапаў - Выберыце максімальны ўзровень павелічэньня для сьцягваньня растравых мапаў з Інтэрнэту + Выберыце максімальны ўзровень павелічэньня для сьцягваньня фрагмэнтаў мапы з Інтэрнэту Агульная адлегласьць %1$s, час у дарозе %2$d г. %3$d хв. Абраць сеціўны ці пазасеціўны сэрвіс навігацыі Сэрвіс навігацыі @@ -1271,7 +1271,7 @@ OsmAnd мае адкрыты зыходны код і актыўна разві Пачаць навігацыю Абярыце спачатку месца прызначэньня Навігацыя - Паказаць статус GPS + Паказаць стан GPS Гадзіны працы Адкрыцьцё пакета паправак… Закрыцьцё пакета паправак… @@ -1320,7 +1320,7 @@ OsmAnd мае адкрыты зыходны код і актыўна разві Сьляды будуць захаваныя ў каталог track падчас навігацыі Запісваць сьлед у GPX файл Абнавіць мапу - Абнавіць частку мапы + Абнавіць фрагмэнт мапы Цэль Адлюстроўваць OpenStreetBugs на мапе Паказаць OpenStreetBugs @@ -1339,7 +1339,7 @@ OsmAnd мае адкрыты зыходны код і актыўна разві 3D від Паказаць POI на мапе (выкарыстаць апошні абраны фільтар) Паказаць POI - Выберыце крыніцу анлайн або кэшаваных растравых мапаў + Выберыце крыніцу анлайн або кэшаваных фрагмэнтаў мапы Крыніца растравых мапаў Крыніца мапы Выкарыстоўваць Інтэрнэт @@ -1539,7 +1539,7 @@ OsmAnd мае адкрыты зыходны код і актыўна разві Абнавіць каналы ці і - Статус GPS + Стан GPS Запомніць мой выбар Сусьветная аглядная мапа Сусьветная лыжная мапа @@ -1927,7 +1927,7 @@ OsmAnd мае адкрыты зыходны код і актыўна разві Падрабязнасьці Транспарт Паказаць - Статусны радок + Радок стану Правая панэль Левая панэль Іншыя атрыбуты мапы @@ -1964,10 +1964,10 @@ OsmAnd мае адкрыты зыходны код і актыўна разві Немагчыма cьцягнуць. Калі ласка, праверце ваша Інтэрнэт-злучэньне. Усе cьцягваньні Абнаўленьні - Лякальны + Лякальныя Зона - На поўнач - На ўсход + Па шыраце + Па даўгаце Мова мапы Прыпынкі транспарту Вы хочаце cьцягнуць якія-небудзь мапы? @@ -1982,7 +1982,7 @@ OsmAnd мае адкрыты зыходны код і актыўна разві Не выкарыстоўваць правілы маршрутызацыі ўведзеныя ў v1.9 Па змоўчаньні Стыль аўтадарог - Паказваць папярэджаньні для пешаходаў + Паказваць пешаходныя пераходы Пешаходны пераход Чыгуначны пераезд Паказваць чыгуначныя пераезды diff --git a/OsmAnd/res/values-cs/strings.xml b/OsmAnd/res/values-cs/strings.xml index c5d1a15325..297a909d7c 100644 --- a/OsmAnd/res/values-cs/strings.xml +++ b/OsmAnd/res/values-cs/strings.xml @@ -1810,4 +1810,5 @@ s často kladenými otázkami. Nepoužívat routovací pravidla v1.9 Nepoužívat pravidla výpočtu trasy zavedené ve verzi 1.9 Oznamovat přechody pro chodce - + Výchozí + diff --git a/OsmAnd/res/values-da/strings.xml b/OsmAnd/res/values-da/strings.xml index 95bd8de84f..65c261a0e1 100644 --- a/OsmAnd/res/values-da/strings.xml +++ b/OsmAnd/res/values-da/strings.xml @@ -761,7 +761,7 @@ Kunne ikke fortolke geografisk hensigt \'%s\' Søg geografisk placering System - Vælg sprog + Vælg sprog (genstart OsmAnd efter skift) Sprog ufuldstændig Vælg kortkilde diff --git a/OsmAnd/res/values-de/phrases.xml b/OsmAnd/res/values-de/phrases.xml index 5feadca1f5..8d2165df49 100644 --- a/OsmAnd/res/values-de/phrases.xml +++ b/OsmAnd/res/values-de/phrases.xml @@ -42,7 +42,7 @@ Australischer Fußball Babyartikel Babyklappe - Taschen + Taschengeschäft Gerichtsvollzieher Bäckerei Bank @@ -62,7 +62,7 @@ Badezimmereinrichtung Bettwarengeschäft Bienenzüchter - Getränke + Getränkegeschäft Fahrradständer Fahrradvermietung Fahrradgeschäft @@ -107,7 +107,7 @@ Partyservice Höhleneingang Friedhof - Chalet + Berghütte Ladestation Drogerie Schach @@ -146,7 +146,7 @@ Theaterklub Tourismusverein Veteranenklub - College + Hochschule Kommunikationstumr Gemeindezentrum Firma @@ -155,7 +155,7 @@ Computer-Geschäft Süßwaren Anlage - Lebensmittel + Lebensmittelgeschäft Copy-Shop Kosmetik Gerichtsgebäude @@ -209,10 +209,10 @@ Fjord Blumenhandlung Markthalle - Ford - Fort + Furt + Festung Brunnen - Rahmen + Bilderrahmen-Geschäft Tankstelle Bestatter Seilbahn @@ -307,7 +307,7 @@ Atombombenexplosionsgebiet Militärbereich Historisches Bergwerk - Mineshaft + Grubenschacht Minigolf Handy-Geschäft Kloster @@ -372,7 +372,7 @@ Shintoistische Kultstätte Sikh Kultstätte Taoistische Kultstätte - Plasterer + Stuckateur Spielplatz Installateur Fußpfleger @@ -497,7 +497,7 @@ Sportzentrum Sportartikel Quelle - Stadium + Stadion Baumeister Brunnen Bürobedarf diff --git a/OsmAnd/res/values-de/strings.xml b/OsmAnd/res/values-de/strings.xml index f83c7c9506..72792cb5bc 100644 --- a/OsmAnd/res/values-de/strings.xml +++ b/OsmAnd/res/values-de/strings.xml @@ -1,4 +1,4 @@ - + Geschwindigkeitsbegrenzung Grenzkontrolle @@ -125,30 +125,7 @@ Auf Straße einrasten OsmAnd Karten & Navigation Globale Landkarten- und Navigations-Applikation für Offline und Online-Karten - - OsmAnd (OSM Automated Navigation Directions) - - OsmAnd ist eine Open-Source-Navigationsapplikation mit Zugriff auf eine große Vielfalt öffentlich zugänglicher OpenStreetMap (OSM) Karten weltweit. Alle Karten (Vektor- oder Kachelformate) können lokal auf der Speicherkarte abgelegt und offline verwendet werden. OsmAnd bietet ferner eine offline und online Routing-Funktion inklusive Sprachnavigation. - - Einige der Kernfunktionen: - - Komplette Offline-Funktionalität (Kartenmaterial kann auf dem Gerät abgelegt werden) - - Kompakte Vektorkarten für die ganze Welt verfügbar - - Direktes Herunterladen von Länder- oder Regionenkarten aus der App heraus - - Darstellung mehrerer überlagerter Kartenschichten wie GPX oder Navigations-Tracks, POIs (Points of Interest), Favoriten, Höhenlinien, ÖPNV-Haltestellen, zusätzliche Karten mit wählbarer Transparenz - - Offline Adress- und POI-Suche - - Offlinenavigation für kurze Distanzen (experimentell) - - Auto-, Fahrrad- und Fußgänger-Modus mit - - optionaler automatischer Tag-Nacht-Umschaltung der Anzeige - - optionalem geschwindigkeitsabhängigem Kartenmaßstab - - optionaler Kartenausrichtung nach Kompass oder Bewegungsrichtung - - optionaler Fahrspuranzeige, Geschwindigkeitswarnung, aufgenommene oder TTS Sprachansagen - - Einschränkungen dieser kostenlosen Version von OsmAnd: - - Anzahl der Kartendownloads - - Kein Zugriff auf Wikipedia Offline-POIs - - OsmAnd wird aktiv weiterentwickelt und das Projekt benötigt Mittel für die Entwicklung, die Komplettierung und den Test (Fahrten) neuer Funktionen. Bitte erwägen Sie den Kauf von OsmAnd+, die Förderung spezieller Funktionen oder eine allgemeine Spende auf osmand.net. - + " OsmAnd (OSM Automated Navigation Directions) OsmAnd ist eine Open-Source-Navigationsapplikation mit Zugriff auf eine große Vielfalt öffentlich zugänglicher OpenStreetMap (OSM) Karten weltweit. Alle Karten (Vektor- oder Kachelformate) können lokal auf der Speicherkarte abgelegt und offline verwendet werden. OsmAnd bietet ferner eine offline und online Routing-Funktion inklusive Sprachnavigation. Einige der Kernfunktionen: - Komplette Offline-Funktionalität (Kartenmaterial kann auf dem Gerät abgelegt werden) - Kompakte Vektorkarten für die ganze Welt verfügbar - Direktes Herunterladen von Länder- oder Regionenkarten aus der App heraus - Darstellung mehrerer überlagerter Kartenschichten wie GPX oder Navigations-Tracks, POIs (Points of Interest), Favoriten, Höhenlinien, ÖPNV-Haltestellen, zusätzliche Karten mit wählbarer Transparenz - Offline Adress- und POI-Suche - Offlinenavigation für kurze Distanzen (experimentell) - Auto-, Fahrrad- und Fußgänger-Modus mit - optionaler automatischer Tag-Nacht-Umschaltung der Anzeige - optionalem geschwindigkeitsabhängigem Kartenmaßstab - optionaler Kartenausrichtung nach Kompass oder Bewegungsrichtung - optionaler Fahrspuranzeige, Geschwindigkeitswarnung, aufgenommene oder TTS Sprachansagen Einschränkungen dieser kostenlosen Version von OsmAnd: - Anzahl der Kartendownloads - Kein Zugriff auf Wikipedia Offline-POIs OsmAnd wird aktiv weiterentwickelt und das Projekt benötigt Mittel für die Entwicklung, die Komplettierung und den Test (Fahrten) neuer Funktionen. Bitte erwägen Sie den Kauf von OsmAnd+, die Förderung spezieller Funktionen oder eine allgemeine Spende auf osmand.net. " OsmAnd+ Karten & Navigation Globale Landkarten- und Navigations-Applikation für Offline und Online-Karten @@ -966,9 +943,9 @@ vorherige Strecke zu passierende Haltestellen Streckenlänge - Öffentlicher Personenverkehr + ÖPNV OK - Öffentl. Haltestellen auf der Karte anzeigen + ÖPNV-Haltestellen auf der Karte anzeigen Haltestellen anzeigen Navigationsanwendung OsmAnd POI-Daten wurden erfolgreich aktualisiert ({0} wurden geladen) @@ -1538,9 +1515,9 @@ \n Hinweis 1: Die ursprünglichen Dateien bleiben hiervon unberührt, können aber nachfolgend manuell gelöscht werden. \n Hinweis 2: Die Dateien können dann nicht mehr von OsmAnd und OsmAnd+ gemeinsam genutzt werden." Soll OsmAnd auch die Dateien an den neuen Speicherort verschieben? Mit \'Nein\' wird OsmAnd den neuen Speicherort nur anlegen und als Standard verwenden. - Datei (%s) wird an den neuen Speicherort kopiert… - OsmAnd-Dateien werden zum neuen Speicherort (%s) kopiert… - OsmAnd-Dateien werden kopiert… + Datei (%s) wird an den neuen Speicherort kopiert… + OsmAnd-Dateien werden zum neuen Speicherort (%s) kopiert… + OsmAnd-Dateien werden kopiert… OsmAnd-Offline-Route berechnen LKW Navigations-Einstellungen @@ -1838,7 +1815,7 @@ Afghanistan, Ägypten, Albanien, Algerien, Andorra, Angola, Anguilla, Antigua an Geräte-ID Konfigurieren der Überwachungs-Einstellungen und des persönlichen Überwachungs-Kanals - "Erweiterte OpenStreetMap-basierte Live-Überwachung, siehe http://osmo.mobi … Ermöglicht die Positionsdarstellung in von einzelnen Geräten in Echtzeit. Bei anonym erstellten Gruppen sind die Optionen etwas eingeschränkt: Lebensdauer der Gruppe nur für einige Tage, auch ist keine zentrale Steuerung der Gruppe möglich. Es gibt verschiedene Einstellungen für zeitlich begrenzte oder Dauer-Aufzeichnung. Voll funktionsfähige Gruppen müssen auf der genannten Internetseite erstellt werden, auf die Gruppe haben nur registrierte Nutzer Zugriff." + "Erweiterte OpenStreetMap-basierte Live-Überwachung, siehe http://osmo.mobi … Ermöglicht die Positionsdarstellung in von einzelnen Geräten in Echtzeit. Bei anonym erstellten Gruppen sind die Optionen etwas eingeschränkt: Lebensdauer der Gruppe nur für einige Tage, auch ist keine zentrale Steuerung der Gruppe möglich. Es gibt verschiedene Einstellungen für zeitlich begrenzte oder Dauer-Aufzeichnung. Voll funktionsfähige Gruppen müssen auf der genannten Internetseite erstellt werden, auf die Gruppe haben nur registrierte Nutzer Zugriff. " OsMo (Erweiterte Live-Überwachung) OsMo OpenStreetMap-Überwachung OsMo Verbindungsproblem: @@ -1999,7 +1976,7 @@ Afghanistan, Ägypten, Albanien, Algerien, Andorra, Angola, Anguilla, Antigua an Bildschirm aktivieren Bildschirm bei Navigationsanweisung aktivieren Niemals - Auf Karte auswählen… + Auf Karte auswählen… Straße blockieren… Straßen- und Eisenbahnlinien Stadtbahnlinien @@ -2044,7 +2021,7 @@ Afghanistan, Ägypten, Albanien, Algerien, Andorra, Angola, Anguilla, Antigua an Eisenbahnübergänge anzeigen Fußgängerübergänge anzeigen Amerikanischer Straßenatlas - Routing v1.9 nicht verwenden + Routing-Regeln v1.9 nicht verwenden Neuen Routenalgorithmus nicht verwenden Fußgängerübergänge ankündigen diff --git a/OsmAnd/res/values-el/strings.xml b/OsmAnd/res/values-el/strings.xml index 890291e5c8..52b4c0348d 100644 --- a/OsmAnd/res/values-el/strings.xml +++ b/OsmAnd/res/values-el/strings.xml @@ -578,7 +578,7 @@ Δεν ήταν δυνατή η ανάλυση της γεωγρ πρόθεσης \'%s\' Αναζήτηση γεωγραφικής τοποθεσίας Σύστημα - Επιλέξτε γλώσσα εμφάνισης + Επιλέξτε γλώσσα εμφάνισης (επανεκκινήστε τον OsmAnd μετά την αλλαγή) Γλώσσα εμφάνισης Επιλογή Πηγής Χάρτη "Η πηγή χάρτη και οι στρώσεις χάρτη που εμφανίζονται αλλάζουν μέσω του \'Μενού\' → \'Διαμόρφωση χάρτη\'. diff --git a/OsmAnd/res/values-es/strings.xml b/OsmAnd/res/values-es/strings.xml index b4719b2447..b0ce523d12 100644 --- a/OsmAnd/res/values-es/strings.xml +++ b/OsmAnd/res/values-es/strings.xml @@ -272,7 +272,7 @@ No se pudo analizar el filtro \'%s\' Buscar dirección usando mapas sin conexión Sistema - Selecciona el idioma de visualización + Selecciona el idioma de visualización (por favor, reinicie OsmAnd después del cambio) Idioma de la pantalla Elige una Fuente de mapa @@ -1832,7 +1832,7 @@ En las proximidades de "Cambios en 1.9: * Actualizados los estilos de los mapas con renderizado de la superficie de la carretera, capas de transporte y símbolos de senderismo * Búsqueda de puntos de interés a lo largo de la ruta * Marcar carretera como intransitable por sesión * Más sencillo la descarga y actualización de mapas * Recibir notificaciones visuales y sonoras al acercarse a un punto de la ruta * Imprimir itinerario e información de giros * Soporte de carriles de giro * Soporte a Android Wear * Muchos cambios en la IU * Acercamiento separado por tamaño de texto en el mapa * Notificación de audio especial en caso de que esté fuera de la ruta * Funcionalidad de inicio de sesión en OsMo * Corregidas incompatibilidades de versión de OsMo " Rutas - Seleccionar en el mapa + Seleccionar en el mapa… Evitar carreteras… Rutas de tranvía y tren Rutas de tren diff --git a/OsmAnd/res/values-fr/strings.xml b/OsmAnd/res/values-fr/strings.xml index 8f7771a06e..6d82bef3fc 100644 --- a/OsmAnd/res/values-fr/strings.xml +++ b/OsmAnd/res/values-fr/strings.xml @@ -283,7 +283,7 @@ Ne peut interpréter le geo intent:\'%s\' Recherche d\'adresses dans les cartes hors-ligne Système - Sélectionnez la langue d\'affichage (veuillez redémarrer OsmAnd après modification) + Sélectionnez la langue à afficher (veuillez redémarrer OsmAnd après votre modification) Langue de l\'application Sélectionner une source de carte diff --git a/OsmAnd/res/values-gl/strings.xml b/OsmAnd/res/values-gl/strings.xml index 87399d3515..cd76df3e0b 100644 --- a/OsmAnd/res/values-gl/strings.xml +++ b/OsmAnd/res/values-gl/strings.xml @@ -35,7 +35,7 @@ Gardar a pista actual no cartón SD agora Gardar a pista GPS actual Rexistrar a pista nun ficheiro GPX durante a navegación - As pistas gárdanse no directorio de pistas durante a navegación + As pistas gárdanse no cartafol de pistas durante a navegación Intervalo de rexistro Intervalo de rexistro durantea a navegación Escoller o intervalo de rexistro da gravación de pistas durante a navegación @@ -59,13 +59,13 @@ Destinos Anunciar os puntos de pasaxe do GPX Descargar os mapas que faltan, %1$s (%2$d MB)? - Máis... + Máis… Examinar o mapa Coche Bicicleta A pé Edificios cun código de cores segundo o seu tipo - Convidar... + Convidar… Confirma que desexa deixar o grupo %1$s? Indique o identificar Continuar coa navegación @@ -110,7 +110,7 @@ Conexión automática Servizo OsMo Descargouse a pista %1$s de OsMo. - Non hai nada que descargar; comprobe a conexión á Internet. + Non foi posíbel atopar descargas; comprobe a conexión á Internet. Non se atopou nada. Se non dá atopado a súa rexión, pódea crear vostede (vexa http://osmand.net). Non hai ningún ficheiro GPX seleccionado. Para seleccionar manteña premida unha das pistas dispoñíbeis. Anular a selección @@ -124,7 +124,7 @@ Gardar como grupo de favoritos Seleccionar puntos de pasaxe Nomes dos puntos - A cargar %1$s … + A cargar %1$s… Hora actual Punto de pasaxe \n\nManteña premido para ver no mapa @@ -225,7 +225,7 @@ Identificador de seguimento persoal Prema para ver ou compartir o identificador de seguimento. Cando se empregan dispositivos conectados polo identificador de seguimento é posíbel vixiar todos os movementos deste dispositivo! Para desconectar, seleccione a opcións «Xerar de novo». Token da sesión: %1$s - A agardar pola autorización... + A agardar pola autorización… "Situacións enviadas %1$d (en buffer %2$d) " "Conexión estabelecida: %1$s " "Problema de conexión con OsMo: " @@ -306,10 +306,10 @@ Calcular de ruta de OsmAnd para o primeiro e o último segmento Desexa empregar a pista mostrada para a navegación? Engadir como punto de destino - Seleccionar GPX … + Seleccionar GPX… Seleccionar destino - Seleccionar no mapa … - Favorito … + Seleccionar no mapa… + Favorito… Preferencias da ruta Información sobre a ruta Preferir as autoestradas @@ -326,11 +326,11 @@ Evitar as autoestradas Peso máximo Indique o peso do vehículo permitido nos itinerarios - "Desde a versión KitKat é posíbel descargar e actualizar os mapas no lugar de almacenamento anterior (%s). Desexa cambiar a un sitio con permiso e copiar nel todos os ficheiros?\n Nota: os ficheiros antigos fican sen seren tocados.\n Nota: non será posíbel compartir ficheiros entre OsmAnd e OsmAnd+. " + Desde a versión 4.4 (KitKat) non é posíbel descargar e actualizar os mapas no lugar de almacenamento anterior (%s). Desexa cambiar a un sitio con permiso e copiar nel todos os ficheiros?\n Nota 1: Os ficheiros antigos fican sen seren tocados (poden ser eliminados manualmente).\n Nota 2: No novo almacén non é posíbel compartir ficheiros entre OsmAnd e OsmAnd+. Desexa que OsmAnd copie tamén os seus ficheiros de datos ao novo destino? Seleccione «Non» para que OsmAnd simplemente cree e empregue o novo cartafol. - A copiar o ficherio (%s) ao seu novo destino... - A copiar os ficheiros de OsmAnd ao seu novo destino (%s) - A copiar os ficheiros de OsmAnd + A copiar o ficherio (%s) ao seu novo destino… + A copiar os ficheiros de OsmAnd ao seu novo destino (%s)… + A copiar os ficheiros de OsmAnd… Calcular ruta de OsmAnd sen conexión Camión Preferencias de navegación @@ -354,7 +354,7 @@ Escoller os perfís de uso visíbeis no aplicativo Perfís do aplicativo Elementos restantes: - Renderizado do mapa: + Renderizado do mapa Sendeirismo Moto Embarcación @@ -378,7 +378,7 @@ Ampliador do mapa Mapa de base mundial Estilos de mapa - "OsmAnd admite mostrar os mapas vectoriais sen conexión en estilos de mapa diferentes que se axeiten a distintas necesidades:\n\nAdemais do equilibrado estilo de mapa «predeterminado» é posíbel, por exemplo, seleccionar en «Menú» → «Configurar a pantalla» → «Estilo de mapa»\n\t→\t* O estilo «Vista de visita», que contén a información máis detallada posíbel para viaxar e visitar, incluída a optimización para condutores profesionais (maior contraste, estradas distinguíbeis), opcións para excursionismo alpino (escala SAC), ciclovías, sinais de sendeirismo, etc.\n\t→\t* «Estradas de alto contraste» mostra as estradas en cores moi intensas para situación de iluminación ambiente brillantes\n\t→\t* «Inverno e esquí» crea unha vista da paisaxe invernal (coberta de neve) e mostra as pistas e remontes de esquí de todo o mundo (en conexión coa descarga do mapa «Esquí mundial») " + "OsmAnd admite mostrar os mapas vectoriais sen conexión en estilos de mapa diferentes que se axeiten a distintas necesidades:\n\nAdemais do equilibrado estilo de mapa «predeterminado» é posíbel, por exemplo, seleccionar en «Menú» → «Configurar o mapa» → «Estilo de mapa»\n\t→\t* O estilo «Vista de visita», que contén a información máis detallada posíbel para viaxar e visitar, incluída a optimización para condutores profesionais (maior contraste, estradas distinguíbeis), opcións para excursionismo alpino (escala SAC), ciclovías, sinais de sendeirismo, etc.\n\t→\t* «Estradas de alto contraste» mostra as estradas en cores moi intensas para situación de iluminación ambiente brillantes\n\t→\t* «Inverno e esquí» crea unha vista da paisaxe invernal (coberta de neve) e mostra as pistas e remontes de esquí de todo o mundo (en conexión coa descarga do mapa «Esquí mundial») " Versión : Sobre Información sobre a versión, licenzas, participantes no proxecto @@ -486,7 +486,7 @@ Gardar como GPX Abrir un GPX existente Agarde até que remate a tarefa actual - Empregar o filtro Kalman para evitar as aberracións magnéticas + Reduce o ruído nas lecturas do compás mais engade inercia Empregar o filtro Kalman Modo de accesibilidade: seleccione primeiro o destino Empregar o sensor magnético para determinar o valor do compás no canto do sensor de orientación @@ -691,7 +691,7 @@ Modo avanzado… Aparcamento Urxencia - Transporte públcio + Transporte público Entretemento Aloxamento Restaurantes @@ -723,7 +723,7 @@ " OsmAnd (OSM Automated Navigation Directions, «Indicacións de navegación automatizadas de OSM») é un aplicativo de mapas e de navegación con acceso aos datos libres, mundiais e de alta calidade de OpenStreetMap (OSM). Todos os datos dos mapas poden ser almacenados no cartón de memoria dos dispositivos para empregalos sen conexión. Mediante o GPS do dispositivo, OsmAnd ofrece cálculo de rutas con guía visual e de voz para coches, bicicletas e peóns. Todas as funcionalidades funcionan tanto con conexión como sen conexión (non se precisa da Internet). Algunhas das funcionalidades principais: Navegación - Funciona con conexión (rápido) ou sen conexión (sen cobros telefónicos no estranxeiro) - Guía por voz paso a paso (voces gravadas e sintetizadas) - Guía opcional nas faixas das estradas, nomes das rúas e hora estimada de chegada - Admite puntos intermedios no itinerario - Recalcula as rutas automaticamente cando se producen desvíos da ruta - Busca de lugares por enderezo, por tipo (p.ex. restaurante, hotel, gasolineira, museo) ou por coordenadas xeográficas Vista de mapa - Mostra a posición e orientación no mapa - Aliña opcionalmente o mapa co compás ou coa dirección do movemento - Garda os lugares máis importantes como «favoritos» - Mostra os puntos de interese (PDI) que haxa preto - Pode mostrar mapas de teselas especializados con conexión - Pode mostrar a vista de satélite (de Bing) - Pode mostrar diferentes sobreposición, como pistas de GPX de visitas ou navegación e mapas adicionais con transparencia regulábel - Pode mostrar os mapas opcionalmente en inglés, na lingua local ou escritas de maneira fonética Uso dos datos de OpenStreetMap e da Wikipedia - Información de boa calidade procedente dos mellores proxectos colaborativos do mundo - Mapas globais procedentes de OpenStreetMap, dispoñíbeis por país ou rexión - Puntos de interese da Wikipedia, óptimos para facer visitas (non dispoñíbeis na versión gratuíta) - Descarga gratuíta ilimitada directamente desde o aplicativo (o límite de descargas é de dezaseis na versión gratuíta) - Mapas sempre actualizados (actualizados cando menos unha vez ao mes) - Mapas vectoriais sen conexións compactos - Selección entre os datos completos dos mapas ou só a rede viaria (Exemplo: Xapón completo son 700 MB mais a rede viaria ocupa só 200 MB) - Tamén admite mapas de teselas con conexión ou na caché Funcionalidades de seguranza - Vistas diúrna e nocturna automatizadas opcionais - Límites de velocidade opcionais, con recordatorio se se exceden - Ampliación opcional do mapa dependente da velocidade - Pódese compartir a situación para que as amizades podan localizalo Funcionalidades para bicicletas e peóns - Os mapas inclúen pistas para peóns, sendeirismo, óptimos para actividades ao ar libre - Modos especiais de cálculo de rutas e pantalla para bicicletas e peóns - Paradas de transporte público opcionais (bus, tranvía, tren), incluídos os nomes das liñas - Gravación opcional das viaxes nun ficheiro GPX local ou nun servizo con conexión - Visualización opcional da velocidade e a altitude - Visualización das curvas de nivel e o sombreado (cun engadido adicional) Achegas directas a OpenStreetMap - Informes de fallos nos mapas - Envío de pistas GPX a OSM directamente desde o aplicativo - Adición de puntos de interese e envío automático a OSM (ou posteriormente, se non houber conexión) - Gravación opcional das viaxes tamén no modo de fondo (mentres o dispositivo está en modo de durmir) OsmAnd é código aberto e está a ser desenvolvido activamente. Calquera pode contribuír co aplicativo informando de fallos, mellorando as traducións ou escribindo código para funcionalidades novas. O proxecto está nun estado vivo de mellora continua mediante todo esas formas de interacción entre desenvolvedores e usuarios. O progreso tamén depende da contribución financeira para financiar o desenvolvemento, o código e as probas das funcionalidades novas. Ao comprar OmsAnd+ axúdase a que o aplicativo sexa aínda mellor. Tamén é posíbel financiar funcionalidades novas específicas ou de realizar unha doazón xeral en osmand.net. Cobertura e calidade aproximada dos mapas: - Europa Occidental: **** - Europa Oriental: *** - Rusia: *** - Norteamérica: *** - Sudamérica: ** - Asia: ** - Xapón e Corea: *** - Oriente Medio: ** - África: ** - Antártida: * Lista de países (basicamente todo o mundo!): Afganistán, Albania, Algeria, Andorra, Angola, Anguilla, Antigua e Barbuda, Arxentina, Armenia, Aruba, Australia, Austria, Azerbaixán, Bahamas, Bahrain, Bangladesh, Barbados, Bielorrusia, Bélxica, Belize, Benin, Bermuda, Bhutan, Bolivia, Bonaire, Bosnia e Herzegovina, Botswana, Brasil, Illas Virxes Británicas, Brunei, Bulgaria, Burkina Faso, Burundi, Camboxa, Camerún, Canadá, Cabo Verde, República Centroafricana, Chad, Chile, China, Colombia, Comoros, Congo, Costa Rica, Costa de Marfín, Croacia, Cuba, Curaçao, Cyprus, República Checa, Dinamarca, Xibuti, Dominica, República Dominicana, Ecuador, Exipto, El Salvador, Guiné Ecuatorial, Eritrea, Estonia, Etiopía, Fixi, Finlandia, Francia, Guiana Francesa, Polinesia Francesa, Gabón, Gambia, Xeorgia, Alemaña , Ghana, Xibraltar, Grecia, Groenland, Granada, Guadalupe, Guam, Guatemala, Guernsey, Guiné, Guiné-Bissau, Guyana, Haití, Vaticano, Honduras, Hong Kong, Hungría, Islandia, India, Indonesia, Iran, Iraq, Irlanda, Illa de Man, Israel, Italia, Xamaica, Xapón, Jersey, Xordania, Kazakhstan, Kenia, Kiribati, Corea do Norte e Corea do Sur, Kuwait, Quirgizstan, Laos, Letonia, Líbano, Lesotho, Liberia, Libia, Liechtenstein, Lituania, Luxemburgo, Macao, Macedonia, Madagascar, Malawi, Malasia, Maldivas, Mali, Malta, Martinica, Mauritania, Mauricio, Mayotte, México, Micronesia, Moldavia, Mónaco, Mongolia, Montenegro, Montserrat, Marrocos, Mozambique, Myanmar, Namibia, Nauru, Nepal, Países Baixos, Antillas Holandesas, Nova Caledonia, Nova Celandia, Nicaragua, Níxer, Nixeria, Noruega, Oman, Paquistán, Palau, Territorio Palestino, Panamá, Papua New Guinea, Paraguai, Perú, Filipinas, Polonia, Portugal, Puerto Rico, Qatar, Rumanía, Rusia, Ruanda, San Bartolomeu, Santa Helena, Saint Kitts e Nevis, Santa Lucía, San Martin, Saint Pierre e Miquelon, Saint Vincent e as Granadinas, Samoa, San Marino, Arabia Saudi, Senegal, Serbia, Seychelles, Serra Leoa, Singapur, Eslovaquia, Eslovenia, Somalia, Sudáfrica, Xeorxia do Sul, Sudán do Sul, España, Sri Lanka, Sudán, Surinam, Swazilandia, Suecia, Suíza, Siria, Taiwan, Taxikistan, Tanzania, Tailandia, Timor-Leste, Togo, Tokelau, Tonga, Trindade e Tobago, Tunicia, Turquía, Turcomenistan, Tuvalu, Uganda, Ucraína, Emiratos Árabes Unidos, Reino Unido (UK), Estados Unidos de América (USA), Uruguai, Uzbekistan, Vanuatu, Venezuela, Vietnam, Wallis e Futuna, Sáhara Occidental, Iemen, Zambia, Zimbabwe. " Mapas e navegación de OsmAnd+ Visualización e navegación móbil de mapas globais para mapas de OSM con e sen conexión - " OsmAnd+ (Indicacións de navegación automatizadas de OSM) é un aplicativo de navegación de código aberto con acceso a unha ampla variedade de datos globais de OpenStreetMap (OSM). Todos os mapas dos datos (mapas vectoriais ou teselas) poden ser almacenados no cartón de memoria do teléfono para empregalos sen conexión. OsmAnd tamen ofrece funcionalidade de cálculo de rutas sen conexión, incluíndo a guía por voz paso a paso. OsmAnd+ é a versión de pago, mais ao comprala vostede apoia o proxecto, financia o desenvolvemento de funcionalidades novas e recibe as últimas actualizacións.\n\t\t\n\t\tAlgunhas das funcionalidade principais:\n\t\t - Funcionalidade completa sen conexión (os mapas vectoriais ou de teselas descargados almacénanse no cartafol que se seleccione)\n\t\t - Mapas vectoriais compactos sen conexión para todo o mundo\n\t\t - Pódense descargar mapas de países ou rexións directamente desde o aplicativo\n\t\t - É posíbel sobrepor varias capas de mapas, como pistas de GPX ou de navegación, puntos de interese, favoritos, curvas de nivel, paradas de transporte público ou mapas adicionais con transparencia regulábel.\n\t\t - Busca sen conexión de enderezos e lugares (PDI)\n\t\t - Cálculo de rutas sen conexión para distancias curtas (experimental)\n\t\t - Modos para coche, bicicleta e péons, con:\n\t\t - Vistas diúrna e nocturna automatizadas opcionais\n\t\t - Ampliación opcional do mapa dependendo da velocidade\n\t\t - Aliñamento opcional do mapa dependendo do compás ou da dirección do movemento\n\t\t - Guía opcional de faixas da estrada, límites de velocidade e voces gravadas e TTS " + " OsmAnd+ (Indicacións de navegación automatizadas de OSM) é un aplicativo de navegación de código aberto con acceso a unha ampla variedade de datos globais de OpenStreetMap (OSM). Todos os mapas dos datos (mapas vectoriais ou teselas) poden ser almacenados no cartón de memoria do teléfono para empregalos sen conexión. OsmAnd tamen ofrece funcionalidade de cálculo de rutas sen conexión, incluíndo a guía por voz paso a paso. OsmAnd+ é a versión de pago, mais ao comprala vostede apoia o proxecto, financia o desenvolvemento de funcionalidades novas e recibe as últimas actualizacións.\n\t\t\n\t\tAlgunhas das funcionalidade principais:\n\t\t - Funcionalidade completa sen conexión (os mapas vectoriais ou de teselas descargados almacénanse no cartafol que se seleccione)\n\t\t - Mapas vectoriais compactos sen conexión para todo o mundo\n\t\t - Pódense descargar mapas de países ou rexións directamente desde o aplicativo\n\t\t - É posíbel sobrepor varias capas de mapas, como pistas de GPX ou de navegación, puntos de interese, favoritos, curvas de nivel, paradas de transporte público ou mapas adicionais con transparencia regulábel.\n\t\t - Busca sen conexión de enderezos e lugares (PDI)\n\t\t - Cálculo de rutas sen conexión para distancias curtas (experimental)\n\t\t - Modos para coche, bicicleta e péons, con:\n\t\t - Vistas diúrna e nocturna automatizadas opcionais\n\t\t - Ampliación opcional do mapa dependendo da velocidade\n\t\t - Aliñamento opcional do mapa dependendo do compás ou da dirección do movemento\n\t\t - Guía opcional de faixas da estrada, límites de velocidade e voces gravadas e TTS " " OsmAnd (OSM Automated Navigation Directions, «Indicacións de navegación automatizadas de OSM») é un aplicativo de mapas e de navegación con acceso aos datos libres, mundiais e de alta calidade de OpenStreetMap (OSM). Todos os datos dos mapas poden ser almacenados no cartón de memoria dos dispositivos para empregalos sen conexión. Mediante o GPS do dispositivo, OsmAnd ofrece cálculo de rutas con guía visual e de voz para coches, bicicletas e peóns. Todas as funcionalidades funcionan tanto con conexión como sen conexión (non se precisa da Internet). OsmAnd+ é a versión paga do aplicativo. Ao comprala apóiase o proxecto, finánciase o desenvolvemento de funcionalidades novas e recíbense as actualizacións máis recentes. Pódese probar o aplicativo antes de compralo instalando a versión gratuíta chamada OsmAnd. Algunhas das funcionalidades principais: Navegación - Funciona con conexión (rápido) ou sen conexión (sen cobros telefónicos no estranxeiro) - Guía por voz paso a paso (voces gravadas e sintetizadas) - Guía opcional nas faixas das estradas, nomes das rúas e hora estimada de chegada - Admite puntos intermedios no itinerario - Recalcula as rutas automaticamente cando se producen desvíos da ruta - Busca de lugares por enderezo, por tipo (p.ex. restaurante, hotel, gasolineira, museo) ou por coordenadas xeográficas Vista de mapa - Mostra a posición e orientación no mapa - Aliña opcionalmente o mapa co compás ou coa dirección do movemento - Garda os lugares máis importantes como «favoritos» - Mostra os puntos de interese (PDI) que haxa preto - Pode mostrar mapas de teselas especializados con conexión - Pode mostrar a vista de satélite (de Bing) - Pode mostrar diferentes sobreposición, como pistas de GPX de visitas ou navegación e mapas adicionais con transparencia regulábel - Pode mostrar os mapas opcionalmente en inglés, na lingua local ou escritas de maneira fonética Uso dos datos de OpenStreetMap e da Wikipedia - Información de boa calidade procedente dos mellores proxectos colaborativos do mundo - Mapas globais procedentes de OpenStreetMap, dispoñíbeis por país ou rexión - Puntos de interese da Wikipedia, óptimos para facer visitas - Descarga gratuíta ilimitada directamente desde o aplicativo - Mapas sempre actualizados (actualizados cando menos unha vez ao mes) - Mapas vectoriais sen conexións compactos - Selección entre os datos completos dos mapas ou só a rede viaria (Exemplo: Xapón completo son 700 MB mais a rede viaria ocupa só 200 MB) - Tamén admite mapas de teselas con conexión ou na caché Funcionalidades de seguranza - Vistas diúrna e nocturna automatizadas opcionais - Límites de velocidade opcionais, con recordatorio se se exceden - Ampliación opcional do mapa dependente da velocidade - Pódese compartir a situación para que as amizades podan localizalo Funcionalidades para bicicletas e peóns - Os mapas inclúen pistas para peóns, sendeirismo, óptimos para actividades ao ar libre - Modos especiais de cálculo de rutas e pantalla para bicicletas e peóns - Paradas de transporte público opcionais (bus, tranvía, tren), incluídos os nomes das liñas - Gravación opcional das viaxes nun ficheiro GPX local ou nun servizo con conexión - Visualización opcional da velocidade e a altitude - Visualización das curvas de nivel e o sombreado (cun engadido adicional) Achegas directas a OpenStreetMap - Informes de fallos nos mapas - Envío de pistas GPX a OSM directamente desde o aplicativo - Adición de puntos de interese e envío automático a OSM (ou posteriormente, se non houber conexión) - Gravación opcional das viaxes tamén no modo de fondo (mentres o dispositivo está en modo de durmir) OsmAnd é código aberto e está a ser desenvolvido activamente. Calquera pode contribuír co aplicativo informando de fallos, mellorando as traducións ou escribindo código para funcionalidades novas. O proxecto está nun estado vivo de mellora continua mediante todo esas formas de interacción entre desenvolvedores e usuarios. O progreso tamén depende da contribución financeira para financiar o desenvolvemento, o código e as probas das funcionalidades novas. Ao comprar OmsAnd+ axúdase a que o aplicativo sexa aínda mellor. Tamén é posíbel financiar funcionalidades novas específicas ou de realizar unha doazón xeral en osmand.net. Cobertura e calidade aproximada dos mapas: - Europa Occidental: **** - Europa Oriental: *** - Rusia: *** - Norteamérica: *** - Sudamérica: ** - Asia: ** - Xapón e Corea: *** - Oriente Medio: ** - África: ** - Antártida: * Lista de países (basicamente todo o mundo!): Afganistán, Albania, Algeria, Andorra, Angola, Anguilla, Antigua e Barbuda, Arxentina, Armenia, Aruba, Australia, Austria, Azerbaixán, Bahamas, Bahrain, Bangladesh, Barbados, Bielorrusia, Bélxica, Belize, Benin, Bermuda, Bhutan, Bolivia, Bonaire, Bosnia e Herzegovina, Botswana, Brasil, Illas Virxes Británicas, Brunei, Bulgaria, Burkina Faso, Burundi, Camboxa, Camerún, Canadá, Cabo Verde, República Centroafricana, Chad, Chile, China, Colombia, Comoros, Congo, Costa Rica, Costa de Marfín, Croacia, Cuba, Curaçao, Cyprus, República Checa, Dinamarca, Xibuti, Dominica, República Dominicana, Ecuador, Exipto, El Salvador, Guiné Ecuatorial, Eritrea, Estonia, Etiopía, Fixi, Finlandia, Francia, Guiana Francesa, Polinesia Francesa, Gabón, Gambia, Xeorgia, Alemaña , Ghana, Xibraltar, Grecia, Groenland, Granada, Guadalupe, Guam, Guatemala, Guernsey, Guiné, Guiné-Bissau, Guyana, Haití, Vaticano, Honduras, Hong Kong, Hungría, Islandia, India, Indonesia, Iran, Iraq, Irlanda, Illa de Man, Israel, Italia, Xamaica, Xapón, Jersey, Xordania, Kazakhstan, Kenia, Kiribati, Corea do Norte e Corea do Sur, Kuwait, Quirgizstan, Laos, Letonia, Líbano, Lesotho, Liberia, Libia, Liechtenstein, Lituania, Luxemburgo, Macao, Macedonia, Madagascar, Malawi, Malasia, Maldivas, Mali, Malta, Martinica, Mauritania, Mauricio, Mayotte, México, Micronesia, Moldavia, Mónaco, Mongolia, Montenegro, Montserrat, Marrocos, Mozambique, Myanmar, Namibia, Nauru, Nepal, Países Baixos, Antillas Holandesas, Nova Caledonia, Nova Celandia, Nicaragua, Níxer, Nixeria, Noruega, Oman, Paquistán, Palau, Territorio Palestino, Panamá, Papua New Guinea, Paraguai, Perú, Filipinas, Polonia, Portugal, Puerto Rico, Qatar, Rumanía, Rusia, Ruanda, San Bartolomeu, Santa Helena, Saint Kitts e Nevis, Santa Lucía, San Martin, Saint Pierre e Miquelon, Saint Vincent e as Granadinas, Samoa, San Marino, Arabia Saudi, Senegal, Serbia, Seychelles, Serra Leoa, Singapur, Eslovaquia, Eslovenia, Somalia, Sudáfrica, Xeorxia do Sul, Sudán do Sul, España, Sri Lanka, Sudán, Surinam, Swazilandia, Suecia, Suíza, Siria, Taiwan, Taxikistan, Tanzania, Tailandia, Timor-Leste, Togo, Tokelau, Tonga, Trindade e Tobago, Tunicia, Turquía, Turcomenistan, Tuvalu, Uganda, Ucraína, Emiratos Árabes Unidos, Reino Unido (UK), Estados Unidos de América (USA), Uruguai, Uzbekistan, Vanuatu, Venezuela, Vietnam, Wallis e Futuna, Sáhara Occidental, Iemen, Zambia, Zimbabwe. " Actualización de mapas sen conexión "Ter os datos dos mapas actualizados é esencial para velos sen conexión, para a busca por puntos de interese e para a navegación sen conexión. OsmAnd fornece un xestor de ficheiros de mapas para descargar estes mapas sen conexión e para comprobar se hai actualizacións. @@ -849,7 +849,7 @@ Busca por puntos de interese (PDI) Busca polo enderezo Coordenadas - Busca por transporte + Busca de transporte público Busca por favoritos Historial de buscas A navegación sen conexión de OsmAnd non está dispoñíbel temporalmente. @@ -872,7 +872,7 @@ Configurar as fontes de mapas en teselas con conexión ou gardados temporalmente Configuración do mapa Configurar a Visualización do mapa - Mostrar as opcións para configurar diversos mapas en teselas con conexión ou gardados temporalmente como mapa base ou como mapas sobrepostos ou submetidos. Estes mapas tamén poden ser preparados sen conexión e copiados ao cartafol de OsmAnd. + Mostrar as opcións para configurar diversos mapas en teselas con conexión ou gardados temporalmente como mapa base ou como mapas sobrepostos ou submetidos. Estes mapas tamén poden ser preparados sen conexión e copiados ao cartafol de datos de OsmAnd. Mostrar as opcións para as funcionalidades de accesibilidade especiais. Configuración avanzada @@ -1029,8 +1029,8 @@ Oceanía Mapas mundi e temáticos Puntos de interese mundiais da Wikipedia - Paquetes de voz (gravados, funcionalidade limitada) - Paquetes de voz (sintetizados con TTS, preferíbeis) + Indicacións de voz (gravadas, funcionalidade limitada) + Indicacións de voz (sintetizadas con TTS, preferíbeis) Wikipedia (sen conexión) Definido polo usuairo Xa existe un ficheiro con favoritos exportados previamente. Desexa substituílo? @@ -1051,10 +1051,10 @@ Orientación do mapa "É posíbel alternar se xirar o mapa e como premendo repetidas veces na icona do compás da pantalla do mapa.\n\nAs opcións son:\n\t→\t* «Non xirar» (o norte está arriba): O mapa non se xira. O norte está sempre arriba\n\t→\t* «Na dirección do movemento»: O mapa alíñase continuamente co rumbo\n\t→\t* «Co compás»: O mapa alíñase continuamente coa lectura que dea o compás do dispositivo " "A descarga foi correcta. -\n\t\n\tPara utilizar, active «Menú» → «Capas de mapas» → «Fonte de mapas…» → «Mapas vectoriais sen conexión». " +\n\t\n\tPara utilizar, active «Menú» → «Capas o mapa» → «Fonte de mapas…» → «Mapas vectoriais sen conexión». " Modo diúrno/nocturo "É posíbel cambiar a aparencia dos mapas vectoriais sen conexión entre diúrna (máis clara) e noctura (máis escura). Os cores nocturnos son máis seguros e máis cómodos para conducir de noite. -\n\nPódese estabelecer unha política para alternar entre a aparencia diúrna e nocturna en «Menú» → «Configurar a pantalla» → «Mapa diúrno/nocturno». +\n\nPódese estabelecer unha política para alternar entre a aparencia diúrna e nocturna en «Menú» → «Configurar o mapa» → «Mapa diúrno/nocturno». \n\nAs opcións son: \n\t* «Amencer/Solpor: modo automático controlado pola posición do sol (predeterminado) \n\t* «Día»: empregar sempre o tema diúrno @@ -1129,8 +1129,8 @@ Sen definir Fixada Posición actual… - Última vista do mapa - Buscar preto de: + Centro do mapa actual + Orixe: Buscar preto de aquí "cambios recentes para 0.6.7: \n\t- Offline data manager (download, delete, activate / deactivate offline data directly in OsmAnd) @@ -1180,7 +1180,7 @@ Descargar Datos de PDI Datos de enderezos - Datos de transporte + Datos de transporte público Datos de mapas Desactivado Datos de voz (TTS) @@ -1212,7 +1212,7 @@ Inverter a dirección do GPX Empregar o destino actual Pasar por toda a pista - Hai un mapa vectorial se conexión para este sitio.\n\t\n\tPara empregalo active «Menú» → «Capas de mapas» → «Fonte de mapas…» → «Mapas vectoriais sen conexión». + Hai un mapa vectorial se conexión para este sitio.\n\t\n\tPara empregalo active «Menú» → «Configurar o mapa» → «Fonte de mapas…» → «Mapas vectoriais sen conexión». Saída da orientación por voz Escoller a canle pola que reproducir a orientación por voz (dependente do sistema) Son de chamada telefónica @@ -1232,7 +1232,7 @@ Escoller o mapa sobreposto O mapa xa está instalado; vaise actualizar a configuración Seleccione os mapas (teselas) que desexa instalar ou actualizar - A conexión á Internet requirida pola operación non está dispoñ´ibel + Esta operación require unha conexión á Internet mais non hai ningunha dispoñíbel Instalar máis… Nivel de ampliación mínimo para empregar mapas vectoriais Nivel de ampliación vectorial mínimo @@ -1240,17 +1240,17 @@ "É posíbel compartir a situación de lugares interesantes das viaxes coa familia ou con amizadas mediante o menú de contexto «Empregar a situación» → «Compartir a situación». \n\nThen chose a way to share your location. The choices are: E-Mail, SMS(text), or just copy the location coordinates to the device clipboard. " Puntos favoritos - "Os puntos que se empreguen con frecuencia poden ser gardados como «favoritos» da seguinte maneira:\n\nNo menú de contexto «Empregar a situación» de calquera punto seleccione a opción «Engadir aos favoritos» e introduza un nome.\n\nUnha vez gardado o favorito, xa está accesíbel en «Menú» → «Os meus sitios». Ao tocar en calquera entrada da lista de favoritos aparecen opcións para el, como navegar até alí, editalo ou eliminalo.\n\nPara mostrar todos os puntos favoritos directamente no mapa, active a capa «Favoritos» na pantalla do pama en «Menú» → «Capas do mapa». " + "Os puntos que se empreguen con frecuencia poden ser gardados como «favoritos» da seguinte maneira:\n\nNo menú de contexto «Empregar a situación» de calquera punto seleccione a opción «Engadir aos favoritos» e introduza un nome.\n\nUnha vez gardado o favorito, xa está accesíbel en «Menú» → «Os meus sitios». Ao tocar en calquera entrada da lista de favoritos aparecen opcións para el, como navegar até alí, editalo ou eliminalo.\n\nPara mostrar todos os puntos favoritos directamente no mapa, active a capa «Favoritos» na pantalla do pama en «Menú» → «Configurar o mapa». " Online OSM con imaxes Produciuse un erro na busca sen conexión Non foi posíbel entender a ligazón «%s» Buscar a situación xeográfica Sistema - Seleccione o idioma da pantalla + Seleccione o idioma da pantalla (e reinicie OsmAnd despois de cambialo) Idioma da pantalla incompleto Seleccione unha fonte de mapas - "A fonte dos mapas e as capas que se desexe ver cámbianse en «Menú» → «Capas de mapa».\n\nEn «Fonte de mapas...» pódese escoller entre empregar os mapas vectoriais sen conexión precargados (predeterminado, necesarios tamén para a navegación sen conexión), as fontes de teselas (con conexión ou gardadas temporalmente) predeterminadas (hai que activar o engadido «Mapas con conexión» en «Configuración» → «Engadidos» para isto) e mapas que se creen manualmente empregando, por exemplo OsmAndMapCreator nun computador.\n\nOsmAnd admite tamén fontes personalizadas. " + "A fonte dos mapas e as capas que se desexe ver cámbianse en «Menú» → «Configurar o mapa».\n\nEn «Fonte de mapas...» pódese escoller entre empregar os mapas vectoriais sen conexión precargados (predeterminado, necesarios tamén para a navegación sen conexión), as fontes de teselas (con conexión ou gardadas temporalmente) predeterminadas (hai que activar o engadido «Mapas con conexión» en «Configuración» → «Engadidos» para isto) e mapas que se creen manualmente empregando, por exemplo OsmAndMapCreator nun computador.\n\nOsmAnd admite tamén fontes personalizadas. " Usar perfil "OsmAnd admite diferentes perfís (personalizábeis) do aplicativo para diferentes casos de uso.\n\nÉ posíbel cambiar os perfís co botón de perfís do recuncho inferior esquerdo da pantalla do mapa (icona do coche, a bicicleta ou o peón) ou ao crear un itinerario («modo de transporte»). " Menú «Empregar a situación» @@ -1313,8 +1313,8 @@ OsmAnd navigation >20km Empregar a navegación sen conexión de OsmAnd só para itinerarios > 20 km (experimental) A navegación sen conexión de OsmAnd é unha funcionalidade experimental e non funciona para distancias maiores duns 20 km.\n\nO servizo de navegación vai pasar temporalmente ao CloudMade, con conexión. - Non é posíbel atopar o directorio indicado. - Directorio de almacenamento + Non é posíbel atopar o cartafol indicado. + Cartafol de almacenamento de datos Xa hai unha versión anterior de OsmAnd instalada. Todos os datos sen conexión son utilizábeis polo novo aplicativo. Porén, os puntos favoritos hainos que exportar co aplicativo antigo e despois importalos co novo. A compilación {0} foi instalada correctamente ({1}). @@ -1324,7 +1324,7 @@ A cargar as compilacións de OsmAnd… Seleccione a compilación de OsmAnd que desexe instalar O aplicativo de estado do GPS non está instalado. Desexa buscalo no Market? - A orientación por voz non está dispoñíbel. Vaia á conifguración, escolla o paquete de datos de voz que prefira e descárgueo. + A orientación por voz non está dispoñíbel. Vaia á «Configuración» → «Xeral» →«Indicacións con voz» e seleccione ou descargue un paquete de datos de voz. A orientación por voz non está seleccionada Diúrno Nocturno @@ -1358,16 +1358,16 @@ Pantalla de alta resolución Non estirar (e perder a nitidez) das teselas do mapa en pantallas de alta densidade Download - Buscar transporte + Buscar transporte público Resultados de transporte (sen destino): Resultados de transporte ({0} ao destino): none Restaurar a busca de transporte Mapa - Voz + Voz gravada Os mapas vectoriais non están cargados Navegar empregando GPX - Non foi posíbel atopar os ficheiros GPX no directorio /tracks + Non foi posíbel atopar ficheiros GPX no cartafol de pistas Pista de GPX… Produciuse un erro ao ler os datos de GPX Mapas vectoriais sen conexión @@ -1448,7 +1448,7 @@ Despois Descargar rexións A buscar o sinal… - Buscar preto da última situación do mapa + Buscar preto do centro actual do mapa Buscar preto A mesma que o dispositivo Portrait @@ -1501,7 +1501,7 @@ Distancia total %1$s, tempo de viaxe %2$d h %3$d m. Escoller un servizo de navegación con ou sen conexión Navigation service - O directorio para gardar no cartón SD non é accesíbel + O cartafol de almacenamento de datos do cartón SD non é accesíbel! Download {0} - {1} ? Xa existen datos sen conexión para {0} ({1}). Desexa actualizalos ({2}) ? Address @@ -1701,7 +1701,7 @@ Tolerancia no límite de velocidade Seleccione a marxe de tolerancia do límite de velocidade por riba da cal desexa ser avisado por voz. - Desexa descargar un mapa para empregar sen conexión? + Desexa descargar mapas para empregar sen conexión? Ten descargados %1$s mapas Descargar un mapa novo Xestionar @@ -1713,7 +1713,7 @@ Local Non é posíbel descargar. Conéctese a unha rede con wi-fi para proseguir. Desbotar - Todo está actualizado + Todos os ficheiros están actualizados Empregar o renderizado con OpenGL Empregar renderizado con OpenGL acelerado co hardware (podería non funcionar nalgúns dispositivos) Non foi posíbel atopar a estrada máis próxima @@ -1721,7 +1721,7 @@ Empregar unha conexión segura co servidor Empregar HTTPS Avanzado - Ten %1$s mapas que hai que actualizar + Hai actualizacións dispoñíbeis para %1$s mapas Buscar MOSTRAR O MAPA MOSTRAR TODO @@ -1729,9 +1729,9 @@ Rutas de tranvía e de tren %1$s require este permiso para apagar a pantalla para a funcionalidade de aforro de enerxía. Acender a pantalla - Acender a pantalla do teléfono ao aproximarse unha manobra + Acender a pantalla do dispositivo ao aproximarse unha manobra Nunca - Seleccionar no mapa + Seleccionar no mapa… Evitar estradas… "Cambios en 1.9: * Updated maps styles with road surface rendering, transport layers and hiking symbols * Search POI along the route * Mark road as impassable per session * Easier to download and update maps * Get visual and audio notification by approaching to waypoint * Print itinerary and turn information * Support of turn lanes * Support Android Wear * Lots UI changes * Separate zoom for Text Size on the map * Special audio notifications in case you are off the route * OsMo login functionality * Fix OsMo version incompatibilities " Rutas de tren @@ -1756,4 +1756,15 @@ Os usuarios anónimos non poden:\n - crear grupos;\n - sincronizar grupos e dispositivos co servidor;\n - xestionar grupos e dispositivos nunha oficina privada. Usuario anónimo Identificado como %1$s - + Predeterminado + Anunciar os pasos de peón + Estilo de estrada + Predeterminado + Laranxa + Atlas de estradas alemáns + Paso de peóns + Mostrar os pasos de peóns + Atlas de estradas norteamericanos + Non seguir as regras de v1.9 + Non empregar as retras para itinerarios introducidas na versión 1.9 + diff --git a/OsmAnd/res/values-it/strings.xml b/OsmAnd/res/values-it/strings.xml index 0edd93b05d..b55433c55a 100644 --- a/OsmAnd/res/values-it/strings.xml +++ b/OsmAnd/res/values-it/strings.xml @@ -275,7 +275,7 @@ Impossibile leggere geo intent \'%s\' Ricerca indirizzo usando le mappe offline Sistema - Seleziona lingua interfaccia + Seleziona lingua interfaccia (si prega di riavviare OsmAnd dopo il cambio) Lingua interfaccia Scegli una Fonte della Mappa diff --git a/OsmAnd/res/values-ko/strings.xml b/OsmAnd/res/values-ko/strings.xml index ff1922dfe5..d0e68fd57f 100644 --- a/OsmAnd/res/values-ko/strings.xml +++ b/OsmAnd/res/values-ko/strings.xml @@ -387,7 +387,7 @@ 지오 위치 검색 시스템 언어 - 표시 언어를 선택합니다 + 언어 선택 (OsmAnd를 재시작해 주세요) 언어 표시 지도 소스를 선택 @@ -2058,7 +2058,7 @@ 택시 노선 공유 무궤도 전차 노선 버스 노선 - 지도에서 선택 + 지도에서 선택… 도로 회피… 전차 및 기차 노선 숨기기 diff --git a/OsmAnd/res/values-lt/strings.xml b/OsmAnd/res/values-lt/strings.xml index 3969db3592..06550780f2 100644 --- a/OsmAnd/res/values-lt/strings.xml +++ b/OsmAnd/res/values-lt/strings.xml @@ -477,7 +477,7 @@ Nepavyko suprasti geo poreikio \'%s\' Ieškoti adreso parsiųstuose žemėlapiuose Sistemos - Pasirinkite programos kalbą + Pasirinkite programos kalbą (pakeitę kalbą iš naujo aktyvuokite OsmAnd) Programos kalba Pasirinkti žemėlapių šaltinį diff --git a/OsmAnd/res/values-nb/strings.xml b/OsmAnd/res/values-nb/strings.xml index 36e8fdaf6a..44e16198c7 100644 --- a/OsmAnd/res/values-nb/strings.xml +++ b/OsmAnd/res/values-nb/strings.xml @@ -267,7 +267,7 @@ Udefinert Fast Gjeldende posisjon… - Siste kartvisning + Gjeldende kartsenter Utgangspunkt: Søk nær her Lagre rute som GPX-spor @@ -324,7 +324,7 @@ \n\nFor å vise alle favorittpunkter direkte på kartet, aktiver på kartskjermen laget \'Favoritter\' i \'Meny\' → \'Still inn kart\'. " Søk geografisk plassering System - Velg visningsspråk + Velg visningsspråk (start OsmAnd på nytt etter endring) Visningsspråk Velg en kartkilde "Kartkilden og kartlag som vises endres via \'Meny\' → \'Still inn kart\'. @@ -391,7 +391,7 @@ km/t m Foreldet kartdataformat \'\'{0}\'\' støttes ikke - Nærmeste interessepunkt + Nærmeste interessepunkter Egendefinert filter Kan ikke finne den spesifiserte mappen. Datalagringsmappe @@ -463,7 +463,7 @@ Filter Velg taleveiledning for navigering Taleveiledning - Søk i nærheten av siste kartplassering + Søk i nærheten av gjeldende kartsenter Søk i nærheten Samme som enhet Portrett @@ -798,7 +798,7 @@ Programtillegg Bruk posisjon… Slå på skjermen - Velg på kart + Velg på kart… Unngå veier… Bussruter Skjul @@ -894,7 +894,7 @@ Angi kjøretøyets vekt som er tillatt på ruter Kopierer OsmAnd-datafiler til det nye stedet (%s)… Slett alle punkter - Bruk Kalmanfilter for å unngå kompassavvik + Reduserer støy i kompassavlesninger, men legger til treghet Bruk Kalmanfilter Annen Er tilgjengelig %1$d filer til nedlasting @@ -1190,4 +1190,5 @@ %1$s trenger denne tillatelsen til å slå av skjermen (Strømsparingsfunksjon). VIS ALLE Meld om fotgjengeroverganger - + Standard + diff --git a/OsmAnd/res/values-nl/phrases.xml b/OsmAnd/res/values-nl/phrases.xml new file mode 100644 index 0000000000..7207a293f7 --- /dev/null +++ b/OsmAnd/res/values-nl/phrases.xml @@ -0,0 +1,441 @@ + +Historische mijn + Paleontologische site + + Bakkerij + Drankwinkel + Supermarkt + Winkelcentrum + Drankwinkel + Vleesmarkt + Delicatessenwinkel + Boerderijwinkel + Groentewinkel + Viswinkel + Banketbakkerij + Kernexplosiesite +IJssalon + Supermarkt + Theewinkel + Zuivelwinkel + Verkoopautomaat + + Boekhandel + Fietswinkel + Animewinkel + Antiekwinkel + Galerie + Babywinkel + Tassenwinkel + Badkamermeubelwinkel + Beddenwinkel + Modezaak + Tapijtwinkel + Drogisterij + Kledingwinkel + Kinderkledingwinkel + Schoenenwinkel + Computerwinkel + Kopieerzaak + Gordijnwinkel + Stoffenwinkel + Beddenwinkel + Duikbenodigdheden + Bouwmarkt + Sex-shop + Bloemenwinkel + Tuincentrum + Gasflessen + Cadeauwinkel + Glashandel + IJzerhandel + Hoorapparaten + Hengelsportzaak + Fotolijstwinkel + Meubelwinkel + Winkel in diverse goederen + Kruidenierszaak + Hi-Fi-winkel + Huishoudelijke winkel + Jachtwinkel + Interieurdecoratiewinkel + Juwelier + Kiosk + Keukengereiwinkel + Mobiele telefoon-winkel + Motorwinkel + Muziekinstrumentenwinkel + Persagentschap + Opticien + Biologische voedingswinkel + Outdoor-winkel + Verfwinkel + Dierenwinkel + Radiotechnics-winkel + Tweedehandswinkel + Scheepsbevoorrader + Sportwinkel + Briefpapierwinkel + Servieswinkel + Ticketwinkel + Tabakswinkel + Speelgoedwinkel + Handelspost + Stofzuigerwinkel + Variëteitenzaak + Videotheek + Rolluikenwinkel + Warenhuis + Elektronica-winkel + Autohandelaar + Auto-onderdelenwinkel + Quad-winkel + Cosmeticazaak + Marktplaats + Confectiewinkel + + Politie + Brandweer + Noodtelefoon + Brandkraan + Brandblusapparaat + Brandflapper + Brandslang + Brandwatervijver + Zoutbak + Ambulancestandplaats + SES-standplaats + Nood-toegangspunt + + Ford + Bergpas + Poort + Stadsmuur + Liftpoort + Tolpoort + Grenscontrole + Snelheidsdrempel + Bult + Kussen + Stoplicht + + Tankstation + Parking + Motorparking + Parkingsingang + Garages + + Halte voor openbaar vervoer + Bushalte + Trolleybushalte + Bushalte (verouderd) + Tramhalte + Tramhalte (verouderd) + Station voor openbaar vervoer + Busstation (verouderd) + Treinstation (verouderd) + Perron (verouderd) + Treinhalte (verouderd) + Metro-ingang + Metrostation + Taxistandplaats + + Luchthaven + Helikopterplatform + Landingsbaan + Terminal + Gate + + Scheepshelling + Veerstoep + Vuurtoren + + Fietsverhuur + Fietsenstalling + + Gondola + Watertoren + Dam + Elektriciteitscentrale + Postkantoor + Postbus + Telefoon + Communicatietoren + Pier + Observatorium + Sterrenwacht + Toren + Mast + Radar + Wijngaard + Boomgaard + School + Kleuterschool + Universiteit + + College + Gevangenis + Ambassade + Regering + Douane + Stad + Gehucht + Dorp + Gemeente + Buitenwijk + Geïsoleerde woning + Buurt + Nederzetting + Volkstuin + Boerderij + + Apotheek + Ziekenhuis + Kliniek + Dokters + Eerste hulp + Tandarts + Verpleeghuis + Vondelingenluik + Dierenarts + Sanatorium + Audioloog + Bloedbank + Fysiotherapeut + Opticien + Podoloog + Psychotherapeut + Bedrijf + Verzekeraar + Vastgoedmakelaar + Advocaat + NGO + Stadhuis + Reclamebureau + Onderwijsinstelling + Architectenkantoor + Onderzoekskantoor + Studio + Bookmaker + + Stadion + Museum + Gedenkteken + Archeologische site + Slagveld + Historisch kanon + Kasteel + Stadspoort + Fort + Fontein + Historische ruïnes + Historisch schip + Scheepswrak + Monument + Zoo + Aquarium + Toeristische attractie + Dier (attractie) + Reuzenrad + Draaimolen + Doolhof + Achtbaan + Attractie + Pretpark + + Glijbaan + Zomerrodelbaan + Zweefmolen + Trein (attractie) + Waterglijbaan + + Hotel + Hostel + Motel + Guest house + Berghut + Chalet + + Klooster + Historisch klooster + Gebedshuis: taoïstisch + Gebedshuis + Gebedshuis: christelijk + Gebedshuis: joods + Gebedshuis: islamitisch + Gebedshuis: sikh + Gebedshuis: boeddhistisch + Gebedshuis: hindu + Gebedshuis: shinto + Klok + Reisbureau + Bron + Warmwaterbron + Geiser + Begraafplaats + Kerkhof + Schuilplaats + Kabelbaan + Resort + + Kunstvereniging + Astronomievereniging + Computervereniging + Bordspellenvereniging + Motorvereniging + Sportvereniging + Spellenvereniging + Autovereniging + Schaakvereniging + Cinemavereniging + Fanclub + Visvereniging + Veteranenvereniging + Linuxvereniging + Theatervereniging + Geschiedenisvereniging + Muziekvereniging + Ethnische vereniging + Natuurvereniging + Fotografievereniging + Jachtvereniging + Schietvereniging + Toerismevereniging + Liefdadigheidsvereniging + + Bibliotheek + Kunstencentrum + Cinema + Casino + Gemeenschapscentrum + Sociaal centrum + Theater + Circus + Dansvloer + Nachtclub + Stripclub + Badplaats + Hondenpark + Visplaats + Jachttoren + Haven + Jachthaven + Minigolf + Speeltuin + Zwembad + Waterpretpark + Park + + Café + Biergarten + Restaurant + Fastfood + Bar + Kroeg + Barbecue + + Smid + Imker + Mandenvlechter + Brouwerij + Botenbouwer + Boekbinder + Timmerman + Elektricien + Tuinier + Slotenmaker + Juwelier + Sleutelsnijder + Opticien + Schilder + Fotograaf + Fotografisch laboratorium + Loodgieter + Stukadoor + Tuiger + Dakdekker + Zadelaar + Schoenmaker + Kleermaker + Schoonheidssalon + Nagelsalon + Kapper + Massagesalon + Tattoosalon + Autoverhuur + Dok + Toilet + Sauna + Bordeel + Mortuarium + Crematorium + Internetcafé + + Bank + Geldautomaat + Accountant + Grot-ingang + Bergtop + + Vulkaan + Krater + Bergrug + Gletsjer + Zinkgat + Waterval + Rivier + Stroom + Stroomversnellingen + Strand + Baai + Fjord + Rif + Drasland + Natuurreservaat + Eiland + Eilandje + + Dijk + Haven + Chicane + Rammelstrook + Plateau + Wegversmalling + Autoreparateur + Banden + Autokeuring + Wasstraat + Oplaadpunt + Voertuighelling + Perslucht + Kabelbaan + Stoeltjeslift + T-bar-lift + J-bar-lift + Knoplift + Gemengde lift + Sleeplift + Sleeplift + Goederenlift + Tapijtlift + + Tunnel + Brug + + Snelheidscamera + Draaicirkel + Knooppunt + + Waterput + Standpijp + Waterwerken + Scheepswerf + Afvalwaterstation + Schutsluis + Draaipunt van vaarweg + Stuw + Watermolen + + Onderstation + Transformator + diff --git a/OsmAnd/res/values-nl/strings.xml b/OsmAnd/res/values-nl/strings.xml index 5bcac409f8..205472c51e 100644 --- a/OsmAnd/res/values-nl/strings.xml +++ b/OsmAnd/res/values-nl/strings.xml @@ -376,7 +376,7 @@ Kan de geo intent \'%s\' niet verwerken Zoek adres in de offline kaarten Systeem - Kies de taal van het menu + Kies de taal van het menu (gelieve OsmAnd daarna te herstarten) Taal Kies een kaartbron @@ -1998,7 +1998,7 @@ Afghanistan, Albanie, Algerije, Andorra, Angola, Anguilla, Antigua en Barbuda, A Tram- en treinverbindingen Zet het scherm aan Zet het scherm aan bij het naderen van een bocht - Selecteer op kaart + Selecteer op kaart… Vermijd wegen… Verberg Nooit @@ -2017,7 +2017,7 @@ Afghanistan, Albanie, Algerije, Andorra, Angola, Anguilla, Antigua en Barbuda, A Gebruik snelle, hardware-gebaseerde OpenGL weergave (werkt niet op alle apparaten) Er is geen alternatieve weg gevonden Sluiten - Kan niet downloaden. Maak verbinding met internet om verder te gaan. + Kan niet downloaden, gelieve uw internetverbinding na te kijken. Alle downloads Updates Geïnstalleerd @@ -2043,4 +2043,5 @@ Afghanistan, Albanie, Algerije, Andorra, Angola, Anguilla, Antigua en Barbuda, A Toon spoorwegovergangen Toon voetgangers oversteekplaatsen Meld oversteekplaatsen - + Standaard + diff --git a/OsmAnd/res/values-pl/phrases.xml b/OsmAnd/res/values-pl/phrases.xml index 9856ff8ec7..07cbf358d4 100644 --- a/OsmAnd/res/values-pl/phrases.xml +++ b/OsmAnd/res/values-pl/phrases.xml @@ -247,4 +247,212 @@ Miasto Wieś Wioska + Szpital + Przychodnia + Klinika + Dentysta + Dom opieki + Okno życia + Weterynarz + Sanatorium + Medycyna alternatywna + Audiolog + Bank krwi + Centrum medyczne + Okulista + Fizjoterapeuta + Psychoterapeuta + Logopeda + Placówka medyczna + + Firma + Ubezpieczenia + Agent nieruchomości + Prawnik + Organizacja pozarządowa + Ratusz + Urząd pracy + Agencja reklamowa + Instytucja edukacyjna + Studio + Bukmacher + + Stadion + Centrum sportowe + Pole golfowe + Lodowisko + Boisko + Bieżnia + Tor wyścigów konnych + Tor wyścigowy + Łucznictwo + Lekkoatletyka + Futbol amerykański + Futbol australijski + Baseball + Koszykówka + Siatkówka plażowa + Futbol kanadyjski + Szachy + Krykiet + Jazda na rowerze + Nurkowanie + Nurkowanie z akwalungiem + Wyścigi psów + Golf + Gimnastyka + Piłka ręczna + Hokej + Wyścigi konne + Biegi na orientację + Paralotniarstwo + Wioślarstwo + Łyżwiarstwo + Jazda na nartach + Piłka nożna + Surfing + Pływanie + Tenis stołowy + Tenis + Siatkówka + + Muzeum + Pomnik + Wykopalisko archeologiczne + Kamień graniczny + Historyczne armaty + Zamek + Brama miasta + Fort + Fontanna + Zabytkowe ruiny + Kamień runiczny + Wrak statku + Zabytkowy statek + Monument + Zoo + Akwarium + Park rozrywki + + Atrakcja turystyczna + Diabelski młyn + Karuzela + Labirynt + Roller coaster + Zjeżdżalnia wodna + + Hotel + Pensjonat + Hostel + Motel + Miejsce kultu + Klasztor + Zabytkowy klasztor + Przydrożny krzyż + Przydrożna kapliczka + Informacja turystyczna + Zegar + Gejzer + Cmentarz + Cmentarzyk + Biblioteka + Centrum sztuki + Kino + Kasyno + Teatr + Cyrk + Parkiet taneczny + Klub nocny + Miejsce połowów + Port + Miniaturowy golf + Plac zabaw + Basen + Park wodny + Park + + Restauracja + Bar + Pub + Woda pitna + Grill + + Wikliniarz + Pszczelarz + Kowal + Browar + Introligator + Cieśla + Zegarmistrz + Krawiec + Elektryk + Ogrodnik + Ogrzewanie, wentylacja, klimatyzacja + Ślusarz + Optyk + Malarz + Fotograf + Laboratorium fotograficzne + Tynkarz + Hydraulik + Dekarz + Rymarz + Tartak + Monter rusztowań + Rzeźbiarz + Szewc + Kamieniarz + Krawiec + Glazurnik + Blacharz + Tapicer + Zegarmistrz + Salon piękności + Salon paznokci + Salon fryzjerski + Salon masażu + Salon tatuażu + Pralnia chemiczna + Pralnia + Wypożyczalnia samochodów + Dok + Toalety + Sauna + Dom publiczny + Kostnica + Krematorium + Kawiarenka internetowa + + Bank + Bankomat + Kantor + Księgowy + Płatność bitcoinami + + Szczyt + Wulkan + Krater + Wodospad + Rzeka + Strumień + Plaża + Zatoka + Fiord + Rafa + Rezerwat przyrody + Cieśnina + Wyspa + Wysepka + + Latarnia + Miejsce do cumowania + Suchy dok + Dok pływający + Port + Punkt orientacyjny + Strefa wojskowa + Lotnisko wojskowe + Bunkier wojskowy + Koszary + Poligon diff --git a/OsmAnd/res/values-pl/strings.xml b/OsmAnd/res/values-pl/strings.xml index d6a088f8aa..ea22304339 100644 --- a/OsmAnd/res/values-pl/strings.xml +++ b/OsmAnd/res/values-pl/strings.xml @@ -177,7 +177,7 @@ Nie można zinterpretować \'%s\' Wyszukaj adres korzystając z map offline Systemowy - Wybierz język interfejsu + Wybierz język interfejsu (zrestartuj OsmAnd po zmianie) Język interfejsu Wybierz źródło mapy @@ -1949,7 +1949,7 @@ Afganistan, Afryka Południowa, Albania, Algieria, Andora, Angola, Anguilla, Ant Użyj bezpiecznego połączenia z serwerem Użyj HTTPS Zaawansowane - Dom + Ekran startowy Dostępne aktualizacje dla %1$s map Wyszukaj POKAŻ MAPĘ diff --git a/OsmAnd/res/values-sc/strings.xml b/OsmAnd/res/values-sc/strings.xml index 2b7b7ea64a..f7870f43a5 100644 --- a/OsmAnd/res/values-sc/strings.xml +++ b/OsmAnd/res/values-sc/strings.xml @@ -1228,7 +1228,7 @@ Si cussigiat de annànghere unu o prus puntos intermedios pro megiorare sas pres Impossìbile lèghere geo intent \'%s\' Chirca indiritzu impreande sas mapas non in lìnia Sistema - Ischerta limba interfàtzia + Ischerta limba interfàtzia (pro piaghere torra a allùere OsmAnd a pustis de su càmbiu) Limba interfàtzia non cumpridu Issèbera una Mitza pro sa Mapa @@ -1773,7 +1773,7 @@ Si cussigiat de annànghere unu o prus puntos intermedios pro megiorare sas pres Àndalas tram e trenu Allughe s\'ischermu Allughe s\'ischermu cando b\'est una bortada a curtzu - Ischerta in sa mapa + Ischerta in sa mapa… Istransi istradas… Cua Mai @@ -1818,4 +1818,5 @@ Si cussigiat de annànghere unu o prus puntos intermedios pro megiorare sas pres Ammustra sas rugradas ferroviàrias Ammustra sas istrìscias pedonales Annùntzia sos atraessamentos pedonales - + Predefinidu + diff --git a/OsmAnd/res/values-sk/strings.xml b/OsmAnd/res/values-sk/strings.xml index fcc8f7fd29..42e3890d05 100644 --- a/OsmAnd/res/values-sk/strings.xml +++ b/OsmAnd/res/values-sk/strings.xml @@ -472,7 +472,7 @@ Nedá sa parsovať geo obsah: "%s" Nájsť adresu použitím stiahnutých máp Systémový - Zmeniť zobrazovaný jazyk + Zmeniť zobrazovaný jazyk (po zmene je potrebné reštartovať OsmAnd) Jazyk zobrazenia Vyberte zdroj mapy diff --git a/OsmAnd/res/values-sr/strings.xml b/OsmAnd/res/values-sr/strings.xml index 88f6d8d1db..c3d75c4e82 100644 --- a/OsmAnd/res/values-sr/strings.xml +++ b/OsmAnd/res/values-sr/strings.xml @@ -20,13 +20,13 @@ Стилови мапа Истиче(минута): %1$s Максимално увеличање: %1$s - Elliptic mercator + Еклиптични приказ земљине кугле Максимално увеличање Минимално увеличање URL Изаберите постојећи… Име - FPS debug info + Подаци о грешкама брзине приказа сличица Јапан Сједињене Америчке Државе Канада @@ -223,4 +223,36 @@ Dropbox додатак омогућава да синхронизујете путање и аудио/видео белешке са вашим Dropbox налогом. Dropbox додатак Промени редослед - + Подразумевано + Подразумевано + Пешачки прелаз + Прикажи пешачке прелазе + Да ли желите да преузмете мапе за коришћење ван мреже? + Преузели сте %1$s мапа + Преузми нову мапу + Управљајте + Језик мапе + Да ли желите да Османд умножи и своје податке на ново место? Изаберите „Не“ да би Османд само направио и користио нову фасциклу. + Област + Сва преузимања + Надоградње + Месно + Преузимање је немогуће, проверите везу са Интернетом. + Откажи + Све датотеке су свеже + Користи ОпенГЛ за приказ + Користи хардверско убрзање ОпенГЛ-а за приказ (можда не ради на неким уређајима) + Користи безбедну везу са сервером + Користи ХТТПС + Напредно + Доступне су надоградње %1$s мапа + Потражи + ПРИКАЖИ МАПУ + ПРИКАЖИ СВЕ + Координате + Никад + Означи на мапи… + Сакриј + Појединости + Уклони све + diff --git a/OsmAnd/res/values-sv/strings.xml b/OsmAnd/res/values-sv/strings.xml index 8540b37a93..71610e4cc0 100644 --- a/OsmAnd/res/values-sv/strings.xml +++ b/OsmAnd/res/values-sv/strings.xml @@ -528,7 +528,7 @@ Det gick inte att tolka geo uppsåt \'%s\' Sök adress med hjälp av offline-kartor System -Välj visningsspråk +Välj visningsspråk (starta om OsmAnd efter språkbyte) Visningsspråk Kartkälla Användarprofil diff --git a/OsmAnd/src/net/osmand/plus/FavouritesDbHelper.java b/OsmAnd/src/net/osmand/plus/FavouritesDbHelper.java index 92b98c0f24..3c8d580894 100644 --- a/OsmAnd/src/net/osmand/plus/FavouritesDbHelper.java +++ b/OsmAnd/src/net/osmand/plus/FavouritesDbHelper.java @@ -30,6 +30,12 @@ import net.osmand.plus.api.SQLiteAPI.SQLiteCursor; public class FavouritesDbHelper { + public interface FavoritesUpdatedListener { + void updateFavourites(); + } + + private List favoritesUpdatedListeners = new ArrayList(); + private static final org.apache.commons.logging.Log log = PlatformUtil.getLog(FavouritesDbHelper.class); public static final String FILE_TO_SAVE = "favourites.gpx"; //$NON-NLS-1$ @@ -82,10 +88,25 @@ public class FavouritesDbHelper { if(changed) { saveCurrentPointsIntoFile(); } + favouritesUpdated(); } + private void favouritesUpdated(){ + for (FavoritesUpdatedListener listener : favoritesUpdatedListeners){ + listener.updateFavourites(); + } + } + public void addFavoritesUpdatedListener(FavoritesUpdatedListener listener){ + if (!favoritesUpdatedListeners.contains(listener)){ + favoritesUpdatedListeners.add(listener); + } + } + + public void removeFavoritesUpdatedListener(FavoritesUpdatedListener listener){ + favoritesUpdatedListeners.remove(listener); + } private boolean merge(Map source, Map destination) { boolean changed = false; diff --git a/OsmAnd/src/net/osmand/plus/OsmandSettings.java b/OsmAnd/src/net/osmand/plus/OsmandSettings.java index d16d0e443e..b3f975f0a9 100644 --- a/OsmAnd/src/net/osmand/plus/OsmandSettings.java +++ b/OsmAnd/src/net/osmand/plus/OsmandSettings.java @@ -773,7 +773,7 @@ public class OsmandSettings { new EnumIntPreference("auto_zoom_map_new", AutoZoomMap.NONE, AutoZoomMap.values()).makeProfile().cache(); { - AUTO_ZOOM_MAP.setModeDefaultValue(ApplicationMode.CAR, AutoZoomMap.FARTHEST); + AUTO_ZOOM_MAP.setModeDefaultValue(ApplicationMode.CAR, AutoZoomMap.FAR); AUTO_ZOOM_MAP.setModeDefaultValue(ApplicationMode.BICYCLE, AutoZoomMap.NONE); AUTO_ZOOM_MAP.setModeDefaultValue(ApplicationMode.PEDESTRIAN, AutoZoomMap.NONE); } @@ -1869,16 +1869,18 @@ public class OsmandSettings { } public enum AutoZoomMap { - NONE(R.string.auto_zoom_none, 0f), - FARTHEST(R.string.auto_zoom_farthest, 1f), - FAR(R.string.auto_zoom_far, 1.4f), - CLOSE(R.string.auto_zoom_close, 2f) + NONE(R.string.auto_zoom_none, 0f, 18), + FARTHEST(R.string.auto_zoom_farthest, 1f, 17f), + FAR(R.string.auto_zoom_far, 1.4f, 18f), + CLOSE(R.string.auto_zoom_close, 2f, 19f) ; public final float coefficient; public final int name; - AutoZoomMap(int name, float coefficient) { + public final float maxZoom; + AutoZoomMap(int name, float coefficient, float maxZoom) { this.name = name; this.coefficient = coefficient; + this.maxZoom = maxZoom; } } diff --git a/OsmAnd/src/net/osmand/plus/activities/MainMenuActivity.java b/OsmAnd/src/net/osmand/plus/activities/MainMenuActivity.java index 4b1552168e..8498431adb 100644 --- a/OsmAnd/src/net/osmand/plus/activities/MainMenuActivity.java +++ b/OsmAnd/src/net/osmand/plus/activities/MainMenuActivity.java @@ -466,11 +466,6 @@ public class MainMenuActivity extends BaseDownloadActivity implements OsmAndLoca if (f instanceof DashDownloadMapsFragment && !f.isDetached()) { ((DashDownloadMapsFragment) f).refreshData(); } - //Needed to reliably initialize DashFavoritesFragement on devices without compass - // [Victor]: This doesn't look as a proper place, then it highly depends on internet connection and download list - if (f instanceof DashFavoritesFragment && !f.isDetached()) { - ((DashFavoritesFragment) f).setupFavorites(); - } } } diff --git a/OsmAnd/src/net/osmand/plus/activities/MapActivity.java b/OsmAnd/src/net/osmand/plus/activities/MapActivity.java index da5f731d19..0a79a15132 100644 --- a/OsmAnd/src/net/osmand/plus/activities/MapActivity.java +++ b/OsmAnd/src/net/osmand/plus/activities/MapActivity.java @@ -23,7 +23,6 @@ import net.osmand.map.MapTileDownloader.DownloadRequest; import net.osmand.map.MapTileDownloader.IMapDownloaderCallback; import net.osmand.plus.ApplicationMode; import net.osmand.plus.BusyIndicator; -import net.osmand.plus.DeviceAdminRecv; import net.osmand.plus.OsmAndConstants; import net.osmand.plus.OsmandApplication; import net.osmand.plus.OsmandPlugin; @@ -42,7 +41,6 @@ import net.osmand.plus.render.RendererRegistry; import net.osmand.plus.resources.ResourceManager; import net.osmand.plus.routing.RoutingHelper; import net.osmand.plus.routing.RoutingHelper.RouteCalculationProgressCallback; -import net.osmand.plus.routing.VoiceRouter; import net.osmand.plus.views.AnimateDraggingMapThread; import net.osmand.plus.views.OsmAndMapLayersView; import net.osmand.plus.views.OsmAndMapSurfaceView; @@ -56,19 +54,15 @@ import android.app.Notification; import android.app.NotificationManager; import android.app.PendingIntent; import android.app.ProgressDialog; -import android.app.admin.DevicePolicyManager; -import android.content.ComponentName; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.media.AudioManager; import android.net.Uri; -import android.opengl.GLSurfaceView; import android.os.Bundle; import android.os.Environment; import android.os.Handler; import android.os.Message; -import android.os.PowerManager; import android.util.DisplayMetrics; import android.view.Gravity; import android.view.KeyEvent; @@ -488,12 +482,18 @@ public class MapActivity extends AccessibleActivity { // if (settings.AUTO_ZOOM_MAP.get() == AutoZoomMap.NONE) { // changeLocation = false; // } + +// double curZoom = mapView.getZoom() + mapView.getZoomFractionalPart() + stp * 0.3; +// int newZoom = (int) Math.round(curZoom); +// double zoomFrac = curZoom - newZoom; + final int newZoom = mapView.getZoom() + stp; + final double zoomFrac = mapView.getZoomFractionalPart(); if (newZoom > 22) { AccessibleToast.makeText(this, R.string.edit_tilesource_maxzoom, Toast.LENGTH_SHORT).show(); //$NON-NLS-1$ return; } - mapView.getAnimatedDraggingThread().startZooming(newZoom, changeLocation); + mapView.getAnimatedDraggingThread().startZooming(newZoom, zoomFrac, changeLocation); if (app.accessibilityEnabled()) AccessibleToast.makeText(this, getString(R.string.zoomIs) + " " + newZoom, Toast.LENGTH_SHORT).show(); //$NON-NLS-1$ showAndHideMapPosition(); diff --git a/OsmAnd/src/net/osmand/plus/base/MapViewTrackingUtilities.java b/OsmAnd/src/net/osmand/plus/base/MapViewTrackingUtilities.java index c03ed9b260..e8b9d5acc6 100644 --- a/OsmAnd/src/net/osmand/plus/base/MapViewTrackingUtilities.java +++ b/OsmAnd/src/net/osmand/plus/base/MapViewTrackingUtilities.java @@ -197,19 +197,19 @@ public class MapViewTrackingUtilities implements OsmAndLocationListener, IMapLoc // decrease a bit zdelta += 1; } + double targetZoom = Math.max(tb.getZoom() + tb.getZoomFloatPart() + zdelta, settings.AUTO_ZOOM_MAP.get().maxZoom); int threshold = settings.AUTO_FOLLOW_ROUTE.get(); if (now - lastTimeAutoZooming > 4500 && (now - lastTimeAutoZooming > threshold || !isUserZoomed)) { isUserZoomed = false; lastTimeAutoZooming = now; - double settingsZoomScale = Math.log(mapView.getSettingsMapDensity()) / Math.log(2.0f); - double zoomScale = Math.log(tb.getMapDensity()) / Math.log(2.0f); - double complexZoom = tb.getZoom() + zoomScale + zdelta; +// double settingsZoomScale = Math.log(mapView.getSettingsMapDensity()) / Math.log(2.0f); +// double zoomScale = Math.log(tb.getMapDensity()) / Math.log(2.0f); +// double complexZoom = tb.getZoom() + zoomScale + zdelta; // round to 0.33 - double newZoom = Math.round((complexZoom - settingsZoomScale) * 3) / 3f; - int newIntegerZoom = (int)Math.round(newZoom); - double nzscale = newZoom - newIntegerZoom + settingsZoomScale; - mapView.setComplexZoom(newIntegerZoom, Math.pow(2, nzscale)); - // mapView.getAnimatedDraggingThread().startZooming(mapView.getFloatZoom() + zdelta, false); + targetZoom = Math.round(targetZoom * 3) / 3f; + int newIntegerZoom = (int)Math.round(targetZoom); + double zPart = targetZoom - newIntegerZoom; + mapView.getAnimatedDraggingThread().startZooming(newIntegerZoom, zPart, false); } } } diff --git a/OsmAnd/src/net/osmand/plus/dashboard/DashFavoritesFragment.java b/OsmAnd/src/net/osmand/plus/dashboard/DashFavoritesFragment.java index dd490b8a63..2d548d023f 100644 --- a/OsmAnd/src/net/osmand/plus/dashboard/DashFavoritesFragment.java +++ b/OsmAnd/src/net/osmand/plus/dashboard/DashFavoritesFragment.java @@ -38,7 +38,7 @@ import android.widget.TextView; /** * Created by Denis on 24.11.2014. */ -public class DashFavoritesFragment extends DashBaseFragment { +public class DashFavoritesFragment extends DashBaseFragment implements FavouritesDbHelper.FavoritesUpdatedListener { public static final String TAG = "DASH_FAVORITES_FRAGMENT"; private net.osmand.Location location = null; private LatLon loc = null; @@ -71,6 +71,11 @@ public class DashFavoritesFragment extends DashBaseFragment { }); return view; } + + @Override + public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + } @Override public void onResume() { @@ -92,10 +97,16 @@ public class DashFavoritesFragment extends DashBaseFragment { } else { loc = new LatLon(0f, 0f); } + + getMyApplication().getFavorites().addFavoritesUpdatedListener(this); setupFavorites(); } - + @Override + public void onPause() { + super.onPause(); + getMyApplication().getFavorites().removeFavoritesUpdatedListener(this); + } public void setupFavorites(){ View mainView = getView(); @@ -250,4 +261,13 @@ public class DashFavoritesFragment extends DashBaseFragment { updateArrows(); } + @Override + public void updateFavourites() { + getActivity().runOnUiThread(new Runnable() { + @Override + public void run() { + setupFavorites(); + } + }); + } } diff --git a/OsmAnd/src/net/osmand/plus/dashboard/DashMapFragment.java b/OsmAnd/src/net/osmand/plus/dashboard/DashMapFragment.java index 766842e9c5..ceaa86fd1a 100644 --- a/OsmAnd/src/net/osmand/plus/dashboard/DashMapFragment.java +++ b/OsmAnd/src/net/osmand/plus/dashboard/DashMapFragment.java @@ -77,10 +77,11 @@ public class DashMapFragment extends DashBaseFragment implements IMapDownloaderC @Override public void onResume() { super.onResume(); - if (!getMyApplication().isApplicationInitializing()) { + if (!getMyApplication().isApplicationInitializing()) { updateMapImage(); } - } + + } @Override public void onViewCreated(final View view, @Nullable Bundle savedInstanceState) { diff --git a/OsmAnd/src/net/osmand/plus/dialogs/ConfigureMapMenu.java b/OsmAnd/src/net/osmand/plus/dialogs/ConfigureMapMenu.java index 4b0777b86c..de621f0b3c 100644 --- a/OsmAnd/src/net/osmand/plus/dialogs/ConfigureMapMenu.java +++ b/OsmAnd/src/net/osmand/plus/dialogs/ConfigureMapMenu.java @@ -107,6 +107,7 @@ public class ConfigureMapMenu { return false; } else if(itemId == R.string.layer_gpx_layer && cm.getSelection(pos) == 1) { ma.getMapLayers().showGPXFileLayer(getAlreadySelectedGpx(), ma.getMapView()); + // TODO: tick mark of "Show GPX" needs to be synced after return form sub-selection screen (user may or may not have selected files!) return false; } else { return super.onRowItemClick(adapter, view, itemId, pos); @@ -131,6 +132,7 @@ public class ConfigureMapMenu { } else { ma.getMapLayers().showGPXFileLayer(getAlreadySelectedGpx(), ma.getMapView()); } + // TODO: tick mark of "Show GPX" needs to be synced after return form sub-selection screen (user may or may not have selected files!) } else if (itemId == R.string.layer_transport_route) { ma.getMapLayers().getTransportInfoLayer().setVisible(isChecked); } @@ -148,9 +150,9 @@ public class ConfigureMapMenu { // String appMode = " [" + settings.getApplicationMode().toHumanString(view.getApplication()) +"] "; adapter.item(R.string.layer_poi).selected(settings.SHOW_POI_OVER_MAP.get() ? 1 : 0) .icons(R.drawable.ic_action_info_dark, R.drawable.ic_action_info_light).listen(l).reg(); - adapter.item(R.string.layer_amenity_label).selected(settings.SHOW_POI_LABEL.get() ? 1 : 0) + adapter.item(R.string.layer_amenity_label).selected(settings.SHOW_POI_LABEL.get() ? 1 : 0) .icons(R.drawable.ic_action_text_dark, R.drawable.ic_action_text_light).listen(l).reg(); - adapter.item(R.string.layer_favorites).selected(settings.SHOW_FAVORITES.get() ? 1 : 0) + adapter.item(R.string.layer_favorites).selected(settings.SHOW_FAVORITES.get() ? 1 : 0) .icons(R.drawable.ic_action_fav_dark, R.drawable.ic_action_fav_light).listen(l).reg(); adapter.item(R.string.layer_gpx_layer).selected( app.getSelectedGpxHelper().isShowingAnyGpxFiles() ? 1 : 0) diff --git a/OsmAnd/src/net/osmand/plus/render/MapRenderRepositories.java b/OsmAnd/src/net/osmand/plus/render/MapRenderRepositories.java index d24d2fe14b..9a16b360b4 100644 --- a/OsmAnd/src/net/osmand/plus/render/MapRenderRepositories.java +++ b/OsmAnd/src/net/osmand/plus/render/MapRenderRepositories.java @@ -668,10 +668,11 @@ public class MapRenderRepositories { currentRenderingContext.polygonMinSizeToDisplay = renderingReq.getIntPropertyValue(renderingReq.ALL.R_ATTR_INT_VALUE); } final QuadPointDouble lt = requestedBox.getLeftTopTile(requestedBox.getZoom()); - lt.x *= requestedBox.getMapDensity(); - lt.y *= requestedBox.getMapDensity(); + double cfd = MapUtils.getPowZoom(requestedBox.getZoomFloatPart())* requestedBox.getMapDensity(); + lt.x *= cfd; + lt.y *= cfd; // LatLon ltn = requestedBox.getLeftTopLatLon(); - final double tileDivisor = MapUtils.getPowZoom(31 - requestedBox.getZoom()) / requestedBox.getMapDensity(); + final double tileDivisor = MapUtils.getPowZoom(31 - requestedBox.getZoom()) / cfd; currentRenderingContext.leftX = lt.x; currentRenderingContext.topY = lt.y; diff --git a/OsmAnd/src/net/osmand/plus/render/MapVectorLayer.java b/OsmAnd/src/net/osmand/plus/render/MapVectorLayer.java index 2b4edd2897..235dc2e67a 100644 --- a/OsmAnd/src/net/osmand/plus/render/MapVectorLayer.java +++ b/OsmAnd/src/net/osmand/plus/render/MapVectorLayer.java @@ -4,7 +4,7 @@ import net.osmand.core.android.MapRendererView; import net.osmand.core.android.TileSourceProxyProvider; import net.osmand.core.jni.MapLayerConfiguration; import net.osmand.core.jni.PointI; -import net.osmand.data.QuadPointDouble; +import net.osmand.data.LatLon; import net.osmand.data.RotatedTileBox; import net.osmand.map.ITileSource; import net.osmand.plus.OsmandSettings; @@ -138,8 +138,8 @@ public class MapVectorLayer extends BaseMapLayer { // opengl renderer mapRenderer.setTarget(new PointI(tilesRect.getCenter31X(), tilesRect.getCenter31Y())); mapRenderer.setAzimuth(-tilesRect.getRotate()); - mapRenderer.setZoom((float) (tilesRect.getZoom() /* + tilesRect.getZoomScale() */+ tilesRect - .getZoomAnimation())); + mapRenderer.setZoom((float) (tilesRect.getZoom() + tilesRect + .getZoomAnimation() + tilesRect.getZoomFloatPart())); } else { if (!view.isZooming()) { if (resourceManager.updateRenderedMapNeeded(tilesRect, drawSettings)) { @@ -163,16 +163,22 @@ public class MapVectorLayer extends BaseMapLayer { boolean shown = false; if (bmp != null && bmpLoc != null) { float rot = -bmpLoc.getRotate(); - int cz = currentViewport.getZoom(); canvas.rotate(rot, currentViewport.getCenterPixelX(), currentViewport.getCenterPixelY()); final RotatedTileBox calc = currentViewport.copy(); calc.setRotate(bmpLoc.getRotate()); - QuadPointDouble lt = bmpLoc.getLeftTopTile(cz); - QuadPointDouble rb = bmpLoc.getRightBottomTile(cz); - final float x1 = calc.getPixXFromTile(lt.x, lt.y, cz); - final float x2 = calc.getPixXFromTile(rb.x, rb.y, cz); - final float y1 = calc.getPixYFromTile(lt.x, lt.y, cz); - final float y2 = calc.getPixYFromTile(rb.x, rb.y, cz); +// int cz = currentViewport.getZoom(); +// QuadPointDouble lt = bmpLoc.getLeftTopTile(cz); +// QuadPointDouble rb = bmpLoc.getRightBottomTile(cz); +// final float x1 = calc.getPixXFromTile(lt.x, lt.y, cz); +// final float x2 = calc.getPixXFromTile(rb.x, rb.y, cz); +// final float y1 = calc.getPixYFromTile(lt.x, lt.y, cz); +// final float y2 = calc.getPixYFromTile(rb.x, rb.y, cz); + LatLon lt = bmpLoc.getLeftTopLatLon(); + LatLon rb = bmpLoc.getRightBottomLatLon(); + final float x1 = calc.getPixXFromLatLon(lt.getLatitude(), lt.getLongitude()); + final float x2 = calc.getPixXFromLatLon(rb.getLatitude(), rb.getLongitude()); + final float y1 = calc.getPixYFromLatLon(lt.getLatitude(), lt.getLongitude()); + final float y2 = calc.getPixYFromLatLon(rb.getLatitude(), rb.getLongitude()); destImage.set(x1, y1, x2, y2); if (!bmp.isRecycled()) { canvas.drawBitmap(bmp, null, destImage, paintImg); diff --git a/OsmAnd/src/net/osmand/plus/resources/ResourceManager.java b/OsmAnd/src/net/osmand/plus/resources/ResourceManager.java index edc25babda..8f513e2b96 100644 --- a/OsmAnd/src/net/osmand/plus/resources/ResourceManager.java +++ b/OsmAnd/src/net/osmand/plus/resources/ResourceManager.java @@ -45,7 +45,6 @@ import net.osmand.plus.R; import net.osmand.plus.SQLiteTileSource; import net.osmand.plus.SearchByNameFilter; import net.osmand.plus.Version; -import net.osmand.plus.download.BaseDownloadActivity; import net.osmand.plus.render.MapRenderRepositories; import net.osmand.plus.render.NativeOsmandLibrary; import net.osmand.plus.resources.AsyncLoadingThread.MapLoadRequest; diff --git a/OsmAnd/src/net/osmand/plus/routing/RoutingHelper.java b/OsmAnd/src/net/osmand/plus/routing/RoutingHelper.java index 99107511a0..1c0780d3ce 100644 --- a/OsmAnd/src/net/osmand/plus/routing/RoutingHelper.java +++ b/OsmAnd/src/net/osmand/plus/routing/RoutingHelper.java @@ -318,7 +318,7 @@ public class RoutingHelper { } if (calculateRoute) { - recalculateRouteInBackground(false, currentLocation, finalLocation, intermediatePoints, currentGPXRoute, + recalculateRouteInBackground(currentLocation, finalLocation, intermediatePoints, currentGPXRoute, previousRoute.isCalculated() ? previousRoute : null, false, !targetPointsChanged); } else { Thread job = currentRunningJob; @@ -709,6 +709,7 @@ public class RoutingHelper { private final RouteCalculationParams params; private boolean paramsChanged; + private Thread prevRunningJob; public RouteRecalculationThread(String name, RouteCalculationParams params, boolean paramsChanged) { super(name); @@ -730,10 +731,26 @@ public class RoutingHelper { @Override public void run() { - + synchronized (RoutingHelper.this) { + currentRunningJob = this; + } + if(prevRunningJob != null) { + while(prevRunningJob.isAlive()){ + try { + Thread.sleep(50); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + synchronized (RoutingHelper.this) { + currentRunningJob = this; + } + } RouteCalculationResult res = provider.calculateRouteImpl(params); if (params.calculationProgress.isCancelled) { - currentRunningJob = null; + synchronized (RoutingHelper.this) { + currentRunningJob = null; + } return; } final boolean onlineSourceWithoutInternet = !res.isCalculated() && params.type.isOnline() && !settings.isInternetConnectionAvailable(); @@ -773,43 +790,50 @@ public class RoutingHelper { } lastTimeEvaluatedRoute = System.currentTimeMillis(); } + + public void setWaitPrevJob(Thread prevRunningJob) { + this.prevRunningJob = prevRunningJob; + } } public void recalculateRouteDueToSettingsChange() { - //This should fix route-recalculation if settings change during ongoing calculation clearCurrentRoute(finalLocation, intermediatePoints); - recalculateRouteInBackground(true, lastFixedLocation, finalLocation, intermediatePoints, currentGPXRoute, route, - true, false); + recalculateRouteInBackground(lastFixedLocation, finalLocation, intermediatePoints, currentGPXRoute, route, true, false); } - private void recalculateRouteInBackground(boolean force, final Location start, final LatLon end, final List intermediates, + private void recalculateRouteInBackground(final Location start, final LatLon end, final List intermediates, final GPXRouteParamsBuilder gpxRoute, final RouteCalculationResult previousRoute, boolean paramsChanged, boolean onlyStartPointChanged){ if (start == null || end == null) { return; } - if (currentRunningJob == null) { - // do not evaluate very often - if (force || System.currentTimeMillis() - lastTimeEvaluatedRoute > evalWaitInterval) { - RouteCalculationParams params = new RouteCalculationParams(); - params.start = start; - params.end = end; - params.intermediates = intermediates; - params.gpxRoute = gpxRoute == null ? null : gpxRoute.build(start, settings); - params.onlyStartPointChanged = onlyStartPointChanged; - params.previousToRecalculate = previousRoute; - params.leftSide = settings.DRIVING_REGION.get().leftHandDriving; - params.fast = settings.FAST_ROUTE_MODE.getModeValue(mode); - params.type = settings.ROUTER_SERVICE.getModeValue(mode); - params.mode = mode; - params.ctx = app; - if (previousRoute == null && params.type == RouteService.OSMAND) { - params.calculationProgress = new RouteCalculationProgress(); - updateProgress(params.calculationProgress); - } - synchronized (this) { - currentRunningJob = new RouteRecalculationThread("Calculating route", params, paramsChanged); //$NON-NLS-1$ - currentRunningJob.start(); + // do not evaluate very often + if ((currentRunningJob == null && System.currentTimeMillis() - lastTimeEvaluatedRoute > evalWaitInterval) + || paramsChanged || !onlyStartPointChanged) { + RouteCalculationParams params = new RouteCalculationParams(); + params.start = start; + params.end = end; + params.intermediates = intermediates; + params.gpxRoute = gpxRoute == null ? null : gpxRoute.build(start, settings); + params.onlyStartPointChanged = onlyStartPointChanged; + params.previousToRecalculate = previousRoute; + params.leftSide = settings.DRIVING_REGION.get().leftHandDriving; + params.fast = settings.FAST_ROUTE_MODE.getModeValue(mode); + params.type = settings.ROUTER_SERVICE.getModeValue(mode); + params.mode = mode; + params.ctx = app; + if (previousRoute == null && params.type == RouteService.OSMAND) { + params.calculationProgress = new RouteCalculationProgress(); + updateProgress(params.calculationProgress); + } + synchronized (this) { + final Thread prevRunningJob = currentRunningJob; + RouteRecalculationThread newThread = new RouteRecalculationThread( + "Calculating route", params, paramsChanged); //$NON-NLS-1$ + currentRunningJob = newThread; + if (prevRunningJob != null) { + newThread.setWaitPrevJob(prevRunningJob); } + currentRunningJob.start(); } } } diff --git a/OsmAnd/src/net/osmand/plus/views/AnimateDraggingMapThread.java b/OsmAnd/src/net/osmand/plus/views/AnimateDraggingMapThread.java index edc17517d1..1c7170263e 100644 --- a/OsmAnd/src/net/osmand/plus/views/AnimateDraggingMapThread.java +++ b/OsmAnd/src/net/osmand/plus/views/AnimateDraggingMapThread.java @@ -8,8 +8,6 @@ import net.osmand.util.MapUtils; import org.apache.commons.logging.Log; import android.os.SystemClock; -import android.util.FloatMath; -import android.view.MotionEvent; import android.view.animation.AccelerateDecelerateInterpolator; import android.view.animation.DecelerateInterpolator; import android.view.animation.LinearInterpolator; @@ -23,10 +21,10 @@ public class AnimateDraggingMapThread { protected static final Log log = PlatformUtil.getLog(AnimateDraggingMapThread.class); private final static float DRAGGING_ANIMATION_TIME = 1200f; - private final static float ZOOM_ANIMATION_TIME = 800f; - private final static float ZOOM_MOVE_ANIMATION_TIME = 650f; - private final static float MOVE_MOVE_ANIMATION_TIME = 2000f; - private final static int DEFAULT_SLEEP_TO_REDRAW = 55; + private final static float ZOOM_ANIMATION_TIME = 500f; + private final static float ZOOM_MOVE_ANIMATION_TIME = 450f; + private final static float MOVE_MOVE_ANIMATION_TIME = 1300f; + private final static int DEFAULT_SLEEP_TO_REDRAW = 15; private volatile boolean stopped; private volatile Thread currentThread = null; @@ -36,6 +34,7 @@ public class AnimateDraggingMapThread { private double targetLatitude = 0; private double targetLongitude = 0; private int targetIntZoom = 0; + private int targetFloatZoom = 0; private boolean isAnimatingZoom; @@ -120,11 +119,13 @@ public class AnimateDraggingMapThread { public void startMoving(final double finalLat, final double finalLon, final int endZoom, final boolean notifyListener){ stopAnimatingSync(); - double startLat = tileView.getLatitude(); - double startLon = tileView.getLongitude(); - float rotate = tileView.getRotate(); - final int startZoom = tileView.getZoom(); final RotatedTileBox rb = tileView.getCurrentRotatedTileBox().copy(); + double startLat = rb.getLatitude(); + double startLon = rb.getLongitude(); + float rotate = rb.getRotate(); + final int startZoom = rb.getZoom(); + final double startZoomFP = rb.getZoomFloatPart(); + boolean skipAnimation = false; float mStX = rb.getPixXFromLatLon(startLat, startLon) - rb.getPixXFromLatLon(finalLat, finalLon); float mStY = rb.getPixYFromLatLon(startLat, startLon) - rb.getPixYFromLatLon(finalLat, finalLon); @@ -141,7 +142,7 @@ public class AnimateDraggingMapThread { skipAnimation = skipAnimation || (Math.abs(moveZoom - startZoom) >= 3 || Math.abs(endZoom - moveZoom) > 3); if (skipAnimation) { tileView.setLatLonAnimate(finalLat, finalLon, notifyListener); - tileView.setZoomAnimate(endZoom, notifyListener); + tileView.setFractionalZoom(endZoom, 0, notifyListener); return; } final float mMoveX = rb.getPixXFromLatLon(startLat, startLon) - rb.getPixXFromLatLon(finalLat, finalLon); @@ -155,7 +156,7 @@ public class AnimateDraggingMapThread { public void run() { setTargetValues(endZoom, finalLat, finalLon); if(moveZoom != startZoom){ - animatingZoomInThread(startZoom, moveZoom, ZOOM_MOVE_ANIMATION_TIME, notifyListener); + animatingZoomInThread(startZoom, startZoomFP, moveZoom, startZoomFP,ZOOM_MOVE_ANIMATION_TIME, notifyListener); } if(!stopped){ @@ -165,10 +166,10 @@ public class AnimateDraggingMapThread { tileView.setLatLonAnimate(finalLat, finalLon, notifyListener); } - if (!stopped && moveZoom != endZoom) { - animatingZoomInThread(moveZoom, endZoom, ZOOM_MOVE_ANIMATION_TIME, notifyListener); + if (!stopped && (moveZoom != endZoom || startZoomFP != 0)) { + animatingZoomInThread(moveZoom, startZoomFP, endZoom, 0, ZOOM_MOVE_ANIMATION_TIME, notifyListener); } - tileView.setZoomAnimate(endZoom, notifyListener); + tileView.setFractionalZoom(endZoom, 0, notifyListener); pendingRotateAnimation(); } @@ -203,12 +204,17 @@ public class AnimateDraggingMapThread { } - private void animatingZoomInThread(double zoomStart, int zoom, float animationTime, boolean notifyListener){ + private void animatingZoomInThread(int zoomStart, double zoomFloatStart, + int zoomEnd, double zoomFloatEnd, float animationTime, boolean notifyListener){ try { isAnimatingZoom = true; - double curZoom = zoomStart; - double zoomEnd = (zoom /*+ zoomScale*/); - animationTime *= Math.abs(zoomEnd - zoomStart); + // could be 0 ]-0.5,0.5], -1 ]-1,0], 1 ]0, 1] + int threshold = ((int)(zoomFloatEnd * 2)); + double beginZoom = zoomStart + zoomFloatStart; + double endZoom = zoomEnd + zoomFloatEnd; + + double curZoom = beginZoom; + animationTime *= Math.abs(endZoom - beginZoom); // AccelerateInterpolator interpolator = new AccelerateInterpolator(1); LinearInterpolator interpolator = new LinearInterpolator(); @@ -220,15 +226,17 @@ public class AnimateDraggingMapThread { break; } float interpolation = interpolator.getInterpolation(normalizedTime); - curZoom = interpolation * (zoomEnd - zoomStart) + zoomStart; - tileView.zoomToAnimate(curZoom, notifyListener); + curZoom = interpolation * (endZoom - beginZoom) + beginZoom; + int baseZoom = (int) Math.round(curZoom - 0.5 * threshold); + double zaAnimate = curZoom - baseZoom; + tileView.zoomToAnimate(baseZoom, zaAnimate, notifyListener); try { Thread.sleep(DEFAULT_SLEEP_TO_REDRAW); } catch (InterruptedException e) { stopped = true; } } - tileView.setZoomAnimate(zoom, notifyListener); + tileView.setFractionalZoom(zoomEnd, zoomFloatEnd, notifyListener); } finally { isAnimatingZoom = false; } @@ -238,14 +246,14 @@ public class AnimateDraggingMapThread { return isAnimatingZoom; } - public void startZooming(final int zoomEnd, final boolean notifyListener){ + public void startZooming(final int zoomEnd, final double zoomPart, final boolean notifyListener){ final float animationTime = ZOOM_ANIMATION_TIME; startThreadAnimating(new Runnable(){ @Override public void run() { - final double zoomStart = tileView.getZoom() ; + RotatedTileBox tb = tileView.getCurrentRotatedTileBox(); setTargetValues(zoomEnd, tileView.getLatitude(), tileView.getLongitude()); - animatingZoomInThread(zoomStart, zoomEnd, animationTime, notifyListener); + animatingZoomInThread(tb.getZoom(), tb.getZoomFloatPart(), zoomEnd, zoomPart, animationTime, notifyListener); pendingRotateAnimation(); } }); //$NON-NLS-1$ diff --git a/OsmAnd/src/net/osmand/plus/views/OsmandMapTileView.java b/OsmAnd/src/net/osmand/plus/views/OsmandMapTileView.java index f04e296d05..70003988db 100644 --- a/OsmAnd/src/net/osmand/plus/views/OsmandMapTileView.java +++ b/OsmAnd/src/net/osmand/plus/views/OsmandMapTileView.java @@ -164,7 +164,7 @@ public class OsmandMapTileView implements IMapDownloaderCallback { @Override public void onTwoFingerTap() { afterTwoFingerTap = true; - getAnimatedDraggingThread().startZooming(getZoom()-1,true); + getAnimatedDraggingThread().startZooming(getZoom() - 1, currentViewport.getZoomFloatPart(), true); } }; @@ -290,7 +290,7 @@ public class OsmandMapTileView implements IMapDownloaderCallback { public void setIntZoom(int zoom) { if (mainLayer != null && zoom <= mainLayer.getMaximumShownMapZoom() && zoom >= mainLayer.getMinimumShownMapZoom()) { animatedDraggingThread.stopAnimating(); - currentViewport.setZoomAndAnimation(zoom, 0); + currentViewport.setZoomAndAnimation(zoom, 0, 0); currentViewport.setRotate(zoom > LOWEST_ZOOM_TO_ROTATE ? rotate : 0); refreshMap(); } @@ -299,7 +299,7 @@ public class OsmandMapTileView implements IMapDownloaderCallback { public void setComplexZoom(int zoom, double mapDensity) { if (mainLayer != null && zoom <= mainLayer.getMaximumShownMapZoom() && zoom >= mainLayer.getMinimumShownMapZoom()) { animatedDraggingThread.stopAnimating(); - currentViewport.setZoomWithAnimate(zoom, 0); + currentViewport.setZoomAndAnimation(zoom, 0); currentViewport.setMapDensity(mapDensity); currentViewport.setRotate(zoom > LOWEST_ZOOM_TO_ROTATE ? rotate : 0); refreshMap(); @@ -350,6 +350,10 @@ public class OsmandMapTileView implements IMapDownloaderCallback { public int getZoom() { return currentViewport.getZoom(); } + + public double getZoomFractionalPart() { + return currentViewport.getZoomFloatPart(); + } public double getSettingsMapDensity() { return (getSettings().MAP_DENSITY.get()) * Math.max(1, getDensity()); @@ -385,7 +389,7 @@ public class OsmandMapTileView implements IMapDownloaderCallback { if (mainLayer.getMinimumShownMapZoom() > zoom) { zoom = mainLayer.getMinimumShownMapZoom(); } - currentViewport.setZoomAndAnimation(zoom, 0); + currentViewport.setZoomAndAnimation(zoom, 0, 0); refreshMap(); } @@ -414,6 +418,12 @@ public class OsmandMapTileView implements IMapDownloaderCallback { final float x2 = calc.getPixXFromTile(rb.x, rb.y, cz); final float y1 = calc.getPixYFromTile(lt.x, lt.y, cz); final float y2 = calc.getPixYFromTile(rb.x, rb.y, cz); +// LatLon lt = bufferImgLoc.getLeftTopLatLon(); +// LatLon rb = bufferImgLoc.getRightBottomLatLon(); +// final float x1 = calc.getPixXFromLatLon(lt.getLatitude(), lt.getLongitude()); +// final float x2 = calc.getPixXFromLatLon(rb.getLatitude(), rb.getLongitude()); +// final float y1 = calc.getPixYFromLatLon(lt.getLatitude(), lt.getLongitude()); +// final float y2 = calc.getPixYFromLatLon(rb.getLatitude(), rb.getLongitude()); if (!bufferBitmap.isRecycled()) { RectF rct = new RectF(x1, y1, x2, y2); canvas.drawBitmap(bufferBitmap, null, rct, paintImg); @@ -678,8 +688,8 @@ public class OsmandMapTileView implements IMapDownloaderCallback { } } - protected void setZoomAnimate(int zoom, boolean notify) { - currentViewport.setZoomWithAnimate(zoom, 0); + protected void setFractionalZoom(int zoom, double zoomPart, boolean notify) { + currentViewport.setZoomAndAnimation(zoom, 0, zoomPart); refreshMap(); if (locationListener != null && notify) { locationListener.locationChanged(getLatitude(), getLongitude(), this); @@ -687,17 +697,7 @@ public class OsmandMapTileView implements IMapDownloaderCallback { } // for internal usage - protected void zoomToAnimate(double tzoom, boolean notify) { - int zoom = getZoom(); - double zoomToAnimate = tzoom - zoom; - if (zoomToAnimate >= 1) { - zoom += (int) zoomToAnimate; - zoomToAnimate -= (int) zoomToAnimate; - } - while (zoomToAnimate < 0) { - zoom--; - zoomToAnimate += 1; - } + protected void zoomToAnimate(int zoom, double zoomToAnimate, boolean notify) { if (mainLayer != null && mainLayer.getMaximumShownMapZoom() >= zoom && mainLayer.getMinimumShownMapZoom() <= zoom) { currentViewport.setZoomAndAnimation(zoom, zoomToAnimate); currentViewport.setRotate(zoom > LOWEST_ZOOM_TO_ROTATE ? rotate : 0); @@ -866,13 +866,22 @@ public class OsmandMapTileView implements IMapDownloaderCallback { final RotatedTileBox calc = initialViewport.copy(); calc.setLatLonCenter(initialCenterLatLon.getLatitude(), initialCenterLatLon.getLongitude()); - double calcZoom = initialViewport.getZoom() + dz ; float calcRotate = calc.getRotate() + angle; calc.setRotate(calcRotate); - calc.setZoomAnimation(dz); + calc.setZoomAndAnimation(initialViewport.getZoom(), + dz, initialViewport.getZoomFloatPart()); final LatLon r = calc.getLatLonFromPixel(cp.x + dx, cp.y + dy); setLatLon(r.getLatitude(), r.getLongitude()); - zoomToAnimate((float) calcZoom, true); + int baseZoom = initialViewport.getZoom(); + while(initialViewport.getZoomFloatPart() + dz > 1) { + dz --; + baseZoom ++; + } + while(initialViewport.getZoomFloatPart() + dz < 0) { + dz ++; + baseZoom --; + } + zoomToAnimate(baseZoom, dz, true); rotateToAnimate(calcRotate); } diff --git a/OsmAnd/src/net/osmand/plus/views/controls/MapRouteInfoControl.java b/OsmAnd/src/net/osmand/plus/views/controls/MapRouteInfoControl.java index a12b2352c9..853fbe4bd3 100644 --- a/OsmAnd/src/net/osmand/plus/views/controls/MapRouteInfoControl.java +++ b/OsmAnd/src/net/osmand/plus/views/controls/MapRouteInfoControl.java @@ -79,16 +79,9 @@ public class MapRouteInfoControl extends MapControls implements IRouteInformatio getTargets().navigateToPoint(latlon, true, -1); } else { getTargets().setStartPoint(latlon, true, null); - //TODO: Hardy: Looks like there is a small bug somewhere: Re-selecting the "From" or "To" point during an ongoing route calculation (and only then) seems to only interrupt the ongoing route calculation. but not restart it, if (and only if) a route origin other than "Current position" is set. (Looks like this case is treated like a mere position update in our RoutingHelper, so normally no complete re-calculation is needed.) } contextMenu.setLocation(latlon, null); showDialog(); - //-Test code only-- - //Try force resuming route re-caculation if stopped due to Issue2515 - // interesting: putting one or more of the next lines here destroys the alternating "interrupted route calculation won't re-start" behavior and causes the route calculation to NEVER re-start! - //routingHelper.recalculateRouteDueToSettingsChange(); - //routingHelper.recalculateRouteDueToSettingsChange(); - //----------------- return true; } return super.onSingleTap(point, tileBox);