Merge branches 'master' and 'remove_waypoint' of https://github.com/osmandapp/Osmand into remove_waypoint
Conflicts: OsmAnd/res/values/strings.xml
|
@ -2655,6 +2655,7 @@ public class BinaryMapIndexReader {
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
public TLongObjectHashMap<IncompleteTransportRoute> getIncompleteTransportRoutes() throws InvalidProtocolBufferException, IOException {
|
||||
if (incompleteTransportRoutes == null) {
|
||||
incompleteTransportRoutes = new TLongObjectHashMap<>();
|
||||
|
@ -2662,7 +2663,7 @@ public class BinaryMapIndexReader {
|
|||
if (ti.incompleteRoutesLength > 0) {
|
||||
codedIS.seek(ti.incompleteRoutesOffset);
|
||||
int oldLimit = codedIS.pushLimit(ti.incompleteRoutesLength);
|
||||
transportAdapter.readIncompleteRoutesList(incompleteTransportRoutes);
|
||||
transportAdapter.readIncompleteRoutesList(incompleteTransportRoutes, ti.filePointer);
|
||||
codedIS.popLimit(oldLimit);
|
||||
}
|
||||
}
|
||||
|
@ -2670,5 +2671,4 @@ public class BinaryMapIndexReader {
|
|||
return incompleteTransportRoutes;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -11,6 +11,7 @@ import com.google.protobuf.WireFormat;
|
|||
import gnu.trove.map.hash.TIntObjectHashMap;
|
||||
import gnu.trove.map.hash.TLongObjectHashMap;
|
||||
import net.osmand.binary.BinaryMapIndexReader.SearchRequest;
|
||||
import net.osmand.data.IncompleteTransportRoute;
|
||||
import net.osmand.data.TransportSchedule;
|
||||
import net.osmand.data.TransportStop;
|
||||
import net.osmand.data.TransportStopExit;
|
||||
|
@ -71,7 +72,6 @@ public class BinaryMapTransportReaderAdapter {
|
|||
return bottom;
|
||||
}
|
||||
|
||||
|
||||
IndexStringTable stringTable = null;
|
||||
}
|
||||
|
||||
|
@ -251,7 +251,7 @@ public class BinaryMapTransportReaderAdapter {
|
|||
return ((char) i)+"";
|
||||
}
|
||||
|
||||
public void readIncompleteRoutesList(TLongObjectHashMap<net.osmand.data.IncompleteTransportRoute> incompleteRoutes) throws IOException {
|
||||
public void readIncompleteRoutesList(TLongObjectHashMap<net.osmand.data.IncompleteTransportRoute> incompleteRoutes, int transportIndexStart) throws IOException {
|
||||
boolean end = false;
|
||||
while (!end) {
|
||||
int t = codedIS.readTag();
|
||||
|
@ -263,7 +263,7 @@ public class BinaryMapTransportReaderAdapter {
|
|||
case OsmandOdb.IncompleteTransportRoutes.ROUTES_FIELD_NUMBER:
|
||||
int l = codedIS.readRawVarint32();
|
||||
int olds = codedIS.pushLimit(l);
|
||||
net.osmand.data.IncompleteTransportRoute ir = readIncompleteRoute();
|
||||
net.osmand.data.IncompleteTransportRoute ir = readIncompleteRoute(transportIndexStart);
|
||||
net.osmand.data.IncompleteTransportRoute itr = incompleteRoutes.get(ir.getRouteId());
|
||||
if(itr != null) {
|
||||
itr.setNextLinkedRoute(ir);
|
||||
|
@ -281,7 +281,7 @@ public class BinaryMapTransportReaderAdapter {
|
|||
|
||||
}
|
||||
|
||||
public net.osmand.data.IncompleteTransportRoute readIncompleteRoute() throws IOException {
|
||||
public net.osmand.data.IncompleteTransportRoute readIncompleteRoute(int transportIndexStart) throws IOException {
|
||||
net.osmand.data.IncompleteTransportRoute dataObject = new net.osmand.data.IncompleteTransportRoute();
|
||||
boolean end = false;
|
||||
while(!end){
|
||||
|
@ -295,7 +295,12 @@ public class BinaryMapTransportReaderAdapter {
|
|||
dataObject.setRouteId(codedIS.readUInt64());
|
||||
break;
|
||||
case OsmandOdb.IncompleteTransportRoute.ROUTEREF_FIELD_NUMBER :
|
||||
dataObject.setRouteOffset(codedIS.readRawVarint32());
|
||||
int delta = codedIS.readRawVarint32();
|
||||
if (delta > transportIndexStart) {
|
||||
dataObject.setRouteOffset(delta);
|
||||
} else {
|
||||
dataObject.setRouteOffset(transportIndexStart + delta);
|
||||
}
|
||||
break;
|
||||
case OsmandOdb.IncompleteTransportRoute.OPERATOR_FIELD_NUMBER :
|
||||
skipUnknownField(t);
|
||||
|
@ -318,7 +323,6 @@ public class BinaryMapTransportReaderAdapter {
|
|||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return dataObject;
|
||||
}
|
||||
|
||||
|
|
|
@ -13,7 +13,11 @@ public class IncompleteTransportRoute {
|
|||
}
|
||||
|
||||
public void setNextLinkedRoute(IncompleteTransportRoute nextLinkedRoute) {
|
||||
this.nextLinkedRoute = nextLinkedRoute;
|
||||
if (this.nextLinkedRoute == null) {
|
||||
this.nextLinkedRoute = nextLinkedRoute;
|
||||
} else {
|
||||
this.nextLinkedRoute.setNextLinkedRoute(nextLinkedRoute);
|
||||
}
|
||||
}
|
||||
|
||||
public long getRouteId() {
|
||||
|
|
|
@ -370,10 +370,10 @@ public class BinaryRoutePlanner {
|
|||
|
||||
public void printDebugMemoryInformation(RoutingContext ctx, PriorityQueue<RouteSegment> graphDirectSegments, PriorityQueue<RouteSegment> graphReverseSegments,
|
||||
TLongObjectHashMap<RouteSegment> visitedDirectSegments,TLongObjectHashMap<RouteSegment> visitedOppositeSegments) {
|
||||
printInfo(String.format("Time. Total: %.2f, to load: %.2f, to load headers: %.2f, to calc dev: %.2f, to calc rules: %.2f ",
|
||||
printInfo(String.format("Time. Total: %.2f, to load: %.2f, to load headers: %.2f, to calc dev: %.2f ",
|
||||
(System.nanoTime() - ctx.timeToCalculate) / 1e6, ctx.timeToLoad / 1e6,
|
||||
ctx.timeToLoadHeaders / 1e6, ctx.timeNanoToCalcDeviation / 1e6, GeneralRouter.TIMER / 1e6));
|
||||
GeneralRouter.TIMER = 0;
|
||||
ctx.timeToLoadHeaders / 1e6, ctx.timeNanoToCalcDeviation / 1e6));
|
||||
// GeneralRouter.TIMER = 0;
|
||||
int maxLoadedTiles = Math.max(ctx.maxLoadedTiles, ctx.getCurrentlyLoadedTiles());
|
||||
printInfo("Current loaded tiles : " + ctx.getCurrentlyLoadedTiles() + ", maximum loaded tiles " + maxLoadedTiles);
|
||||
printInfo("Loaded tiles " + ctx.loadedTiles + " (distinct " + ctx.distinctLoadedTiles + "), unloaded tiles " + ctx.unloadedTiles +
|
||||
|
@ -857,6 +857,13 @@ public class BinaryRoutePlanner {
|
|||
this.distSquare = distSquare;
|
||||
}
|
||||
|
||||
public RouteSegmentPoint(RouteSegmentPoint pnt) {
|
||||
super(pnt.road, pnt.segStart);
|
||||
this.distSquare = pnt.distSquare;
|
||||
this.preciseX = pnt.preciseX;
|
||||
this.preciseY = pnt.preciseY;
|
||||
}
|
||||
|
||||
public double distSquare;
|
||||
public int preciseX;
|
||||
public int preciseY;
|
||||
|
|
|
@ -516,6 +516,7 @@ public class GeneralRouter implements VehicleRouter {
|
|||
}
|
||||
|
||||
private void putCache(RouteDataObjectAttribute attr, RouteRegion reg, int[] types, Float val, boolean extra) {
|
||||
// TIMER -= System.nanoTime();
|
||||
Map<RouteRegion, Map<IntHolder, Float>> ch = evalCache[attr.ordinal()];
|
||||
if (USE_CACHE) {
|
||||
Map<IntHolder, Float> rM = ch.get(reg);
|
||||
|
@ -525,7 +526,7 @@ public class GeneralRouter implements VehicleRouter {
|
|||
}
|
||||
rM.put(new IntHolder(types, extra), val);
|
||||
}
|
||||
TIMER += System.nanoTime();
|
||||
// TIMER += System.nanoTime();
|
||||
}
|
||||
|
||||
class IntHolder {
|
||||
|
|
|
@ -23,6 +23,8 @@ import net.osmand.util.MapUtils;
|
|||
|
||||
import org.apache.commons.logging.Log;
|
||||
|
||||
import gnu.trove.list.array.TIntArrayList;
|
||||
|
||||
public class RoutePlannerFrontEnd {
|
||||
|
||||
protected static final Log log = PlatformUtil.getLog(RoutePlannerFrontEnd.class);
|
||||
|
@ -40,6 +42,59 @@ public class RoutePlannerFrontEnd {
|
|||
COMPLEX
|
||||
}
|
||||
|
||||
public static class GpxRouteApproximation {
|
||||
// ! MAIN parameter to approximate (35m good for custom recorded tracks)
|
||||
public double MINIMUM_POINT_APPROXIMATION = 50; // 35 m good for small deviations
|
||||
// This parameter could speed up or slow down evaluation (better to make bigger for long routes and smaller for short)
|
||||
public double MAXIMUM_STEP_APPROXIMATION = 3000;
|
||||
// don't search subsegments shorter than specified distance (also used to step back for car turns)
|
||||
public double MINIMUM_STEP_APPROXIMATION = 100;
|
||||
// Parameter to smoother the track itself (could be 0 if it's not recorded track)
|
||||
public double SMOOTHEN_POINTS_NO_ROUTE = 2;
|
||||
|
||||
public final RoutingContext ctx;
|
||||
public int routeCalculations = 0;
|
||||
public int routePointsSearched = 0;
|
||||
public int routeDistCalculations = 0;
|
||||
public List<RouteSegmentResult> res = new ArrayList<RouteSegmentResult>();
|
||||
public int routeDistance;
|
||||
public int routeGapDistance;
|
||||
public int routeDistanceUnmatched;
|
||||
|
||||
public GpxRouteApproximation(RoutingContext ctx) {
|
||||
this.ctx = ctx;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return String.format(">> GPX approximation (%d of %d m route calcs, %d route points searched) for %d m: %d m umatched",
|
||||
routeCalculations, routeDistCalculations, routePointsSearched, routeDistance, routeDistanceUnmatched);
|
||||
}
|
||||
|
||||
public double distFromLastPoint(LatLon startPoint) {
|
||||
if(res.size() > 0) {
|
||||
return MapUtils.getDistance(getLastPoint(), startPoint);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
public LatLon getLastPoint() {
|
||||
if(res.size() > 0) {
|
||||
return res.get(res.size() - 1).getEndPoint();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
private static class GpxPoint {
|
||||
public int ind;
|
||||
public LatLon loc;
|
||||
public double cumDist;
|
||||
public RouteSegmentPoint pnt;
|
||||
public List<RouteSegmentResult> routeToTarget;
|
||||
public int targetInd = -1;
|
||||
}
|
||||
|
||||
public RoutingContext buildRoutingContext(RoutingConfiguration config, NativeLibrary nativeLibrary, BinaryMapIndexReader[] map, RouteCalculationMode rm) {
|
||||
return new RoutingContext(config, nativeLibrary, map, rm);
|
||||
}
|
||||
|
@ -148,6 +203,345 @@ public class RoutePlannerFrontEnd {
|
|||
}
|
||||
|
||||
|
||||
// TODO last segment not correct (cut) before end point and point of straight line
|
||||
|
||||
// TODO add missing turns for straight lines (compare code)
|
||||
// TODO native matches less roads
|
||||
|
||||
// TODO fix progress - next iteration
|
||||
// TODO fix timings and remove logging every iteration
|
||||
public GpxRouteApproximation searchGpxRoute(GpxRouteApproximation gctx, List<LatLon> points) throws IOException, InterruptedException {
|
||||
gctx.ctx.timeToCalculate = System.nanoTime();
|
||||
if (gctx.ctx.calculationProgress == null) {
|
||||
gctx.ctx.calculationProgress = new RouteCalculationProgress();
|
||||
}
|
||||
List<GpxPoint> gpxPoints = generageGpxPoints(points, gctx);
|
||||
GpxPoint start = gpxPoints.size() > 0 ? gpxPoints.get(0) : null;
|
||||
boolean prevRouteFound = false;
|
||||
while (start != null) {
|
||||
double routeDist = gctx.MAXIMUM_STEP_APPROXIMATION;
|
||||
GpxPoint next = findNextGpxPointWithin(gctx, gpxPoints, start, routeDist);
|
||||
boolean routeFound = false;
|
||||
|
||||
if (next != null && initRoutingPoint(start, gctx, gctx.MINIMUM_POINT_APPROXIMATION)) {
|
||||
while (routeDist >= gctx.MINIMUM_STEP_APPROXIMATION && !routeFound) {
|
||||
routeFound = initRoutingPoint(next, gctx, gctx.MINIMUM_POINT_APPROXIMATION);
|
||||
if (routeFound) {
|
||||
routeFound = findGpxRouteSegment(gctx, gpxPoints, start, next, prevRouteFound);
|
||||
if (routeFound) {
|
||||
// route is found - cut the end of the route and move to next iteration
|
||||
boolean stepBack = stepBackAndFindPrevPointInRoute(gctx, gpxPoints, start, next);
|
||||
if (!stepBack) {
|
||||
// not supported case (workaround increase MAXIMUM_STEP_APPROXIMATION)
|
||||
log.info("Consider to increase MAXIMUM_STEP_APPROXIMATION to: " + routeDist*2);
|
||||
start.routeToTarget = null;
|
||||
routeFound = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!routeFound) {
|
||||
// route is not found move next point closer to start point (distance / 2)
|
||||
routeDist = routeDist / 2;
|
||||
if (routeDist < gctx.MINIMUM_STEP_APPROXIMATION && routeDist > gctx.MINIMUM_STEP_APPROXIMATION / 2 + 1) {
|
||||
routeDist = gctx.MINIMUM_STEP_APPROXIMATION;
|
||||
}
|
||||
next = findNextGpxPointWithin(gctx, gpxPoints, start, routeDist);
|
||||
if (next != null) {
|
||||
routeDist = Math.min(next.cumDist - start.cumDist, routeDist);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// route is not found skip segment and keep it as straight line on display
|
||||
if (!routeFound) {
|
||||
// route is not found, move start point by
|
||||
next = findNextGpxPointWithin(gctx, gpxPoints, start, gctx.MINIMUM_STEP_APPROXIMATION);
|
||||
if (prevRouteFound) {
|
||||
if (next == null) {
|
||||
// TODO finish
|
||||
// makeSegmentPointPrecise(prev.routeToTarget.get(prev.routeToTarget.size() - 1), start.loc, false);
|
||||
} else {
|
||||
log.warn("NOT found route from: " + start.pnt.getRoad() + " at " + start.pnt.getSegmentStart());
|
||||
}
|
||||
}
|
||||
}
|
||||
prevRouteFound = routeFound;
|
||||
start = next;
|
||||
}
|
||||
|
||||
calculateGpxRoute(gctx, gpxPoints);
|
||||
|
||||
if (!gctx.res.isEmpty()) {
|
||||
new RouteResultPreparation().printResults(gctx.ctx, points.get(0), points.get(points.size() - 1), gctx.res);
|
||||
System.out.println(gctx);
|
||||
}
|
||||
return gctx;
|
||||
}
|
||||
|
||||
private boolean stepBackAndFindPrevPointInRoute(GpxRouteApproximation gctx,
|
||||
List<GpxPoint> gpxPoints, GpxPoint start, GpxPoint next) throws IOException {
|
||||
// step back to find to be sure
|
||||
// 1) route point is behind GpxPoint - MINIMUM_POINT_APPROXIMATION (end route point could slightly ahead)
|
||||
// 2) we don't miss correct turn i.e. points could be attached to muliple routes
|
||||
// 3) to make sure that we perfectly connect to RoadDataObject points
|
||||
double STEP_BACK_DIST = Math.max(gctx.MINIMUM_POINT_APPROXIMATION, gctx.MINIMUM_STEP_APPROXIMATION);
|
||||
double d = 0;
|
||||
int segmendInd = start.routeToTarget.size() - 1;
|
||||
boolean search = true;
|
||||
mainLoop: for (; segmendInd >= 0 && search; segmendInd--) {
|
||||
RouteSegmentResult rr = start.routeToTarget.get(segmendInd);
|
||||
boolean minus = rr.getStartPointIndex() < rr.getEndPointIndex();
|
||||
int nextInd;
|
||||
for (int j = rr.getEndPointIndex(); j != rr.getStartPointIndex(); j = nextInd) {
|
||||
nextInd = minus ? j - 1 : j + 1;
|
||||
d += MapUtils.getDistance(rr.getPoint(j), rr.getPoint(nextInd));
|
||||
if (d > STEP_BACK_DIST) {
|
||||
if (nextInd == rr.getStartPointIndex()) {
|
||||
segmendInd--;
|
||||
} else {
|
||||
rr.setEndPointIndex(nextInd);
|
||||
}
|
||||
search = false;
|
||||
break mainLoop;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (segmendInd == -1) {
|
||||
// here all route segments - 1 is longer than needed distance to step back
|
||||
return false;
|
||||
}
|
||||
while (start.routeToTarget.size() > segmendInd + 1) {
|
||||
start.routeToTarget.remove(segmendInd + 1);
|
||||
}
|
||||
RouteSegmentResult res = start.routeToTarget.get(segmendInd);
|
||||
next.pnt = new RouteSegmentPoint(res.getObject(), res.getEndPointIndex(), 0);
|
||||
return true;
|
||||
}
|
||||
|
||||
private void calculateGpxRoute(GpxRouteApproximation gctx, List<GpxPoint> gpxPoints) {
|
||||
RouteRegion reg = new RouteRegion();
|
||||
reg.initRouteEncodingRule(0, "highway", "unmatched");
|
||||
List<LatLon> lastStraightLine = null;
|
||||
for (int i = 0; i < gpxPoints.size(); ) {
|
||||
GpxPoint pnt = gpxPoints.get(i);
|
||||
if (pnt.routeToTarget != null && !pnt.routeToTarget.isEmpty()) {
|
||||
LatLon startPoint = pnt.routeToTarget.get(0).getStartPoint();
|
||||
if (lastStraightLine != null) {
|
||||
lastStraightLine.add(startPoint);
|
||||
addStraightLine(gctx.res, lastStraightLine, reg, gctx);
|
||||
lastStraightLine = null;
|
||||
}
|
||||
if (gctx.distFromLastPoint(startPoint) > 1) {
|
||||
gctx.routeGapDistance += gctx.distFromLastPoint(startPoint);
|
||||
System.out.println(String.format("????? gap of route point = %f, gap of actual gpxPoint = %f ",
|
||||
gctx.distFromLastPoint(startPoint), gctx.distFromLastPoint(pnt.loc)));
|
||||
}
|
||||
gctx.res.addAll(pnt.routeToTarget);
|
||||
i = pnt.targetInd;
|
||||
} else {
|
||||
// add straight line from i -> i+1
|
||||
if (lastStraightLine == null) {
|
||||
lastStraightLine = new ArrayList<LatLon>();
|
||||
// make smooth connection
|
||||
if(gctx.distFromLastPoint(pnt.loc) > 1) {
|
||||
lastStraightLine.add(gctx.getLastPoint());
|
||||
}
|
||||
}
|
||||
lastStraightLine.add(pnt.loc);
|
||||
i++;
|
||||
}
|
||||
}
|
||||
if (lastStraightLine != null) {
|
||||
addStraightLine(gctx.res, lastStraightLine, reg, gctx);
|
||||
lastStraightLine = null;
|
||||
}
|
||||
// clean turns to recaculate them
|
||||
cleanupResultAndAddTurns(gctx);
|
||||
}
|
||||
|
||||
private List<GpxPoint> generageGpxPoints(List<LatLon> points, GpxRouteApproximation gctx) {
|
||||
List<GpxPoint> gpxPoints = new ArrayList<>(points.size());
|
||||
GpxPoint prev = null;
|
||||
for(int i = 0; i < points.size(); i++) {
|
||||
GpxPoint p = new GpxPoint();
|
||||
p.ind = i;
|
||||
p.loc = points.get(i);
|
||||
if (prev != null) {
|
||||
p.cumDist = MapUtils.getDistance(p.loc, prev.loc) + prev.cumDist;
|
||||
}
|
||||
gpxPoints.add(p);
|
||||
gctx.routeDistance = (int) p.cumDist;
|
||||
prev = p;
|
||||
}
|
||||
return gpxPoints;
|
||||
}
|
||||
|
||||
private void cleanupResultAndAddTurns(GpxRouteApproximation gctx) {
|
||||
// cleanup double joints
|
||||
int LOOK_AHEAD = 4;
|
||||
for(int i = 0; i < gctx.res.size(); i++) {
|
||||
RouteSegmentResult s = gctx.res.get(i);
|
||||
for(int j = i + 2; j <= i + LOOK_AHEAD && j < gctx.res.size(); j++) {
|
||||
RouteSegmentResult e = gctx.res.get(j);
|
||||
if(e.getStartPoint().equals(s.getEndPoint())) {
|
||||
while((--j) != i) {
|
||||
gctx.res.remove(j);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
RouteResultPreparation preparation = new RouteResultPreparation();
|
||||
for (RouteSegmentResult r : gctx.res) {
|
||||
r.setTurnType(null);
|
||||
r.setDescription("");
|
||||
}
|
||||
preparation.prepareTurnResults(gctx.ctx, gctx.res);
|
||||
}
|
||||
|
||||
private void addStraightLine(List<RouteSegmentResult> res, List<LatLon> lastStraightLine, RouteRegion reg, GpxRouteApproximation gctx) {
|
||||
RouteDataObject rdo = new RouteDataObject(reg);
|
||||
if(gctx.SMOOTHEN_POINTS_NO_ROUTE > 0) {
|
||||
simplifyDouglasPeucker(lastStraightLine, gctx.SMOOTHEN_POINTS_NO_ROUTE, 0, lastStraightLine.size() - 1);
|
||||
}
|
||||
int s = lastStraightLine.size();
|
||||
TIntArrayList x = new TIntArrayList(s);
|
||||
TIntArrayList y = new TIntArrayList(s);
|
||||
for (int i = 0; i < s; i++) {
|
||||
if(lastStraightLine.get(i) != null) {
|
||||
LatLon l = lastStraightLine.get(i);
|
||||
int t = x.size() - 1;
|
||||
x.add(MapUtils.get31TileNumberX(l.getLongitude()));
|
||||
y.add(MapUtils.get31TileNumberY(l.getLatitude()));
|
||||
if (t >= 0) {
|
||||
double dist = MapUtils.squareRootDist31(x.get(t), y.get(t), x.get(t + 1), y.get(t + 1));
|
||||
gctx.routeDistanceUnmatched += dist;
|
||||
}
|
||||
}
|
||||
}
|
||||
rdo.pointsX = x.toArray();
|
||||
rdo.pointsY = y.toArray();
|
||||
rdo.types = new int[] { 0 } ;
|
||||
rdo.id = -1;
|
||||
// comment to see road without straight connections
|
||||
res.add(new RouteSegmentResult(rdo, 0, rdo.getPointsLength() - 1));
|
||||
}
|
||||
|
||||
|
||||
private void simplifyDouglasPeucker(List<LatLon> l, double eps, int start, int end) {
|
||||
double dmax = -1;
|
||||
int index = -1;
|
||||
LatLon s = l.get(start);
|
||||
LatLon e = l.get(end);
|
||||
for (int i = start + 1; i <= end - 1; i++) {
|
||||
LatLon ip = l.get(i);
|
||||
double dist = MapUtils.getOrthogonalDistance(ip.getLatitude(), ip.getLongitude(), s.getLatitude(), s.getLongitude(),
|
||||
e.getLatitude(), e.getLongitude());
|
||||
if (dist > dmax) {
|
||||
dmax = dist;
|
||||
index = i;
|
||||
}
|
||||
}
|
||||
if (dmax >= eps) {
|
||||
simplifyDouglasPeucker(l, eps, start, index);
|
||||
simplifyDouglasPeucker(l, eps, index, end);
|
||||
} else {
|
||||
for(int i = start + 1; i < end; i++ ) {
|
||||
l.set(i, null);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private boolean initRoutingPoint(GpxPoint start, GpxRouteApproximation gctx, double distThreshold) throws IOException {
|
||||
if (start != null && start.pnt == null) {
|
||||
gctx.routePointsSearched++;
|
||||
RouteSegmentPoint rsp = findRouteSegment(start.loc.getLatitude(), start.loc.getLongitude(), gctx.ctx, null, false);
|
||||
if (MapUtils.getDistance(rsp.getPreciseLatLon(), start.loc) < distThreshold) {
|
||||
start.pnt = rsp;
|
||||
}
|
||||
}
|
||||
if (start != null && start.pnt != null) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private GpxPoint findNextGpxPointWithin(GpxRouteApproximation gctx, List<GpxPoint> gpxPoints,
|
||||
GpxPoint start, double dist) {
|
||||
// returns first point with that has slightly more than dist or last point
|
||||
int plus = dist > 0 ? 1 : -1;
|
||||
int targetInd = start.ind + plus;
|
||||
GpxPoint target = null;
|
||||
while (targetInd < gpxPoints.size() && targetInd >= 0) {
|
||||
target = gpxPoints.get(targetInd);
|
||||
if (Math.abs(target.cumDist - start.cumDist) > Math.abs(dist)) {
|
||||
break;
|
||||
}
|
||||
targetInd = targetInd + plus;
|
||||
}
|
||||
return target;
|
||||
}
|
||||
|
||||
private boolean findGpxRouteSegment(GpxRouteApproximation gctx, List<GpxPoint> gpxPoints,
|
||||
GpxPoint start, GpxPoint target, boolean prevRouteCalculated) throws IOException, InterruptedException {
|
||||
List<RouteSegmentResult> res = null;
|
||||
boolean routeIsCorrect = false;
|
||||
if (start.pnt != null && target.pnt != null) {
|
||||
start.pnt = new RouteSegmentPoint(start.pnt);
|
||||
target.pnt = new RouteSegmentPoint(target.pnt);
|
||||
gctx.routeDistCalculations += (target.cumDist - start.cumDist);
|
||||
gctx.routeCalculations++;
|
||||
res = searchRouteInternalPrepare(gctx.ctx, start.pnt, target.pnt, null);
|
||||
routeIsCorrect = res != null && !res.isEmpty();
|
||||
for (int k = start.ind + 1; routeIsCorrect && k < target.ind; k++) {
|
||||
GpxPoint ipoint = gpxPoints.get(k);
|
||||
if (!pointCloseEnough(gctx, ipoint, res)) {
|
||||
routeIsCorrect = false;
|
||||
}
|
||||
}
|
||||
if (routeIsCorrect) {
|
||||
// correct start point though don't change end point
|
||||
if (!prevRouteCalculated) {
|
||||
// make first position precise
|
||||
makeSegmentPointPrecise(res.get(0), start.loc, true);
|
||||
} else {
|
||||
assert res.get(0).getObject().getId() == start.pnt.getRoad().getId();
|
||||
// start point could shift to +-1 due to direction
|
||||
res.get(0).setStartPointIndex(start.pnt.getSegmentStart());
|
||||
}
|
||||
start.routeToTarget = res;
|
||||
start.targetInd = target.ind;
|
||||
}
|
||||
}
|
||||
return routeIsCorrect;
|
||||
}
|
||||
|
||||
private boolean pointCloseEnough(GpxRouteApproximation gctx, GpxPoint ipoint, List<RouteSegmentResult> res) {
|
||||
int px = MapUtils.get31TileNumberX(ipoint.loc.getLongitude());
|
||||
int py = MapUtils.get31TileNumberY(ipoint.loc.getLatitude());
|
||||
double SQR = gctx.MINIMUM_POINT_APPROXIMATION;
|
||||
SQR = SQR * SQR;
|
||||
for (RouteSegmentResult sr : res) {
|
||||
int start = sr.getStartPointIndex();
|
||||
int end = sr.getEndPointIndex();
|
||||
if (sr.getStartPointIndex() > sr.getEndPointIndex()) {
|
||||
start = sr.getEndPointIndex();
|
||||
end = sr.getStartPointIndex();
|
||||
}
|
||||
for (int i = start; i < end; i++) {
|
||||
RouteDataObject r = sr.getObject();
|
||||
QuadPoint pp = MapUtils.getProjectionPoint31(px, py, r.getPoint31XTile(i), r.getPoint31YTile(i),
|
||||
r.getPoint31XTile(i + 1), r.getPoint31YTile(i + 1));
|
||||
double currentsDist = squareDist((int) pp.x, (int) pp.y, px, py);
|
||||
if (currentsDist <= SQR) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private boolean needRequestPrivateAccessRouting(RoutingContext ctx, List<LatLon> points) throws IOException {
|
||||
boolean res = false;
|
||||
GeneralRouter router = (GeneralRouter) ctx.getRouter();
|
||||
|
@ -252,8 +646,8 @@ public class RoutePlannerFrontEnd {
|
|||
|
||||
protected void makeStartEndPointsPrecise(List<RouteSegmentResult> res, LatLon start, LatLon end, List<LatLon> intermediates) {
|
||||
if (res.size() > 0) {
|
||||
updateResult(res.get(0), start, true);
|
||||
updateResult(res.get(res.size() - 1), end, false);
|
||||
makeSegmentPointPrecise(res.get(0), start, true);
|
||||
makeSegmentPointPrecise(res.get(res.size() - 1), end, false);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -267,7 +661,7 @@ public class RoutePlannerFrontEnd {
|
|||
return currentsDist;
|
||||
}
|
||||
|
||||
private void updateResult(RouteSegmentResult routeSegmentResult, LatLon point, boolean st) {
|
||||
private void makeSegmentPointPrecise(RouteSegmentResult routeSegmentResult, LatLon point, boolean st) {
|
||||
int px = MapUtils.get31TileNumberX(point.getLongitude());
|
||||
int py = MapUtils.get31TileNumberY(point.getLatitude());
|
||||
int pind = st ? routeSegmentResult.getStartPointIndex() : routeSegmentResult.getEndPointIndex();
|
||||
|
@ -510,7 +904,7 @@ public class RoutePlannerFrontEnd {
|
|||
ctx.relaxedSegments += local.relaxedSegments;
|
||||
ctx.routingTime += local.routingTime;
|
||||
|
||||
local.unloadAllData(ctx);
|
||||
// local.unloadAllData(ctx);
|
||||
if (restPartRecalculatedRoute != null) {
|
||||
results.addAll(restPartRecalculatedRoute);
|
||||
break;
|
||||
|
@ -540,4 +934,5 @@ public class RoutePlannerFrontEnd {
|
|||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -175,6 +175,11 @@ public class RouteResultPreparation {
|
|||
splitRoadsAndAttachRoadSegments(ctx, result, recalculation);
|
||||
calculateTimeSpeed(ctx, result);
|
||||
|
||||
prepareTurnResults(ctx, result);
|
||||
return result;
|
||||
}
|
||||
|
||||
public void prepareTurnResults(RoutingContext ctx, List<RouteSegmentResult> result) {
|
||||
for (int i = 0; i < result.size(); i ++) {
|
||||
TurnType turnType = getTurnInfo(result, i, ctx.leftSideNavigation);
|
||||
result.get(i).setTurnType(turnType);
|
||||
|
@ -184,7 +189,6 @@ public class RouteResultPreparation {
|
|||
ignorePrecedingStraightsOnSameIntersection(ctx.leftSideNavigation, result);
|
||||
justifyUTurns(ctx.leftSideNavigation, result);
|
||||
addTurnInfoDescriptions(result);
|
||||
return result;
|
||||
}
|
||||
|
||||
protected void ignorePrecedingStraightsOnSameIntersection(boolean leftside, List<RouteSegmentResult> result) {
|
||||
|
@ -283,11 +287,12 @@ public class RouteResultPreparation {
|
|||
float height = heightDistanceArray[heightIndex];
|
||||
if (prevHeight != -99999.0f) {
|
||||
float heightDiff = height - prevHeight;
|
||||
if (heightDiff > 0) { //ascent only
|
||||
distOnRoadToPass += heightDiff * 6.0f; //Naismith's rule: add 1 hour per every 600m of ascent
|
||||
if (heightDiff > 0) { // ascent only
|
||||
distOnRoadToPass += heightDiff * 6.0f; // Naismith's rule: add 1 hour per every 600m of
|
||||
// ascent
|
||||
}
|
||||
}
|
||||
prevHeight = height;
|
||||
prevHeight = height;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -359,7 +364,7 @@ public class RouteResultPreparation {
|
|||
|
||||
private void checkAndInitRouteRegion(RoutingContext ctx, RouteDataObject road) throws IOException {
|
||||
BinaryMapIndexReader reader = ctx.reverseMap.get(road.region);
|
||||
if(reader != null) {
|
||||
if (reader != null) {
|
||||
reader.initRouteRegion(road.region);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -865,7 +865,6 @@ public class TransportRoutePlanner {
|
|||
lst.add(segment);
|
||||
}
|
||||
} else {
|
||||
// MapUtils.getDistance(s.getLocation(), route.getForwardStops().get(158).getLocation());
|
||||
System.err.println(String.format("Routing error: missing stop '%s' in route '%s' id: %d",
|
||||
s.toString(), route.getRef(), route.getId() / 2));
|
||||
}
|
||||
|
|
|
@ -8,6 +8,7 @@ import java.util.LinkedHashMap;
|
|||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
import gnu.trove.iterator.TIntObjectIterator;
|
||||
import gnu.trove.list.array.TIntArrayList;
|
||||
|
@ -15,6 +16,7 @@ import gnu.trove.map.hash.TIntObjectHashMap;
|
|||
import gnu.trove.map.hash.TLongObjectHashMap;
|
||||
import net.osmand.binary.BinaryMapIndexReader;
|
||||
import net.osmand.binary.BinaryMapIndexReader.SearchRequest;
|
||||
import net.osmand.binary.BinaryMapTransportReaderAdapter.TransportIndex;
|
||||
import net.osmand.data.IncompleteTransportRoute;
|
||||
import net.osmand.data.LatLon;
|
||||
import net.osmand.data.TransportRoute;
|
||||
|
@ -43,7 +45,6 @@ public class TransportStopsRouteReader {
|
|||
List<TransportStop> stops = r.searchTransportIndex(sr);
|
||||
TIntObjectHashMap<TransportRoute> routesToLoad = mergeTransportStops(r, loadedTransportStops, stops);
|
||||
loadRoutes(r, routesToLoad);
|
||||
|
||||
for (TransportStop stop : stops) {
|
||||
// skip missing stops
|
||||
if (stop.isMissingStop()) {
|
||||
|
@ -405,11 +406,4 @@ public class TransportStopsRouteReader {
|
|||
}
|
||||
return allRoutes;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -180,7 +180,7 @@
|
|||
<string name="monitoring_is_disabled">Überwachung deaktiviert</string>
|
||||
<string name="time_on_the_move">Zeit in Bewegung</string>
|
||||
<string name="average_altitude">Durchschnittliche Höhe</string>
|
||||
<string name="average_speed">Durchschnittliche Geschwindigkeit</string>
|
||||
<string name="average_speed">Durchschnittsgeschwindigkeit</string>
|
||||
<string name="open_in_osmand">In OsmAnd anzeigen</string>
|
||||
<string name="end_date">Endzeit</string>
|
||||
<string name="start_date">Startzeit</string>
|
||||
|
|
|
@ -50,6 +50,48 @@
|
|||
<asset source="voice/zh-hk/zh-hk_tts.js" destination="voice/zh-hk-tts/zh-hk_tts.js" mode="overwriteOnlyIfExists" />
|
||||
<asset source="voice/zh-tw/zh-tw_tts.js" destination="voice/zh-tw-tts/zh-tw_tts.js" mode="overwriteOnlyIfExists" />
|
||||
|
||||
<asset source="voice/ar/ar_tts.js" destination="voice/ar/ar_tts.js" mode="overwriteOnlyIfExists" />
|
||||
<asset source="voice/be/be_tts.js" destination="voice/be/be_tts.js" mode="overwriteOnlyIfExists" />
|
||||
<asset source="voice/cs/cs_tts.js" destination="voice/cs/cs_tts.js" mode="overwriteOnlyIfExists" />
|
||||
<asset source="voice/da/da_tts.js" destination="voice/da/da_tts.js" mode="overwriteOnlyIfExists" />
|
||||
<asset source="voice/de/de_tts.js" destination="voice/de/de_tts.js" mode="overwriteOnlyIfExists" />
|
||||
<asset source="voice/el/el_tts.js" destination="voice/el/el_tts.js" mode="overwriteOnlyIfExists" />
|
||||
<asset source="voice/en/en_tts.js" destination="voice/en/en_tts.js" mode="overwriteOnlyIfExists" />
|
||||
<asset source="voice/en-gb/en-gb_tts.js" destination="voice/en-gb/en-gb_tts.js" mode="overwriteOnlyIfExists" />
|
||||
<asset source="voice/es/es_tts.js" destination="voice/es/es_tts.js" mode="overwriteOnlyIfExists" />
|
||||
<asset source="voice/es-ar/es-ar_tts.js" destination="voice/es-ar/es-ar_tts.js" mode="overwriteOnlyIfExists" />
|
||||
<asset source="voice/et/et_tts.js" destination="voice/et/et_tts.js" mode="overwriteOnlyIfExists" />
|
||||
<asset source="voice/fa/fa_tts.js" destination="voice/fa/fa_tts.js" mode="overwriteOnlyIfExists" />
|
||||
<asset source="voice/fi/fi_tts.js" destination="voice/fi/fi_tts.js" mode="overwriteOnlyIfExists" />
|
||||
<asset source="voice/fr/fr_tts.js" destination="voice/fr/fr_tts.js" mode="overwriteOnlyIfExists" />
|
||||
<asset source="voice/gn-py/gn-py_tts.js" destination="voice/gn-py/gn-py_tts.js" mode="overwriteOnlyIfExists" />
|
||||
<asset source="voice/nb/nb_tts.js" destination="voice/nb/nb_tts.js" mode="overwriteOnlyIfExists" />
|
||||
<asset source="voice/hi/hi_tts.js" destination="voice/hi/hi_tts.js" mode="overwriteOnlyIfExists" />
|
||||
<asset source="voice/hr/hr_tts.js" destination="voice/hr/hr_tts.js" mode="overwriteOnlyIfExists" />
|
||||
<asset source="voice/hu/hu_tts.js" destination="voice/hu/hu_tts.js" mode="overwriteOnlyIfExists" />
|
||||
<asset source="voice/hu-formal/hu-formal_tts.js" destination="voice/hu-formal/hu-formal_tts.js" mode="overwriteOnlyIfExists" />
|
||||
<asset source="voice/it/it_tts.js" destination="voice/it/it_tts.js" mode="overwriteOnlyIfExists" />
|
||||
<asset source="voice/ja/ja_tts.js" destination="voice/ja/ja_tts.js" mode="overwriteOnlyIfExists" />
|
||||
<asset source="voice/ko/ko_tts.js" destination="voice/ko/ko_tts.js" mode="overwriteOnlyIfExists" />
|
||||
<asset source="voice/lv/lv_tts.js" destination="voice/lv/lv_tts.js" mode="overwriteOnlyIfExists" />
|
||||
<asset source="voice/nl/nl_tts.js" destination="voice/nl/nl_tts.js" mode="overwriteOnlyIfExists" />
|
||||
<asset source="voice/pl/pl_tts.js" destination="voice/pl/pl_tts.js" mode="overwriteOnlyIfExists" />
|
||||
<asset source="voice/pt/pt_tts.js" destination="voice/pt/pt_tts.js" mode="overwriteOnlyIfExists" />
|
||||
<asset source="voice/pt-br/pt-br_tts.js" destination="voice/pt-br/pt-br_tts.js" mode="overwriteOnlyIfExists" />
|
||||
<asset source="voice/ro/ro_tts.js" destination="voice/ro/ro_tts.js" mode="overwriteOnlyIfExists" />
|
||||
<asset source="voice/ru/ru_tts.js" destination="voice/ru/ru_tts.js" mode="overwriteOnlyIfExists" />
|
||||
<asset source="voice/sc/sc_tts.js" destination="voice/sc/sc_tts.js" mode="overwriteOnlyIfExists" />
|
||||
<asset source="voice/sk/sk_tts.js" destination="voice/sk/sk_tts.js" mode="overwriteOnlyIfExists" />
|
||||
<asset source="voice/sl/sl_tts.js" destination="voice/sl/sl_tts.js" mode="overwriteOnlyIfExists" />
|
||||
<asset source="voice/sr/sr_tts.js" destination="voice/sr/sr_tts.js" mode="overwriteOnlyIfExists" />
|
||||
<asset source="voice/sv/sv_tts.js" destination="voice/sv/sv_tts.js" mode="overwriteOnlyIfExists" />
|
||||
<asset source="voice/sw/sw_tts.js" destination="voice/sw/sw_tts.js" mode="overwriteOnlyIfExists" />
|
||||
<asset source="voice/tr/tr_tts.js" destination="voice/tr/tr_tts.js" mode="overwriteOnlyIfExists" />
|
||||
<asset source="voice/uk/uk_tts.js" destination="voice/uk/uk_tts.js" mode="overwriteOnlyIfExists" />
|
||||
<asset source="voice/zh/zh_tts.js" destination="voice/zh/zh_tts.js" mode="overwriteOnlyIfExists" />
|
||||
<asset source="voice/zh-hk/zh-hk_tts.js" destination="voice/zh-hk/zh-hk_tts.js" mode="overwriteOnlyIfExists" />
|
||||
<asset source="voice/zh-tw/zh-tw_tts.js" destination="voice/zh-tw/zh-tw_tts.js" mode="overwriteOnlyIfExists" />
|
||||
|
||||
<asset source="fonts/05_NotoSans-Regular.ttf" destination="fonts/05_NotoSans-Regular.ttf" mode="alwaysOverwriteOrCopy" />
|
||||
<asset source="fonts/10_NotoSans-Bold.ttf" destination="fonts/10_NotoSans-Bold.ttf" mode="alwaysOverwriteOrCopy" />
|
||||
<asset source="fonts/15_NotoSans-Italic.ttf" destination="fonts/15_NotoSans-Italic.ttf" mode="alwaysOverwriteOrCopy" />
|
||||
|
|
BIN
OsmAnd/res/drawable-hdpi/map_track_point_finish.png
Normal file
After Width: | Height: | Size: 2 KiB |
BIN
OsmAnd/res/drawable-hdpi/map_track_point_start.png
Normal file
After Width: | Height: | Size: 2.2 KiB |
BIN
OsmAnd/res/drawable-mdpi/map_track_point_finish.png
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
OsmAnd/res/drawable-mdpi/map_track_point_start.png
Normal file
After Width: | Height: | Size: 1.2 KiB |
BIN
OsmAnd/res/drawable-xhdpi/map_track_point_finish.png
Normal file
After Width: | Height: | Size: 2.9 KiB |
BIN
OsmAnd/res/drawable-xhdpi/map_track_point_start.png
Normal file
After Width: | Height: | Size: 3.3 KiB |
BIN
OsmAnd/res/drawable-xxhdpi/map_track_point_finish.png
Normal file
After Width: | Height: | Size: 5.6 KiB |
BIN
OsmAnd/res/drawable-xxhdpi/map_track_point_start.png
Normal file
After Width: | Height: | Size: 6 KiB |
BIN
OsmAnd/res/drawable-xxxhdpi/map_track_point_finish.png
Normal file
After Width: | Height: | Size: 8.7 KiB |
BIN
OsmAnd/res/drawable-xxxhdpi/map_track_point_start.png
Normal file
After Width: | Height: | Size: 9.2 KiB |
|
@ -0,0 +1,23 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24">
|
||||
<path
|
||||
android:pathData="M5,14H7V22H5V14Z"
|
||||
android:strokeAlpha="0.8"
|
||||
android:fillColor="#ffffff"
|
||||
android:fillAlpha="0.8"/>
|
||||
<path
|
||||
android:pathData="M19,2H5V14H10.6736C11.7971,11.6351 14.2076,10 17,10L16,8L19,2Z"
|
||||
android:fillColor="#ffffff"/>
|
||||
<path
|
||||
android:pathData="M17,10L19,14H10.6736C11.797,11.6351 14.2076,10 17,10Z"
|
||||
android:strokeAlpha="0.5"
|
||||
android:fillColor="#ffffff"
|
||||
android:fillAlpha="0.5"/>
|
||||
<path
|
||||
android:pathData="M17,22C19.7614,22 22,19.7614 22,17C22,14.2386 19.7614,12 17,12C14.2386,12 12,14.2386 12,17C12,19.7614 14.2386,22 17,22ZM20,16H14V18H20V16Z"
|
||||
android:fillColor="#ffffff"
|
||||
android:fillType="evenOdd"/>
|
||||
</vector>
|
|
@ -1898,7 +1898,7 @@
|
|||
<string name="disable_complex_routing_descr">تعطيل 2-مرحلة التوجيه للملاحة بالسيارة.</string>
|
||||
<string name="rendering_attr_alpineHiking_name">مقياس التنزه في جبال الألب (SAC)</string>
|
||||
<string name="rendering_attr_alpineHiking_description">تقديم المسارات وفقاً لمقياس SAC.</string>
|
||||
<string name="rendering_attr_hikingRoutesOSMC_name">طبقة رمز التسلق</string>
|
||||
<string name="rendering_attr_hikingRoutesOSMC_name">كيفية اظهار رموز طبقة التسلق (الهايكنق)</string>
|
||||
<string name="rendering_attr_hikingRoutesOSMC_description">تقديم المسارات وفقاً لآثار OSMC.</string>
|
||||
<string name="local_index_description">انقر فوق أي عنصر لمعرفة المزيد من التفاصيل، اضغط وواصل الضغط للتعطيل أو الحذف. البيانات الحالية على الجهاز (%1$s متاح):</string>
|
||||
<string name="keep_informing_descr">إعادة إعلان تعليمات الملاحة في فترات منتظمة.</string>
|
||||
|
@ -3797,4 +3797,6 @@
|
|||
<string name="routing_attr_length_name">طول الحد</string>
|
||||
<string name="speed_cameras_removed_descr">هذا الجهاز لا يملك كاميرات السرعة.</string>
|
||||
<string name="app_mode_inline_skates">أحذية تزلج</string>
|
||||
<string name="use_volume_buttons_as_zoom_descr">تمكين التحكم في مستوى التكبير/التصغير بالخريطة باستخدام أزرار مستوى صوت الجهاز.</string>
|
||||
<string name="use_volume_buttons_as_zoom">أزرار مستوى الصوت</string>
|
||||
</resources>
|
|
@ -3665,4 +3665,38 @@ Abasta l\'àrea: %1$s x %2$s</string>
|
|||
<string name="lang_jv">Javanès</string>
|
||||
<string name="lang_gu">Gujarati</string>
|
||||
<string name="tiles_storage_descr">Trieu com desar les tessel·les baixades.</string>
|
||||
<string name="uninstall_speed_cameras">Desinstal·la les càmeres de radar</string>
|
||||
<string name="shared_string_legal">Informació legal</string>
|
||||
<string name="speed_camera_pois">PDIs de càmeres de radar</string>
|
||||
<string name="speed_cameras_legal_descr">En alguns països o regions, l\'ús d\'aplicacions que avisen de la proximitat de càmeres de radar està prohibit.
|
||||
\n
|
||||
\nCal que ho configureu segons la llei del vostre país.
|
||||
\n
|
||||
\nSeleccioneu %1$s i rebreu alertes i advertiments de les càmeres de radar.
|
||||
\n
|
||||
\nSeleccioneu %2$s. Totes les dades relatives a les càmeres de radar (alertes, notificacions, PDIs) desapareixeran fins que es reinstal·li completament OsmAnd .</string>
|
||||
<string name="shared_string_uninstall">Desinstal·la</string>
|
||||
<string name="speed_cameras_alert">Les alertes de proximitat a càmeres de radar estan prohibides en alguns països.</string>
|
||||
<string name="details_dialog_decr">Mostra o amaga detalls addicionals del mapa</string>
|
||||
<string name="shared_string_night_map">Mapa nocturn</string>
|
||||
<string name="add_online_source">Afegeix orígen en connexió</string>
|
||||
<string name="clear_tiles_warning">L\'aplicació d\'aquests canvis esborrarà les dades de la memòria cau per a aquesta font de tessel·les</string>
|
||||
<string name="vessel_height_warning_link">Indiqueu l\'alçada del vaixell</string>
|
||||
<string name="vessel_height_warning">Podeu indicar l\'alçada del vaixell per evitar ponts baixos. Penseu que si el pont és mòbil, li aplicarem l\'alçada de quan estigui obert.</string>
|
||||
<string name="vessel_height_limit_description">Indiqueu l\'alçada del vaixell per evitar ponts baixos. Penseu que si el pont és mòbil, li aplicarem l\'alçada de quan estigui obert.</string>
|
||||
<string name="vessel_width_limit_description">Indiqueu l\'amplada del vaixell per evitar ponts ajustats</string>
|
||||
<string name="quick_action_showhide_mapillary_title">Mostra/amaga Mapil·lary</string>
|
||||
<string name="quick_action_mapillary_hide">Amaga Mapillary</string>
|
||||
<string name="quick_action_mapillary_show">Mostra Mapillary</string>
|
||||
<string name="quick_action_showhide_mapillary_descr">Un commutador per mostrar o amagar la capa de Mapillary al mapa.</string>
|
||||
<string name="routing_attr_length_description">Especifiqueu la llargada del vehicle que han de permetre les vies.</string>
|
||||
<string name="routing_attr_length_name">Llargada màxima</string>
|
||||
<string name="shared_string_bearing">Trajectòria</string>
|
||||
<string name="item_deleted">S\'ha esborrat %1$s</string>
|
||||
<string name="speed_cameras_restart_descr">Cal reiniciar per esborrar totalment les dades de les càmeres de radar.</string>
|
||||
<string name="shared_string_uninstall_and_restart">Desinstal·la i Reinicia</string>
|
||||
<string name="speed_cameras_removed_descr">Aquest dispositiu no inclou les càmeres de radar.</string>
|
||||
<string name="app_mode_inline_skates">Patins en línia</string>
|
||||
<string name="use_volume_buttons_as_zoom_descr">Activeu per controlar el nivell d\'ampliació del mapa amb els botons del volum del dispositiu.</string>
|
||||
<string name="use_volume_buttons_as_zoom">Botons de volum pel zoom</string>
|
||||
</resources>
|
|
@ -3832,4 +3832,9 @@
|
|||
<string name="poi_fire_hydrant_type_pipe">Rør</string>
|
||||
<string name="poi_fire_hydrant_pressure_filter">Lufttryk</string>
|
||||
<string name="poi_pump_status_missing_beam">Pumpens tilstand: ingen håndtag</string>
|
||||
<string name="poi_traffic_signals_arrow_yes">Ja</string>
|
||||
<string name="poi_traffic_signals_vibration_yes">Ja</string>
|
||||
<string name="poi_traffic_signals_vibration_no">Vibration: nej</string>
|
||||
<string name="poi_traffic_signals_arrow">Pil</string>
|
||||
<string name="poi_traffic_signals_vibration">Vibration</string>
|
||||
</resources>
|
|
@ -3700,4 +3700,14 @@ Repræsenterer område: %1$s x %2$s</string>
|
|||
<string name="shared_string_delete_all_q">Slet alt\?</string>
|
||||
<string name="shared_string_tones">toner</string>
|
||||
<string name="shared_string_meters">meter</string>
|
||||
<string name="item_deleted">%1$s slettet</string>
|
||||
<string name="shared_string_uninstall_and_restart">Afinstaller og genstart</string>
|
||||
<string name="app_mode_inline_skates">Inline-rulleskøjter</string>
|
||||
<string name="shared_string_uninstall">Afinstaller</string>
|
||||
<string name="details_dialog_decr">Vis eller skjul yderligere kort-detaljer</string>
|
||||
<string name="shared_string_night_map">Natkort</string>
|
||||
<string name="add_online_source">Tilføj onlinekilde</string>
|
||||
<string name="quick_action_showhide_mapillary_title">Vis/skjul Mapillary</string>
|
||||
<string name="quick_action_mapillary_hide">Skjul Mapillary</string>
|
||||
<string name="quick_action_mapillary_show">Vis Mapillary</string>
|
||||
</resources>
|
|
@ -1648,8 +1648,8 @@
|
|||
<string name="poi_payment_electronic_purses_yes">Elektronische Geldbörsen</string>
|
||||
<string name="poi_payment_uta_yes">UTA</string>
|
||||
<string name="poi_payment_uta_no">UTA-Karten nicht akzeptiert</string>
|
||||
<string name="poi_payment_efectivo_yes">Bargeld</string>
|
||||
<string name="poi_payment_efectivo_no">Bargeld nicht akzeptiert</string>
|
||||
<string name="poi_payment_efectivo_yes">Efectivo</string>
|
||||
<string name="poi_payment_efectivo_no">Efectivo nicht akzeptiert</string>
|
||||
<string name="poi_payment_girocard_yes">Girokarte</string>
|
||||
<string name="poi_payment_girocard_no">Girokarte nicht akzeptiert</string>
|
||||
<string name="poi_payment_discover_card_yes">Discover-Karte</string>
|
||||
|
@ -2126,7 +2126,7 @@
|
|||
<string name="poi_refugee_yes">Flüchtlingsunterkunft</string>
|
||||
<string name="poi_social_facility_group_home">Wohngruppe</string>
|
||||
<string name="poi_social_facility_assisted_living">Betreutes Wohnen</string>
|
||||
<string name="poi_social_facility_outreach">Freier Treff</string>
|
||||
<string name="poi_social_facility_outreach">Beratungsstelle</string>
|
||||
<string name="poi_social_facility_food_bank">Verpflegung</string>
|
||||
<string name="poi_social_facility_shelter">Obdach</string>
|
||||
<string name="poi_social_facility_ambulatory_care">Ambulante Pflege</string>
|
||||
|
@ -2162,7 +2162,7 @@
|
|||
<string name="poi_step_condition_rough">Treppenzustand: schlecht</string>
|
||||
<string name="poi_cairn">Steinhügel</string>
|
||||
<string name="poi_memorial_fassade_decoration">Fassadendekoration</string>
|
||||
<string name="poi_tomb_war_grave">Art: Kriegsgrab</string>
|
||||
<string name="poi_tomb_war_grave">Art: Kriegsgräberstätte</string>
|
||||
<string name="poi_tomb_tumulus">Art: Hügelgrab</string>
|
||||
<string name="poi_tomb_rock_cut">Art: Felsgrab</string>
|
||||
<string name="poi_tomb_hypogeum">Art: Hypogäum</string>
|
||||
|
@ -3832,4 +3832,5 @@
|
|||
<string name="poi_traffic_signals_vibration_no">kein Vibrieren</string>
|
||||
<string name="poi_traffic_signals_arrow">Pfeil</string>
|
||||
<string name="poi_traffic_signals_vibration">Vibrieren</string>
|
||||
<string name="poi_give_box">Give box</string>
|
||||
</resources>
|
|
@ -1812,7 +1812,7 @@
|
|||
<string name="av_locations_descr">GPX-Datei mit Standorten.</string>
|
||||
<string name="free_downloads_used_description">Anzeige der verbleibenden freien Downloads.</string>
|
||||
<string name="shared_string_location">Standort</string>
|
||||
<string name="hillshade_layer_disabled">Schummerungsebene deaktiviert</string>
|
||||
<string name="hillshade_layer_disabled">Reliefebene deaktiviert</string>
|
||||
<string name="shared_string_commit">Bestätigen</string>
|
||||
<string name="av_locations">Standorte</string>
|
||||
<string name="shared_string_hide">Verbergen</string>
|
||||
|
@ -2217,7 +2217,7 @@
|
|||
<string name="shared_string_end_time">Beendigungszeit</string>
|
||||
<string name="shared_string_color">Farbe</string>
|
||||
<string name="max_speed">Höchstgeschwindigkeit</string>
|
||||
<string name="average_speed">Durchschnittliche Geschwindigkeit</string>
|
||||
<string name="average_speed">Durchschnittsgeschwindigkeit</string>
|
||||
<string name="shared_string_gpx_track">Track</string>
|
||||
<string name="points_delete_multiple_succesful">Punkt(e) gelöscht.</string>
|
||||
<string name="points_delete_multiple">Es werden %1$d Punkt(e) gelöscht. Fortfahren?</string>
|
||||
|
@ -2416,7 +2416,7 @@
|
|||
<string name="quick_action_showhide_osmbugs_descr">Schaltfläche zum Ein- oder Ausblenden von OSM-Notizen auf der Karte.</string>
|
||||
<string name="sorted_by_distance">Nach Entfernung sortiert</string>
|
||||
<string name="search_favorites">In Favoriten suchen</string>
|
||||
<string name="hillshade_menu_download_descr">Laden Sie die Schummerungskarte herunter, um vertikale Schattierungen anzuzeigen.</string>
|
||||
<string name="hillshade_menu_download_descr">Laden Sie die Reliefkarte herunter, um vertikale Schattierungen anzuzeigen.</string>
|
||||
<string name="shared_string_plugin">Erweiterung</string>
|
||||
<string name="srtm_purchase_header">Kaufen und installieren Sie die Erweiterung \'Höhenlinien\', um abgestufte vertikale Flächen anzuzeigen.</string>
|
||||
<string name="srtm_menu_download_descr">Laden Sie die Höhenlinienkarte zu dieser Region herunter.</string>
|
||||
|
@ -2756,7 +2756,7 @@
|
|||
<string name="wikivoyage_offline">Wikivoyage offline</string>
|
||||
<string name="unlimited_downloads">Unbegrenzte Downloads</string>
|
||||
<string name="wikipedia_offline">Wikipedia offline</string>
|
||||
<string name="contour_lines_hillshade_maps">Karten mit Höhenlinien und Schummerung</string>
|
||||
<string name="contour_lines_hillshade_maps">Karten mit Höhenlinien und Relief</string>
|
||||
<string name="unlock_all_features">Alle OsmAnd-Funktionen freischalten</string>
|
||||
<string name="purchase_dialog_title">Plan auswählen</string>
|
||||
<string name="download_wikipedia_description">Laden Sie die Wikipedia-Artikel für %1$s herunter, um sie offline zu lesen.</string>
|
||||
|
@ -3275,7 +3275,7 @@
|
|||
<string name="copy_from_other_profile">Aus anderem Profil kopieren</string>
|
||||
<string name="turn_screen_on">Bildschirm einschalten</string>
|
||||
<string name="map_during_navigation_info">Karte während Navigation</string>
|
||||
<string name="vehicle_parameters_descr">Gewicht, Höhe, Geschwindigkeit</string>
|
||||
<string name="vehicle_parameters_descr">Gewicht, Höhe, Länge, Geschwindigkeit</string>
|
||||
<string name="vehicle_parameters">Fahrzeugparameter</string>
|
||||
<string name="route_parameters">Routenparameter</string>
|
||||
<string name="navigate_point_format_olc">Offener Standortcode (OLC)</string>
|
||||
|
@ -3341,7 +3341,7 @@
|
|||
<string name="shared_string_memory_used_gb_desc">%1$s GB verwendet</string>
|
||||
<string name="shared_string_memory_used_mb_desc">%1$s MB verwendet</string>
|
||||
<string name="shared_string_memory_used_kb_desc">%1$s kB verwendet</string>
|
||||
<string name="contour_lines_and_hillshade">Höhenlinien und Schummerung</string>
|
||||
<string name="contour_lines_and_hillshade">Höhenlinien und Relief</string>
|
||||
<string name="routing_attr_prefer_unpaved_name">Unbefestigte Straßen bevorzugen</string>
|
||||
<string name="routing_attr_prefer_unpaved_description">Unbefestigte Straßen bevorzugen.</string>
|
||||
<string name="update_all_maps">Alle Karten aktualisieren</string>
|
||||
|
@ -3598,19 +3598,19 @@
|
|||
<string name="quick_action_terrain_show">Gelände einblenden</string>
|
||||
<string name="quick_action_terrain_hide">Gelände ausblenden</string>
|
||||
<string name="quick_action_show_hide_terrain">Gelände ein- / ausblenden</string>
|
||||
<string name="shared_string_hillshade">Schummerung</string>
|
||||
<string name="shared_string_hillshade">Relief</string>
|
||||
<string name="shared_string_zoom_levels">Zoomstufen</string>
|
||||
<string name="shared_string_transparency">Transparenz</string>
|
||||
<string name="terrain_slider_description">Stellen Sie die minimale und maximale Zoomstufe ein, bei der die Ebene angezeigt wird.</string>
|
||||
<string name="shared_string_terrain">Gelände</string>
|
||||
<string name="download_slope_maps">Hangneigungen</string>
|
||||
<string name="terrain_empty_state_text">Aktivieren Sie diese Option, um die Schummerungs- oder Hangneigungskarte anzuzeigen. Weitere Informationen zu diesen Kartentypen finden Sie auf unserer Website.</string>
|
||||
<string name="terrain_empty_state_text">Aktivieren Sie diese Option, um die Relief- oder Hangneigungskarte anzuzeigen. Weitere Informationen zu diesen Kartentypen finden Sie auf unserer Website.</string>
|
||||
<string name="shared_string_legend">Legende</string>
|
||||
<string name="slope_read_more">Lesen Sie mehr über Hangneigungskarten in %1$s.</string>
|
||||
<string name="slope_download_description">Zusätzliche Karten sind erforderlich, um Hangneigungen auf der Karte anzuzeigen.</string>
|
||||
<string name="hillshade_download_description">Für die Darstellung der Schummerung werden zusätzliche Karten benötigt.</string>
|
||||
<string name="hillshade_download_description">Für die Darstellung des Reliefs werden zusätzliche Karten benötigt.</string>
|
||||
<string name="shared_string_min">Min</string>
|
||||
<string name="hillshade_description">Schummerungskarte mit dunklen Schattierungen zur Darstellung von Hängen, Gipfeln und Ebenen.</string>
|
||||
<string name="hillshade_description">Reliefkarte mit dunklen Schattierungen zur Darstellung von Hängen, Gipfeln und Ebenen.</string>
|
||||
<string name="n_items_of_z">%1$s von %2$s</string>
|
||||
<string name="shared_string_octagon">Achteck</string>
|
||||
<string name="app_mode_ski_touring">Skitouren</string>
|
||||
|
@ -3775,7 +3775,7 @@
|
|||
<string name="height_limit_description">Geben Sie Ihre Fahrzeughöhe an, für hohe Fahrzeuge können einige Routenbeschränkungen gelten.</string>
|
||||
<string name="weight_limit_description">Geben Sie Ihr Fahrzeuggewicht an, für schwere Fahrzeuge können einige Routenbeschränkungen gelten.</string>
|
||||
<string name="export_import_quick_actions_with_profiles_promo">Sie können Schnellaktionen mit Anwendungsprofilen exportieren oder importieren.</string>
|
||||
<string name="shared_string_delete_all_q">Alles Löschen\?</string>
|
||||
<string name="shared_string_delete_all_q">Alles löschen\?</string>
|
||||
<string name="delete_all_actions_message_q">Möchten Sie %d Schnellaktionen wirklich unwiderruflich löschen\?</string>
|
||||
<string name="shared_string_tones">Töne</string>
|
||||
<string name="shared_string_meters">Meter</string>
|
||||
|
@ -3793,7 +3793,7 @@
|
|||
<string name="quick_action_mapillary_hide">Mapillary ausblenden</string>
|
||||
<string name="quick_action_mapillary_show">Mapillary anzeigen</string>
|
||||
<string name="quick_action_showhide_mapillary_descr">Eine Umschaltfläche zum ein- oder ausblenden der Mapillary-Layer auf der Karte.</string>
|
||||
<string name="uninstall_speed_cameras">Blitzer Deinstallieren</string>
|
||||
<string name="uninstall_speed_cameras">Blitzer deinstallieren</string>
|
||||
<string name="shared_string_legal">Rechtliches</string>
|
||||
<string name="speed_camera_pois">Blitzer-POIs</string>
|
||||
<string name="keep_active">Aktiviert lassen</string>
|
||||
|
@ -3803,11 +3803,17 @@
|
|||
<string name="item_deleted">%1$s gelöscht</string>
|
||||
<string name="speed_cameras_restart_descr">Ein Neustart ist erforderlich, um Blitzerdaten vollständig zu löschen.</string>
|
||||
<string name="shared_string_uninstall_and_restart">Deinstallieren und neu starten</string>
|
||||
<string name="speed_cameras_legal_descr">In einigen Ländern oder Regionen ist die Verwendung von Anwendungen zum Warnen vor Blitzern gesetzlich verboten.
|
||||
<string name="speed_cameras_legal_descr">In einigen Ländern oder Regionen ist die Verwendung von Blitzer-Warneinrichtungen gesetzlich verboten.
|
||||
\n
|
||||
\nEs muss anhand der Gesetzeslage des Landes entschieden werden.
|
||||
\nSie müssen anhand der Gesetzeslage des Landes entscheiden, ob Sie
|
||||
\n
|
||||
\nDie Wahl %1$s sendet Warnungen und Hinweise zu Blitzern.
|
||||
\n%1$s wählen und Warnungen und Hinweise zu Blitzern erhalten werden,
|
||||
\n
|
||||
\nDie Wahl %2$s löscht alle Daten für Warnungen, Hinweise und POIs im Zusammenhang mit Blitzern, bis OsmAnd komplett neu installiert wird.</string>
|
||||
\n%2$s wählen, worauf alle Daten zu Blitzern (Warnungen, Hinweise und POIs) bis zu einer vollständigen Neuinstallation von OsmAnd gelöscht werden.</string>
|
||||
<string name="routing_attr_length_description">Geben Sie die Fahrzeuglänge an, die auf Routen erlaubt sein soll.</string>
|
||||
<string name="routing_attr_length_name">Längenbegrenzung</string>
|
||||
<string name="speed_cameras_removed_descr">Dieses Gerät hat keine Blitzer.</string>
|
||||
<string name="app_mode_inline_skates">Inline-Skates</string>
|
||||
<string name="use_volume_buttons_as_zoom_descr">Aktivieren Sie die Steuerung der Zoomstufe der Karte mit den Lautstärketasten des Geräts.</string>
|
||||
<string name="use_volume_buttons_as_zoom">Lautstärketasten als Zoom</string>
|
||||
</resources>
|
|
@ -558,21 +558,21 @@
|
|||
<string name="poi_paediatrics">Infanmedicino</string>
|
||||
<string name="poi_company">Oficejo de firmao</string>
|
||||
<string name="poi_insurance">Asekurkompaniejo</string>
|
||||
<string name="poi_estate_agent">Nemoveblaĵista oficejo</string>
|
||||
<string name="poi_lawyer">Leĝista oficejo</string>
|
||||
<string name="poi_estate_agent">Oficejo de nemoveblaĵisto</string>
|
||||
<string name="poi_lawyer">Oficejo de leĝisto</string>
|
||||
<string name="poi_office_telecommunication">Telekomunikada oficejo</string>
|
||||
<string name="poi_ngo">Oficejo de ne-registara organizaĵo</string>
|
||||
<string name="poi_ngo">Oficejo de neregistara organizaĵo</string>
|
||||
<string name="poi_employment_agency">Dungoficejo</string>
|
||||
<string name="poi_research">Oficejo de esploroj</string>
|
||||
<string name="poi_it">Inform-teĥnologia oficejo</string>
|
||||
<string name="poi_it">Oficejo de inform-teĥnologia firmao</string>
|
||||
<string name="poi_newspaper">Gazet-redaktejo</string>
|
||||
<string name="poi_architect">Arĥitekturistejo</string>
|
||||
<string name="poi_architect">Oficejo de arĥitekturisto</string>
|
||||
<string name="poi_advertising_agency">Reklamistejo</string>
|
||||
<string name="poi_educational_institution">Oficejo de edukada institucio</string>
|
||||
<string name="poi_studio">Studio</string>
|
||||
<string name="poi_bookmaker">Vetperistejo</string>
|
||||
<string name="poi_office_religion">Kancelario religia</string>
|
||||
<string name="poi_association">Oficejo de ne-profita organizaĵo</string>
|
||||
<string name="poi_association">Oficejo de neprofit-cela organizaĵo</string>
|
||||
<string name="poi_financial">Financa oficejo</string>
|
||||
<string name="poi_political_party">Oficejo de partio politika</string>
|
||||
<string name="poi_notary">Kancelario de notario</string>
|
||||
|
@ -754,7 +754,7 @@
|
|||
<string name="poi_internet_access_no">Interret-aliro: ne</string>
|
||||
<string name="poi_internet_access_service">Interret-aliro: priservo</string>
|
||||
<string name="poi_religious">Religia tereno</string>
|
||||
<string name="poi_travel_agent">Vojaĝ-oficejo</string>
|
||||
<string name="poi_travel_agent">Oficejo de vojaĝoj</string>
|
||||
<string name="poi_funicular">Funikularo</string>
|
||||
<string name="poi_camp_site">Kampadejo</string>
|
||||
<string name="poi_caravan_site">Kampadveturil-parkumejo</string>
|
||||
|
@ -830,15 +830,15 @@
|
|||
<string name="poi_drinking_water">Trinkakvejo</string>
|
||||
<string name="poi_barbecue">Rostilo</string>
|
||||
<string name="poi_craft_agricultural_engines">Laborejo de agrokulturaj maŝinoj</string>
|
||||
<string name="poi_craft_basket_maker">Korb-laborejo</string>
|
||||
<string name="poi_craft_basket_maker">Laborejo de korbisto</string>
|
||||
<string name="poi_craft_beekeeper">Abelistejo</string>
|
||||
<string name="poi_craft_blacksmith">Forĝejo</string>
|
||||
<string name="poi_craft_brewery">Bierfarejo</string>
|
||||
<string name="poi_craft_boatbuilder">Boat-konstruejo</string>
|
||||
<string name="poi_craft_bookbinder">Librobindejo</string>
|
||||
<string name="poi_craft_carpenter">Ĉarpentist-laborejo</string>
|
||||
<string name="poi_craft_carpet_layer">Tapiŝ-metista laborejo</string>
|
||||
<string name="poi_craft_caterer">Manĝ-provizista oficejo</string>
|
||||
<string name="poi_craft_carpenter">Laborejo de ĉarpentisto</string>
|
||||
<string name="poi_craft_carpet_layer">Laborejo de tapiŝ-metisto</string>
|
||||
<string name="poi_craft_caterer">Oficejo de manĝ-provizisto</string>
|
||||
<string name="poi_craft_clockmaker">Horloĝistejo</string>
|
||||
<string name="poi_craft_dressmaker">Tajlorejo (inaj vestoj)</string>
|
||||
<string name="poi_craft_electrician">Elektristejo</string>
|
||||
|
@ -848,19 +848,19 @@
|
|||
<string name="poi_craft_hvac">Oficejo de isto pri hejtado, aerumado, klimatizado</string>
|
||||
<string name="poi_craft_watchmaker">Poŝ-horloĝistejo</string>
|
||||
<string name="poi_craft_insulation">Varmizolaĵistejo</string>
|
||||
<string name="poi_craft_jeweller">Juvelista laborejo</string>
|
||||
<string name="poi_craft_jeweller">Laborejo de juvelisto</string>
|
||||
<string name="poi_craft_locksmith">Seruristejo</string>
|
||||
<string name="poi_craft_key_cutter">Ŝlosil-kopiistejo</string>
|
||||
<string name="poi_craft_metal_construction">Metal-konstruaĵista laborejo</string>
|
||||
<string name="poi_craft_metal_construction">Laborejo de metal-konstruaĵisto</string>
|
||||
<string name="poi_craft_optician">Okulvitristejo</string>
|
||||
<string name="poi_craft_painter">Farbistejo</string>
|
||||
<string name="poi_craft_parquet_layer">Pargetistejo</string>
|
||||
<string name="poi_craft_photographer">Fotistejo</string>
|
||||
<string name="poi_craft_photographic_laboratory">Fotista laborejo</string>
|
||||
<string name="poi_craft_photographic_laboratory">Laborejo de fotisto</string>
|
||||
<string name="poi_craft_plasterer">Stukistejo</string>
|
||||
<string name="poi_craft_plumber">Tubistejo</string>
|
||||
<string name="poi_craft_pottery">Potfaristejo</string>
|
||||
<string name="poi_craft_rigger">Rigilarista laborejo</string>
|
||||
<string name="poi_craft_rigger">Laborejo de rigisto</string>
|
||||
<string name="poi_craft_roofer">Tegmentistejo</string>
|
||||
<string name="poi_craft_saddler">Selistejo</string>
|
||||
<string name="poi_craft_sailmaker">Velfaristejo</string>
|
||||
|
@ -868,9 +868,9 @@
|
|||
<string name="poi_craft_scaffolder">Skafaldistejo</string>
|
||||
<string name="poi_craft_sculptor">Skulptistejo</string>
|
||||
<string name="poi_craft_shoemaker">Ŝuistejo</string>
|
||||
<string name="poi_craft_stand_builder">Oficejo de isto de stangoj, kioskoj</string>
|
||||
<string name="poi_craft_stand_builder">Oficejo de isto pri stangoj, kioskoj</string>
|
||||
<string name="poi_craft_stonemason">Ŝtontranĉistejo</string>
|
||||
<string name="poi_craft_sun_protection">Laborejo de isto de kontraŭsunaj ekranoj</string>
|
||||
<string name="poi_craft_sun_protection">Laborejo de isto pri kontraŭsunaj ekranoj</string>
|
||||
<string name="poi_craft_sweep">Kamenpurigistejo</string>
|
||||
<string name="poi_craft_tailor">Tajlorejo</string>
|
||||
<string name="poi_craft_tiler">Kahelmetistejo</string>
|
||||
|
@ -900,7 +900,7 @@
|
|||
<string name="poi_payment_terminal">Pag-terminalo</string>
|
||||
<string name="poi_money_lender">Pruntedonantejo</string>
|
||||
<string name="poi_pawnbroker">Lombardejo</string>
|
||||
<string name="poi_accountant">Kontista oficejo</string>
|
||||
<string name="poi_accountant">Oficejo de kontisto</string>
|
||||
<string name="poi_bitcoin_yes">Bitmono akceptata</string>
|
||||
<string name="poi_cave_entrance">Enirejo al kaverno</string>
|
||||
<string name="poi_peak">Monto (pinto)</string>
|
||||
|
@ -3059,13 +3059,13 @@
|
|||
<string name="poi_tower_construction_dome">Konstruaĵo: kupolo</string>
|
||||
<string name="poi_tower_construction_concealed">Konstruaĵo: maskita</string>
|
||||
<string name="poi_railway_yard">Fervojstacio vara</string>
|
||||
<string name="poi_coworking_space">Ejo por samloka laborado</string>
|
||||
<string name="poi_coworking_space">Oficejo por samloka laborado</string>
|
||||
<string name="poi_cafeteria">Manĝejo memserva</string>
|
||||
<string name="poi_fast_food_cafeteria">jes</string>
|
||||
<string name="poi_drink_wine_yes">Vino: jes</string>
|
||||
<string name="poi_drink_wine_retail">Vino: vendado (boteloj)</string>
|
||||
<string name="poi_drink_wine_served">Vino: trinkado surloke</string>
|
||||
<string name="poi_energy_supplier">Oficejo de energi-provizanto</string>
|
||||
<string name="poi_energy_supplier">Oficejo de elektr-provizanto</string>
|
||||
<string name="poi_deadlock">Maltrapasejo</string>
|
||||
<string name="poi_cuisine_deli">bongustaĵoj</string>
|
||||
<string name="poi_electronics_repair_computer">Riparo de elektronikaĵoj: komputiloj</string>
|
||||
|
@ -3822,4 +3822,7 @@
|
|||
<string name="poi_traffic_signals_vibration_no">Vibrado: ne</string>
|
||||
<string name="poi_traffic_signals_arrow">Sageto</string>
|
||||
<string name="poi_traffic_signals_vibration">Vibrado</string>
|
||||
<string name="poi_give_box">Kesto de senpaga interŝanĝo</string>
|
||||
<string name="poi_city_block">Dombloko</string>
|
||||
<string name="poi_borough">Suburbo</string>
|
||||
</resources>
|
|
@ -3807,4 +3807,6 @@
|
|||
<string name="routing_attr_length_name">Limigo de longo</string>
|
||||
<string name="speed_cameras_removed_descr">Tiu ĉi aplikaĵo ne liveras informojn pri rapidkontrolliloj.</string>
|
||||
<string name="app_mode_inline_skates">Rulglitiloj</string>
|
||||
<string name="use_volume_buttons_as_zoom">Skali per sonfortecaj butonoj</string>
|
||||
<string name="use_volume_buttons_as_zoom_descr">Uzi la butonojn de sonforteco por pli-/mal-grandigi la mapon.</string>
|
||||
</resources>
|
|
@ -3836,4 +3836,5 @@
|
|||
<string name="poi_traffic_signals_vibration_no">Vibración: no</string>
|
||||
<string name="poi_traffic_signals_arrow">Flecha</string>
|
||||
<string name="poi_traffic_signals_vibration">Vibración</string>
|
||||
<string name="poi_give_box">Caja de regalo</string>
|
||||
</resources>
|
|
@ -3270,7 +3270,7 @@
|
|||
<string name="map_during_navigation_info">Mapa durante la navegación</string>
|
||||
<string name="map_during_navigation">Mapa durante la navegación</string>
|
||||
<string name="shared_string_other">Otros</string>
|
||||
<string name="vehicle_parameters_descr">Peso, altura, velocidad</string>
|
||||
<string name="vehicle_parameters_descr">Peso, altura, longitud, velocidad</string>
|
||||
<string name="vehicle_parameters">Parámetros del vehículo</string>
|
||||
<string name="voice_announces_info">Los anuncios de voz solo se realizan durante la navegación.</string>
|
||||
<string name="voice_announces_descr">Instrucciones de navegación y anuncios</string>
|
||||
|
@ -3808,4 +3808,10 @@
|
|||
<string name="shared_string_bearing">Rumbo</string>
|
||||
<string name="item_deleted">%1$s borrado</string>
|
||||
<string name="shared_string_uninstall_and_restart">Desinstalar y reiniciar</string>
|
||||
<string name="routing_attr_length_description">Indica la longitud permitida del vehículo en rutas.</string>
|
||||
<string name="routing_attr_length_name">Límite de longitud</string>
|
||||
<string name="speed_cameras_removed_descr">Este dispositivo no tiene radares de velocidad.</string>
|
||||
<string name="app_mode_inline_skates">Patines en línea</string>
|
||||
<string name="use_volume_buttons_as_zoom_descr">Permite controlar el nivel de zoom del mapa con los botones de volumen del dispositivo.</string>
|
||||
<string name="use_volume_buttons_as_zoom">Botones de volumen como zoom</string>
|
||||
</resources>
|
|
@ -3836,4 +3836,5 @@
|
|||
<string name="poi_traffic_signals_vibration_no">Vibración: no</string>
|
||||
<string name="poi_traffic_signals_arrow">Flecha</string>
|
||||
<string name="poi_traffic_signals_vibration">Vibración</string>
|
||||
<string name="poi_give_box">Caja de regalo</string>
|
||||
</resources>
|
|
@ -3270,7 +3270,7 @@
|
|||
<string name="map_during_navigation_info">Mapa durante la navegación</string>
|
||||
<string name="map_during_navigation">Mapa durante la navegación</string>
|
||||
<string name="shared_string_other">Otros</string>
|
||||
<string name="vehicle_parameters_descr">Peso, altura, velocidad</string>
|
||||
<string name="vehicle_parameters_descr">Peso, altura, longitud, velocidad</string>
|
||||
<string name="vehicle_parameters">Parámetros del vehículo</string>
|
||||
<string name="voice_announces_info">Los anuncios de voz solo se realizan durante la navegación.</string>
|
||||
<string name="voice_announces_descr">Instrucciones de navegación y anuncios</string>
|
||||
|
@ -3805,4 +3805,10 @@
|
|||
<string name="item_deleted">%1$s borrado</string>
|
||||
<string name="speed_cameras_restart_descr">Debes reiniciar para borrar completamente los datos de los radares de velocidad.</string>
|
||||
<string name="shared_string_uninstall_and_restart">Desinstalar y reiniciar</string>
|
||||
<string name="routing_attr_length_description">Indica la longitud permitida del vehículo en rutas.</string>
|
||||
<string name="routing_attr_length_name">Límite de longitud</string>
|
||||
<string name="speed_cameras_removed_descr">Este dispositivo no tiene radares de velocidad.</string>
|
||||
<string name="app_mode_inline_skates">Patines en línea</string>
|
||||
<string name="use_volume_buttons_as_zoom_descr">Permite controlar el nivel de zoom del mapa con los botones de volumen del dispositivo.</string>
|
||||
<string name="use_volume_buttons_as_zoom">Botones de volumen como zoom</string>
|
||||
</resources>
|
|
@ -3819,4 +3819,16 @@
|
|||
<string name="poi_memorial_ghost_bike">Bicicleta blanca</string>
|
||||
<string name="poi_fire_hydrant_pressure_filter">Presión</string>
|
||||
<string name="poi_sms">SMS</string>
|
||||
<string name="poi_give_box">Caja de regalo</string>
|
||||
<string name="poi_traffic_signals_arrow_yes">Sí</string>
|
||||
<string name="poi_traffic_signals_vibration_yes">Sí</string>
|
||||
<string name="poi_traffic_signals_vibration_no">Vibración: no</string>
|
||||
<string name="poi_pump_status_missing_beam">Estado de la bomba: falta la barra</string>
|
||||
<string name="poi_seamark_water_level_floating">Nivel del agua: flotante</string>
|
||||
<string name="poi_seamark_water_level_floods">Nivel del agua: inundaciones</string>
|
||||
<string name="poi_seamark_water_level_covers">Nivel de agua: cubre</string>
|
||||
<string name="poi_tactile_paving_primitive">Primitivo</string>
|
||||
<string name="poi_tactile_paving_contrasted">Contrastado</string>
|
||||
<string name="poi_traffic_signals_arrow">Flecha</string>
|
||||
<string name="poi_traffic_signals_vibration">Vibración</string>
|
||||
</resources>
|
|
@ -3748,4 +3748,67 @@
|
|||
<string name="shared_string_meters">metros</string>
|
||||
<string name="details_dialog_decr">Controla la visibilidad de los detalles adicionales mostrados en el mapa</string>
|
||||
<string name="shared_string_night_map">Mapa nocturno</string>
|
||||
<string name="search_offline_geo_error">No pude analizar la geointención \"%s\".</string>
|
||||
<string name="multimedia_rec_split_title">División de grabación</string>
|
||||
<string name="live_monitoring_adress_descr">Indica la dirección web con sintaxis de parámetros : lat={0}, lon={1}, timestamp={2}, hdop={3}, altitude={4}, speed={5}, bearing={6}.</string>
|
||||
<string name="monitoring_min_distance_descr_recommendation">Recomendación: Un ajuste de 5 metros puede funcionar bien para ti si no necesitas capturar detalles más finos que eso, y no quieres capturar explícitamente los datos mientras estás en reposo.</string>
|
||||
<string name="monitoring_min_distance_descr_side_effect">Efectos secundarios: Los períodos de descanso no se registran en absoluto o sólo en un punto. Los pequeños movimientos (en el mundo real) (por ejemplo, de lado, para marcar un posible desvío en su viaje) pueden ser filtrados. Su archivo contiene menos información para el post-procesado, y tiene peores estadísticas al filtrar puntos obviamente redundantes en el tiempo de registro, mientras que potencialmente mantiene los artefactos causados por la mala recepción o los efectos del chipset del GPS.</string>
|
||||
<string name="monitoring_min_distance_descr">Este filtro evita que se registren puntos duplicados cuando ha habido muy poco movimiento real, y da un aspecto espacial más agradable a las pistas sin post-procesado posterior.</string>
|
||||
<string name="monitoring_min_accuracy_descr_remark">Observación: Si el GPS hubiera estado apagado inmediatamente antes de una medida, el primer punto medido podría tener una precisión disminuida, por lo que en nuestro código podríamos querer esperar un segundo más o menos antes de grabar un punto (o grabar el mejor de 3 puntos consecutivos, etc.), pero esto aún no se ha implementado.</string>
|
||||
<string name="monitoring_min_accuracy_descr_recommendation">Recomendación: Es difícil predecir lo que se registrará y lo que no, puede ser mejor apagar este filtro.</string>
|
||||
<string name="monitoring_min_accuracy_descr_side_effect">Efecto secundario: Como resultado del filtrado por precisión, pueden faltar puntos, por ejemplo, debajo de puentes, bajo árboles, entre edificios altos o con ciertas condiciones climáticas.</string>
|
||||
<string name="import_complete_description">Todos los datos de los %1$s son importados, puedes usar los botones de abajo para abrir la parte necesaria de la aplicación para gestionarla.</string>
|
||||
<string name="ui_customization">Personalización de la interfaz de usuario</string>
|
||||
<string name="divider_descr">Elementos debajo de este punto separados por un divisor.</string>
|
||||
<string name="lang_zhminnan">Min del sur</string>
|
||||
<string name="lang_yo">Yoruba</string>
|
||||
<string name="lang_war">Waray</string>
|
||||
<string name="lang_uz">Uzbeko</string>
|
||||
<string name="lang_ur">Urdu</string>
|
||||
<string name="lang_tg">Tayiko</string>
|
||||
<string name="lang_bar">Bávaro</string>
|
||||
<string name="tracker_item">Rastreador OsmAnd</string>
|
||||
<string name="legend_item_description">La guía para la simbología del mapa.</string>
|
||||
<string name="parking_positions">Posiciones de estacionamiento</string>
|
||||
<string name="turn_screen_on_power_button_disabled">Deshabilitado. Requiere \'Mantener la pantalla encendida\' dentro de \'Tiempo de espera después de la activación\'.</string>
|
||||
<string name="map_source_zoom_levels_descr">Afecta a la pantalla cuando se usa como mapa o superposición / subyacente.
|
||||
\n
|
||||
\n%1$s: el mapa está limitado al rango de nivel de zoom seleccionado.
|
||||
\n
|
||||
\n%2$s son los niveles en los que las teselas originales serán visibles, fuera de estos valores se realizará un escalado.</string>
|
||||
<string name="uninstall_speed_cameras">Desinstalar las cámaras de velocidad</string>
|
||||
<string name="shared_string_legal">Legal</string>
|
||||
<string name="speed_camera_pois">PDIs de cámaras de velocidad</string>
|
||||
<string name="speed_cameras_legal_descr">En algunos países o regiones, el uso de aplicaciones de advertencia de cámaras de velocidad está prohibido por la ley.
|
||||
\n
|
||||
\nTienes que hacer una elección dependiendo de la ley de tu país.
|
||||
\n
|
||||
\nSelecciona %1$s y recibirás alertas y advertencias sobre las cámaras de velocidad.
|
||||
\n
|
||||
\nSelecciona %2$s. Todos los datos relacionados con las cámaras de velocidad: alertas, notificaciones, PDIs, se eliminarán hasta que OsmAnd se reinstale completamente.</string>
|
||||
<string name="keep_active">Mantener activo</string>
|
||||
<string name="shared_string_uninstall">Desinstalar</string>
|
||||
<string name="speed_cameras_alert">Las alertas de cámaras de velocidad están prohibidas por la ley en algunos países.</string>
|
||||
<string name="default_screen_timeout">Tiempo de espera de pantalla predeterminado</string>
|
||||
<string name="shared_string_tones">tonos</string>
|
||||
<string name="add_online_source">Añadir fuente en línea</string>
|
||||
<string name="clear_tiles_warning">Aplicando estos cambios se borrarán los datos almacenados para esta fuente de teselas</string>
|
||||
<string name="vessel_height_warning_link">Fijar la altura del navío</string>
|
||||
<string name="vessel_height_warning">Puedes establecer la altura del navío para evitar los puentes bajos. Ten en cuenta que si el puente es móvil, usaremos su altura en estado abierto.</string>
|
||||
<string name="vessel_height_limit_description">Fija la altura del navío para evitar los puentes bajos. Ten en cuenta que si el puente es móvil, usaremos su altura en estado abierto.</string>
|
||||
<string name="vessel_width_limit_description">Fija el ancho del navío para evitar puentes estrechos</string>
|
||||
<string name="quick_action_showhide_mapillary_title">Mostrar/ocultar Mapillary</string>
|
||||
<string name="quick_action_mapillary_hide">Ocultar Mapillary</string>
|
||||
<string name="quick_action_mapillary_show">Mostrar Mapillary</string>
|
||||
<string name="quick_action_showhide_mapillary_descr">Un conmutador para mostrar u ocultar la capa de Mapillary en el mapa.</string>
|
||||
<string name="routing_attr_length_description">Especifica la longitud del vehículo que se permitirá en las rutas.</string>
|
||||
<string name="routing_attr_length_name">Límite de longitud</string>
|
||||
<string name="shared_string_bearing">Rumbo</string>
|
||||
<string name="item_deleted">%1$s eliminado</string>
|
||||
<string name="speed_cameras_restart_descr">Es necesario reiniciar para eliminar completamente los datos de las cámaras de velocidad.</string>
|
||||
<string name="shared_string_uninstall_and_restart">Desinstalar y reiniciar</string>
|
||||
<string name="speed_cameras_removed_descr">Este dispositivo no tiene cámaras de velocidad.</string>
|
||||
<string name="app_mode_inline_skates">Patines en línea</string>
|
||||
<string name="use_volume_buttons_as_zoom_descr">Permite controlar el nivel de zoom del mapa con los botones de volumen del dispositivo.</string>
|
||||
<string name="use_volume_buttons_as_zoom">Botones de volumen como zoom</string>
|
||||
</resources>
|
|
@ -1139,7 +1139,7 @@
|
|||
<string name="routing_attr_avoid_motorway_name">آزادراه</string>
|
||||
<string name="routing_attr_avoid_motorway_description">از آزادراهها پرهیز میکند</string>
|
||||
<string name="routing_attr_weight_name">وزن مجاز</string>
|
||||
<string name="routing_attr_weight_description">وزن مجاز خودرو در راهها را مشخص کنید.</string>
|
||||
<string name="routing_attr_weight_description">وزن مجاز خودرو در مسیرها را مشخص کنید.</string>
|
||||
<string name="select_gpx">انتخاب فایل GPX…</string>
|
||||
<string name="route_descr_select_destination">مقصد را تنظیم کنید</string>
|
||||
<string name="shared_string_select_on_map">انتخاب روی نقشه</string>
|
||||
|
@ -1612,7 +1612,7 @@
|
|||
<string name="routing_attr_avoid_borders_name">گذر از مرز</string>
|
||||
<string name="routing_attr_avoid_borders_description">از گذر از مرزهای ملی پرهیز میکند</string>
|
||||
<string name="routing_attr_height_name">ارتفاع مجاز</string>
|
||||
<string name="routing_attr_height_description">ارتفاع مجاز خودرو در راهها چقدر است.</string>
|
||||
<string name="routing_attr_height_description">ارتفاع مجاز خودرو در مسیرها را مشخص کنید.</string>
|
||||
<string name="download_wikipedia_maps">ویکیپدیا</string>
|
||||
<string name="rendering_attr_alpineHiking_description">راهها بر اساس درجهبندی SAC رسم شوند.</string>
|
||||
<string name="rendering_attr_hikingRoutesOSMC_name">لایهٔ نمادهای پیادهگردی</string>
|
||||
|
@ -3266,7 +3266,7 @@
|
|||
<string name="osmand_settings">تنظیمات OsmAnd</string>
|
||||
<string name="copy_from_other_profile">کپی از پروفایل دیگر</string>
|
||||
<string name="shared_string_other">سایر</string>
|
||||
<string name="vehicle_parameters_descr">وزن، ارتفاع، سرعت</string>
|
||||
<string name="vehicle_parameters_descr">وزن، ارتفاع، طول، سرعت</string>
|
||||
<string name="vehicle_parameters">پارامترهای وسیله نقلیه</string>
|
||||
<string name="route_parameters_descr">پیکربندی پارامترهای مسیر</string>
|
||||
<string name="route_parameters">پارامترهای مسیر</string>
|
||||
|
@ -3835,4 +3835,9 @@
|
|||
\n
|
||||
\nبا انتخاب %2$s تا زمانی که OsmAnd را دوباره نصب کنید، تمام دادهٔ مربوط به دوربینهای سرعت (هشدارها، اعلانها، نقاط توجه) حذف میشود.</string>
|
||||
<string name="speed_cameras_alert">قانونِ برخی از کشورها استفاده از هشداردهندهٔ دوربین سرعت را ممنوع کرده است.</string>
|
||||
<string name="use_volume_buttons_as_zoom_descr">با این گزینه میتوانید با استفاده از دکمههای کم/زیاد صدای دستگاه سطح زوم را کنترل کنید.</string>
|
||||
<string name="use_volume_buttons_as_zoom">زوم با دکمههای صدا</string>
|
||||
<string name="routing_attr_length_name">طول مجاز</string>
|
||||
<string name="routing_attr_length_description">طول مجاز خودرو در مسیرها را مشخص کنید.</string>
|
||||
<string name="speed_cameras_removed_descr">این دستگاه دوربینهای سرعت را ندارد.</string>
|
||||
</resources>
|
|
@ -3818,7 +3818,7 @@
|
|||
<string name="poi_drinking_water_refill_no">Remplissage d\'eau potable : non</string>
|
||||
<string name="poi_drinking_water_refill_network">Réseau de remplissage d\'eau potable</string>
|
||||
<string name="poi_traffic_signals_sound_locate">Uniquement si la marche est autorisée</string>
|
||||
<string name="poi_internet_access_fee_customers">Signal pour trouver le pôle</string>
|
||||
<string name="poi_internet_access_fee_customers">Signal pour trouver le poteau</string>
|
||||
<string name="poi_fire_hydrant_pressure_filter">Pression</string>
|
||||
<string name="poi_osmand_fire_hydrant_pressure_suction">Aspiration</string>
|
||||
<string name="poi_osmand_fire_hydrant_pressure_pressurized">Pressurisé</string>
|
||||
|
@ -3829,4 +3829,5 @@
|
|||
<string name="poi_traffic_signals_vibration_no">Vibration : non</string>
|
||||
<string name="poi_traffic_signals_arrow">Flèche</string>
|
||||
<string name="poi_traffic_signals_vibration">Vibration</string>
|
||||
<string name="poi_give_box">Boîte à dons</string>
|
||||
</resources>
|
|
@ -3789,4 +3789,6 @@
|
|||
<string name="routing_attr_length_name">Limite de longueur</string>
|
||||
<string name="speed_cameras_removed_descr">Cet appareil n\'a pas de radars.</string>
|
||||
<string name="app_mode_inline_skates">Patins à roulettes en ligne</string>
|
||||
<string name="use_volume_buttons_as_zoom">Zoomer avec les boutons de volume</string>
|
||||
<string name="use_volume_buttons_as_zoom_descr">Activer pour contrôler le niveau de zoom de la carte avec les boutons de réglage du volume sonore.</string>
|
||||
</resources>
|
|
@ -2399,7 +2399,7 @@ Lon %2$s</string>
|
|||
<string name="context_menu_read_full_article">Ler o artigo completo</string>
|
||||
<string name="context_menu_read_article">Ler o artigo</string>
|
||||
<string name="context_menu_points_of_group">Tódolos puntos do grupo</string>
|
||||
<string name="open_from">Aberto a partires das</string>
|
||||
<string name="open_from">Aberto dende as</string>
|
||||
<string name="open_till">Aberto até as</string>
|
||||
<string name="will_close_at">Pecha ás</string>
|
||||
<string name="will_open_at">Abre ás</string>
|
||||
|
@ -3834,4 +3834,6 @@ Lon %2$s</string>
|
|||
<string name="routing_attr_length_name">Límite de lonxitude</string>
|
||||
<string name="speed_cameras_removed_descr">Este dispositivo non ten radares de velocidade.</string>
|
||||
<string name="app_mode_inline_skates">Patíns en liña</string>
|
||||
<string name="use_volume_buttons_as_zoom_descr">Activar para controlar o nivel de achegamento (zoom) do mapa cos botóns de volume do dispositivo.</string>
|
||||
<string name="use_volume_buttons_as_zoom">Os botóns de volume mudan o achegamento</string>
|
||||
</resources>
|
|
@ -3778,7 +3778,7 @@
|
|||
<string name="width_limit_description">נא לציין את רוחב כלי הרכב שלך, יתכן שחלות מגבלות מעבר על כלי רכב רחבים.</string>
|
||||
<string name="height_limit_description">נא לציין את גובה כלי הרכב שלך, יתכן שחלות מגבלות מעבר על כלי רכב גבוהים.</string>
|
||||
<string name="weight_limit_description">נא לציין את משקל כלי הרכב שלך, יתכן שחלות מגבלות מעבר על כלי רכב כבדים.</string>
|
||||
<string name="shared_string_tones">גוונים</string>
|
||||
<string name="shared_string_tones">טונות</string>
|
||||
<string name="shared_string_meters">מטרים</string>
|
||||
<string name="details_dialog_decr">הצגה או הסתרה של פירוט נוסף על המפה</string>
|
||||
<string name="shared_string_night_map">מפת לילה</string>
|
||||
|
@ -3815,4 +3815,6 @@
|
|||
<string name="routing_attr_length_description">נא לציין את אורך כלי הרכב כדי לבדוק מסלולים מורשים.</string>
|
||||
<string name="routing_attr_length_name">מגבלת אורך</string>
|
||||
<string name="speed_cameras_removed_descr">למכשיר הזה אין מצלמות מהירות.</string>
|
||||
<string name="use_volume_buttons_as_zoom_descr">מאפשר לשלוח ברמת התקריב של המפה עם כפתורי עצמת השמע של המכשיר.</string>
|
||||
<string name="use_volume_buttons_as_zoom">כפתורי עצמת שמע כתקריב</string>
|
||||
</resources>
|
|
@ -591,7 +591,7 @@
|
|||
<string name="choose_available_region">Régió kijelölése listából</string>
|
||||
<string name="choose_intersected_street">Keresztező utca kijelölése</string>
|
||||
<string name="Closest_Amenities">Legközelebbi hasznos létesítmények</string>
|
||||
<string name="app_mode_default">Alapértelmezett</string>
|
||||
<string name="app_mode_default">Térképböngészés</string>
|
||||
<string name="app_mode_car">Vezetés</string>
|
||||
<string name="app_mode_bicycle">Kerékpározás</string>
|
||||
<string name="app_mode_pedestrian">Gyaloglás</string>
|
||||
|
@ -3732,4 +3732,28 @@ Hosszúság: %2$s</string>
|
|||
<string name="routing_attr_length_description">Adja meg az útvonalakon a járművekre vonatkozó hosszkorlátozást.</string>
|
||||
<string name="routing_attr_length_name">Hosszkorlátozás</string>
|
||||
<string name="speed_cameras_removed_descr">Az eszköz nem tartalmaz traffipax adatokat.</string>
|
||||
<string name="replace_all_desc">Az jelenlegi elemek lecserélésre kerülnek a fájlban lévőkre</string>
|
||||
<string name="keep_both_desc">Az importál elemek előtaggal kerünek hozzáadásra</string>
|
||||
<string name="import_duplicates_description">Az OsmAnd már tartalmaz az importárttal megegyező nevű elemeket.
|
||||
\n
|
||||
\nVálasszon egy műveletet.</string>
|
||||
<string name="import_duplicates_title">Néhány elem már létezik</string>
|
||||
<string name="plugin_disabled_descr">Ez a bővítmény egy különálló alkalmazás, külön el kell távolítania, amennyiben a továbbiakban nem tervezi használni.
|
||||
\n
|
||||
\nA bővítmény a készüléken marad az OsmAnd eltávolítása után.</string>
|
||||
<string name="routing_profile_direct_to">Légvonalban</string>
|
||||
<string name="reset_to_default_category_button_promo">Az alapértelmezés visszaállítása a sorrendet visszaállítja a telepítés utáni alapértelmezett állapotba.</string>
|
||||
<string name="accessibility_mode_disabled">A kisegítő lehetőségek a készülékén az Android rendszerben ki vannak kapcsolva.</string>
|
||||
<string name="live_monitoring_time_buffer">Idő puffer</string>
|
||||
<string name="live_monitoring_tracking_interval">Naplózási időköz</string>
|
||||
<string name="live_monitoring_adress">Webcím</string>
|
||||
<string name="live_monitoring_adress_descr">Adja meg a webcímet a következő paraméter szintaxissal: szélesség={0}, hosszúság={1}, időbélyeg={2}, pontosság={3}, magasság={4}, sebesség={5}, irány={6}.</string>
|
||||
<string name="monitoring_notification">Értesítés</string>
|
||||
<string name="monitoring_min_speed">Legkisebb sebesség</string>
|
||||
<string name="monitoring_min_accuracy">Legkisebb pontosság</string>
|
||||
<string name="monitoring_min_distance">Legkisebb elmozdulás</string>
|
||||
<string name="reset_plugin_to_default">Bővítménybeállítások visszaállítása alapértelmezettre</string>
|
||||
<string name="use_volume_buttons_as_zoom_descr">Engedélyezésével a térkép nagyítási szintje az eszköz hangerőgombjaival állítható.</string>
|
||||
<string name="use_volume_buttons_as_zoom">Hangerőgombok használata nagyításhoz</string>
|
||||
<string name="app_mode_inline_skates">Görkorcsolya</string>
|
||||
</resources>
|
|
@ -1239,7 +1239,7 @@
|
|||
<string name="poi_tactile_paving_yes">Ja</string>
|
||||
<string name="poi_tactile_paving_no">Zonder blindengeleidestrook</string>
|
||||
<string name="poi_traffic_signals_sound_yes">Ja</string>
|
||||
<string name="poi_traffic_signals_sound_no">Nee</string>
|
||||
<string name="poi_traffic_signals_sound_no">Geluid: nee</string>
|
||||
<string name="poi_traffic_signals_sound_walk">Alleen als oversteken is toegestaan</string>
|
||||
<string name="poi_rescue_station">Reddingstation</string>
|
||||
<string name="poi_services">Verzorgingsplaats</string>
|
||||
|
@ -1391,8 +1391,8 @@
|
|||
<string name="poi_vending_ice_cream">IJs</string>
|
||||
<string name="poi_cuisine_ice_cream">IJs</string>
|
||||
<string name="poi_fuel_avia_type">Brandstoftype (avia)</string>
|
||||
<string name="poi_internet_access_type">Internet verbinding type</string>
|
||||
<string name="poi_vending_type">Verkoop</string>
|
||||
<string name="poi_internet_access_type">Type Internettoegang</string>
|
||||
<string name="poi_vending_type">Verkooptype</string>
|
||||
<string name="poi_bicycle_service">Fietsonderhoud</string>
|
||||
<string name="poi_clothes_type">Soort</string>
|
||||
<string name="poi_shoes_type">Soort</string>
|
||||
|
@ -1482,7 +1482,7 @@
|
|||
<string name="poi_waterway_fuel">Tankstation voor scheepvaart</string>
|
||||
<string name="poi_ice_hockey">IJshockey</string>
|
||||
<string name="poi_internet_access_fee_yes">Internettoegang - betaald</string>
|
||||
<string name="poi_internet_access_fee_no">Internettoegang - gratis</string>
|
||||
<string name="poi_internet_access_fee_no">Internettoegang: gratis</string>
|
||||
<string name="poi_club_freemasonry">Vrijmetselaarsloge</string>
|
||||
<string name="poi_club_sailing">Zeilclub</string>
|
||||
<string name="poi_club_scout">Padvindersclub</string>
|
||||
|
@ -1526,7 +1526,7 @@
|
|||
<string name="poi_payment_eurowag_yes">Eurowag</string>
|
||||
<string name="poi_payment_eurowag_no">Eurowag-kaarten niet geaccepteerd</string>
|
||||
<string name="poi_payment_e_zpass_yes">E-Z Pass</string>
|
||||
<string name="poi_payment_e_zpass_no">E-Z Pass niet geaccepteerd</string>
|
||||
<string name="poi_payment_e_zpass_no">E-ZPass niet geaccepteerd</string>
|
||||
<string name="poi_payment_wire_transfer_yes">Bankoverschrijving</string>
|
||||
<string name="poi_payment_wire_transfer_no">Bankoverschrijving niet geaccepteerd</string>
|
||||
<string name="poi_payment_sms_yes">Betaling via SMS</string>
|
||||
|
@ -1769,7 +1769,7 @@
|
|||
<string name="poi_bridge_structure_simple_suspension">Soort brug: enkele hangbrug</string>
|
||||
<string name="poi_bridge_structure_beam">Brugstructuur: balk</string>
|
||||
<string name="poi_bridge_structure_suspension">Soort brug: enkele brug</string>
|
||||
<string name="poi_bridge_structure_arch">"Soort brug: boogbrug"</string>
|
||||
<string name="poi_bridge_structure_arch">Soort brug: boogbrug</string>
|
||||
<string name="poi_bridge_structure_floating">Soort brug: vlotbrug</string>
|
||||
<string name="poi_bridge_structure_simple_wooden">Soort brug: houten</string>
|
||||
<string name="poi_bridge_structure_viaduct">Soort brug: viaduct</string>
|
||||
|
@ -1874,7 +1874,7 @@
|
|||
<string name="poi_publisher">Uitgeverij</string>
|
||||
<string name="poi_fuel_91ul">Avgas UL 91</string>
|
||||
<string name="poi_fuel_100ll">Avgas 100 LL</string>
|
||||
<string name="poi_fuel_autogas">Autogas</string>
|
||||
<string name="poi_fuel_autogas">LPG</string>
|
||||
<string name="poi_fuel_jeta1">Jet A-1 fuel</string>
|
||||
<string name="poi_fuel_adblue">AdBlue</string>
|
||||
<string name="poi_fuel_wood">Brandstof: hout</string>
|
||||
|
@ -2308,7 +2308,7 @@
|
|||
<string name="poi_surface_unpaved">Oppervlak: onverhard</string>
|
||||
<string name="poi_surface_paved">Oppervlak: verhard</string>
|
||||
<string name="poi_surface_sett">Oppervlak: kasseien</string>
|
||||
<string name="poi_animal_shelter_horse">"Paarden "</string>
|
||||
<string name="poi_animal_shelter_horse">Paarden</string>
|
||||
<string name="poi_animal_shelter_mammal">Zoogdieren</string>
|
||||
<string name="poi_historic_stone">Historische steen</string>
|
||||
<string name="poi_stone_type_conciliation_cross">Type: moordkruis</string>
|
||||
|
@ -2837,7 +2837,7 @@
|
|||
<string name="poi_direction_anticlockwise">Richting: tegen de klok in</string>
|
||||
<string name="poi_direction_up">Richting: omhoog</string>
|
||||
<string name="poi_direction_down">Richting: omlaag</string>
|
||||
<string name="poi_direction_all">"Richting: alle"</string>
|
||||
<string name="poi_direction_all">Richting: alle</string>
|
||||
<string name="poi_surface_clay">Klei</string>
|
||||
<string name="poi_operational_status_open">Open</string>
|
||||
<string name="poi_operational_status_closed">Gesloten</string>
|
||||
|
@ -3198,8 +3198,8 @@
|
|||
<string name="poi_nutrition_supplements">Voedingsmiddelenwinkel</string>
|
||||
<string name="poi_lighting">Verlichting</string>
|
||||
<string name="poi_feeding_place">Dierenvoederplaats</string>
|
||||
<string name="poi_public_bookcase_type_shelf">Soort: plank</string>
|
||||
<string name="poi_public_bookcase_type_phone_box">Soort: telefooncel</string>
|
||||
<string name="poi_public_bookcase_type_shelf">Type: plank</string>
|
||||
<string name="poi_public_bookcase_type_phone_box">Type: telefooncel</string>
|
||||
<string name="poi_xmas_opening_hours">Openingstijden op kerstdagen</string>
|
||||
<string name="poi_xmas_shop">Kerstwinkel</string>
|
||||
<string name="poi_water_tank">Watertank</string>
|
||||
|
@ -3222,8 +3222,8 @@
|
|||
<string name="poi_locksmith">Slotenmaker</string>
|
||||
<string name="poi_party">Feestwinkel</string>
|
||||
<string name="poi_cuisine_sagardotegia">Sagardotegi</string>
|
||||
<string name="poi_public_bookcase_type_metal_cabinet">Soort: metaalkast</string>
|
||||
<string name="poi_public_bookcase_type_reading_box">Soort: leesvak</string>
|
||||
<string name="poi_public_bookcase_type_metal_cabinet">Type: metalen kast</string>
|
||||
<string name="poi_public_bookcase_type_reading_box">Type: leesvak</string>
|
||||
<string name="poi_public_bookcase">Openbare boekenkast</string>
|
||||
<string name="poi_xmas_location">Kerstmis: locatie</string>
|
||||
<string name="poi_xmas_note">Kerstmis: opmerking</string>
|
||||
|
@ -3288,4 +3288,296 @@
|
|||
<string name="poi_fire_hydrant_pressure_filter">Druk</string>
|
||||
<string name="poi_pump_style_modern">Pompstijl: moderne</string>
|
||||
<string name="poi_pump_type_gravity">Pompsoort: zwaartekracht</string>
|
||||
<string name="poi_water_place_access_community">Gemeenschap</string>
|
||||
<string name="poi_water_supply_bottled_water">Flessenwater</string>
|
||||
<string name="poi_water_supply_water_tank">Watertank</string>
|
||||
<string name="poi_water_supply_water_trucking">Transport per watertruck</string>
|
||||
<string name="poi_water_supply_borehole">Bron (boorgat)</string>
|
||||
<string name="poi_water_supply_pump">Pomp</string>
|
||||
<string name="poi_water_supply_running_water">Stromend water</string>
|
||||
<string name="poi_water_supply_pipeline">Pijpleiding</string>
|
||||
<string name="poi_water_supply_water_well">Waterput</string>
|
||||
<string name="poi_water_purification_aquatabs">Aquatabs</string>
|
||||
<string name="poi_water_purification_reverse_osmosis">Omgekeerde osmose</string>
|
||||
<string name="poi_water_purification_chlorine">Chloor</string>
|
||||
<string name="poi_water_purification_none">Geen</string>
|
||||
<string name="poi_water_place_durability_emergency">Duurzaamheid van de waterplaats: noodgeval</string>
|
||||
<string name="poi_water_place_durability_durable">Duurzaamheid van de waterplaats: duurzaam</string>
|
||||
<string name="poi_operational_status_needs_maintenance">Heeft onderhoud nodig</string>
|
||||
<string name="poi_operational_status_broken">Defect</string>
|
||||
<string name="poi_operational_status_restricted">Beperkt</string>
|
||||
<string name="poi_visibility_area">Zichtbaarheid: gebied</string>
|
||||
<string name="poi_visibility_street">Zichtbaarheid: straat</string>
|
||||
<string name="poi_visibility_house">Zichtbaarheid: huis</string>
|
||||
<string name="poi_location_entrance">Locatie: ingang</string>
|
||||
<string name="poi_location_wall">Locatie: muur</string>
|
||||
<string name="poi_location_bridge">Locatie: brug</string>
|
||||
<string name="poi_location_kiosk">Locatie: kiosk</string>
|
||||
<string name="poi_location_platform">Locatie: platform</string>
|
||||
<string name="poi_location_indoor">Locatie: binnen</string>
|
||||
<string name="poi_location_outdoor">Locatie: buiten</string>
|
||||
<string name="poi_location_rooftop">Locatie: op het dak</string>
|
||||
<string name="poi_location_roof">Locatie: dak</string>
|
||||
<string name="poi_location_overground">Locatie: bovengronds</string>
|
||||
<string name="poi_location_underground">Locatie: ondergronds</string>
|
||||
<string name="poi_surface_decoturf">DecoTurf</string>
|
||||
<string name="poi_surface_tartan">Tartan (kunststof)</string>
|
||||
<string name="poi_gorge">Kloof</string>
|
||||
<string name="poi_government_legislative">Wetgevende instelling</string>
|
||||
<string name="poi_government_treasury">Ministerie van Financiën</string>
|
||||
<string name="poi_government_social_security">Sociale zekerheid</string>
|
||||
<string name="poi_government_ministry">Ministerie</string>
|
||||
<string name="poi_network">Netwerk</string>
|
||||
<string name="poi_boat_canoe_rental_rental_yes">Kano: ja</string>
|
||||
<string name="poi_boat_kayak_rental_rental_yes">Kajaks: ja</string>
|
||||
<string name="poi_boat_dinghy_rental_rental_yes">Rubberboot: Ja</string>
|
||||
<string name="poi_boat_sailboat_rental_yes">Zeilboten: ja</string>
|
||||
<string name="poi_boat_jetski_rental_yes">Jetski\'s: ja</string>
|
||||
<string name="poi_boat_pedalboat_rental_yes">Waterfietsen: ja</string>
|
||||
<string name="poi_boat_houseboat_rental_yes">Woonboten: ja</string>
|
||||
<string name="poi_boat_motorboat_rental_yes">Motorboten: ja</string>
|
||||
<string name="poi_reservation_members_only">Reservering: alleen voor leden</string>
|
||||
<string name="poi_reservation_yes">Reservering: ja</string>
|
||||
<string name="poi_reservation_required">Reservering: verplicht</string>
|
||||
<string name="poi_winter_room_yes">Winterkamer: ja</string>
|
||||
<string name="poi_direction_entrance">Richting: ingang</string>
|
||||
<string name="poi_animal_shelter_purpose_release_no">Vrijlaten: ja</string>
|
||||
<string name="poi_animal_shelter_purpose_adoption_no">Adoptie: nee</string>
|
||||
<string name="poi_owner">Eigenaar</string>
|
||||
<string name="poi_motorcycle_type_dualsport">Dualsport</string>
|
||||
<string name="poi_motorcycle_type_chopper">Choppers</string>
|
||||
<string name="poi_motorcycle_type_scooter">Scooters</string>
|
||||
<string name="poi_motorcycle_clothes_yes">Motorkleding</string>
|
||||
<string name="poi_motorcycle_tyres_yes">Banden</string>
|
||||
<string name="poi_motorcycle_parts_yes">Onderdelen</string>
|
||||
<string name="poi_motorcycle_repair_yes">Reparatie</string>
|
||||
<string name="poi_motorcycle_rental_yes">Verhuur</string>
|
||||
<string name="poi_motorcycle_sales_yes_used">Verkoop: ja, tweedehands</string>
|
||||
<string name="poi_motorcycle_sales_yes">Verkoop</string>
|
||||
<string name="poi_zoo_falconry">Valkerij</string>
|
||||
<string name="poi_zoo_safari_park">Safaripark</string>
|
||||
<string name="poi_zoo_wildlife_park">Wildpark</string>
|
||||
<string name="poi_life_ring">Reddingsboei</string>
|
||||
<string name="poi_music_school">Muziekschool</string>
|
||||
<string name="poi_electronics_repair_tv">Reparatie van elektronica: tv</string>
|
||||
<string name="poi_electronics_repair_computer">Reparatie van elektronica: computers</string>
|
||||
<string name="poi_coworking_space">Coworking space</string>
|
||||
<string name="poi_tower_construction_dish">Constructie: schotel</string>
|
||||
<string name="poi_cliff">Klif</string>
|
||||
<string name="poi_electrical">Elektronica-winkel</string>
|
||||
<string name="poi_public_bookcase_type_wooden_cabinet">Type: houten kast</string>
|
||||
<string name="poi_xmas_day_date">Kerstmis: periode voor het evenement</string>
|
||||
<string name="poi_diplomatic_delegation">Delegatie</string>
|
||||
<string name="poi_traffic_signals_arrow">Pijl</string>
|
||||
<string name="poi_traffic_signals_vibration">Trillen</string>
|
||||
<string name="poi_socket_cee_blue">Stopcontact: CEE-blauw (campingstekker)</string>
|
||||
<string name="poi_water_place_access_family">Gezin</string>
|
||||
<string name="poi_water_place_access_multifamilies">Meerdere gezinnen</string>
|
||||
<string name="poi_whitewater_rapid_name">Naam van de stroomversnelling</string>
|
||||
<string name="poi_pottery">Pottenbakkerij</string>
|
||||
<string name="poi_flooring">Vloerenwinkel</string>
|
||||
<string name="poi_socket_nema_5_20_yes">NEMA 5-20</string>
|
||||
<string name="poi_socket_nema_5_15_yes">NEMA 5-15R</string>
|
||||
<string name="poi_socket_tesla_roadster_yes">Tesla Roadster</string>
|
||||
<string name="poi_socket_tesla_supercharger_yes">Tesla Supercharger</string>
|
||||
<string name="poi_socket_tesla_standard_yes">Tesla-standaard</string>
|
||||
<string name="poi_socket_chademo_yes">CHAdeMO</string>
|
||||
<string name="poi_socket_type3_yes">Type 3</string>
|
||||
<string name="poi_socket_type2_combo_yes">Type 2 combo</string>
|
||||
<string name="poi_socket_type2_yes">Type 2</string>
|
||||
<string name="poi_socket_type1_combo_yes">Type 1 combo</string>
|
||||
<string name="poi_socket_type1_yes">Type 1</string>
|
||||
<string name="poi_socket_cee_red_125a_yes">CEE-rood 125A</string>
|
||||
<string name="poi_socket_cee_red_64a_yes">CEE-rood 64A</string>
|
||||
<string name="poi_socket_cee_red_32a_yes">CEE-rood 32A</string>
|
||||
<string name="poi_socket_cee_red_16a_yes">CEE-rood 16A</string>
|
||||
<string name="poi_socket_cee_blue_yes">CEE-blauw</string>
|
||||
<string name="poi_cannabis">Coffeeshop</string>
|
||||
<string name="poi_shop_boat">Scheepvaartwinkel</string>
|
||||
<string name="poi_shop_fireplace">Open haarden-winkel</string>
|
||||
<string name="poi_agrarian">Landbouwwinkel</string>
|
||||
<string name="poi_frozen_food">Diepvriesvoedsel</string>
|
||||
<string name="poi_meadow_pasture">Type: weiland</string>
|
||||
<string name="poi_meadow_transitional">Type: wisselbouw</string>
|
||||
<string name="poi_meadow_perpetual">Type: permacultuur</string>
|
||||
<string name="poi_meadow_agricultural">Type: landbouw</string>
|
||||
<string name="poi_diameter_crown">Diameter van de kroon</string>
|
||||
<string name="poi_circumference">Omtrek</string>
|
||||
<string name="poi_climbing_routes">Klimroutes</string>
|
||||
<string name="poi_climbing_summit_log_no">Toplogboek: nee</string>
|
||||
<string name="poi_climbing_summit_log_yes">Toplogboek: ja</string>
|
||||
<string name="poi_climbing_orientation_nw">Oriëntatie van de wand: NW</string>
|
||||
<string name="poi_climbing_orientation_w">Oriëntatie van de wand: W</string>
|
||||
<string name="poi_climbing_orientation_sw">Oriëntatie van de wand: ZW</string>
|
||||
<string name="poi_climbing_orientation_s">Oriëntatie van de wand: Z</string>
|
||||
<string name="poi_climbing_orientation_se">Oriëntatie van de wand: ZO</string>
|
||||
<string name="poi_climbing_orientation_e">Oriëntatie van de wand: O</string>
|
||||
<string name="poi_climbing_orientation_ne">Oriëntatie van de wand: NO</string>
|
||||
<string name="poi_climbing_orientation_n">Oriëntatie van de wand: N</string>
|
||||
<string name="poi_climbing_bolted_no">Vaste ankers: nee</string>
|
||||
<string name="poi_climbing_bolted_yes">Vaste ankers: ja</string>
|
||||
<string name="poi_climbing_quality_fragile">Klimkwaliteit: loszittend</string>
|
||||
<string name="poi_climbing_quality_solid">Klimkwaliteit: vast</string>
|
||||
<string name="poi_climbing_rock_porphyry">Klimrots: porfier</string>
|
||||
<string name="poi_climbing_rock_gneiss">Klimrots: gneiss</string>
|
||||
<string name="poi_climbing_rock_quartzite">Klimrots: kwartsiet</string>
|
||||
<string name="poi_climbing_rock_sandstone">Klimrots: zandsteen</string>
|
||||
<string name="poi_climbing_rock_granite">Klimrots: graniet</string>
|
||||
<string name="poi_climbing_rock_limestone">Klimrots: kalksteen</string>
|
||||
<string name="poi_climbing_length_max">Maximale klimlengte</string>
|
||||
<string name="poi_climbing_length_min">Minimale klimlengte</string>
|
||||
<string name="poi_climbing_length">Klimlengte</string>
|
||||
<string name="poi_climbing_deepwater_no">Deep-water-soloing: nee</string>
|
||||
<string name="poi_climbing_deepwater_yes">Deep-water-soloing: ja</string>
|
||||
<string name="poi_climbing_mixed_no">Gemengd: nee</string>
|
||||
<string name="poi_climbing_mixed_yes">Gemengd: ja</string>
|
||||
<string name="poi_climbing_ice_no">IJs: nee</string>
|
||||
<string name="poi_climbing_ice_yes">IJs: ja</string>
|
||||
<string name="poi_climbing_multipitch_no">Multi-pitch-routes: nee</string>
|
||||
<string name="poi_climbing_multipitch_yes">Multi-pitch-routes: ja</string>
|
||||
<string name="poi_climbing_trad_no">Traditioneel: nee</string>
|
||||
<string name="poi_climbing_trad_yes">Traditioneel: ja</string>
|
||||
<string name="poi_climbing_toprope_yes">Toprope: ja</string>
|
||||
<string name="poi_climbing_toprope_no">Toprope: nee</string>
|
||||
<string name="poi_climbing_boulder_no">Boulderen: nee</string>
|
||||
<string name="poi_climbing_boulder_yes">Boulderen: ja</string>
|
||||
<string name="poi_climbing_sport_no">Sport: nee</string>
|
||||
<string name="poi_climbing_sport_yes">Sport: Ja</string>
|
||||
<string name="poi_ref_post">Postcode</string>
|
||||
<string name="poi_money_transfer">Money transfer</string>
|
||||
<string name="poi_payment_centre">Betalingscentrum</string>
|
||||
<string name="poi_post_flats">Appartement</string>
|
||||
<string name="poi_post_housenumber">Huisnummer</string>
|
||||
<string name="poi_post_street">Straat</string>
|
||||
<string name="poi_letter_box">Privé-brievenbus</string>
|
||||
<string name="poi_depot">Depot</string>
|
||||
<string name="poi_map_size_site">Kaartgrootte: plaats</string>
|
||||
<string name="poi_map_type_toposcope">Kaarttype: toposcoop</string>
|
||||
<string name="poi_map_type_scheme">Kaarttype: schematisch</string>
|
||||
<string name="poi_map_type_street">Kaarttype: straat</string>
|
||||
<string name="poi_map_type_topo">Kaarttype: topo</string>
|
||||
<string name="poi_charging_station_output">Vermogen van het laadstation</string>
|
||||
<string name="poi_amperage">Stroomsterkte</string>
|
||||
<string name="poi_parking_fee">Parkeergeld</string>
|
||||
<string name="poi_parking_fee_no">Parkeergeld: nee</string>
|
||||
<string name="poi_parking_fee_yes">Parkeergeld: ja</string>
|
||||
<string name="poi_scooter_no">Scooter: nee</string>
|
||||
<string name="poi_scooter_yes">Scooter: ja</string>
|
||||
<string name="poi_socket_as3112_output">Stopcontact: AS/NZS 3112: vermogen</string>
|
||||
<string name="poi_socket_as3112_current">Stopcontact: AS/NZS 3112: stroom</string>
|
||||
<string name="poi_socket_as3112">Stopcontact: AS/NZS 3112</string>
|
||||
<string name="poi_socket_bs1363_output">Stopcontact: BS 1363: vermogen</string>
|
||||
<string name="poi_socket_bs1363_current">Stopcontact: BS 1363: stroom</string>
|
||||
<string name="poi_socket_bs1363">Stopcontact: BS 1363</string>
|
||||
<string name="poi_socket_schuko_output">Stopcontact: Schuko: vermogen</string>
|
||||
<string name="poi_socket_schuko_current">Stopcontact: Schuko: stroom</string>
|
||||
<string name="poi_socket_schuko">Stopcontact: Schuko</string>
|
||||
<string name="poi_socket_nema_14_50_output">Stopcontact: NEMA 14-50: vermogen</string>
|
||||
<string name="poi_socket_nema_14_50">Stopcontact: NEMA 14-50</string>
|
||||
<string name="poi_socket_nema_14_50_current">Stopcontact: NEMA 14-50: stroom</string>
|
||||
<string name="poi_socket_nema_14_30_output">Stopcontact: NEMA 14-30: vermogen</string>
|
||||
<string name="poi_socket_nema_14_30_current">Stopcontact: NEMA 14-30: stroom</string>
|
||||
<string name="poi_socket_nema_14_30">Stopcontact: NEMA 14-30</string>
|
||||
<string name="poi_socket_nema_5_20_output">Stopcontact: NEMA 5-20: vermogen</string>
|
||||
<string name="poi_socket_nema_5_20_current">Stopcontact: NEMA 5-20: stroom</string>
|
||||
<string name="poi_socket_nema_5_20">Stopcontact: NEMA 5-20</string>
|
||||
<string name="poi_socket_nema_5_15_output">Stopcontact: NEMA 5-15R: vermogen</string>
|
||||
<string name="poi_socket_nema_5_15_current">Stopcontact: NEMA 5-15R: stroom</string>
|
||||
<string name="poi_socket_nema_5_15">Stopcontact: NEMA 5-15R</string>
|
||||
<string name="poi_socket_tesla_roadster_output">Stopcontact: Tesla Roadster: vermogen</string>
|
||||
<string name="poi_socket_tesla_roadster_current">Stopcontact: Tesla Roadster: stroom</string>
|
||||
<string name="poi_socket_tesla_roadster">Stopcontact: Tesla Roadster</string>
|
||||
<string name="poi_socket_tesla_supercharger_output">Stopcontact: Tesla Supercharger: vermogen</string>
|
||||
<string name="poi_socket_tesla_supercharger_current">Stopcontact: Tesla Supercharger: stroom</string>
|
||||
<string name="poi_socket_tesla_supercharger">Stopcontact: Tesla Supercharger</string>
|
||||
<string name="poi_socket_tesla_standard_output">Stopcontact: Tesla-standaard: vermogen</string>
|
||||
<string name="poi_socket_tesla_standard_current">Stopcontact: Tesla-standaard: stroom</string>
|
||||
<string name="poi_socket_tesla_standard">Stopcontact: Tesla-standaard</string>
|
||||
<string name="poi_socket_chademo_output">Stopcontact: CHAdeMO: vermogen</string>
|
||||
<string name="poi_socket_chademo_current">Stopcontact: CHAdeMO: stroom</string>
|
||||
<string name="poi_socket_chademo">Stopcontact: CHAdeMO</string>
|
||||
<string name="poi_socket_type3_output">Stopcontact: Type 3: vermogen</string>
|
||||
<string name="poi_socket_type3_current">Stopcontact: Type 3: stroom</string>
|
||||
<string name="poi_socket_type3">Stopcontact: Type 3</string>
|
||||
<string name="poi_socket_type1_combo_output">Stopcontact: Type 1 combo: vermogen</string>
|
||||
<string name="poi_socket_type2_combo_output">Stopcontact: Type 2 combo: vermogen</string>
|
||||
<string name="poi_socket_type2_combo_current">Stopcontact: Type 2 combo: stroom</string>
|
||||
<string name="poi_socket_type2_combo">Stopcontact: Type 2 combo</string>
|
||||
<string name="poi_socket_type2_output">Stopcontact: Type 2: vermogen</string>
|
||||
<string name="poi_socket_type2_current">Stopcontact: Type 2: stroom</string>
|
||||
<string name="poi_socket_type2">Stopcontact: Type 2</string>
|
||||
<string name="poi_socket_type1_combo_current">Stopcontact: Type 1 combo: stroom</string>
|
||||
<string name="poi_socket_type1_combo">Stopcontact: Type 1 combo</string>
|
||||
<string name="poi_socket_type1_output">Stopcontact: Type 1: vermogen</string>
|
||||
<string name="poi_socket_type1_current">Stopcontact: Type 1: stroom</string>
|
||||
<string name="poi_socket_type1">Stopcontact: Type 1</string>
|
||||
<string name="poi_socket_cee_red_125a_output">Stopcontact: CEE-rood 125A: vermogen</string>
|
||||
<string name="poi_socket_cee_red_125a_current">Stopcontact: CEE-rood 125A: stroom</string>
|
||||
<string name="poi_socket_cee_red_125a">Stopcontact: CEE-rood 125A</string>
|
||||
<string name="poi_socket_cee_red_64a_output">Stopcontact: CEE-rood 64A: vermogen</string>
|
||||
<string name="poi_socket_cee_red_64a_current">Stopcontact: CEE-rood 64A: stroom</string>
|
||||
<string name="poi_socket_cee_red_64a">Stopcontact: CEE-rood 64A</string>
|
||||
<string name="poi_socket_cee_red_32a_output">Stopcontact: CEE-rood 32A: vermogen</string>
|
||||
<string name="poi_socket_cee_red_32a_current">Stopcontact: CEE-rood 32A: stroom</string>
|
||||
<string name="poi_socket_cee_red_32a">Stopcontact: CEE-rood 32A</string>
|
||||
<string name="poi_socket_cee_red_16a_output">Stopcontact: CEE-rood 16A: vermogen</string>
|
||||
<string name="poi_socket_cee_red_16a_current">Stopcontact: CEE-rood 16A: stroom</string>
|
||||
<string name="poi_socket_cee_red_16a">Stopcontact: CEE-rood 16A</string>
|
||||
<string name="poi_socket_cee_blue_output">Stopcontact: CEE-blauw: vermogen</string>
|
||||
<string name="poi_socket_cee_blue_current">Stopcontact: CEE-blauw: stroom</string>
|
||||
<string name="poi_books_children">Kinder</string>
|
||||
<string name="poi_books_academic">Academische</string>
|
||||
<string name="poi_books_religion">Religieuze</string>
|
||||
<string name="poi_books_antiquarian">Antiquarische</string>
|
||||
<string name="poi_books_comic">Stripverhalen</string>
|
||||
<string name="poi_shop_wholesale">Groothandel</string>
|
||||
<string name="poi_craft_confectionery">Productie van snoepgoed</string>
|
||||
<string name="poi_substation_field_gathering">Veldverzameling</string>
|
||||
<string name="poi_substation_inspection_gauge">Inspectiemeter</string>
|
||||
<string name="poi_substation_valve_group">Ventielgroep</string>
|
||||
<string name="poi_substation_valve">Ventiel</string>
|
||||
<string name="poi_substation_measurement">Meting</string>
|
||||
<string name="poi_substation_compression">Compressie</string>
|
||||
<string name="poi_substation_compensation">Compensatie</string>
|
||||
<string name="poi_substation_converter">Omvormer</string>
|
||||
<string name="poi_substation_traction">Spoorwegen</string>
|
||||
<string name="poi_substation_transition">Overgang</string>
|
||||
<string name="poi_substation_industrial">Industrieel</string>
|
||||
<string name="poi_substation_minor_distribution">Trafohuisje</string>
|
||||
<string name="poi_substation_distribution">Distributie</string>
|
||||
<string name="poi_substation_transmission">Transmissie</string>
|
||||
<string name="poi_bulk_purchase_only">Alleen maar</string>
|
||||
<string name="poi_shoe_repair">Schoenmaker</string>
|
||||
<string name="poi_license_classes">Rijbewijzen</string>
|
||||
<string name="poi_outcrop">Rotsformatie</string>
|
||||
<string name="poi_appliance">Winkel voor huishoudapparatuur</string>
|
||||
<string name="poi_water_utility">Waterleidingbedrijf</string>
|
||||
<string name="poi_checkpoint_type_notebook">Notitieboek</string>
|
||||
<string name="poi_checkpoint_type_code">Code</string>
|
||||
<string name="poi_checkpoint_type_stamp">Stempelpunt</string>
|
||||
<string name="poi_checkpoint_hiking">Wandelcontrolepost</string>
|
||||
<string name="poi_glacier_slope">Gemiddelde helling</string>
|
||||
<string name="poi_glacier_ele_bottom">Laagste punt</string>
|
||||
<string name="poi_glacier_ele_top">Hoogste punt</string>
|
||||
<string name="poi_glacier_type_ice_tongue">IJstong</string>
|
||||
<string name="poi_glacier_type_remnant">Restant</string>
|
||||
<string name="poi_glacier_type_shelf">Schelf</string>
|
||||
<string name="poi_glacier_type_rock">Rots</string>
|
||||
<string name="poi_glacier_type_icefall">Kalvend</string>
|
||||
<string name="poi_glacier_type_hanging">Hangend</string>
|
||||
<string name="poi_glacier_type_mountain">Berg</string>
|
||||
<string name="poi_glacier_type_valley">Vallei</string>
|
||||
<string name="poi_glacier_type_tidewater">Getijdewater</string>
|
||||
<string name="poi_glacier_type_outlet">Monding</string>
|
||||
<string name="poi_glacier_type_plateau">Plateau</string>
|
||||
<string name="poi_glacier_type_icefield">IJsveld</string>
|
||||
<string name="poi_glacier_type_icecap">IJskap</string>
|
||||
<string name="poi_cable_number">Aantal kabels</string>
|
||||
<string name="poi_via_ferrata">Via ferrata</string>
|
||||
<string name="poi_aerialway_zip_line">Tokkelbaan</string>
|
||||
<string name="poi_service_vehicle_car_repair_yes">Autoreparatie</string>
|
||||
<string name="poi_adult_gaming_centre">Gamingcentrum voor volwassenen</string>
|
||||
<string name="poi_amusement_arcade">Speelhal</string>
|
||||
<string name="poi_barbecue_grill">Barbecue: ja</string>
|
||||
<string name="poi_outpost">Pick-up punt</string>
|
||||
</resources>
|
|
@ -3829,4 +3829,5 @@
|
|||
<string name="poi_traffic_signals_vibration_no">Vibração: Não</string>
|
||||
<string name="poi_traffic_signals_arrow">Seta</string>
|
||||
<string name="poi_traffic_signals_vibration">Vibração</string>
|
||||
<string name="poi_give_box">Caixa de distribuição</string>
|
||||
</resources>
|
|
@ -3793,4 +3793,7 @@ Pôr do Sol: %2$s</string>
|
|||
<string name="routing_attr_length_description">Especifique o comprimento do veículo a ser permitido nas rotas.</string>
|
||||
<string name="routing_attr_length_name">Limite de comprimento</string>
|
||||
<string name="speed_cameras_removed_descr">Este dispositivo não possui câmeras de velocidade.</string>
|
||||
<string name="app_mode_inline_skates">Patins em linha</string>
|
||||
<string name="use_volume_buttons_as_zoom_descr">Ativar para controlar o nível de zoom do mapa com os botões de volume do dispositivo.</string>
|
||||
<string name="use_volume_buttons_as_zoom">Botões de volume como zoom</string>
|
||||
</resources>
|
|
@ -3790,9 +3790,9 @@
|
|||
\n
|
||||
\nВам нужно сделать выбор в зависимости от законодательства вашей страны.
|
||||
\n
|
||||
\nВыберите \"%1$s\", чтобы получать предупреждения о камерах контроля скорости.
|
||||
\nВыберите «%1$s», чтобы получать предупреждения о камерах контроля скорости.
|
||||
\n
|
||||
\nВыберите \"%2$s\", чтобы удалить все данные, связанные с камерами контроля скорости (уведомления, предупреждения и POI), до полной переустановки OsmAnd.</string>
|
||||
\nВыберите «%2$s», чтобы удалить все данные, связанные с камерами контроля скорости (уведомления, предупреждения и POI), до полной переустановки OsmAnd.</string>
|
||||
<string name="keep_active">Оставить включёнными</string>
|
||||
<string name="uninstall_speed_cameras">Удалить камеры контроля скорости</string>
|
||||
<string name="speed_camera_pois">POI камер контроля скорости</string>
|
||||
|
@ -3806,4 +3806,6 @@
|
|||
<string name="routing_attr_length_name">Предельная длина</string>
|
||||
<string name="speed_cameras_removed_descr">В этом устройстве нет камер контроля скорости.</string>
|
||||
<string name="app_mode_inline_skates">Роликовые коньки</string>
|
||||
<string name="use_volume_buttons_as_zoom_descr">Управление уровнем масштабирования карты с помощью кнопок регулировки громкости устройства.</string>
|
||||
<string name="use_volume_buttons_as_zoom">Масштабирование кнопками громкости</string>
|
||||
</resources>
|
|
@ -3825,4 +3825,5 @@
|
|||
<string name="poi_traffic_signals_vibration_no">Vibratzione: nono</string>
|
||||
<string name="poi_traffic_signals_arrow">Fritza</string>
|
||||
<string name="poi_traffic_signals_vibration">Vibratzione</string>
|
||||
<string name="poi_give_box">Iscàtula pro donos (give box)</string>
|
||||
</resources>
|
|
@ -3271,7 +3271,7 @@
|
|||
<string name="copy_from_other_profile">Còpia dae un\'àteru profilu</string>
|
||||
<string name="map_during_navigation_info">Mapa durante sa navigatzione</string>
|
||||
<string name="map_during_navigation">Mapa durante sa navigatzione</string>
|
||||
<string name="vehicle_parameters_descr">Pesu, artària, lestresa</string>
|
||||
<string name="vehicle_parameters_descr">Pesu, artària, longària, lestresa</string>
|
||||
<string name="vehicle_parameters">Paràmetros de su veìculu</string>
|
||||
<string name="voice_announces_info">Sos annùntzios vocales benint riproduidos petzi durante sa navigatzione.</string>
|
||||
<string name="voice_announces_descr">Istrutziones e annùntzios de navigatzione</string>
|
||||
|
@ -3805,4 +3805,10 @@
|
|||
<string name="item_deleted">%1$s iscantzelladu</string>
|
||||
<string name="speed_cameras_restart_descr">Depes torrare a allùghere pro iscantzellare de su totu sos datos de sos autovelox.</string>
|
||||
<string name="shared_string_uninstall_and_restart">Disinstalla e torra a allùghere</string>
|
||||
<string name="routing_attr_length_description">Dillinda sa longària de su veìculu pro tènnere su permissu pro sas àndalas.</string>
|
||||
<string name="routing_attr_length_name">Lìmite de longària</string>
|
||||
<string name="speed_cameras_removed_descr">Custu dispositivu non tenet autovelox.</string>
|
||||
<string name="app_mode_inline_skates">Pàtinos in lìnia</string>
|
||||
<string name="use_volume_buttons_as_zoom_descr">Abìlita pro controllare su livellu de ismanniamentu cun sos butones de su volume de su dispositivu.</string>
|
||||
<string name="use_volume_buttons_as_zoom">Butones de su volume pro s\'ismanniamentu</string>
|
||||
</resources>
|
|
@ -3805,4 +3805,6 @@
|
|||
<string name="routing_attr_length_name">Limit dĺžky</string>
|
||||
<string name="speed_cameras_removed_descr">Toto zariadenie neobsahuje rýchlostné radary.</string>
|
||||
<string name="app_mode_inline_skates">Kolieskové korčule</string>
|
||||
<string name="use_volume_buttons_as_zoom_descr">Umožní ovládať priblíženie mapy tlačidlami hlasitosti zariadenia.</string>
|
||||
<string name="use_volume_buttons_as_zoom">Tlačidlá hlasitosti na približovanie</string>
|
||||
</resources>
|
|
@ -1538,7 +1538,7 @@
|
|||
<string name="poi_research">Истраживачка канцеларија</string>
|
||||
<string name="poi_newspaper">Новинарска канцеларија</string>
|
||||
<string name="poi_architect">Канцеларија архитекта</string>
|
||||
<string name="poi_bookmaker">Штампарија</string>
|
||||
<string name="poi_bookmaker">Кладионица</string>
|
||||
<string name="poi_office_religion">Канцеларија за религије</string>
|
||||
<string name="poi_association">Канцеларија удружења</string>
|
||||
<string name="poi_financial">Финансијска канцеларија</string>
|
||||
|
@ -2765,4 +2765,11 @@
|
|||
<string name="poi_ref">Реф.</string>
|
||||
<string name="poi_tunnel_ref">Реф. тунела</string>
|
||||
<string name="poi_bridge_ref">Реф. моста</string>
|
||||
<string name="poi_books_academic">Академске</string>
|
||||
<string name="poi_books_children">Дечије</string>
|
||||
<string name="poi_books_religion">Религијске</string>
|
||||
<string name="poi_books_antiquarian">Антикварница</string>
|
||||
<string name="poi_books_comic">Стрип</string>
|
||||
<string name="poi_checkpoint_type_notebook">Свеска</string>
|
||||
<string name="poi_public_bookcase_type_shelf">Тип: полица</string>
|
||||
</resources>
|
|
@ -1382,7 +1382,7 @@
|
|||
<string name="shared_string_actions">Радње</string>
|
||||
<string name="shared_string_marker">Ознака</string>
|
||||
<string name="empty_state_osm_edits">Стварајте или мењајте предмете ОСМ-а</string>
|
||||
<string name="empty_state_osm_edits_descr">Стварајте или мењајте ОСМ тачке од интереса, отворите или коментаришите на ОСМ белешке и доприносите снимањем GPX фајлова.</string>
|
||||
<string name="empty_state_osm_edits_descr">Стварајте или мењајте ОСМ тачке од интереса, отворите или коментаришите ОСМ белешке и доприносите снимањем GPX фајлова.</string>
|
||||
<string name="shared_string_deleted">Избрисано</string>
|
||||
<string name="shared_string_edited">Уређено</string>
|
||||
<string name="shared_string_added">Додато</string>
|
||||
|
@ -3266,7 +3266,7 @@
|
|||
<string name="map_during_navigation_info">Карта за време навођења</string>
|
||||
<string name="map_during_navigation">Карта за време навођења</string>
|
||||
<string name="shared_string_other">Остало</string>
|
||||
<string name="vehicle_parameters_descr">Тежина, висина, брзина</string>
|
||||
<string name="vehicle_parameters_descr">Тежина, висина, дужина, брзина</string>
|
||||
<string name="vehicle_parameters">Параметри возика</string>
|
||||
<string name="voice_announces_info">Гласовна обавештења су дешавају само за време навођења.</string>
|
||||
<string name="voice_announces_descr">Инструкције и обавештења приликом навођења</string>
|
||||
|
@ -3452,7 +3452,7 @@
|
|||
<string name="logcat_buffer_descr">Проверите и поделите детаљне записе апликације</string>
|
||||
<string name="search_offline_geo_error">Не могу да расчланим гео намеру ’%s’.</string>
|
||||
<string name="permission_is_required">Потребне су дозволе за коришћење ове опције.</string>
|
||||
<string name="monitoring_min_speed_descr">Ово је филтер за одсецање малих брзина који не бележи тачке испод одређене брзине. Овим снимљене стазе изгледају.</string>
|
||||
<string name="monitoring_min_speed_descr">Ово је филтер за одсецање малих брзина који не бележи тачке испод одређене брзине. Овим снимљене стазе изгледају глаткије када се гледају на карти.</string>
|
||||
<string name="monitoring_min_speed_descr_side_effect">Нуспојаве: Вашим стазама ће недостајати све секције где критеријум минимума брзине није био испуњен (нпр. где сте гурали бицикл узбрдо). Такође, неће бити информација о периодима мировања, као што су прављење пауза. Ово може да има ефекта на анализу или пост-процесирање, као што је одређивање укупне дужине пута, времена кретања, или просечне брзине.</string>
|
||||
<string name="monitoring_min_speed_descr_recommendation">Препорука: Покушајте прво да користите детектор кретања преко филтера минималног помераја (B) прво, пошто може дати боље резултате и изгубићете мање података. Ако Ваше стазе остану пуне шума при малим брзинама, пробајте са не-нултим вредностима овде. Пазите да неки типови мерења неће уопште давати мерења брзине (неки методи преко мреже) у ком случају нећете снимити ништа.</string>
|
||||
<string name="monitoring_min_speed_descr_remark">Опаска: провера брзине > 0: већина GPS чипова пријављује вредност брзине само ако алгоритам примети да сте у покрету и ништа уколико нисте. Коришћење поставке >0 у овом филтеру је заправо коришћење сензора покрета из GPS чипа. Чак иако се не филтрира овде за време снимања, ми и даље користимо ову функционалност у нашој GPX анализи да одредимо пређену удаљеност, тј. вредност коју приказујемо у том пољу је пређена удаљеност за време кретања.</string>
|
||||
|
@ -3482,8 +3482,8 @@
|
|||
<string name="shared_string_available">Доступно</string>
|
||||
<string name="add_custom_category">Додај произвољну категорију</string>
|
||||
<string name="rendering_attr_streetLightingNight_name">Прикажи само ноћу</string>
|
||||
<string name="plugin_prefs_reset_successful">Све поставке додатка враћене на подразумевано стање.</string>
|
||||
<string name="profile_prefs_reset_successful">Све поставке профила враћене на подразумевано стање.</string>
|
||||
<string name="plugin_prefs_reset_successful">Све поставке додатка враћене на подразумевано.</string>
|
||||
<string name="profile_prefs_reset_successful">Све поставке профила враћене на подразумевано.</string>
|
||||
<string name="ltr_or_rtl_combine_via_slash">%1$s/%2$s</string>
|
||||
<string name="sunset_at">Сунце залази у %1$s</string>
|
||||
<string name="sunrise_at">Сунце излази у %1$s</string>
|
||||
|
@ -3502,7 +3502,7 @@
|
|||
<string name="shared_string_menu">Мени</string>
|
||||
<string name="ltr_or_rtl_triple_combine_via_dash">%1$s — %2$s — %3$s</string>
|
||||
<string name="shared_string_include_data">Укључи додатне податке</string>
|
||||
<string name="import_profile_dialog_description">Увезени профил садржи додатне податке. Кликните на Увоз да увезете да увезете само профилне податке или одаберите које додатне податке увести.</string>
|
||||
<string name="import_profile_dialog_description">Увезени профил садржи додатне податке. Кликните на Увоз да увезете само профилне податке или одаберите додатне податке.</string>
|
||||
<string name="export_profile_dialog_description">Поред профила, можете одабрати додатне податке за извоз.</string>
|
||||
<string name="index_name_antarctica">Антарктик</string>
|
||||
<string name="create_custom_categories_list_promo">Можете додати произвољне категорије, сакрити категорије које су Вам сувишне и променити им редослед у списку. Списак се може увести и извести са профилима.</string>
|
||||
|
@ -3536,7 +3536,7 @@
|
|||
\nДодатак ће остати на уређају и после уклањања OsmAnd апликације.</string>
|
||||
<string name="shared_string_routing">Рутирање</string>
|
||||
<string name="shared_string_app_default_w_val">Подразумевано у апликацију (%s)</string>
|
||||
<string name="no_recalculation_setting">Искључи прерачунавање</string>
|
||||
<string name="no_recalculation_setting">Без прерачунавања</string>
|
||||
<string name="route_recalculation_dist_title">Минимална удаљеност за прерачунавање пута</string>
|
||||
<string name="route_recalculation_dist_descr">Пут ће бити прерачунат ако је удаљеност до пута већа од одабраног параметра</string>
|
||||
<string name="profile_type_custom_string">Произвољни профил</string>
|
||||
|
@ -3565,7 +3565,7 @@
|
|||
<string name="restore_all_profile_settings">Поврати све поставке профила\?</string>
|
||||
<string name="saving_new_profile">Чувам нови профил</string>
|
||||
<string name="profile_backup_failed">Не могу да направим резервну копију профила.</string>
|
||||
<string name="quick_action_show_hide_terrain">Прикажи/сакриј терен</string>
|
||||
<string name="quick_action_show_hide_terrain">Прикажи / сакриј терен</string>
|
||||
<string name="quick_action_terrain_hide">Сакриј терен</string>
|
||||
<string name="quick_action_terrain_show">Прикажи терен</string>
|
||||
<string name="quick_action_terrain_descr">Дугме да прикаже или сакрите слој терена на карти.</string>
|
||||
|
@ -3577,11 +3577,11 @@
|
|||
<string name="shared_string_octagon">Октагон</string>
|
||||
<string name="shared_string_square">Квадрат</string>
|
||||
<string name="shared_string_min">Мин</string>
|
||||
<string name="replace_point_descr">Замени другу тачку са овом</string>
|
||||
<string name="replace_point_descr">Замени другу тачку са овом.</string>
|
||||
<string name="app_mode_ski_snowmobile">Сноумобил</string>
|
||||
<string name="custom_osmand_plugin">Произвољни OsmAnd додатак</string>
|
||||
<string name="settings_item_read_error">Не могу да читам %1$s.</string>
|
||||
<string name="settings_item_import_error">Не могу да увезем %1$s.</string>
|
||||
<string name="settings_item_read_error">Не могу да читам из „%1$s”.</string>
|
||||
<string name="settings_item_import_error">Не могу да увезем из „%1$s”.</string>
|
||||
<string name="settings_item_write_error">Не могу да пишем %1$s.</string>
|
||||
<string name="shared_string_languages">Језици</string>
|
||||
<string name="shared_string_language">Језик</string>
|
||||
|
@ -3660,4 +3660,96 @@
|
|||
<string name="vessel_height_warning">Можете подесити висину пловила да избегнете ниске мостове. Имајте на уму да, уколико мост може да се помера, користићемо његову висину када је отворен.</string>
|
||||
<string name="vessel_height_limit_description">Подесите висину пловила да избегнете ниске мостове. Имајте на уму да, уколико мост може да се помера, користићемо његову висину када је отворен.</string>
|
||||
<string name="vessel_width_limit_description">Подесите ширину пловила и избегните уске мостове</string>
|
||||
<string name="use_volume_buttons_as_zoom_descr">Укључите да омогућите контролу нивоа увећања са дугмићима за јачину звука.</string>
|
||||
<string name="use_volume_buttons_as_zoom">Дугмићи за јачину звука за зумирање</string>
|
||||
<string name="shared_string_uninstall_and_restart">"Деинсталирај и поново покрени"</string>
|
||||
<string name="speed_cameras_removed_descr">Овај уређај нема радаре.</string>
|
||||
<string name="app_mode_inline_skates">Ролери</string>
|
||||
<string name="speed_cameras_restart_descr">Поновно покретање је потребно да се потпуно избришу подаци о радарима.</string>
|
||||
<string name="item_deleted">%1$s обрисано</string>
|
||||
<string name="routing_attr_length_name">Лимит дужине</string>
|
||||
<string name="shared_string_bearing">Курс</string>
|
||||
<string name="quick_action_showhide_mapillary_descr">Прикажи или сакриј Mapillary слој на карти.</string>
|
||||
<string name="routing_attr_length_description">Одаберите дужину возика која је дозвољена на путевима.</string>
|
||||
<string name="speed_cameras_legal_descr">У неким државама или областима, коришћење апликација за обавештавање о радарима на путу је забрањено законом.
|
||||
\n
|
||||
\nМорате направити избор овде, у зависности од закона Ваше државе.
|
||||
\n
|
||||
\nОдаберите %1$s и примажете обавештења и упозорења о радарима и камерама за брзину.
|
||||
\n
|
||||
\nОдаберите %2$s. Сви подаци везани за радере: упозорења, обавештења, тачке од интереса ће бити обрисане док се OsmAnd поново не инсталира.</string>
|
||||
<string name="shared_string_legal">Правно</string>
|
||||
<string name="screen_timeout_descr">Ако је „%1$s” укључен, време активности ће зависити од тога.</string>
|
||||
<string name="uninstall_speed_cameras">Избриши радаре</string>
|
||||
<string name="speed_camera_pois">Радарске тачке од интереса</string>
|
||||
<string name="keep_active">Држи активним</string>
|
||||
<string name="shared_string_uninstall">Избриши</string>
|
||||
<string name="speed_cameras_alert">Упозорења за радаре су законом забрањене у неким државама.</string>
|
||||
<string name="quick_action_showhide_mapillary_title">Прикажи/сакриј Mapillary</string>
|
||||
<string name="quick_action_mapillary_hide">Сакриј Mapillary</string>
|
||||
<string name="quick_action_mapillary_show">Прикажи Mapillary</string>
|
||||
<string name="lang_yo">Јоруба</string>
|
||||
<string name="lang_war">Варајски</string>
|
||||
<string name="lang_tg">Таџички</string>
|
||||
<string name="lang_uz">Узбечки</string>
|
||||
<string name="lang_ur">Урду</string>
|
||||
<string name="lang_tt">Татарски</string>
|
||||
<string name="lang_sco">Шкотски</string>
|
||||
<string name="lang_nap">Наполитански</string>
|
||||
<string name="lang_scn">Сицилијански</string>
|
||||
<string name="lang_pnb">Панџаби</string>
|
||||
<string name="lang_ne">Непалски</string>
|
||||
<string name="lang_my">Бурмански</string>
|
||||
<string name="lang_mn">Монголски</string>
|
||||
<string name="lang_min">Минангкабајски</string>
|
||||
<string name="lang_mg">Малгашки</string>
|
||||
<string name="lang_ky">Киргиски</string>
|
||||
<string name="lang_kk">Казашки</string>
|
||||
<string name="lang_jv">Јавански</string>
|
||||
<string name="lang_gu">Гуџарати</string>
|
||||
<string name="lang_cv">Чувашки</string>
|
||||
<string name="lang_ce">Чеченски</string>
|
||||
<string name="lang_bar">Баварски</string>
|
||||
<string name="lang_ba">Башкирски</string>
|
||||
<string name="lang_an">Арагонски</string>
|
||||
<string name="lang_lmo">Ломбардијски</string>
|
||||
<string name="custom_color">Произвољна боја</string>
|
||||
<string name="ltr_or_rtl_combine_via_slash_with_space">%1$s / %2$s</string>
|
||||
<string name="search_poi_types">Претрага типова тачака од интереса</string>
|
||||
<string name="search_poi_types_descr">Комбинујте типове тачака од интереса из различитих категорија. Кликните прекидач да одабере све, кликните на леву страну да одаберете категорију.</string>
|
||||
<string name="map_markers_item">Маркери на карти</string>
|
||||
<string name="shared_string_terrain">Терен</string>
|
||||
<string name="shared_string_transparency">Провидност</string>
|
||||
<string name="shared_string_zoom_levels">Нивои увећања</string>
|
||||
<string name="shared_string_legend">Легенда</string>
|
||||
<string name="shared_string_import_complete">Увоз завршен</string>
|
||||
<string name="items_added">Додате ставке</string>
|
||||
<string name="shared_string_importing">Увозим</string>
|
||||
<string name="importing_from">Увозим податке из %1$s</string>
|
||||
<string name="clear_recorded_data_warning">Да ли сте сигурни да желите да очистите снимљене податке\?</string>
|
||||
<string name="recalculate_route_in_deviation">Прерачунај пут у случају одступања</string>
|
||||
<string name="select_distance_route_will_recalc">Одаберите удаљеност после које се пут прерачунава.</string>
|
||||
<string name="recalculate_route_distance_promo">Пут ће бити прерачунат уколико је удаљеност тренутне позиције од пута већа од одабране вредности.</string>
|
||||
<string name="n_items_of_z">%1$s од %2$s</string>
|
||||
<string name="ui_customization">Прилагођавање корисничког интерфејса</string>
|
||||
<string name="shared_string_drawer">Фиока</string>
|
||||
<string name="reorder_or_hide_from">Преуреди или сакриј ставке са %1$s.</string>
|
||||
<string name="shared_string_divider">Разделник</string>
|
||||
<string name="divider_descr">Елементи испод ове тачке су одвојени разделником.</string>
|
||||
<string name="shared_string_hidden">Сакривена</string>
|
||||
<string name="hidden_items_descr">Иако су ове ставке сакривене са главног менија, опције или додаци које они представљају и даље раде.</string>
|
||||
<string name="reset_items_descr">Сакривање поставки их ресетује на оригинално стање.</string>
|
||||
<string name="main_actions_descr">Има само четири дугмета.</string>
|
||||
<string name="main_actions">Главне радње</string>
|
||||
<string name="additional_actions_descr">Можете приступити овим радњама кликтањем на дугме „%1$s”.</string>
|
||||
<string name="move_inside_category">Можете померати ставке само унутар ове категорије.</string>
|
||||
<string name="developer_plugin">Додатак за програмере</string>
|
||||
<string name="app_mode_ski_touring">Ски туринг</string>
|
||||
<string name="shared_string_items">Ставке</string>
|
||||
<string name="changes_applied_to_profile">Измене примењене на ’%1$s’ профил.</string>
|
||||
<string name="wiki_menu_download_descr">За приказ Википедијиних тачака од интереса су потребне додатне карте.</string>
|
||||
<string name="select_wikipedia_article_langs">Одаберите језик за Википедијине чланке на карти. Пребаците на било који други доступни језик док читате чланак.</string>
|
||||
<string name="some_articles_may_not_available_in_lang">Неки чланци са Википедија су можда доступни на Вашем језику.</string>
|
||||
<string name="lang_zhyue">Кантонски</string>
|
||||
<string name="lang_zhminnan">Јужномински</string>
|
||||
</resources>
|
|
@ -1533,7 +1533,7 @@
|
|||
<string name="specified_directiory_not_writeable">Не вдалося створити мапи у вказаній теці</string>
|
||||
<string name="copying_osmand_file_failed">Не вдалося перемістити файли</string>
|
||||
<string name="storage_directory_external">Зовнішнє сховище</string>
|
||||
<string name="storage_directory_multiuser">Толочне сховище</string>
|
||||
<string name="storage_directory_multiuser">Багатокористувацьке сховище</string>
|
||||
<string name="storage_directory_internal_app">Внутрішня пам’ять застосунку</string>
|
||||
<string name="storage_directory_manual">Вказано вручну</string>
|
||||
<string name="storage_directory_default">Внутрішня пам’ять</string>
|
||||
|
@ -3802,4 +3802,6 @@
|
|||
<string name="routing_attr_length_name">Обмеження довжини</string>
|
||||
<string name="speed_cameras_removed_descr">На цьому пристрої немає камер контролю швидкості.</string>
|
||||
<string name="app_mode_inline_skates">Роликові ковзани</string>
|
||||
<string name="use_volume_buttons_as_zoom_descr">Увімкнути для зміни масштабу мапи кнопками гучності пристрою.</string>
|
||||
<string name="use_volume_buttons_as_zoom">Масштабування кнопками гучності</string>
|
||||
</resources>
|
|
@ -3828,4 +3828,7 @@
|
|||
<string name="poi_traffic_signals_vibration_no">震動:無</string>
|
||||
<string name="poi_traffic_signals_arrow">箭頭</string>
|
||||
<string name="poi_traffic_signals_vibration">震動</string>
|
||||
<string name="poi_give_box">禮物箱</string>
|
||||
<string name="poi_city_block">街區</string>
|
||||
<string name="poi_borough">自治市鎮</string>
|
||||
</resources>
|
|
@ -3802,4 +3802,6 @@
|
|||
<string name="routing_attr_length_name">長度限制</string>
|
||||
<string name="speed_cameras_removed_descr">此裝置沒有測速照相機。</string>
|
||||
<string name="app_mode_inline_skates">直排輪鞋</string>
|
||||
<string name="use_volume_buttons_as_zoom_descr">啟用裝置音量按鈕控制地圖縮放等級。</string>
|
||||
<string name="use_volume_buttons_as_zoom">音量按鈕以縮放</string>
|
||||
</resources>
|
|
@ -4237,4 +4237,8 @@
|
|||
|
||||
<string name="poi_give_box">Give box</string>
|
||||
|
||||
<string name="poi_borough">Borough</string>
|
||||
<string name="poi_city_block">City block</string>
|
||||
|
||||
|
||||
</resources>
|
|
@ -84,6 +84,7 @@
|
|||
<dimen name="favorites_select_group_button_width">142dp</dimen>
|
||||
<dimen name="favorites_icon_top_margin">13dp</dimen>
|
||||
<dimen name="favorites_select_icon_button_right_padding">9dp</dimen>
|
||||
<dimen name="point_background_comment_offset_y">14dp</dimen>
|
||||
|
||||
<dimen name="local_index_check_right_margin">10dp</dimen>
|
||||
<dimen name="dialog_elements_vertical_margin">16dp</dimen>
|
||||
|
|
|
@ -11,6 +11,8 @@
|
|||
Thx - Hardy
|
||||
|
||||
-->
|
||||
<string name="use_volume_buttons_as_zoom">Volume buttons as zoom</string>
|
||||
<string name="use_volume_buttons_as_zoom_descr">Enable to control the map zoom level with device volume buttons.</string>
|
||||
<string name="quick_action_remove_next_destination">Delete next destination point</string>
|
||||
<string name="app_mode_inline_skates">Inline skates</string>
|
||||
<string name="speed_cameras_removed_descr">This device doesn\'t have speed cameras.</string>
|
||||
|
|
|
@ -82,6 +82,14 @@
|
|||
android:layout="@layout/preference_category_with_descr"
|
||||
android:title="@string/shared_string_other" />
|
||||
|
||||
<net.osmand.plus.settings.preferences.SwitchPreferenceEx
|
||||
android:key="use_volume_buttons_as_zoom"
|
||||
android:layout="@layout/preference_with_descr_dialog_and_switch"
|
||||
android:summaryOff="@string/shared_string_disabled"
|
||||
android:summaryOn="@string/shared_string_enabled"
|
||||
android:title="@string/use_volume_buttons_as_zoom"
|
||||
tools:icon="@drawable/ic_action_zoom_volume_buttons" />
|
||||
|
||||
<net.osmand.plus.settings.preferences.SwitchPreferenceEx
|
||||
android:key="use_kalman_filter_compass"
|
||||
android:layout="@layout/preference_with_descr_dialog_and_switch"
|
||||
|
|
|
@ -1,6 +1,9 @@
|
|||
package net.osmand.data;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.res.Resources;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.BitmapFactory;
|
||||
|
||||
import androidx.annotation.DrawableRes;
|
||||
import androidx.annotation.NonNull;
|
||||
|
@ -311,7 +314,7 @@ public class FavouritePoint implements Serializable, LocationPoint {
|
|||
CIRCLE("circle", R.string.shared_string_circle, R.drawable.bg_point_circle),
|
||||
OCTAGON("octagon", R.string.shared_string_octagon, R.drawable.bg_point_octagon),
|
||||
SQUARE("square", R.string.shared_string_square, R.drawable.bg_point_square),
|
||||
COMMENT("comment", -1, R.drawable.bg_point_comment);
|
||||
COMMENT("comment", R.string.poi_dialog_comment, R.drawable.bg_point_comment);
|
||||
private String typeName;
|
||||
@StringRes
|
||||
private int nameId;
|
||||
|
@ -344,6 +347,27 @@ public class FavouritePoint implements Serializable, LocationPoint {
|
|||
}
|
||||
return defaultValue;
|
||||
}
|
||||
|
||||
public boolean isSelected() {
|
||||
return this != COMMENT;
|
||||
}
|
||||
|
||||
public int getOffsetY(Context ctx, float textScale) {
|
||||
return this == COMMENT ? Math.round(ctx.getResources()
|
||||
.getDimensionPixelSize(R.dimen.point_background_comment_offset_y) * textScale) : 0;
|
||||
}
|
||||
|
||||
public Bitmap getTouchBackground(Context ctx, boolean isSmall) {
|
||||
return getMapBackgroundIconId(ctx, "center", isSmall);
|
||||
}
|
||||
|
||||
public Bitmap getMapBackgroundIconId(Context ctx, String layer, boolean isSmall) {
|
||||
Resources res = ctx.getResources();
|
||||
String iconName = res.getResourceEntryName(getIconId());
|
||||
String suffix = isSmall ? "_small" : "";
|
||||
return BitmapFactory.decodeResource(res, res.getIdentifier("ic_" + iconName + "_" + layer + suffix,
|
||||
"drawable", ctx.getPackageName()));
|
||||
}
|
||||
}
|
||||
|
||||
public static FavouritePoint fromWpt(@NonNull WptPt pt, @NonNull Context ctx) {
|
||||
|
|
|
@ -17,8 +17,6 @@ import android.os.AsyncTask;
|
|||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.os.Environment;
|
||||
import android.os.Handler;
|
||||
import android.os.Message;
|
||||
import android.util.DisplayMetrics;
|
||||
import android.view.Gravity;
|
||||
import android.view.KeyEvent;
|
||||
|
@ -173,9 +171,6 @@ import java.util.concurrent.ExecutorService;
|
|||
import java.util.concurrent.Executors;
|
||||
|
||||
import static net.osmand.aidlapi.OsmAndCustomizationConstants.DRAWER_SETTINGS_ID;
|
||||
import static net.osmand.plus.settings.backend.OsmandSettings.GENERIC_EXTERNAL_DEVICE;
|
||||
import static net.osmand.plus.settings.backend.OsmandSettings.PARROT_EXTERNAL_DEVICE;
|
||||
import static net.osmand.plus.settings.backend.OsmandSettings.WUNDERLINQ_EXTERNAL_DEVICE;
|
||||
|
||||
public class MapActivity extends OsmandActionBarActivity implements DownloadEvents,
|
||||
OnRequestPermissionsResultCallback, IRouteInformationListener, AMapPointUpdateListener,
|
||||
|
@ -187,8 +182,6 @@ public class MapActivity extends OsmandActionBarActivity implements DownloadEven
|
|||
public static final String INTENT_PARAMS = "intent_prarams";
|
||||
|
||||
private static final int SHOW_POSITION_MSG_ID = OsmAndConstants.UI_HANDLER_MAP_VIEW + 1;
|
||||
private static final int LONG_KEYPRESS_MSG_ID = OsmAndConstants.UI_HANDLER_MAP_VIEW + 2;
|
||||
private static final int LONG_KEYPRESS_DELAY = 500;
|
||||
private static final int ZOOM_LABEL_DISPLAY = 16;
|
||||
private static final int MIN_ZOOM_LABEL_DISPLAY = 12;
|
||||
private static final int SECOND_SPLASH_TIME_OUT = 8000;
|
||||
|
@ -217,8 +210,6 @@ public class MapActivity extends OsmandActionBarActivity implements DownloadEven
|
|||
private MapActivityActions mapActions;
|
||||
private MapActivityLayers mapLayers;
|
||||
|
||||
// handler to show/hide trackball position and to link map with delay
|
||||
private Handler uiHandler = new Handler();
|
||||
// App variables
|
||||
private OsmandApplication app;
|
||||
private OsmandSettings settings;
|
||||
|
@ -265,6 +256,7 @@ public class MapActivity extends OsmandActionBarActivity implements DownloadEven
|
|||
changeKeyguardFlags();
|
||||
}
|
||||
};
|
||||
private MapActivityKeyListener mapActivityKeyListener;
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
|
@ -387,7 +379,7 @@ public class MapActivity extends OsmandActionBarActivity implements DownloadEven
|
|||
app.getAidlApi().onCreateMapActivity(this);
|
||||
|
||||
lockHelper.setLockUIAdapter(this);
|
||||
|
||||
mapActivityKeyListener = new MapActivityKeyListener(this);
|
||||
mIsDestroyed = false;
|
||||
}
|
||||
|
||||
|
@ -1532,78 +1524,26 @@ public class MapActivity extends OsmandActionBarActivity implements DownloadEven
|
|||
|
||||
}
|
||||
|
||||
public ScrollHelper getMapScrollHelper() {
|
||||
return mapScrollHelper;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onKeyDown(int keyCode, KeyEvent event) {
|
||||
if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER && app.accessibilityEnabled()) {
|
||||
if (!uiHandler.hasMessages(LONG_KEYPRESS_MSG_ID)) {
|
||||
Message msg = Message.obtain(uiHandler, new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
app.getLocationProvider().emitNavigationHint();
|
||||
}
|
||||
});
|
||||
msg.what = LONG_KEYPRESS_MSG_ID;
|
||||
uiHandler.sendMessageDelayed(msg, LONG_KEYPRESS_DELAY);
|
||||
if (mapActivityKeyListener != null) {
|
||||
if (mapActivityKeyListener.onKeyDown(keyCode, event)) {
|
||||
return true;
|
||||
}
|
||||
return true;
|
||||
} else if (mapScrollHelper.isScrollingDirectionKeyCode(keyCode)) {
|
||||
return mapScrollHelper.onKeyDown(keyCode, event);
|
||||
}
|
||||
return super.onKeyDown(keyCode, event);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onKeyUp(int keyCode, KeyEvent event) {
|
||||
if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER) {
|
||||
if (!app.accessibilityEnabled()) {
|
||||
mapActions.contextMenuPoint(mapView.getLatitude(), mapView.getLongitude());
|
||||
} else if (uiHandler.hasMessages(LONG_KEYPRESS_MSG_ID)) {
|
||||
uiHandler.removeMessages(LONG_KEYPRESS_MSG_ID);
|
||||
mapActions.contextMenuPoint(mapView.getLatitude(), mapView.getLongitude());
|
||||
}
|
||||
return true;
|
||||
} else if (keyCode == KeyEvent.KEYCODE_MENU /*&& event.getRepeatCount() == 0*/) {
|
||||
// repeat count 0 doesn't work for samsung, 1 doesn't work for lg
|
||||
toggleDrawer();
|
||||
return true;
|
||||
} else if (keyCode == KeyEvent.KEYCODE_C) {
|
||||
mapViewTrackingUtilities.backToLocationImpl();
|
||||
} else if (settings.EXTERNAL_INPUT_DEVICE.get() == PARROT_EXTERNAL_DEVICE) {
|
||||
// Parrot device has only dpad left and right
|
||||
if (keyCode == KeyEvent.KEYCODE_DPAD_LEFT) {
|
||||
changeZoom(-1);
|
||||
return true;
|
||||
} else if (keyCode == KeyEvent.KEYCODE_DPAD_RIGHT) {
|
||||
changeZoom(1);
|
||||
if (mapActivityKeyListener != null) {
|
||||
if (mapActivityKeyListener.onKeyUp(keyCode, event)) {
|
||||
return true;
|
||||
}
|
||||
} else if (settings.EXTERNAL_INPUT_DEVICE.get() == WUNDERLINQ_EXTERNAL_DEVICE) {
|
||||
// WunderLINQ device, motorcycle smart phone control
|
||||
if (keyCode == KeyEvent.KEYCODE_DPAD_DOWN) {
|
||||
changeZoom(-1);
|
||||
return true;
|
||||
} else if (keyCode == KeyEvent.KEYCODE_DPAD_UP) {
|
||||
changeZoom(1);
|
||||
return true;
|
||||
} else if (keyCode == KeyEvent.KEYCODE_ESCAPE) {
|
||||
String callingApp = "wunderlinq://datagrid";
|
||||
Intent intent = new Intent(Intent.ACTION_VIEW);
|
||||
intent.setData(Uri.parse(callingApp));
|
||||
startActivity(intent);
|
||||
return true;
|
||||
}
|
||||
} else if (mapScrollHelper.isScrollingDirectionKeyCode(keyCode)) {
|
||||
return mapScrollHelper.onKeyUp(keyCode, event);
|
||||
} else if (settings.EXTERNAL_INPUT_DEVICE.get() == GENERIC_EXTERNAL_DEVICE) {
|
||||
if (keyCode == KeyEvent.KEYCODE_MINUS) {
|
||||
changeZoom(-1);
|
||||
return true;
|
||||
} else if (keyCode == KeyEvent.KEYCODE_PLUS) {
|
||||
changeZoom(1);
|
||||
return true;
|
||||
}
|
||||
} else if (OsmandPlugin.onMapActivityKeyUp(this, keyCode)) {
|
||||
return true;
|
||||
}
|
||||
return super.onKeyUp(keyCode, event);
|
||||
}
|
||||
|
|
|
@ -0,0 +1,137 @@
|
|||
package net.osmand.plus.activities;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.net.Uri;
|
||||
import android.os.Handler;
|
||||
import android.os.Message;
|
||||
import android.view.KeyEvent;
|
||||
|
||||
import net.osmand.plus.OsmAndConstants;
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.OsmandPlugin;
|
||||
import net.osmand.plus.helpers.ScrollHelper;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings;
|
||||
import net.osmand.plus.views.OsmandMapTileView;
|
||||
|
||||
import static net.osmand.plus.settings.backend.OsmandSettings.GENERIC_EXTERNAL_DEVICE;
|
||||
import static net.osmand.plus.settings.backend.OsmandSettings.PARROT_EXTERNAL_DEVICE;
|
||||
import static net.osmand.plus.settings.backend.OsmandSettings.WUNDERLINQ_EXTERNAL_DEVICE;
|
||||
|
||||
public class MapActivityKeyListener implements KeyEvent.Callback {
|
||||
|
||||
public static final int LONG_KEYPRESS_MSG_ID = OsmAndConstants.UI_HANDLER_MAP_VIEW + 2;
|
||||
public static final int LONG_KEYPRESS_DELAY = 500;
|
||||
|
||||
private MapActivity mapActivity;
|
||||
private OsmandApplication app;
|
||||
private MapActivityActions mapActions;
|
||||
private OsmandSettings settings;
|
||||
// handler to show/hide trackball position and to link map with delay
|
||||
private Handler uiHandler = new Handler();
|
||||
private ScrollHelper mapScrollHelper;
|
||||
|
||||
public MapActivityKeyListener(MapActivity mapActivity) {
|
||||
this.mapActivity = mapActivity;
|
||||
app = mapActivity.getMyApplication();
|
||||
mapActions = mapActivity.getMapActions();
|
||||
settings = app.getSettings();
|
||||
mapScrollHelper = mapActivity.getMapScrollHelper();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onKeyDown(int keyCode, KeyEvent event) {
|
||||
if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER && app.accessibilityEnabled()) {
|
||||
if (!uiHandler.hasMessages(LONG_KEYPRESS_MSG_ID)) {
|
||||
Message msg = Message.obtain(uiHandler, new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
app.getLocationProvider().emitNavigationHint();
|
||||
}
|
||||
});
|
||||
msg.what = LONG_KEYPRESS_MSG_ID;
|
||||
uiHandler.sendMessageDelayed(msg, LONG_KEYPRESS_DELAY);
|
||||
}
|
||||
return true;
|
||||
} else if (settings.USE_VOLUME_BUTTONS_AS_ZOOM.get()) {
|
||||
if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) {
|
||||
mapActivity.changeZoom(-1);
|
||||
return true;
|
||||
} else if (keyCode == KeyEvent.KEYCODE_VOLUME_UP) {
|
||||
mapActivity.changeZoom(1);
|
||||
return true;
|
||||
}
|
||||
} else if (mapScrollHelper.isScrollingDirectionKeyCode(keyCode)) {
|
||||
return mapScrollHelper.onKeyDown(keyCode, event);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onKeyLongPress(int keyCode, KeyEvent event) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onKeyUp(int keyCode, KeyEvent event) {
|
||||
if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER) {
|
||||
OsmandMapTileView mapView = mapActivity.getMapView();
|
||||
|
||||
if (!app.accessibilityEnabled()) {
|
||||
mapActions.contextMenuPoint(mapView.getLatitude(), mapView.getLongitude());
|
||||
} else if (uiHandler.hasMessages(LONG_KEYPRESS_MSG_ID)) {
|
||||
uiHandler.removeMessages(LONG_KEYPRESS_MSG_ID);
|
||||
mapActions.contextMenuPoint(mapView.getLatitude(), mapView.getLongitude());
|
||||
}
|
||||
return true;
|
||||
} else if (keyCode == KeyEvent.KEYCODE_MENU /*&& event.getRepeatCount() == 0*/) {
|
||||
// repeat count 0 doesn't work for samsung, 1 doesn't work for lg
|
||||
mapActivity.toggleDrawer();
|
||||
return true;
|
||||
} else if (keyCode == KeyEvent.KEYCODE_C) {
|
||||
mapActivity.getMapViewTrackingUtilities().backToLocationImpl();
|
||||
} else if (settings.EXTERNAL_INPUT_DEVICE.get() == PARROT_EXTERNAL_DEVICE) {
|
||||
// Parrot device has only dpad left and right
|
||||
if (keyCode == KeyEvent.KEYCODE_DPAD_LEFT) {
|
||||
mapActivity.changeZoom(-1);
|
||||
return true;
|
||||
} else if (keyCode == KeyEvent.KEYCODE_DPAD_RIGHT) {
|
||||
mapActivity.changeZoom(1);
|
||||
return true;
|
||||
}
|
||||
} else if (settings.EXTERNAL_INPUT_DEVICE.get() == WUNDERLINQ_EXTERNAL_DEVICE) {
|
||||
// WunderLINQ device, motorcycle smart phone control
|
||||
if (keyCode == KeyEvent.KEYCODE_DPAD_DOWN) {
|
||||
mapActivity.changeZoom(-1);
|
||||
return true;
|
||||
} else if (keyCode == KeyEvent.KEYCODE_DPAD_UP) {
|
||||
mapActivity.changeZoom(1);
|
||||
return true;
|
||||
} else if (keyCode == KeyEvent.KEYCODE_ESCAPE) {
|
||||
String callingApp = "wunderlinq://datagrid";
|
||||
Intent intent = new Intent(Intent.ACTION_VIEW);
|
||||
intent.setData(Uri.parse(callingApp));
|
||||
mapActivity.startActivity(intent);
|
||||
return true;
|
||||
}
|
||||
} else if (mapScrollHelper.isScrollingDirectionKeyCode(keyCode)) {
|
||||
return mapScrollHelper.onKeyUp(keyCode, event);
|
||||
} else if (settings.EXTERNAL_INPUT_DEVICE.get() == GENERIC_EXTERNAL_DEVICE) {
|
||||
if (keyCode == KeyEvent.KEYCODE_MINUS) {
|
||||
mapActivity.changeZoom(-1);
|
||||
return true;
|
||||
} else if (keyCode == KeyEvent.KEYCODE_PLUS) {
|
||||
mapActivity.changeZoom(1);
|
||||
return true;
|
||||
}
|
||||
} else {
|
||||
return OsmandPlugin.onMapActivityKeyUp(mapActivity, keyCode);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onKeyMultiple(int keyCode, int count, KeyEvent event) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
|
@ -65,28 +65,24 @@ public class PointImageDrawable extends Drawable {
|
|||
private PointImageDrawable(PointInfo pointInfo) {
|
||||
this.withShadow = pointInfo.withShadow;
|
||||
this.synced = pointInfo.synced;
|
||||
Resources res = pointInfo.ctx.getResources();
|
||||
UiUtilities uiUtilities = ((OsmandApplication) pointInfo.ctx.getApplicationContext()).getUIUtilities();
|
||||
Context ctx = pointInfo.ctx;
|
||||
Resources res = ctx.getResources();
|
||||
UiUtilities uiUtilities = ((OsmandApplication) ctx.getApplicationContext()).getUIUtilities();
|
||||
int overlayIconId = pointInfo.overlayIconId;
|
||||
int uiIconId;
|
||||
mapIcon = uiUtilities.getIcon(getMapIconId(pointInfo.ctx, overlayIconId), R.color.color_white);
|
||||
mapIcon = uiUtilities.getIcon(getMapIconId(ctx, overlayIconId), R.color.color_white);
|
||||
uiIconId = overlayIconId;
|
||||
int col = pointInfo.color == 0 ? res.getColor(R.color.color_favorite) : pointInfo.color;
|
||||
uiListIcon = uiUtilities.getIcon(uiIconId, R.color.color_white);
|
||||
int uiBackgroundIconId = pointInfo.backgroundType.getIconId();
|
||||
BackgroundType backgroundType = pointInfo.backgroundType;
|
||||
int uiBackgroundIconId = backgroundType.getIconId();
|
||||
uiBackgroundIcon = uiUtilities.getPaintedIcon(uiBackgroundIconId, col);
|
||||
int mapBackgroundIconIdTop = getMapBackgroundIconId(pointInfo, "top", false);
|
||||
int mapBackgroundIconIdCenter = getMapBackgroundIconId(pointInfo, "center", false);
|
||||
int mapBackgroundIconIdBottom = getMapBackgroundIconId(pointInfo, "bottom", false);
|
||||
mapIconBackgroundTop = BitmapFactory.decodeResource(res, mapBackgroundIconIdTop);
|
||||
mapIconBackgroundCenter = BitmapFactory.decodeResource(res, mapBackgroundIconIdCenter);
|
||||
mapIconBackgroundBottom = BitmapFactory.decodeResource(res, mapBackgroundIconIdBottom);
|
||||
int mapBackgroundIconIdTopSmall = getMapBackgroundIconId(pointInfo, "top", true);
|
||||
int mapBackgroundIconIdCenterSmall = getMapBackgroundIconId(pointInfo, "center", true);
|
||||
int mapBackgroundIconIdBottomSmall = getMapBackgroundIconId(pointInfo, "bottom", true);
|
||||
mapIconBackgroundTopSmall = BitmapFactory.decodeResource(res, mapBackgroundIconIdTopSmall);
|
||||
mapIconBackgroundCenterSmall = BitmapFactory.decodeResource(res, mapBackgroundIconIdCenterSmall);
|
||||
mapIconBackgroundBottomSmall = BitmapFactory.decodeResource(res, mapBackgroundIconIdBottomSmall);
|
||||
mapIconBackgroundTop = backgroundType.getMapBackgroundIconId(ctx, "top", false);
|
||||
mapIconBackgroundCenter = backgroundType.getMapBackgroundIconId(ctx, "center", false);
|
||||
mapIconBackgroundBottom = backgroundType.getMapBackgroundIconId(ctx, "bottom", false);
|
||||
mapIconBackgroundTopSmall = backgroundType.getMapBackgroundIconId(ctx, "top", true);
|
||||
mapIconBackgroundCenterSmall = backgroundType.getMapBackgroundIconId(ctx, "center", true);
|
||||
mapIconBackgroundBottomSmall = backgroundType.getMapBackgroundIconId(ctx, "bottom", true);
|
||||
syncedStroke = BitmapFactory.decodeResource(res, R.drawable.ic_shield_marker_point_stroke);
|
||||
syncedColor = BitmapFactory.decodeResource(res, R.drawable.ic_shield_marker_point_color);
|
||||
syncedShadow = BitmapFactory.decodeResource(res, R.drawable.ic_shield_marker_point_shadow);
|
||||
|
@ -102,15 +98,6 @@ public class PointImageDrawable extends Drawable {
|
|||
.replaceFirst("mx_", "mm_"), "drawable", ctx.getPackageName());
|
||||
}
|
||||
|
||||
private int getMapBackgroundIconId(PointInfo pointInfo, String layer, boolean isSmall) {
|
||||
Context ctx = pointInfo.ctx;
|
||||
int iconId = pointInfo.backgroundType.getIconId();
|
||||
String iconName = ctx.getResources().getResourceEntryName(iconId);
|
||||
String suffix = isSmall ? "_small" : "";
|
||||
return ctx.getResources().getIdentifier("ic_" + iconName + "_" + layer + suffix,
|
||||
"drawable", ctx.getPackageName());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onBoundsChange(Rect bounds) {
|
||||
super.onBoundsChange(bounds);
|
||||
|
|
|
@ -124,17 +124,18 @@ public class DownloadOsmandIndexesHelper {
|
|||
return result;
|
||||
}
|
||||
|
||||
public static Map<String, String> assetMapping(AssetManager assetManager) throws XmlPullParserException, IOException {
|
||||
public static List<AssetEntry> getBundledAssets(AssetManager assetManager) throws XmlPullParserException, IOException {
|
||||
XmlPullParser xmlParser = XmlPullParserFactory.newInstance().newPullParser();
|
||||
InputStream isBundledAssetsXml = assetManager.open("bundled_assets.xml");
|
||||
xmlParser.setInput(isBundledAssetsXml, "UTF-8");
|
||||
Map<String, String> assets = new HashMap<String, String>();
|
||||
List<AssetEntry> assets = new ArrayList<>();
|
||||
int next = 0;
|
||||
while ((next = xmlParser.next()) != XmlPullParser.END_DOCUMENT) {
|
||||
if (next == XmlPullParser.START_TAG && xmlParser.getName().equals("asset")) {
|
||||
final String source = xmlParser.getAttributeValue(null, "source");
|
||||
final String destination = xmlParser.getAttributeValue(null, "destination");
|
||||
assets.put(source, destination);
|
||||
final String combinedMode = xmlParser.getAttributeValue(null, "mode");
|
||||
assets.add(new AssetEntry(source, destination, combinedMode));
|
||||
}
|
||||
}
|
||||
isBundledAssetsXml.close();
|
||||
|
@ -155,15 +156,15 @@ public class DownloadOsmandIndexesHelper {
|
|||
} catch (NameNotFoundException e) {
|
||||
//do nothing...
|
||||
}
|
||||
Map<String, String> mapping = assetMapping(amanager);
|
||||
for (String key : mapping.keySet()) {
|
||||
String target = mapping.get(key);
|
||||
if (target.endsWith(IndexConstants.TTSVOICE_INDEX_EXT_JS) && target.startsWith("voice/")) {
|
||||
List<AssetEntry> mapping = getBundledAssets(amanager);
|
||||
for (AssetEntry asset : mapping) {
|
||||
String target = asset.destination;
|
||||
if (target.endsWith(IndexConstants.TTSVOICE_INDEX_EXT_JS) && target.startsWith("voice/") && target.contains("-tts")) {
|
||||
String lang = target.substring("voice/".length(), target.indexOf("-tts"));
|
||||
File destFile = new File(voicePath, target.substring("voice/".length(),
|
||||
target.indexOf("/", "voice/".length())) + "/" + lang + "_tts.js");
|
||||
result.add(new AssetIndexItem(lang + "_" + IndexConstants.TTSVOICE_INDEX_EXT_JS,
|
||||
"voice", date, dateModified, "0.1", destFile.length(), key,
|
||||
"voice", date, dateModified, "0.1", destFile.length(), asset.source,
|
||||
destFile.getPath(), DownloadActivityType.VOICE_FILE));
|
||||
}
|
||||
}
|
||||
|
@ -263,5 +264,15 @@ public class DownloadOsmandIndexesHelper {
|
|||
}
|
||||
}
|
||||
|
||||
public static class AssetEntry {
|
||||
public final String source;
|
||||
public final String destination;
|
||||
public final String combinedMode;
|
||||
|
||||
public AssetEntry(String source, String destination, String combinedMode) {
|
||||
this.source = source;
|
||||
this.destination = destination;
|
||||
this.combinedMode = combinedMode;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -187,10 +187,11 @@ public class DownloadResources extends DownloadResourceGroup {
|
|||
outdated = true;
|
||||
}
|
||||
} else {
|
||||
|
||||
long itemSize = item.getContentSize();
|
||||
long oldItemSize = 0;
|
||||
if (item.getType() == DownloadActivityType.VOICE_FILE) {
|
||||
if (parsed && item.getTimestamp() > item.getLocalTimestamp()) {
|
||||
outdated = true;
|
||||
} else if (item.getType() == DownloadActivityType.VOICE_FILE) {
|
||||
if (item instanceof AssetIndexItem) {
|
||||
File file = new File(((AssetIndexItem) item).getDestFile());
|
||||
oldItemSize = file.length();
|
||||
|
@ -213,7 +214,7 @@ public class DownloadResources extends DownloadResourceGroup {
|
|||
} else {
|
||||
oldItemSize = app.getAppPath(item.getTargetFileName()).length();
|
||||
}
|
||||
if (itemSize != oldItemSize) {
|
||||
if (!parsed && itemSize != oldItemSize) {
|
||||
outdated = true;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -203,6 +203,9 @@ public class IndexItem implements Comparable<IndexItem> {
|
|||
this.localTimestamp = localTimestamp;
|
||||
}
|
||||
|
||||
public long getLocalTimestamp() {
|
||||
return localTimestamp;
|
||||
}
|
||||
|
||||
public boolean isDownloaded() {
|
||||
return downloaded;
|
||||
|
|
|
@ -380,7 +380,7 @@ public abstract class PointEditorFragmentNew extends BaseOsmAndFragment {
|
|||
private void createShapeSelector() {
|
||||
FlowLayout selectShape = view.findViewById(R.id.select_shape);
|
||||
for (BackgroundType backgroundType : BackgroundType.values()) {
|
||||
if (backgroundType.getNameId() != -1) {
|
||||
if (backgroundType.isSelected()) {
|
||||
selectShape.addView(createShapeItemView(backgroundType, selectShape),
|
||||
new FlowLayout.LayoutParams(0, 0));
|
||||
}
|
||||
|
|
|
@ -118,7 +118,9 @@ public class BasicEditPoiFragment extends BaseOsmAndFragment
|
|||
BasicOpeningHourRule rule = new BasicOpeningHourRule();
|
||||
rule.setStartTime(9 * 60);
|
||||
rule.setEndTime(18 * 60);
|
||||
rule.setDays(new boolean[]{true, true, true, true, true, false, false});
|
||||
if (mOpeningHoursAdapter.openingHours.getRules().isEmpty()){
|
||||
rule.setDays(new boolean[]{true, true, true, true, true, false, false});
|
||||
}
|
||||
OpeningHoursDaysDialogFragment fragment = OpeningHoursDaysDialogFragment.createInstance(rule, -1);
|
||||
fragment.show(getChildFragmentManager(), "OpenTimeDialogFragment");
|
||||
}
|
||||
|
|
|
@ -155,10 +155,11 @@ public class OsmBugsLayer extends OsmandMapLayer implements IContextMenuProvider
|
|||
iconId = R.drawable.mx_special_symbol_check_mark;
|
||||
backgroundColorRes = R.color.osm_bug_resolved_icon_color;
|
||||
}
|
||||
BackgroundType backgroundType = BackgroundType.COMMENT;
|
||||
PointImageDrawable pointImageDrawable = PointImageDrawable.getOrCreate(activity,
|
||||
ContextCompat.getColor(activity, backgroundColorRes), true, false, iconId,
|
||||
BackgroundType.COMMENT);
|
||||
int offsetY = pointImageDrawable.getIntrinsicHeight() / 2;
|
||||
backgroundType);
|
||||
int offsetY = backgroundType.getOffsetY(activity, textScale);
|
||||
pointImageDrawable.drawPoint(canvas, x, y - offsetY, textScale, false);
|
||||
}
|
||||
this.fullObjectsLatLon = fullObjectsLatLon;
|
||||
|
|
|
@ -834,12 +834,19 @@ public class PoiUIFilter implements SearchPoiTypeFilter, Comparable<PoiUIFilter>
|
|||
if (!poiTypes.isRegisteredType(type)) {
|
||||
type = poiTypes.getOtherPoiCategory();
|
||||
}
|
||||
LinkedHashSet<String> acceptedTypesSet = acceptedTypes.get(type);
|
||||
if (acceptedTypesSet != null && acceptedTypesSet.contains(subtype)) {
|
||||
return true;
|
||||
if (acceptedTypes.containsKey(type)) {
|
||||
LinkedHashSet<String> acceptedTypesSet = acceptedTypes.get(type);
|
||||
if (acceptedTypesSet == null || acceptedTypesSet.contains(subtype)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
acceptedTypesSet = acceptedTypesOrigin.get(type);
|
||||
return acceptedTypesSet != null && acceptedTypesSet.contains(subtype);
|
||||
if (acceptedTypesOrigin.containsKey(type)) {
|
||||
LinkedHashSet<String> acceptedTypesSet = acceptedTypesOrigin.get(type);
|
||||
if (acceptedTypesSet == null || acceptedTypesSet.contains(subtype)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -30,6 +30,7 @@ import androidx.recyclerview.widget.LinearLayoutManager;
|
|||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import com.google.android.material.appbar.AppBarLayout;
|
||||
import com.google.android.material.snackbar.BaseTransientBottomBar;
|
||||
import com.google.android.material.snackbar.Snackbar;
|
||||
|
||||
import net.osmand.AndroidUtils;
|
||||
|
@ -106,7 +107,7 @@ public class RearrangePoiFiltersFragment extends DialogFragment implements Selec
|
|||
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
|
||||
final OsmandApplication app = requireMyApplication();
|
||||
|
||||
boolean nightMode = isNightMode(app, usedOnMap);
|
||||
final boolean nightMode = isNightMode(app, usedOnMap);
|
||||
|
||||
View mainView = UiUtilities.getInflater(app, nightMode).inflate(R.layout.edit_arrangement_list_fragment, container, false);
|
||||
createToolbar(mainView, nightMode);
|
||||
|
@ -158,6 +159,39 @@ public class RearrangePoiFiltersFragment extends DialogFragment implements Selec
|
|||
updateItems();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDeleteClicked(final int position) {
|
||||
final ListItem item = items.get(position);
|
||||
if (item.value instanceof PoiUIFilterDataObject) {
|
||||
PoiUIFilterDataObject poiInfo = (PoiUIFilterDataObject) item.value;
|
||||
final PoiUIFilter filter = app.getPoiFilters().getFilterById(poiInfo.filterId);
|
||||
if (filter != null && app.getPoiFilters().removePoiFilter(filter)) {
|
||||
filter.setDeleted(true);
|
||||
filterDeleted = true;
|
||||
}
|
||||
items.remove(item);
|
||||
adapter.notifyDataSetChanged();
|
||||
Snackbar snackbar = Snackbar.make(requireView(),
|
||||
getString(R.string.item_deleted, poiInfo.name), Snackbar.LENGTH_LONG)
|
||||
.setAction(R.string.shared_string_undo, new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
items.add(position, item);
|
||||
adapter.notifyDataSetChanged();
|
||||
if (filter != null) {
|
||||
filter.setDeleted(false);
|
||||
app.getPoiFilters().createPoiFilter(filter, false);
|
||||
}
|
||||
}
|
||||
});
|
||||
ViewCompat.setElevation(snackbar.getView(), 0f);
|
||||
snackbar.setAnchorView(buttonsContainer);
|
||||
snackbar.setAnimationMode(BaseTransientBottomBar.ANIMATION_MODE_FADE);
|
||||
UiUtilities.setupSnackbar(snackbar, nightMode);
|
||||
snackbar.show();
|
||||
}
|
||||
}
|
||||
});
|
||||
recyclerView.setAdapter(adapter);
|
||||
|
||||
|
@ -577,19 +611,23 @@ public class RearrangePoiFiltersFragment extends DialogFragment implements Selec
|
|||
|
||||
@SuppressLint("ClickableViewAccessibility")
|
||||
@Override
|
||||
public void onBindViewHolder(final @NonNull RecyclerView.ViewHolder holder, final int position) {
|
||||
final ListItem item = items.get(position);
|
||||
final boolean nightMode = isNightMode(app, usedOnMap);
|
||||
public void onBindViewHolder(final @NonNull RecyclerView.ViewHolder holder, int position) {
|
||||
ListItem item = items.get(position);
|
||||
boolean nightMode = isNightMode(app, usedOnMap);
|
||||
int activeColorResId = nightMode ? R.color.active_color_primary_dark : R.color.active_color_primary_light;
|
||||
if (holder instanceof PoiViewHolder) {
|
||||
PoiViewHolder h = (PoiViewHolder) holder;
|
||||
final PoiUIFilterDataObject poiInfo = (PoiUIFilterDataObject) item.value;
|
||||
PoiUIFilterDataObject poiInfo = (PoiUIFilterDataObject) item.value;
|
||||
int osmandOrangeColorResId = nightMode ? R.color.osmand_orange_dark : R.color.osmand_orange;
|
||||
boolean isActive = poiInfo.isActive;
|
||||
h.title.setText(poiInfo.name);
|
||||
int padding = (int) getResources().getDimension(R.dimen.content_padding);
|
||||
int paddingSmall = (int) getResources().getDimension(R.dimen.content_padding_small);
|
||||
h.title.setPadding(isActive ? 0 : padding, paddingSmall, paddingSmall, padding);
|
||||
boolean userFilter = poiInfo.filterId.startsWith(USER_PREFIX);
|
||||
int iconRes = QuickSearchListItem.getCustomFilterIconRes(poiHelper.getFilterById(poiInfo.filterId));
|
||||
h.icon.setImageDrawable(uiUtilities.getIcon(userFilter ? iconRes : poiInfo.iconRes, osmandOrangeColorResId));
|
||||
h.moveIcon.setVisibility(poiInfo.isActive ? View.VISIBLE : View.GONE);
|
||||
h.moveIcon.setVisibility(isActive ? View.VISIBLE : View.GONE);
|
||||
h.actionIcon.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
|
@ -599,7 +637,7 @@ public class RearrangePoiFiltersFragment extends DialogFragment implements Selec
|
|||
}
|
||||
}
|
||||
});
|
||||
if (poiInfo.isActive) {
|
||||
if (isActive) {
|
||||
h.actionIcon.setImageDrawable(uiUtilities.getIcon(R.drawable.ic_action_remove, R.color.color_osm_edit_delete));
|
||||
h.moveIcon.setOnTouchListener(new View.OnTouchListener() {
|
||||
@Override
|
||||
|
@ -618,40 +656,10 @@ public class RearrangePoiFiltersFragment extends DialogFragment implements Selec
|
|||
h.actionDelete.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
Snackbar snackbar = Snackbar.make(requireView(),
|
||||
getString(R.string.item_deleted, poiInfo.name), Snackbar.LENGTH_LONG)
|
||||
.setAction(R.string.shared_string_undo, new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
items.add(position, item);
|
||||
notifyDataSetChanged();
|
||||
}
|
||||
})
|
||||
.addCallback(new Snackbar.Callback() {
|
||||
@Override
|
||||
public void onShown(Snackbar sb) {
|
||||
super.onShown(sb);
|
||||
items.remove(item);
|
||||
notifyDataSetChanged();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDismissed(Snackbar transientBottomBar, int event) {
|
||||
super.onDismissed(transientBottomBar, event);
|
||||
if (DISMISS_EVENT_ACTION != event) {
|
||||
PoiUIFilter filter = poiHelper.getFilterById(poiInfo.filterId);
|
||||
if (filter != null && poiHelper.removePoiFilter(filter)) {
|
||||
availableFiltersKeys.remove(poiInfo.filterId);
|
||||
filter.setDeleted(true);
|
||||
filterDeleted = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
ViewCompat.setElevation(snackbar.getView(), 0f);
|
||||
snackbar.setAnchorView(buttonsContainer);
|
||||
UiUtilities.setupSnackbar(snackbar, nightMode);
|
||||
snackbar.show();
|
||||
int pos = holder.getAdapterPosition();
|
||||
if (listener != null && pos != RecyclerView.NO_POSITION) {
|
||||
listener.onDeleteClicked(pos);
|
||||
}
|
||||
}
|
||||
});
|
||||
} else if (holder instanceof SpaceViewHolder) {
|
||||
|
@ -864,7 +872,9 @@ public class RearrangePoiFiltersFragment extends DialogFragment implements Selec
|
|||
|
||||
void onDragOrSwipeEnded(RecyclerView.ViewHolder holder);
|
||||
|
||||
void onButtonClicked(int view);
|
||||
void onButtonClicked(int position);
|
||||
|
||||
void onDeleteClicked(int position);
|
||||
}
|
||||
|
||||
public interface OnApplyPoiFiltersState {
|
||||
|
|
|
@ -39,6 +39,8 @@ import net.osmand.plus.OsmandApplication;
|
|||
import net.osmand.plus.OsmandPlugin;
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.Version;
|
||||
import net.osmand.plus.download.DownloadOsmandIndexesHelper;
|
||||
import net.osmand.plus.download.DownloadOsmandIndexesHelper.AssetEntry;
|
||||
import net.osmand.plus.inapp.InAppPurchaseHelper;
|
||||
import net.osmand.plus.render.MapRenderRepositories;
|
||||
import net.osmand.plus.render.NativeOsmandLibrary;
|
||||
|
@ -47,15 +49,12 @@ import net.osmand.plus.resources.AsyncLoadingThread.OnMapLoadedListener;
|
|||
import net.osmand.plus.resources.AsyncLoadingThread.TileLoadDownloadRequest;
|
||||
import net.osmand.plus.srtmplugin.SRTMPlugin;
|
||||
import net.osmand.plus.views.OsmandMapLayer.DrawSettings;
|
||||
import net.osmand.router.TransportRoutePlanner.TransportRoutingContext;
|
||||
import net.osmand.router.TransportStopsRouteReader;
|
||||
import net.osmand.util.Algorithms;
|
||||
import net.osmand.util.MapUtils;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.xmlpull.v1.XmlPullParser;
|
||||
import org.xmlpull.v1.XmlPullParserException;
|
||||
import org.xmlpull.v1.XmlPullParserFactory;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileFilter;
|
||||
|
@ -76,9 +75,8 @@ import java.util.Map.Entry;
|
|||
import java.util.TreeMap;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
import gnu.trove.map.hash.TLongObjectHashMap;
|
||||
|
||||
import static net.osmand.plus.download.DownloadOsmandIndexesHelper.assetMapping;
|
||||
import static net.osmand.IndexConstants.VOICE_INDEX_DIR;
|
||||
|
||||
/**
|
||||
* Resource manager is responsible to work with all resources
|
||||
|
@ -405,8 +403,8 @@ public class ResourceManager {
|
|||
}
|
||||
|
||||
|
||||
public List<String> indexVoiceFiles(IProgress progress){
|
||||
File file = context.getAppPath(IndexConstants.VOICE_INDEX_DIR);
|
||||
public List<String> indexVoiceFiles(IProgress progress) {
|
||||
File file = context.getAppPath(VOICE_INDEX_DIR);
|
||||
file.mkdirs();
|
||||
List<String> warnings = new ArrayList<String>();
|
||||
if (file.exists() && file.canRead()) {
|
||||
|
@ -451,20 +449,20 @@ public class ResourceManager {
|
|||
|
||||
public void copyMissingJSAssets() {
|
||||
try {
|
||||
Map<String, String> mapping = assetMapping(context.getAssets());
|
||||
List<AssetEntry> assets = DownloadOsmandIndexesHelper.getBundledAssets(context.getAssets());
|
||||
File appPath = context.getAppPath(null);
|
||||
if (appPath.canWrite()) {
|
||||
for (Entry<String,String> entry : mapping.entrySet()) {
|
||||
File jsFile = new File(appPath, entry.getValue());
|
||||
if (entry.getValue().contains("-tts") && entry.getValue()
|
||||
for (AssetEntry asset : assets) {
|
||||
File jsFile = new File(appPath, asset.destination);
|
||||
if (asset.destination.contains("-tts") && asset.destination
|
||||
.endsWith(IndexConstants.TTSVOICE_INDEX_EXT_JS)) {
|
||||
File oggFile = new File(appPath, entry.getValue().replace("-tts", ""));
|
||||
File oggFile = new File(appPath, asset.destination.replace("-tts", ""));
|
||||
if (oggFile.getParentFile().exists() && !oggFile.exists()) {
|
||||
copyAssets(context.getAssets(), entry.getKey(), oggFile);
|
||||
copyAssets(context.getAssets(), asset.source, oggFile);
|
||||
}
|
||||
}
|
||||
if (jsFile.getParentFile().exists() && !jsFile.exists()) {
|
||||
copyAssets(context.getAssets(), entry.getKey(), jsFile);
|
||||
copyAssets(context.getAssets(), asset.source, jsFile);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -542,54 +540,43 @@ public class ResourceManager {
|
|||
private final static String ASSET_COPY_MODE__alwaysOverwriteOrCopy = "alwaysOverwriteOrCopy";
|
||||
private final static String ASSET_COPY_MODE__copyOnlyIfDoesNotExist = "copyOnlyIfDoesNotExist";
|
||||
private void unpackBundledAssets(AssetManager assetManager, File appDataDir, IProgress progress, boolean isFirstInstall) throws IOException, XmlPullParserException {
|
||||
XmlPullParser xmlParser = XmlPullParserFactory.newInstance().newPullParser();
|
||||
InputStream isBundledAssetsXml = assetManager.open("bundled_assets.xml");
|
||||
xmlParser.setInput(isBundledAssetsXml, "UTF-8");
|
||||
List<AssetEntry> assetEntries = DownloadOsmandIndexesHelper.getBundledAssets(assetManager);
|
||||
for (AssetEntry asset : assetEntries) {
|
||||
final String[] modes = asset.combinedMode.split("\\|");
|
||||
if (modes.length == 0) {
|
||||
log.error("Mode '" + asset.combinedMode + "' is not valid");
|
||||
continue;
|
||||
}
|
||||
String installMode = null;
|
||||
String copyMode = null;
|
||||
for (String mode : modes) {
|
||||
if (ASSET_INSTALL_MODE__alwaysCopyOnFirstInstall.equals(mode))
|
||||
installMode = mode;
|
||||
else if (ASSET_COPY_MODE__overwriteOnlyIfExists.equals(mode) ||
|
||||
ASSET_COPY_MODE__alwaysOverwriteOrCopy.equals(mode) ||
|
||||
ASSET_COPY_MODE__copyOnlyIfDoesNotExist.equals(mode))
|
||||
copyMode = mode;
|
||||
else
|
||||
log.error("Mode '" + mode + "' is unknown");
|
||||
}
|
||||
|
||||
int next = 0;
|
||||
while ((next = xmlParser.next()) != XmlPullParser.END_DOCUMENT) {
|
||||
if (next == XmlPullParser.START_TAG && xmlParser.getName().equals("asset")) {
|
||||
final String source = xmlParser.getAttributeValue(null, "source");
|
||||
final String destination = xmlParser.getAttributeValue(null, "destination");
|
||||
final String combinedMode = xmlParser.getAttributeValue(null, "mode");
|
||||
final File destinationFile = new File(appDataDir, asset.destination);
|
||||
|
||||
final String[] modes = combinedMode.split("\\|");
|
||||
if(modes.length == 0) {
|
||||
log.error("Mode '" + combinedMode + "' is not valid");
|
||||
continue;
|
||||
}
|
||||
String installMode = null;
|
||||
String copyMode = null;
|
||||
for(String mode : modes) {
|
||||
if(ASSET_INSTALL_MODE__alwaysCopyOnFirstInstall.equals(mode))
|
||||
installMode = mode;
|
||||
else if(ASSET_COPY_MODE__overwriteOnlyIfExists.equals(mode) ||
|
||||
ASSET_COPY_MODE__alwaysOverwriteOrCopy.equals(mode) ||
|
||||
ASSET_COPY_MODE__copyOnlyIfDoesNotExist.equals(mode))
|
||||
copyMode = mode;
|
||||
else
|
||||
log.error("Mode '" + mode + "' is unknown");
|
||||
}
|
||||
boolean unconditional = false;
|
||||
if (installMode != null)
|
||||
unconditional = unconditional || (ASSET_INSTALL_MODE__alwaysCopyOnFirstInstall.equals(installMode) && isFirstInstall);
|
||||
if (copyMode == null)
|
||||
log.error("No copy mode was defined for " + asset.source);
|
||||
unconditional = unconditional || ASSET_COPY_MODE__alwaysOverwriteOrCopy.equals(copyMode);
|
||||
|
||||
final File destinationFile = new File(appDataDir, destination);
|
||||
boolean shouldCopy = unconditional;
|
||||
shouldCopy = shouldCopy || (ASSET_COPY_MODE__overwriteOnlyIfExists.equals(copyMode) && destinationFile.exists());
|
||||
shouldCopy = shouldCopy || (ASSET_COPY_MODE__copyOnlyIfDoesNotExist.equals(copyMode) && !destinationFile.exists());
|
||||
|
||||
boolean unconditional = false;
|
||||
if(installMode != null)
|
||||
unconditional = unconditional || (ASSET_INSTALL_MODE__alwaysCopyOnFirstInstall.equals(installMode) && isFirstInstall);
|
||||
if(copyMode == null)
|
||||
log.error("No copy mode was defined for " + source);
|
||||
unconditional = unconditional || ASSET_COPY_MODE__alwaysOverwriteOrCopy.equals(copyMode);
|
||||
|
||||
boolean shouldCopy = unconditional;
|
||||
shouldCopy = shouldCopy || (ASSET_COPY_MODE__overwriteOnlyIfExists.equals(copyMode) && destinationFile.exists());
|
||||
shouldCopy = shouldCopy || (ASSET_COPY_MODE__copyOnlyIfDoesNotExist.equals(copyMode) && !destinationFile.exists());
|
||||
|
||||
if(shouldCopy)
|
||||
copyAssets(assetManager, source, destinationFile);
|
||||
if (shouldCopy) {
|
||||
copyAssets(assetManager, asset.source, destinationFile);
|
||||
}
|
||||
}
|
||||
|
||||
isBundledAssetsXml.close();
|
||||
}
|
||||
|
||||
public static void copyAssets(AssetManager assetManager, String assetName, File file) throws IOException {
|
||||
|
|
|
@ -1884,6 +1884,7 @@ public class OsmandSettings {
|
|||
// magnetic field doesn'torkmost of the time on some phones
|
||||
public final OsmandPreference<Boolean> USE_MAGNETIC_FIELD_SENSOR_COMPASS = new BooleanPreference("use_magnetic_field_sensor_compass", false).makeProfile().cache();
|
||||
public final OsmandPreference<Boolean> USE_KALMAN_FILTER_FOR_COMPASS = new BooleanPreference("use_kalman_filter_compass", true).makeProfile().cache();
|
||||
public final OsmandPreference<Boolean> USE_VOLUME_BUTTONS_AS_ZOOM = new BooleanPreference("use_volume_buttons_as_zoom", false).makeProfile().cache();
|
||||
|
||||
public final OsmandPreference<Boolean> DO_NOT_SHOW_STARTUP_MESSAGES = new BooleanPreference("do_not_show_startup_messages", false).makeGlobal().cache();
|
||||
public final OsmandPreference<Boolean> SHOW_DOWNLOAD_MAP_DIALOG = new BooleanPreference("show_download_map_dialog", true).makeGlobal().cache();
|
||||
|
|
|
@ -54,6 +54,7 @@ public class GeneralProfileSettingsFragment extends BaseSettingsFragment impleme
|
|||
setupAngularUnitsPref();
|
||||
setupSpeedSystemPref();
|
||||
|
||||
setupVolumeButtonsAsZoom();
|
||||
setupKalmanFilterPref();
|
||||
setupMagneticFieldSensorPref();
|
||||
setupMapEmptyStateAllowedPref();
|
||||
|
@ -224,6 +225,14 @@ public class GeneralProfileSettingsFragment extends BaseSettingsFragment impleme
|
|||
speedSystem.setIcon(getActiveIcon(R.drawable.ic_action_speed));
|
||||
}
|
||||
|
||||
private void setupVolumeButtonsAsZoom() {
|
||||
SwitchPreferenceEx volumeButtonsPref = (SwitchPreferenceEx) findPreference(settings.USE_VOLUME_BUTTONS_AS_ZOOM.getId());
|
||||
volumeButtonsPref.setTitle(getString(R.string.use_volume_buttons_as_zoom));
|
||||
volumeButtonsPref.setDescription(getString(R.string.use_volume_buttons_as_zoom_descr));
|
||||
Drawable icon = getPersistentPrefIcon(R.drawable.ic_action_zoom_volume_buttons);
|
||||
volumeButtonsPref.setIcon(icon);
|
||||
}
|
||||
|
||||
private void setupKalmanFilterPref() {
|
||||
SwitchPreferenceEx kalmanFilterPref = (SwitchPreferenceEx) findPreference(settings.USE_KALMAN_FILTER_FOR_COMPASS.getId());
|
||||
kalmanFilterPref.setTitle(getString(R.string.use_kalman_filter_compass));
|
||||
|
|
|
@ -2,9 +2,7 @@ package net.osmand.plus.views;
|
|||
|
||||
import android.Manifest;
|
||||
import android.content.Context;
|
||||
import android.content.res.Resources;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.BitmapFactory;
|
||||
import android.graphics.Canvas;
|
||||
import android.graphics.Paint;
|
||||
import android.graphics.PointF;
|
||||
|
@ -225,16 +223,17 @@ public class ContextMenuLayer extends OsmandMapLayer {
|
|||
}
|
||||
}
|
||||
}
|
||||
float scale = 1f;
|
||||
float textScale = 1f;
|
||||
if (!pressedLatLonSmall.isEmpty() || !pressedLatLonFull.isEmpty()) {
|
||||
scale = activity.getMyApplication().getSettings().TEXT_SCALE.get();
|
||||
textScale = activity.getMyApplication().getSettings().TEXT_SCALE.get();
|
||||
}
|
||||
for (LatLon latLon : pressedLatLonSmall.keySet()) {
|
||||
int x = (int) box.getPixXFromLatLon(latLon.getLatitude(), latLon.getLongitude());
|
||||
int y = (int) box.getPixYFromLatLon(latLon.getLatitude(), latLon.getLongitude());
|
||||
Bitmap pressedBitmapSmall = getBackground(pressedLatLonSmall.get(latLon), true);
|
||||
BackgroundType background = pressedLatLonSmall.get(latLon);
|
||||
Bitmap pressedBitmapSmall = background.getTouchBackground(activity, true);
|
||||
Rect destRect = getIconDestinationRect(
|
||||
x, y, pressedBitmapSmall.getWidth(), pressedBitmapSmall.getHeight(), scale);
|
||||
x, y, pressedBitmapSmall.getWidth(), pressedBitmapSmall.getHeight(), textScale);
|
||||
canvas.drawBitmap(pressedBitmapSmall, null, destRect, paint);
|
||||
}
|
||||
for (LatLon latLon : pressedLatLonFull.keySet()) {
|
||||
|
@ -242,10 +241,10 @@ public class ContextMenuLayer extends OsmandMapLayer {
|
|||
int y = (int) box.getPixYFromLatLon(latLon.getLatitude(), latLon.getLongitude());
|
||||
|
||||
BackgroundType background = pressedLatLonFull.get(latLon);
|
||||
Bitmap pressedBitmap = getBackground(background, false);
|
||||
int offsetY = BackgroundType.COMMENT.equals(background) ? pressedBitmap.getHeight() / 2 : 0;
|
||||
Bitmap pressedBitmap = background.getTouchBackground(activity, false);
|
||||
int offsetY = background.getOffsetY(activity, textScale);
|
||||
Rect destRect = getIconDestinationRect(
|
||||
x, y - offsetY, pressedBitmap.getWidth(), pressedBitmap.getHeight(), scale);
|
||||
x, y - offsetY, pressedBitmap.getWidth(), pressedBitmap.getHeight(), textScale);
|
||||
canvas.drawBitmap(pressedBitmap, null, destRect, paint);
|
||||
}
|
||||
|
||||
|
@ -271,15 +270,6 @@ public class ContextMenuLayer extends OsmandMapLayer {
|
|||
}
|
||||
}
|
||||
|
||||
private Bitmap getBackground(BackgroundType backgroundType, boolean isSmall) {
|
||||
Context ctx = view.getContext();
|
||||
Resources res = view.getResources();
|
||||
String iconName = res.getResourceEntryName(backgroundType.getIconId());
|
||||
String suffix = isSmall ? "_small" : "";
|
||||
return BitmapFactory.decodeResource(res, res.getIdentifier("ic_" + iconName + "_center" + suffix,
|
||||
"drawable", ctx.getPackageName()));
|
||||
}
|
||||
|
||||
public void setSelectOnMap(CallbackWithObject<LatLon> selectOnMap) {
|
||||
this.selectOnMap = selectOnMap;
|
||||
}
|
||||
|
@ -927,9 +917,9 @@ public class ContextMenuLayer extends OsmandMapLayer {
|
|||
backgroundType = BackgroundType.getByTypeName(
|
||||
((GPXUtilities.WptPt) o).getBackgroundType(), DEFAULT_BACKGROUND_TYPE);
|
||||
}
|
||||
if (lt.isPresentInFullObjects(latLon) && !pressedLatLonFull.keySet().contains(latLon)) {
|
||||
if (lt.isPresentInFullObjects(latLon) && !pressedLatLonFull.containsKey(latLon)) {
|
||||
pressedLatLonFull.put(latLon, backgroundType);
|
||||
} else if (lt.isPresentInSmallObjects(latLon) && !pressedLatLonSmall.keySet().contains(latLon)) {
|
||||
} else if (lt.isPresentInSmallObjects(latLon) && !pressedLatLonSmall.containsKey(latLon)) {
|
||||
pressedLatLonSmall.put(latLon, backgroundType);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -294,10 +294,16 @@ public class RouteLayer extends OsmandMapLayer implements ContextMenuLayer.ICont
|
|||
// int len = (int) (distSegment / pxStep);
|
||||
float pdx = x - px;
|
||||
float pdy = y - py;
|
||||
float scale = attrs.paint3.getStrokeWidth() / ( actionArrow.getWidth() / 2.25f);
|
||||
float scaledWidth = actionArrow.getWidth();
|
||||
matrix.reset();
|
||||
matrix.postTranslate(0, -actionArrow.getHeight() / 2f);
|
||||
matrix.postRotate((float) angle, actionArrow.getWidth() / 2f, 0);
|
||||
matrix.postTranslate(px + pdx - actionArrow.getWidth() / 2f, py + pdy);
|
||||
if (scale > 1.0f) {
|
||||
matrix.postScale(scale, scale);
|
||||
scaledWidth *= scale;
|
||||
}
|
||||
matrix.postTranslate(px + pdx - scaledWidth/ 2f, py + pdy);
|
||||
canvas.drawBitmap(actionArrow, matrix, paintIconAction);
|
||||
} else {
|
||||
px = x;
|
||||
|
|