Merge branch 'master' into WikipediaSearchBanner

This commit is contained in:
Vitaliy 2020-07-02 16:52:48 +03:00
commit 15a964f4bd
25 changed files with 528 additions and 235 deletions

View file

@ -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;
}
}

View file

@ -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;
}

View file

@ -13,7 +13,11 @@ public class IncompleteTransportRoute {
}
public void setNextLinkedRoute(IncompleteTransportRoute nextLinkedRoute) {
if (this.nextLinkedRoute == null) {
this.nextLinkedRoute = nextLinkedRoute;
} else {
this.nextLinkedRoute.setNextLinkedRoute(nextLinkedRoute);
}
}
public long getRouteId() {

View file

@ -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;

View file

@ -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 {

View file

@ -32,10 +32,6 @@ public class RoutePlannerFrontEnd {
protected static final double GPS_POSSIBLE_ERROR = 7;
public boolean useSmartRouteRecalculation = true;
public static double AVERAGE_SPLIT_DISTANCE_GPX = 1500;
public static double MINIMUM_POINT_APPROXIMATION = 50;
public static double MINIMUM_STRAIGHT_STEP_APPROXIMATION = 50;
public RoutePlannerFrontEnd() {
}
@ -46,14 +42,29 @@ public class RoutePlannerFrontEnd {
COMPLEX
}
public static class GpxApproximationResult {
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",
@ -192,91 +203,152 @@ public class RoutePlannerFrontEnd {
}
// TODO add missing turns for straight lines
// TODO smoothness is not correct for car routing
// TODO native crash
// TODO big gaps when there is no match
// TODO not correct bicycle-> pedestrian
// TODO slow - too many findRouteSegment
// TODO fix progress / timings routing /
// TODO smoothen straight line Douglas-Peucker (remove noise)
public GpxApproximationResult searchGpxRoute(final RoutingContext ctx, List<LatLon> points) throws IOException, InterruptedException {
GpxApproximationResult gctx = new GpxApproximationResult();
// 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 = AVERAGE_SPLIT_DISTANCE_GPX;
double routeDist = gctx.MAXIMUM_STEP_APPROXIMATION;
GpxPoint next = findNextGpxPointWithin(gctx, gpxPoints, start, routeDist);
boolean routeFound = false;
if (next != null && initRoutingPoint(start, gctx, ctx, MINIMUM_POINT_APPROXIMATION)) {
boolean firstAttempt = true;
while ((firstAttempt || next.cumDist - start.cumDist > MINIMUM_POINT_APPROXIMATION) && !routeFound) {
firstAttempt = false;
routeFound = initRoutingPoint(next, gctx, ctx, MINIMUM_POINT_APPROXIMATION);
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(ctx, gctx, gpxPoints, start, next);
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);
}
}
}
if (routeFound) {
// route is found, cut the end of the route and move to next iteration
start = next;
} else {
}
// route is not found skip segment and keep it as straight line on display
if (!routeFound) {
// route is not found, move start point by
start = findNextGpxPointWithin(gctx, gpxPoints, start, MINIMUM_STRAIGHT_STEP_APPROXIMATION);
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(ctx, gctx, gpxPoints);
calculateGpxRoute(gctx, gpxPoints);
if (!gctx.res.isEmpty()) {
new RouteResultPreparation().printResults(ctx, points.get(0), points.get(points.size() - 1), gctx.res);
new RouteResultPreparation().printResults(gctx.ctx, points.get(0), points.get(points.size() - 1), gctx.res);
System.out.println(gctx);
}
return gctx;
}
private void calculateGpxRoute(final RoutingContext ctx, GpxApproximationResult gctx, List<GpxPoint> gpxPoints) {
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");
TIntArrayList lastStraightLine = null;
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(MapUtils.get31TileNumberX(startPoint.getLongitude()));
lastStraightLine.add(MapUtils.get31TileNumberY(startPoint.getLatitude()));
lastStraightLine.add(startPoint);
addStraightLine(gctx.res, lastStraightLine, reg, gctx);
lastStraightLine = null;
}
// TODO
double distLastPnt = gctx.distFromLastPoint(pnt.routeToTarget.get(0).getStartPoint());
double gpxDistPnt = gctx.distFromLastPoint(pnt.loc);
if (distLastPnt > MINIMUM_POINT_APPROXIMATION / 5 || gpxDistPnt > MINIMUM_POINT_APPROXIMATION / 5) {
System.out.println(String.format("????? routePnt - prevPnt = %f, gpxPoint - prevPnt = %f ",
distLastPnt, gpxDistPnt));
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 TIntArrayList();
lastStraightLine = new ArrayList<LatLon>();
// make smooth connection
if(gctx.distFromLastPoint(pnt.loc) > 1) {
lastStraightLine.add(MapUtils.get31TileNumberX(gctx.getLastPoint().getLongitude()));
lastStraightLine.add(MapUtils.get31TileNumberY(gctx.getLastPoint().getLatitude()));
lastStraightLine.add(gctx.getLastPoint());
}
}
lastStraightLine.add(MapUtils.get31TileNumberX(pnt.loc.getLongitude()));
lastStraightLine.add(MapUtils.get31TileNumberY(pnt.loc.getLatitude()));
lastStraightLine.add(pnt.loc);
i++;
}
}
@ -285,10 +357,10 @@ public class RoutePlannerFrontEnd {
lastStraightLine = null;
}
// clean turns to recaculate them
cleanupResultAndAddTurns(ctx, gctx);
cleanupResultAndAddTurns(gctx);
}
private List<GpxPoint> generageGpxPoints(List<LatLon> points, GpxApproximationResult 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++) {
@ -305,7 +377,7 @@ public class RoutePlannerFrontEnd {
return gpxPoints;
}
private void cleanupResultAndAddTurns(final RoutingContext ctx, GpxApproximationResult gctx) {
private void cleanupResultAndAddTurns(GpxRouteApproximation gctx) {
// cleanup double joints
int LOOK_AHEAD = 4;
for(int i = 0; i < gctx.res.size(); i++) {
@ -325,71 +397,119 @@ public class RoutePlannerFrontEnd {
r.setTurnType(null);
r.setDescription("");
}
preparation.prepareTurnResults(ctx, gctx.res);
preparation.prepareTurnResults(gctx.ctx, gctx.res);
}
private void addStraightLine(List<RouteSegmentResult> res, TIntArrayList lastStraightLine, RouteRegion reg, GpxApproximationResult gctx) {
private void addStraightLine(List<RouteSegmentResult> res, List<LatLon> lastStraightLine, RouteRegion reg, GpxRouteApproximation gctx) {
RouteDataObject rdo = new RouteDataObject(reg);
int l = lastStraightLine.size() / 2;
rdo.pointsX = new int[l];
rdo.pointsY = new int[l];
rdo.types = new int[] { 0 } ;
rdo.id = -1;
for (int i = 0; i < l; i++) {
rdo.pointsX[i] = lastStraightLine.get(i * 2);
rdo.pointsY[i] = lastStraightLine.get(i * 2 + 1);
if(i > 0) {
double dist = MapUtils.squareRootDist31(rdo.pointsX[i], rdo.pointsY[i], rdo.pointsX[i-1], rdo.pointsY[i-1]);
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 boolean initRoutingPoint(GpxPoint start, GpxApproximationResult gctx, RoutingContext ctx, double distThreshold) throws IOException {
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(), ctx, null, false);
RouteSegmentPoint rsp = findRouteSegment(start.loc.getLatitude(), start.loc.getLongitude(), gctx.ctx, null, false);
if (MapUtils.getDistance(rsp.getPreciseLatLon(), start.loc) < distThreshold) {
start.pnt = rsp;
}
}
return start != null && start.pnt != null;
if (start != null && start.pnt != null) {
return true;
}
return false;
}
private GpxPoint findNextGpxPointWithin(GpxApproximationResult gctx, List<GpxPoint> gpxPoints,
private GpxPoint findNextGpxPointWithin(GpxRouteApproximation gctx, List<GpxPoint> gpxPoints,
GpxPoint start, double dist) {
int targetInd = start.ind + 1;
// 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()) {
while (targetInd < gpxPoints.size() && targetInd >= 0) {
target = gpxPoints.get(targetInd);
if (target.cumDist - start.cumDist > dist) {
if (Math.abs(target.cumDist - start.cumDist) > Math.abs(dist)) {
break;
}
targetInd++;
targetInd = targetInd + plus;
}
return target;
}
private boolean findGpxRouteSegment(final RoutingContext ctx, GpxApproximationResult gctx, List<GpxPoint> gpxPoints,
GpxPoint start, GpxPoint target) throws IOException, InterruptedException {
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(ctx, start.pnt, target.pnt, null);
res = searchRouteInternalPrepare(gctx.ctx, start.pnt, target.pnt, null);
routeIsCorrect = res != null && !res.isEmpty();
if (routeIsCorrect) {
makeStartEndPointsPrecise(res, start.pnt.getPreciseLatLon(), target.pnt.getPreciseLatLon(), null);
}
for (int k = start.ind + 1; routeIsCorrect && k < target.ind; k++) {
GpxPoint ipoint = gpxPoints.get(k);
if (!pointCloseEnough(ipoint, res)) {
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;
}
@ -397,10 +517,11 @@ public class RoutePlannerFrontEnd {
return routeIsCorrect;
}
private boolean pointCloseEnough(GpxPoint ipoint, List<RouteSegmentResult> res) {
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 = MINIMUM_POINT_APPROXIMATION * MINIMUM_POINT_APPROXIMATION * 4;
double SQR = gctx.MINIMUM_POINT_APPROXIMATION;
SQR = SQR * SQR;
for (RouteSegmentResult sr : res) {
int start = sr.getStartPointIndex();
int end = sr.getEndPointIndex();
@ -525,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);
}
}
@ -540,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();

View file

@ -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));
}

View file

@ -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;
}
}

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -3823,4 +3823,6 @@
<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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>
@ -3755,4 +3755,5 @@ Hosszúság: %2$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>

View file

@ -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>
@ -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>
@ -3525,4 +3525,59 @@
<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>

View file

@ -498,7 +498,7 @@
<string name="follow">Start route begeleiding</string>
<string name="recalculate_route_to_your_location">Soort vervoer:</string>
<string name="mark_final_location_first">Kies eerst een bestemming</string>
<string name="get_directions">Routebeschrijving</string>
<string name="get_directions">Route</string>
<string name="opening_hours">Openingstijden</string>
<string name="opening_changeset">Wijzigingsset openen…</string>
<string name="closing_changeset">Wijzigingsset sluiten…</string>
@ -556,7 +556,7 @@
<string name="map_view_3d">Kaartbeeld 3D</string>
<string name="show_poi_over_map_description">Toon laatst gebruikte POI-kaartlaag.</string>
<string name="show_poi_over_map">Toon POI-kaartlaag</string>
<string name="map_tile_source_descr">Kies bron van online of opgeslagen kaartsegmenten</string>
<string name="map_tile_source_descr">Kies bron van online of gecachte kaartsegmenten.</string>
<string name="map_tile_source">Kaartsegment bron</string>
<string name="map_source">Kaartbron</string>
<string name="use_internet">Gebruik internet</string>
@ -707,7 +707,7 @@
<string name="global_app_allocated_memory_descr">Beschikbaar werkgeheugen %1$s MB (Android limiet %2$s MB, Dalvik %3$s MB).</string>
<string name="global_app_allocated_memory">Beschikbaar werkgeheugen</string>
<string name="native_app_allocated_memory_descr">Werkgeheugen, gereserveerd door app %1$s MB (Dalvik %2$s MB, overig %3$s MB).
Proportioneel werkgeheugen %4$s MB (Android limiet %5$s MB, Dalvik %6$s MB).</string>
\n Proportioneel werkgeheugen %4$s MB (Android limiet %5$s MB, Dalvik %6$s MB).</string>
<string name="native_app_allocated_memory">Totaal werkgeheugen</string>
<string name="select_animate_speedup">Snelheid van de routesimulatie:</string>
<string name="osmand_parking_hours">Uur</string>
@ -754,7 +754,7 @@ Proportioneel werkgeheugen %4$s MB (Android limiet %5$s MB, Dalvik %6$s MB).</st
<string name="osmand_plus_short_description_80_chars">OsmAnd is een open-source navigatiesysteem met online en offline kaarten</string>
<string name="osmand_long_description_1000_chars">OsmAnd (OSM Automated Navigation Directions)
\n
\n OsmAnd is een open-source navigatie-app die toegang geeft tot een grote variëteit aan wereldwijde OSM-gegevens. Alle kaartgegevens (vector- of rasterkaarten) kunnen in het telefoongeheugen worden opgeslagen voor offline gebruik. OsmAnd biedt ook zowel offline als online route-aanwijzingen, met stembegeleiding.
\n OsmAnd is een open-source navigatie-app die toegang geeft tot een grote variëteit aan wereldwijde OSM-gegevens. Alle kaartgegevens (vector- of rasterkaarten) kunnen in het telefoongeheugen worden opgeslagen voor offline gebruik. OsmAnd biedt ook zowel offline als online routeaanwijzingen, met stembegeleiding.
\n
\n Enkele van de belangrijkste mogelijkheden:
\n - Volledig offline gebruik (gedownloade vector- of rasterkaarten worden opgeslagen op het apparaat)
@ -995,8 +995,8 @@ Proportioneel werkgeheugen %4$s MB (Android limiet %5$s MB, Dalvik %6$s MB).</st
<string name="clear_intermediate_points">Wis Tussenpunten</string>
<string name="keep_intermediate_points">Bewaar Tussenpunten</string>
<string name="new_directions_point_dialog">Er zijn al Tussenpunten gemaakt.</string>
<string name="context_menu_item_directions_to">Routebeschrijving naar</string>
<string name="context_menu_item_directions_from">Routebeschrijving vanaf</string>
<string name="context_menu_item_directions_to">Route naar</string>
<string name="context_menu_item_directions_from">Route vanaf</string>
<string name="route_descr_map_location">Kaart: </string>
<string name="route_to">Naar:</string>
<string name="route_via">Via:</string>
@ -1365,8 +1365,8 @@ Proportioneel werkgeheugen %4$s MB (Android limiet %5$s MB, Dalvik %6$s MB).</st
<string name="edit_group">Bewerk groep</string>
<string name="plugin_install_needs_network">Om deze plugin te installeren is een internetverbinding nodig.</string>
<string name="plugin_nautical_name">Nautische kaartweergave</string>
<string name="world_ski_missing">Om skikaarten te kunnen gebruiken, moet u de speciale offline skikaart downloaden</string>
<string name="nautical_maps_missing">Om nautische kaarten te kunnen gebruiken, moet u de speciale offline nautische kaart downloaden</string>
<string name="world_ski_missing">Download de speciale offline kaart om skifaciliteiten weer te geven.</string>
<string name="nautical_maps_missing">Download de speciale offline kaart om nautische details weer te geven.</string>
<string name="get_plugin">Installeren</string>
<string name="watch">Bekijk</string>
<string name="rendering_attr_pisteRoutes_name">Ski-pistes</string>
@ -1718,7 +1718,7 @@ Proportioneel werkgeheugen %4$s MB (Android limiet %5$s MB, Dalvik %6$s MB).</st
<string name="update_all">Alles updaten (%1$s MB)</string>
<string name="free_downloads_used">Gebruikte gratis downloads</string>
<string name="free_downloads_used_description">Bekijk hoeveel gratis downloads er al gebruikt zijn.</string>
<string name="application_dir_description">"Kies waar kaarten en andere gegevens opgeslagen worden."</string>
<string name="application_dir_description">Kies waar kaarten en andere gegevens opgeslagen worden.</string>
<string name="show_on_start_description">\'Uit\' toont direct de kaart.</string>
<string name="enter_country_name">Kies het land</string>
<string name="new_version">Nieuwe versie</string>
@ -1961,7 +1961,7 @@ Proportioneel werkgeheugen %4$s MB (Android limiet %5$s MB, Dalvik %6$s MB).</st
<string name="follow_us">Volg ons</string>
<string name="access_direction_audio_feedback">Richting aangeven met geluid</string>
<string name="access_direction_audio_feedback_descr">Geef de richting van de bestemming aan met geluid.</string>
<string name="access_direction_haptic_feedback">Richting aangeven met trilling</string>
<string name="access_direction_haptic_feedback">Richting aangeven met trillen</string>
<string name="access_direction_haptic_feedback_descr">Geef de richting van de bestemming aan met trillingen.</string>
<string name="move_marker_bottom_sheet_title">Verplaats de kaart om de positie van de markering te wijzigen</string>
<!-- string name="lat_lon_pattern">Lat: %1$.5f Lon: %2$.5f</string -->
@ -2104,62 +2104,62 @@ Proportioneel werkgeheugen %4$s MB (Android limiet %5$s MB, Dalvik %6$s MB).</st
<string name="navigate_point_olc_info_area">Geldige volledige OLC
\nBeslaat gebied: %1$s x %2$s</string>
<string name="configure_screen_quick_action">Sneltoets</string>
<string name="quick_action_item_action">Actie %d</string>
<string name="quick_action_item_action">Sneltoets %d</string>
<string name="quick_action_item_screen">Scherm %d</string>
<string name="quick_action_add_marker">Markeervlaggetje toevoegen</string>
<string name="quick_action_add_poi">POI toevoegen</string>
<string name="quick_action_map_style">Kaartstijl wisselen</string>
<string name="quick_action_map_style">Kaartstijl wijzigen</string>
<string name="quick_action_map_style_switch">De kaartstijl is gewijzigd naar \"%s\".</string>
<string name="quick_action_take_audio_note">Audio-notitie maken</string>
<string name="quick_action_take_video_note">Video-notitie maken</string>
<string name="quick_action_take_photo_note">Maak foto</string>
<string name="quick_action_add_osm_bug">Voeg OSM-notitie toe</string>
<string name="quick_action_navigation_voice">Stembegeleiding Aan/Uit</string>
<string name="quick_action_navigation_voice_off">Stembegeleiding staat uit</string>
<string name="quick_action_navigation_voice_on">Stembegeleiding staat aan</string>
<string name="quick_action_add_gpx">GPX-routepunt maken</string>
<string name="quick_action_add_parking">Parkeerpositie instellen</string>
<string name="quick_action_new_action">Actie toevoegen</string>
<string name="quick_action_edit_action">Actie bewerken</string>
<string name="quick_action_take_audio_note">Audionotitie maken</string>
<string name="quick_action_take_video_note">Videonotitie maken</string>
<string name="quick_action_take_photo_note">Fotonotitie maken</string>
<string name="quick_action_add_osm_bug">OSM-notitie toevoegen</string>
<string name="quick_action_navigation_voice">Stembegeleiding aan/uit</string>
<string name="quick_action_navigation_voice_off">Stembegeleiding aan</string>
<string name="quick_action_navigation_voice_on">Stembegeleiding uit</string>
<string name="quick_action_add_gpx">GPX-routepunt toevoegen</string>
<string name="quick_action_add_parking">Parkeerlocatie instellen</string>
<string name="quick_action_new_action">Sneltoets toevoegen</string>
<string name="quick_action_edit_action">Sneltoets bewerken</string>
<string name="quick_action_add_favorite">Favoriet toevoegen</string>
<string name="dialog_add_action_title">Actie toevoegen</string>
<string name="quick_actions_delete">Actie verwijderden</string>
<string name="quick_actions_delete_text">"Actie \"%s\" inderdaad verwijderen?"</string>
<string name="quick_favorites_show_favorites_dialog">Toon favorietenscherm</string>
<string name="quick_actions_delete">Sneltoets verwijderen</string>
<string name="quick_actions_delete_text">Weet je zeker dat je sneltoets \"%s\" wilt verwijderen\?</string>
<string name="quick_favorites_show_favorites_dialog">Toon Favorieten-scherm</string>
<string name="quick_favorites_name_preset">Naam voorstellen</string>
<string name="quick_action_add_marker_descr">Een toets om een Markeervlaggetje toe te voegen in het midden van het scherm.</string>
<string name="quick_action_add_gpx_descr">Een knop om een GPX-routepunt toe te voegen in het midden van het scherm.</string>
<string name="quick_action_take_audio_note_descr">Een knop om een Audio-notitie toe te voegen in het midden van het scherm.</string>
<string name="quick_action_take_video_note_descr">Een knop om een Video-notitie toe te voegen in het midden van het scherm.</string>
<string name="quick_action_take_photo_note_descr">Een knop om een Foto-notitie toe te voegen in het midden van het scherm.</string>
<string name="quick_action_take_audio_note_descr">Een knop om een audio-notitie toe te voegen in het midden van het scherm.</string>
<string name="quick_action_take_video_note_descr">Een knop om een video-notitie toe te voegen in het midden van het scherm.</string>
<string name="quick_action_take_photo_note_descr">Een knop om een foto-notitie toe te voegen in het midden van het scherm.</string>
<string name="quick_action_add_osm_bug_descr">Een knop om een OSM-notitie toe te voegen in het midden van het scherm.</string>
<string name="quick_action_add_poi_descr">Een knop om een POI toe te voegen in het midden van het scherm.</string>
<string name="quick_action_navigation_voice_descr">Een schakelknop om de stembegeleiding aan of uit te zetten tijdens navigatie.</string>
<string name="quick_action_add_parking_descr">Een knop om de parkeerpositie toe te voegen in het midden van het scherm.</string>
<string name="quick_action_add_parking_descr">Een knop om een parkeerlocatie toe te voegen in het midden van het scherm.</string>
<string name="quick_action_interim_dialog">Bewerkingsdialoog tonen</string>
<string name="favorite_autofill_toast_text">" opgeslagen als "</string>
<string name="favorite_empty_place_name">Plaats</string>
<string name="quick_action_duplicates">Sneltoetsnaam gewijzigd in %1$s om duplicaat te voorkomen.</string>
<string name="quick_action_duplicate">Sneltoets-duplicaat</string>
<string name="quick_action_showhide_favorites_descr">Een schakelknop toont of verbergt de Favoriete punten op de kaart.</string>
<string name="quick_action_showhide_poi_descr">Een schakelknop om POIs op de kaart te tonen of te verbergen.</string>
<string name="quick_action_showhide_favorites_descr">Een schakelknop om Favorieten al dan niet te tonen op de kaart.</string>
<string name="quick_action_showhide_poi_descr">Een schakelknop om POIs al dan niet op de kaart te tonen.</string>
<string name="quick_action_showhide_favorites_title">Favorieten tonen /verbergen</string>
<string name="quick_action_favorites_show">Toon favorieten</string>
<string name="quick_action_favorites_hide">Verberg favorieten</string>
<string name="quick_action_showhide_poi_title">POI tonen/verbergen</string>
<string name="quick_action_poi_show">Toon %1$s</string>
<string name="quick_action_poi_hide">Verberg %1$s</string>
<string name="quick_action_favorites_show">Favorieten tonen</string>
<string name="quick_action_favorites_hide">Favorieten verbergen</string>
<string name="quick_action_showhide_poi_title">POIs tonen/verbergen</string>
<string name="quick_action_poi_show">%1$s tonen</string>
<string name="quick_action_poi_hide">%1$s verbergen</string>
<string name="quick_action_add_category">Categorie toevoegen</string>
<string name="quick_action_add_create_items">Items aanmaken</string>
<string name="quick_action_add_configure_map">Kaart-instellingen</string>
<string name="quick_action_add_configure_map">Kaartinstellingen</string>
<string name="quick_action_add_navigation">Navigatie</string>
<string name="quick_action_fav_name_descr">Leeg laten om automatisch adres of plaatsnaam te gebruiken.</string>
<string name="quick_action_bug_descr">Dit bericht wordt automatisch aangevuld in het commentaarveld.</string>
<string name="quick_action_fav_name_descr">Leeg laten om adres of plaatsnaam te gebruiken.</string>
<string name="quick_action_bug_descr">Dit bericht wordt automatisch ingevuld in het commentaarveld.</string>
<string name="quick_action_bug_message">Bericht</string>
<string name="quick_action_category_descr">Categorie om de Favoriet in op te slaan:</string>
<string name="quick_action_gpx_category_descr">Kies een categorie (optie).</string>
<string name="quick_action_gpx_category_descr">Kies een optionele categorie.</string>
<string name="quick_action_poi_list">POI-lijst</string>
<string name="quick_action_sh_poi_descr">Je kunt één of meerdere POI-categorieën kiezen om weer te geven.</string>
<string name="quick_action_sh_poi_descr">Je kunt één of meerdere POI-categorieën kiezen om te tonen op de kaart.</string>
<string name="quick_action_page_list_descr">Een knop om door de onderstaande lijst te bladeren.</string>
<string name="quick_action_map_style_action">Kaartstijl toevoegen</string>
<string name="quick_action_empty_param_error">Alle parameters invullen</string>
@ -2219,14 +2219,14 @@ Proportioneel werkgeheugen %4$s MB (Android limiet %5$s MB, Dalvik %6$s MB).</st
<string name="select_city">Plaats kiezen</string>
<string name="select_postcode">Postcode zoeken</string>
<string name="quick_action_auto_zoom">Autozoom kaart aan/uit</string>
<string name="quick_action_auto_zoom_desc">Knop om de automatische kaartzoom volgens de snelheid aan of uit te zetten.</string>
<string name="quick_action_auto_zoom_desc">Knop om de snelheidsgebaseerde automatische zoom aan of uit te zetten.</string>
<string name="quick_action_auto_zoom_on">Autozoom aan</string>
<string name="quick_action_auto_zoom_off">Autozoom uit</string>
<string name="quick_action_add_destination">Bestemming instellen</string>
<string name="quick_action_replace_destination">Bestemming vervangen</string>
<string name="quick_action_add_first_intermediate">Eerste Tussenpunt toevoegen</string>
<string name="quick_action_add_destination_desc">Een druk op de sneltoets voegt het midden van het scherm toe als bestemming. De vorige bestemming wordt het laatste tussenpunt.</string>
<string name="quick_action_replace_destination_desc">Een knop om de bestemming in het schermmidden te plaatsen waardoor de (eventuele) hiervoor geselecteerde bestemming wordt vervangen.</string>
<string name="quick_action_add_first_intermediate">Eerste tussenpunt toevoegen</string>
<string name="quick_action_add_destination_desc">Een knop om het midden van het scherm in te stellen als bestemming, de vorige bestemming wordt het laatste tussenpunt.</string>
<string name="quick_action_replace_destination_desc">Een knop om het midden van het scherm in te stellen als bestemming, waardoor de (eventueel) eerder ingestelde bestemming wordt vervangen.</string>
<string name="quick_action_add_first_intermediate_desc">Een knop om het midden van het scherm als eerste tussenpunt toe te voegen.</string>
<string name="no_overlay">Geen extra laag</string>
<string name="no_underlay">Geen achtergrondlaag</string>
@ -2279,9 +2279,9 @@ Proportioneel werkgeheugen %4$s MB (Android limiet %5$s MB, Dalvik %6$s MB).</st
<string name="routing_attr_allow_private_description">Ga ook over privé-terreinen.</string>
<string name="display_zoom_level">Zoomniveau weergave: %1$s</string>
<string name="route_is_too_long_v2">Voor grote afstanden: voeg tussenpunten toe als binnen de 10 minuten geen route berekend is.</string>
<string name="osmand_extended_description_part1">"OsmAnd (OSM, Automated Navigation Directions) is een kaart- en navigatieprogramma dat de gratis, wereldwijde en gedetailleerde OpenStreetMap (OSM) data gebruikt.
<string name="osmand_extended_description_part1">OsmAnd (OSM Automated Navigation Directions) is een kaart- en navigatie-app die gebruik maakt van de gratis, wereldwijde en hoogwaardige OSM-gegevens.
\n
\nGebruikt visuele en gesproken navigatie, toont POI\'s (point of interest), maakt en volgt GPX-tracks, toont hoogtelijnen en hoogte informatie (via plug-in), kiest tussen auto, fiets, wandelen of andere, je kan de OSM-kaart bewerken en nog veel meer."</string>
\n Gebruik visuele en gesproken navigatie, toon POI\'s (point of interest), maak en volg GPX-tracks, toon hoogtelijnen en hoogte-informatie (via plug-in), kies tussen autorijden, fietsen of wandelen, bewerk de OSM-kaart en nog veel meer.</string>
<string name="osmand_extended_description_part2">GPS-navigatie
\n • Offline (geen datakosten) of online (snellere) routeberekening
\n • Stap-voor-stap navigatie met opgenomen stem of gesproken straatnamen
@ -2311,7 +2311,12 @@ Proportioneel werkgeheugen %4$s MB (Android limiet %5$s MB, Dalvik %6$s MB).</st
\n• Bekijk uw snelheid en hoogte
\n• De GPX opname optie stelt u in staat uw route op te slaan en deze te delen
\n• Via een extra plugin kunt u hoogteverschillen weergeven als hoogtelijnen of reliëfschaduw</string>
<string name="osmand_extended_description_part6">Wandelen • De kaart toont voetpaden, bergpaden, routes door parken • Wikipedia vertelt u meer over uw omgeving • OV-haltes (tram, bus, trein, metro), inclusief lijnnummers, helpen u te navigeren • Navigatie gebruikt voetpaden • Neem uw weg op als GPX-route of volg een gedownloade route
<string name="osmand_extended_description_part6">Lopen, wandelen, stadswandeling
\n • De kaart toont voetpaden en wandelpaden
\n • Wikipedia kan je veel vertellen tijdens een stadswandeling, in je eigen taal
\n • OV-haltes (tram, bus, trein, metro), inclusief lijnnummers, helpen je bij het reizen in een onbekende stad
\n • GPS-navigatie in voetgangermodus gebruikt voor het berekenen van de route voet- en wandelpaden
\n • Upload en volg een GPX-route of neem er zelf één op en deel deze.
\n</string>
<string name="osmand_extended_description_part7">Draag bij aan OpenStreetMap (OSM)
\n • Meld fouten
@ -2332,7 +2337,7 @@ Proportioneel werkgeheugen %4$s MB (Android limiet %5$s MB, Dalvik %6$s MB).</st
\n • Afrika: **
\n • Antarctica: *
\n Voor bijna elk land ter wereld kunt u een kaart downloaden.</string>
<string name="osmand_plus_extended_description_part8">Indicatie van compleetheid en kwaliteit van de kaart:
<string name="osmand_plus_extended_description_part8">Indicatie van de volledigheid en kwaliteit van het kaartmateriaal:
\n • West-Europa: ****
\n • Oost-Europa: ***
\n • Rusland: ***
@ -2342,14 +2347,15 @@ Proportioneel werkgeheugen %4$s MB (Android limiet %5$s MB, Dalvik %6$s MB).</st
\n • Japan &amp; Korea: ***
\n • Midden-Oosten: **
\n • Afrika: **
\n • Antarctica: * Van bijna alle landen is een kaart te downloaden: van Afghanistan tot Zimbabwe, Australië tot de VS, Nederland, Duitsland, Spanje, Japan, …
\n • Antarctica: *
\n Van bijna alle landen is een kaart te downloaden: van Afghanistan tot Zimbabwe, Australië tot de VS, Nederland, Duitsland, Spanje, Japan, …
\n</string>
<string name="save_poi_too_many_uppercase">Naam bevat erg veel hoofdletters, toch doorgaan?</string>
<string name="search_favorites">Zoek in Favorieten</string>
<string name="quick_action_showhide_osmbugs_title">Toon of verberg OSM notities</string>
<string name="quick_action_osmbugs_show">Toon OSM notities</string>
<string name="quick_action_osmbugs_hide">Verberg OSM notities</string>
<string name="quick_action_showhide_osmbugs_descr">Knop om OSM notities te tonen of verbergen.</string>
<string name="quick_action_showhide_osmbugs_title">OSM-notities tonen of verbergen</string>
<string name="quick_action_osmbugs_show">OSM-notities tonen</string>
<string name="quick_action_osmbugs_hide">OSM-notities verbergen</string>
<string name="quick_action_showhide_osmbugs_descr">Knop om OSM-notities al dan niet te tonen.</string>
<string name="sorted_by_distance">Gesorteerd op afstand</string>
<string name="private_access_routing_req">Uw bestemming ligt in een gebied dat particulier eigendom is. Wilt u gebruik van particuliere wegen voor deze route toestaan\?</string>
<string name="restart_search">Opnieuw zoeken</string>
@ -2373,13 +2379,19 @@ Proportioneel werkgeheugen %4$s MB (Android limiet %5$s MB, Dalvik %6$s MB).</st
<string name="shared_string_permissions">Rechten</string>
<string name="import_gpx_failed_descr">Kan bestand niet importeren. Controleer of OsmAnd rechten heeft om het bestand te lezen.</string>
<string name="distance_moving">Gecorrigeerde afstand</string>
<string name="osmand_plus_extended_description_part1">OsmAnd+ (OSM Automated Navigation Directions) is een kaart- en navigatieprogramma dat de gratis, wereldwijde en uitgebreide OpenStreetMap (OSM) gegevens gebruikt.
\nMet akoestische en visuele navigatie, toont POI (points of interest), maakt en beheert GPX-sporen, gebruikt hoogtelijnen en hoogtegegevens, kiest tussen auto, fiets en wandelen, je kan OSM bewerken en veel meer.
<string name="osmand_plus_extended_description_part1">OsmAnd+ (OSM Automated Navigation Directions) is een kaart- en navigatie-app die de gratis, wereldwijde en hoogwaardige OSM-gegevens gebruikt.
\n Gebruik gesproken en visuele navigatie, toon POIS (points of interest), maak en beheer GPX-tracks, toon hoogtelijnen en hoogtegegevens, kies tussen autorijden, fietsen en wandelen, bewerk OSM en nog veel meer.
\n
\nOsmAnd+ is de betaalde versie van de app. Met de aanschaf ondersteunt u het project, het maken van nieuwe functies, en krijgt u de nieuwste functies.
\n OsmAnd+ is de betaalde versie van de app. Met de aanschaf ondersteun je het project, het ontwikkelen van nieuwe functies, en ontvang je de laatste updates.
\n
\nEen paar belangrijke functies:</string>
<string name="osmand_plus_extended_description_part2">" Navigatie • werkt online (snel) of offline (zonder roaming-kosten in het buitenalnd) • gesproken stap-voor-stap navigatie (met opgenomen of synthetische stem) • optioneel met rijstrookaanduiding, straatnamen und geschatte aankomsttijd • tussenstops op de route • automatische herberekening bij het verlaten van de route • zoek op adres, soort (bijv.: restaurant, hotel, benzinepomp, museum) of geografische coördinaten "</string>
\n Een paar van de belangrijkste functies:</string>
<string name="osmand_plus_extended_description_part2">" Navigatie
\n • Online (snel) of offline (zonder roamingkosten in het buitenland)
\n • Stap-voor-stap stembegeleiding (met opgenomen of TTS-stemmen)
\n • Optioneel met rijstrookindicatie, weergave van straatnamen en geschatte aankomsttijd
\n • Ondersteuning voor tussenstops op de route
\n • Automatische herberekening bij het afwijken van de route
\n • Zoek op adres, soort (bijv.: restaurant, hotel, benzinepomp, museum) of geografische coördinaten "</string>
<string name="osmand_plus_extended_description_part3">Kaartweergave
\n • Positie en richting tonen
\n • Kaart draaien in kompas- of bewegingsrichting
@ -2449,7 +2461,7 @@ Proportioneel werkgeheugen %4$s MB (Android limiet %5$s MB, Dalvik %6$s MB).</st
<string name="enter_gpx_name">GPX bestandsnaam:</string>
<string name="show_on_map_after_saving">Toon op kaart na opslaan</string>
<string name="measurement_tool">Afstand meten</string>
<string name="quick_action_start_stop_navigation">Start/stop navigatie</string>
<string name="quick_action_start_stop_navigation">Navigatie starten/stoppen</string>
<string name="average">Gemiddeld</string>
<string name="of">%1$d van de %2$d</string>
<string name="retry">Probeer opnieuw</string>
@ -2555,7 +2567,7 @@ Proportioneel werkgeheugen %4$s MB (Android limiet %5$s MB, Dalvik %6$s MB).</st
<string name="empty_state_markers_active">Maak markeringen aan op de kaart!</string>
<string name="shared_string_two">Twee</string>
<string name="shared_string_one">Een</string>
<string name="active_markers_descr">Kies hoeveel markeervlaggetjes getoond worden:</string>
<string name="active_markers_descr">Kies hoeveel markeervlaggetjes getoond worden.</string>
<string name="digits_quantity">Aantal decimalen</string>
<string name="shared_string_right">Rechts</string>
<string name="shared_string_left">Links</string>
@ -2736,7 +2748,7 @@ Proportioneel werkgeheugen %4$s MB (Android limiet %5$s MB, Dalvik %6$s MB).</st
<string name="wiki_article_search_text">Zoeken naar het bijbehorende wiki-artikel</string>
<string name="wiki_article_not_found">Artikel niet gevonden</string>
<string name="how_to_open_wiki_title">Hoe Wikipedia-artikelen te openen?</string>
<string name="quick_action_edit_actions">Wijzig acties</string>
<string name="quick_action_edit_actions">Wijzig sneltoetsen</string>
<string name="shared_string_bookmark">Bladwijzer</string>
<string name="point_deleted">Punt %1$s verwijderd</string>
<string name="coord_input_edit_point">Punt bewerken</string>
@ -2780,7 +2792,7 @@ Proportioneel werkgeheugen %4$s MB (Android limiet %5$s MB, Dalvik %6$s MB).</st
\n
\n • Ondersteuning voor het wijzigen van polygon-(non-faciliteits)voorwerpen
\n</string>
<string name="test_voice_desrc">Druk op een knop en luister naar de bijhorende gesproken melding om ontbrekende of foutieve meldingen te identificeren.</string>
<string name="test_voice_desrc">Tik op een knop en luister naar de bijbehorende gesproken prompt om te horen of deze ontbreekt of incorrect is</string>
<string name="osm_live_subscriptions">Abonnementen</string>
<string name="powered_by_osmand">Mogelijk gemaakt door OsmAnd</string>
<string name="osm_live_plan_pricing">Tariefoverzicht</string>
@ -2884,10 +2896,10 @@ Proportioneel werkgeheugen %4$s MB (Android limiet %5$s MB, Dalvik %6$s MB).</st
<string name="shared_string_swap">Wissel</string>
<string name="show_more">Toon meer</string>
<string name="tracks_on_map">Getoonde tracks</string>
<string name="quick_action_show_hide_gpx_tracks">Toon/Verberg GPX-tracks</string>
<string name="quick_action_show_hide_gpx_tracks_descr">Een knop om bepaalde GPX-tracks te tonen of verbergen op de kaart.</string>
<string name="quick_action_gpx_tracks_hide">Verberg GPX-tracks</string>
<string name="quick_action_gpx_tracks_show">Toon GPX-tracks</string>
<string name="quick_action_show_hide_gpx_tracks">GPX-tracks tonen/verbergen</string>
<string name="quick_action_show_hide_gpx_tracks_descr">Een knop om geselecteerde GPX-tracks al dan niet te tonen op de kaart.</string>
<string name="quick_action_gpx_tracks_hide">GPX-tracks verbergen</string>
<string name="quick_action_gpx_tracks_show">GPX-tracks tonen</string>
<string name="add_destination_query">Voeg a.u.b. eerst de Bestemming in</string>
<string name="previous_route">Vorige route</string>
<string name="add_home">Thuisadres toevoegen</string>
@ -2914,10 +2926,10 @@ Proportioneel werkgeheugen %4$s MB (Android limiet %5$s MB, Dalvik %6$s MB).</st
<string name="intermediate_destinations">Tussenbestemmingen</string>
<string name="arrive_at_time">Aankomst om %1$s</string>
<string name="shared_string_launch">Open</string>
<string name="quick_action_switch_day_night_descr">Tik deze knop om te wisselen tussen de OsmAnd dag en nacht modus.</string>
<string name="quick_action_switch_day_night_descr">Een schakelknop om OsmAnd om te schakelen tussen dag- en nachtmodus.</string>
<string name="quick_action_switch_day_mode">Dagmodus</string>
<string name="quick_action_switch_night_mode">Nachtmodus</string>
<string name="quick_action_day_night_switch_mode">Wissel tussen dag/nacht modus</string>
<string name="quick_action_day_night_switch_mode">Wissel tussen dag-/nachtmodus</string>
<string name="routeInfo_surface_name">Oppervlakte</string>
<string name="routeInfo_smoothness_name">Kwaliteit wegdek</string>
<string name="routeInfo_steepness_name">Steilte</string>
@ -3181,13 +3193,13 @@ Proportioneel werkgeheugen %4$s MB (Android limiet %5$s MB, Dalvik %6$s MB).</st
<string name="app_mode_utv">Naast elkaar</string>
<string name="shared_string_maps">Kaarten</string>
<string name="quick_action_contour_lines_descr">Knop om hoogtelijnen al dan niet te tonen op de kaart.</string>
<string name="quick_action_contour_lines_show">Toon de hoogtelijnen</string>
<string name="quick_action_contour_lines_hide">Verberg de hoogtelijnen</string>
<string name="quick_action_show_hide_contour_lines">Toon/verberg de hoogtelijnen</string>
<string name="quick_action_contour_lines_show">Hoogtelijnen tonen</string>
<string name="quick_action_contour_lines_hide">Hoogtelijnen verbergen</string>
<string name="quick_action_show_hide_contour_lines">Hoogtelijnen tonen/verbergen</string>
<string name="quick_action_hillshade_descr">Knop om de reliëfschaduw al dan niet te tonen op de kaart.</string>
<string name="quick_action_hillshade_show">Toon reliëfschaduw</string>
<string name="quick_action_hillshade_hide">Verberg reliëfschaduw</string>
<string name="quick_action_show_hide_hillshade">Toon/verberg reliëfschaduw</string>
<string name="quick_action_hillshade_show">Reliëfschaduw tonen</string>
<string name="quick_action_hillshade_hide">Reliëfschaduw verbergen</string>
<string name="quick_action_show_hide_hillshade">Reliëfschaduw tonen/verbergen</string>
<string name="track_saved">Track opgeslagen</string>
<string name="rendering_attr_showCycleNodeNetworkRoutes_name">Toon knooppunt van de fietsroutes</string>
<string name="contour_lines_and_hillshade">Hoogtelijnen en reliëfschaduw</string>
@ -3293,7 +3305,7 @@ Proportioneel werkgeheugen %4$s MB (Android limiet %5$s MB, Dalvik %6$s MB).</st
<string name="store_tracks_in_daily_directories">Sla tracks op in dagelijkse folders</string>
<string name="store_tracks_in_daily_directories_descrp">Sla tracks op in sub-folders per opname dag (zoals 2018-01-01).</string>
<string name="simulate_your_location_gpx_descr">Simuleer uw positie door een opgenomen GPX track te gebruiken.</string>
<string name="quick_action_directions_from_desc">Een knop om het scherm te centreren op het vertrekpunt. Zal dan de bestemming vragen of de routeberekening starten.</string>
<string name="quick_action_directions_from_desc">Een knop om het midden van het scherm in te stellen als vertrekpunt. Hierna wordt de bestemming gevraagd of de routeberekening gestart.</string>
<string name="download_map_dialog">Dialoogvenster kaart downloads</string>
<string name="dialogs_and_notifications_title">Dialogen en meldingen</string>
<string name="dialogs_and_notifications_descr">Bepaal popups, dialogen en meldingen.</string>
@ -3462,10 +3474,10 @@ Proportioneel werkgeheugen %4$s MB (Android limiet %5$s MB, Dalvik %6$s MB).</st
<string name="profile_backup_failed">Kan profiel niet back-uppen.</string>
<string name="n_items_of_z">%1$s of %2$s</string>
<string name="download_slope_maps">Hellingen</string>
<string name="quick_action_show_hide_terrain">Toon/Verberg de omgeving</string>
<string name="quick_action_terrain_hide">Verberg de omgeving</string>
<string name="quick_action_terrain_show">Toon de omgeving</string>
<string name="quick_action_terrain_descr">Een knop om een laag op de kaart weer te geven of te verbergen.</string>
<string name="quick_action_show_hide_terrain">Terrein tonen / verbergen</string>
<string name="quick_action_terrain_hide">Terrein verbergen</string>
<string name="quick_action_terrain_show">Terrein tonen</string>
<string name="quick_action_terrain_descr">Een knop om de terreinlaag al dan niet te tonen op de kaart.</string>
<string name="delete_description">Verwijder een beschrijving</string>
<string name="add_description">Voeg een beschrijving toe</string>
<string name="select_group">Selecteer groep</string>
@ -3492,7 +3504,7 @@ Proportioneel werkgeheugen %4$s MB (Android limiet %5$s MB, Dalvik %6$s MB).</st
<string name="vessel_height_limit_description">Stel de hoogte van het vaartuig in om lage bruggen te vermijden. Let op, als de brug beweegbaar is, gebruiken we de hoogte in geopende toestand.</string>
<string name="screen_timeout_descr">Als \"%1$s\" is geactiveerd, is de actieve tijd hiervan afhankelijk.</string>
<string name="default_screen_timeout">Standaard schermtimeout</string>
<string name="shared_string_tones">tonen</string>
<string name="shared_string_tones">ton</string>
<string name="shared_string_meters">meter</string>
<string name="details_dialog_decr">Toon/verberg extra kaartdetails</string>
<string name="shared_string_night_map">Nachtkaart</string>
@ -3500,10 +3512,10 @@ Proportioneel werkgeheugen %4$s MB (Android limiet %5$s MB, Dalvik %6$s MB).</st
<string name="clear_tiles_warning">Het toepassen van deze wijzigingen wist de cache van deze tile-bron</string>
<string name="vessel_height_warning_link">Stel de hoogte van het vaartuig in</string>
<string name="vessel_height_warning">Stel de hoogte van het vaartuig in om lage bruggen te vermijden. Let op, als de brug beweegbaar is, gebruiken we de hoogte in geopende toestand.</string>
<string name="quick_action_showhide_mapillary_title">Toon/verberg Mapillary</string>
<string name="quick_action_mapillary_hide">Verberg Mapillary</string>
<string name="quick_action_mapillary_show">Toon Mapillary</string>
<string name="quick_action_showhide_mapillary_descr">Toon/verberg de Mapillary-laag op de kaart.</string>
<string name="quick_action_showhide_mapillary_title">Mapillary tonen/verbergen</string>
<string name="quick_action_mapillary_hide">Mapillary verbergen</string>
<string name="quick_action_mapillary_show">Mapillary tonen</string>
<string name="quick_action_showhide_mapillary_descr">Een schakelknop om de Mapillary-laag al dan niet te tonen op de kaart.</string>
<string name="routing_attr_length_description">Geef de toegestane voertuiglengte op voor routes.</string>
<string name="routing_attr_length_name">Maximale lengte</string>
<string name="shared_string_bearing">Richting</string>
@ -3619,7 +3631,7 @@ Proportioneel werkgeheugen %4$s MB (Android limiet %5$s MB, Dalvik %6$s MB).</st
<string name="quick_action_transport_hide">OV-informatie verbergen</string>
<string name="quick_action_transport_show">OV-informatie tonen</string>
<string name="quick_action_show_hide_transport">OV-informatie tonen/verbergen</string>
<string name="quick_action_transport_descr">Knop om OV-informatie op de kaart te tonen of verbergen.</string>
<string name="quick_action_transport_descr">Knop om OV-informatie al dan niet te tonen op de kaart.</string>
<string name="add_edit_favorite">Favoriet toevoegen / bewerken</string>
<string name="create_edit_poi">POI toevoegen / bewerken</string>
<string name="parking_positions">Parkeerlocaties</string>
@ -3632,7 +3644,7 @@ Proportioneel werkgeheugen %4$s MB (Android limiet %5$s MB, Dalvik %6$s MB).</st
<string name="unsupported_type_error">Niet ondersteund type</string>
<string name="width_limit_description">Geef de voertuigbreedte op, er zijn mogelijk routebeperkingen voor brede voertuigen.</string>
<string name="height_limit_description">Geef de voertuighoogte op, er zijn mogelijk routebeperkingen voor hoge voertuigen.</string>
<string name="weight_limit_description">Geef het voertuiggewicht op, er zijn mogelijk routbeperkingen voor zwaar verkeer.</string>
<string name="weight_limit_description">Geef het voertuiggewicht op, er zijn mogelijk routebeperkingen voor zwaar verkeer.</string>
<string name="gpx_parse_error">OsmAnd GPX is corrupt, neem contact op met het support team voor verder onderzoek.</string>
<string name="shared_string_always">Altijd</string>
<string name="screen_control">Scherminstellingen</string>

View file

@ -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>

View file

@ -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>
@ -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>
@ -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>
@ -3718,4 +3718,38 @@
<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>

View file

@ -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>

View file

@ -3829,4 +3829,6 @@
<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>

View file

@ -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>

View file

@ -834,12 +834,19 @@ public class PoiUIFilter implements SearchPoiTypeFilter, Comparable<PoiUIFilter>
if (!poiTypes.isRegisteredType(type)) {
type = poiTypes.getOtherPoiCategory();
}
if (acceptedTypes.containsKey(type)) {
LinkedHashSet<String> acceptedTypesSet = acceptedTypes.get(type);
if (acceptedTypesSet != null && acceptedTypesSet.contains(subtype)) {
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