Update to iD v1.2.1
This commit is contained in:
parent
7de32f3cd5
commit
1104165e7b
16 changed files with 1274 additions and 618 deletions
516
vendor/assets/iD/iD.js
vendored
516
vendor/assets/iD/iD.js
vendored
|
@ -5665,7 +5665,7 @@ d3.combobox = function() {
|
|||
|
||||
var fetcher = function(val, cb) {
|
||||
cb(data.filter(function(d) {
|
||||
return d.title
|
||||
return d.value
|
||||
.toString()
|
||||
.toLowerCase()
|
||||
.indexOf(val.toLowerCase()) !== -1;
|
||||
|
@ -15199,11 +15199,6 @@ window.iD = function () {
|
|||
|
||||
/* History */
|
||||
context.graph = history.graph;
|
||||
context.perform = history.perform;
|
||||
context.replace = history.replace;
|
||||
context.pop = history.pop;
|
||||
context.undo = history.undo;
|
||||
context.redo = history.redo;
|
||||
context.changes = history.changes;
|
||||
context.intersects = history.intersects;
|
||||
|
||||
|
@ -15227,6 +15222,23 @@ window.iD = function () {
|
|||
return context;
|
||||
};
|
||||
|
||||
// Debounce save, since it's a synchronous localStorage write,
|
||||
// and history changes can happen frequently (e.g. when dragging).
|
||||
var debouncedSave = _.debounce(context.save, 350);
|
||||
function withDebouncedSave(fn) {
|
||||
return function() {
|
||||
var result = fn.apply(history, arguments);
|
||||
debouncedSave();
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
context.perform = withDebouncedSave(history.perform);
|
||||
context.replace = withDebouncedSave(history.replace);
|
||||
context.pop = withDebouncedSave(history.pop);
|
||||
context.undo = withDebouncedSave(history.undo);
|
||||
context.redo = withDebouncedSave(history.redo);
|
||||
|
||||
/* Graph */
|
||||
context.hasEntity = function(id) {
|
||||
return history.graph().hasEntity(id);
|
||||
|
@ -15376,7 +15388,7 @@ window.iD = function () {
|
|||
return d3.rebind(context, dispatch, 'on');
|
||||
};
|
||||
|
||||
iD.version = '1.2.0';
|
||||
iD.version = '1.2.1';
|
||||
|
||||
(function() {
|
||||
var detected = {};
|
||||
|
@ -15529,7 +15541,12 @@ iD.taginfo = function() {
|
|||
taginfo.docs = function(parameters, callback) {
|
||||
var debounce = parameters.debounce;
|
||||
parameters = clean(setSort(parameters));
|
||||
request(endpoint + (parameters.value ? 'tag/wiki_pages?' : 'key/wiki_pages?') +
|
||||
|
||||
var path = 'key/wiki_pages?';
|
||||
if (parameters.value) path = 'tag/wiki_pages?';
|
||||
else if (parameters.rtype) path = 'relation/wiki_pages?';
|
||||
|
||||
request(endpoint + path +
|
||||
iD.util.qsString(parameters), debounce, callback);
|
||||
};
|
||||
|
||||
|
@ -15750,6 +15767,13 @@ iD.util.asyncMap = function(inputs, func, callback) {
|
|||
});
|
||||
});
|
||||
};
|
||||
|
||||
// wraps an index to an interval [0..length-1]
|
||||
iD.util.wrap = function(index, length) {
|
||||
if (index < 0)
|
||||
index += Math.ceil(-index/length)*length;
|
||||
return index % length;
|
||||
};
|
||||
iD.geo = {};
|
||||
|
||||
iD.geo.roundCoords = function(c) {
|
||||
|
@ -15762,17 +15786,23 @@ iD.geo.interp = function(p1, p2, t) {
|
|||
};
|
||||
|
||||
// http://jsperf.com/id-dist-optimization
|
||||
iD.geo.dist = function(a, b) {
|
||||
iD.geo.euclideanDistance = function(a, b) {
|
||||
var x = a[0] - b[0], y = a[1] - b[1];
|
||||
return Math.sqrt((x * x) + (y * y));
|
||||
};
|
||||
// Equirectangular approximation of spherical distances on Earth
|
||||
iD.geo.sphericalDistance = function(a, b) {
|
||||
var x = Math.cos(a[1]*Math.PI/180) * (a[0] - b[0]),
|
||||
y = a[1] - b[1];
|
||||
return 6.3710E6 * Math.sqrt((x * x) + (y * y)) * Math.PI/180;
|
||||
};
|
||||
|
||||
// Choose the edge with the minimal distance from `point` to its orthogonal
|
||||
// projection onto that edge, if such a projection exists, or the distance to
|
||||
// the closest vertex on that edge. Returns an object with the `index` of the
|
||||
// chosen edge, the chosen `loc` on that edge, and the `distance` to to it.
|
||||
iD.geo.chooseEdge = function(nodes, point, projection) {
|
||||
var dist = iD.geo.dist,
|
||||
var dist = iD.geo.euclideanDistance,
|
||||
points = nodes.map(function(n) { return projection(n.loc); }),
|
||||
min = Infinity,
|
||||
idx, loc;
|
||||
|
@ -16215,63 +16245,105 @@ iD.actions.ChangeTags = function(entityId, tags) {
|
|||
return graph.replace(entity.update({tags: tags}));
|
||||
};
|
||||
};
|
||||
iD.actions.Circularize = function(wayId, projection, count) {
|
||||
count = count || 12;
|
||||
|
||||
function closestIndex(nodes, loc) {
|
||||
var idx, min = Infinity, dist;
|
||||
for (var i = 0; i < nodes.length; i++) {
|
||||
dist = iD.geo.dist(nodes[i].loc, loc);
|
||||
if (dist < min) {
|
||||
min = dist;
|
||||
idx = i;
|
||||
}
|
||||
}
|
||||
return idx;
|
||||
}
|
||||
iD.actions.Circularize = function(wayId, projection, maxAngle) {
|
||||
maxAngle = (maxAngle || 20) * Math.PI / 180;
|
||||
|
||||
var action = function(graph) {
|
||||
var way = graph.entity(wayId),
|
||||
nodes = _.uniq(graph.childNodes(way)),
|
||||
keyNodes = nodes.filter(function(n) { return graph.parentWays(n).length != 1; }),
|
||||
points = nodes.map(function(n) { return projection(n.loc); }),
|
||||
keyPoints = keyNodes.map(function(n) { return projection(n.loc); }),
|
||||
centroid = d3.geom.polygon(points).centroid(),
|
||||
radius = d3.median(points, function(p) {
|
||||
return iD.geo.dist(centroid, p);
|
||||
}),
|
||||
ids = [],
|
||||
sign = d3.geom.polygon(points).area() > 0 ? -1 : 1;
|
||||
radius = d3.median(points, function(p) { return iD.geo.euclideanDistance(centroid, p); }),
|
||||
sign = d3.geom.polygon(points).area() > 0 ? 1 : -1,
|
||||
ids;
|
||||
|
||||
for (var i = 0; i < count; i++) {
|
||||
var node,
|
||||
loc = projection.invert([
|
||||
centroid[0] + Math.cos(sign * (i / 12) * Math.PI * 2) * radius,
|
||||
centroid[1] + Math.sin(sign * (i / 12) * Math.PI * 2) * radius]);
|
||||
// we need atleast two key nodes for the algorithm to work
|
||||
if (!keyNodes.length) {
|
||||
keyNodes = [nodes[0]];
|
||||
keyPoints = [points[0]];
|
||||
}
|
||||
|
||||
if (nodes.length) {
|
||||
var idx = closestIndex(nodes, loc);
|
||||
node = nodes[idx];
|
||||
nodes.splice(idx, 1);
|
||||
} else {
|
||||
node = iD.Node();
|
||||
if (keyNodes.length == 1) {
|
||||
var index = nodes.indexOf(keyNodes[0]),
|
||||
oppositeIndex = Math.floor((index + nodes.length / 2) % nodes.length);
|
||||
|
||||
keyNodes.push(nodes[oppositeIndex]);
|
||||
keyPoints.push(points[oppositeIndex]);
|
||||
}
|
||||
|
||||
// key points and nodes are those connected to the ways,
|
||||
// they are projected onto the circle, inbetween nodes are moved
|
||||
// to constant internals between key nodes, extra inbetween nodes are
|
||||
// added if necessary.
|
||||
for (var i = 0; i < keyPoints.length; i++) {
|
||||
var nextKeyNodeIndex = (i + 1) % keyNodes.length,
|
||||
startNodeIndex = nodes.indexOf(keyNodes[i]),
|
||||
endNodeIndex = nodes.indexOf(keyNodes[nextKeyNodeIndex]),
|
||||
numberNewPoints = -1,
|
||||
indexRange = endNodeIndex - startNodeIndex,
|
||||
distance, totalAngle, eachAngle, startAngle, endAngle,
|
||||
angle, loc, node, j;
|
||||
|
||||
if (indexRange < 0) {
|
||||
indexRange += nodes.length;
|
||||
}
|
||||
|
||||
ids.push(node.id);
|
||||
graph = graph.replace(node.move(loc));
|
||||
// position this key node
|
||||
distance = iD.geo.euclideanDistance(centroid, keyPoints[i]);
|
||||
keyPoints[i] = [
|
||||
centroid[0] + (keyPoints[i][0] - centroid[0]) / distance * radius,
|
||||
centroid[1] + (keyPoints[i][1] - centroid[1]) / distance * radius];
|
||||
graph = graph.replace(keyNodes[i].move(projection.invert(keyPoints[i])));
|
||||
|
||||
// figure out the between delta angle we want to match to
|
||||
startAngle = Math.atan2(keyPoints[i][1] - centroid[1], keyPoints[i][0] - centroid[0]);
|
||||
endAngle = Math.atan2(keyPoints[nextKeyNodeIndex][1] - centroid[1], keyPoints[nextKeyNodeIndex][0] - centroid[0]);
|
||||
totalAngle = endAngle - startAngle;
|
||||
|
||||
// detects looping around -pi/pi
|
||||
if (totalAngle*sign > 0) {
|
||||
totalAngle = -sign * (2 * Math.PI - Math.abs(totalAngle));
|
||||
}
|
||||
|
||||
do {
|
||||
numberNewPoints++;
|
||||
eachAngle = totalAngle / (indexRange + numberNewPoints);
|
||||
} while (Math.abs(eachAngle) > maxAngle);
|
||||
|
||||
// move existing points
|
||||
for (j = 1; j < indexRange; j++) {
|
||||
angle = startAngle + j * eachAngle;
|
||||
loc = projection.invert([
|
||||
centroid[0] + Math.cos(angle)*radius,
|
||||
centroid[1] + Math.sin(angle)*radius]);
|
||||
|
||||
node = nodes[(j + startNodeIndex) % nodes.length].move(loc);
|
||||
graph = graph.replace(node);
|
||||
}
|
||||
|
||||
// add new inbetween nodes if necessary
|
||||
for (j = 0; j < numberNewPoints; j++) {
|
||||
angle = startAngle + (indexRange + j) * eachAngle;
|
||||
loc = projection.invert([
|
||||
centroid[0] + Math.cos(angle) * radius,
|
||||
centroid[1] + Math.sin(angle) * radius]);
|
||||
|
||||
node = iD.Node({loc: loc});
|
||||
graph = graph.replace(node);
|
||||
|
||||
nodes.splice(endNodeIndex + j, 0, node);
|
||||
}
|
||||
}
|
||||
|
||||
// update the way to have all the new nodes
|
||||
ids = nodes.map(function(n) { return n.id; });
|
||||
ids.push(ids[0]);
|
||||
|
||||
way = way.update({nodes: ids});
|
||||
graph = graph.replace(way);
|
||||
|
||||
for (i = 0; i < nodes.length; i++) {
|
||||
graph.parentWays(nodes[i]).forEach(function(parent) {
|
||||
graph = graph.replace(parent.replaceNode(nodes[i].id,
|
||||
ids[closestIndex(graph.childNodes(way), nodes[i].loc)]));
|
||||
});
|
||||
|
||||
graph = iD.actions.DeleteNode(nodes[i].id)(graph);
|
||||
}
|
||||
|
||||
return graph;
|
||||
};
|
||||
|
||||
|
@ -16865,20 +16937,24 @@ iD.actions.Noop = function() {
|
|||
*/
|
||||
|
||||
iD.actions.Orthogonalize = function(wayId, projection) {
|
||||
var threshold = 7, // degrees within right or straight to alter
|
||||
lowerThreshold = Math.cos((90 - threshold) * Math.PI / 180),
|
||||
upperThreshold = Math.cos(threshold * Math.PI / 180);
|
||||
|
||||
var action = function(graph) {
|
||||
var way = graph.entity(wayId),
|
||||
nodes = graph.childNodes(way),
|
||||
points = _.uniq(nodes).map(function(n) { return projection(n.loc); }),
|
||||
corner = {i: 0, dotp: 1},
|
||||
points, i, j, score, motions;
|
||||
epsilon = 1e-4,
|
||||
i, j, score, motions;
|
||||
|
||||
if (nodes.length === 4) {
|
||||
points = _.uniq(nodes).map(function(n) { return projection(n.loc); });
|
||||
|
||||
for (i = 0; i < 1000; i++) {
|
||||
motions = points.map(calcMotion);
|
||||
points[corner.i] = addPoints(points[corner.i],motions[corner.i]);
|
||||
score = corner.dotp;
|
||||
if (score < 1.0e-8) {
|
||||
if (score < epsilon) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -16886,21 +16962,21 @@ iD.actions.Orthogonalize = function(wayId, projection) {
|
|||
graph = graph.replace(graph.entity(nodes[corner.i].id)
|
||||
.move(projection.invert(points[corner.i])));
|
||||
} else {
|
||||
var best;
|
||||
points = _.uniq(nodes).map(function(n) { return projection(n.loc); });
|
||||
score = squareness();
|
||||
var best,
|
||||
originalPoints = _.clone(points);
|
||||
score = Infinity;
|
||||
|
||||
for (i = 0; i < 1000; i++) {
|
||||
motions = points.map(calcMotion);
|
||||
for (j = 0; j < motions.length; j++) {
|
||||
points[j] = addPoints(points[j],motions[j]);
|
||||
}
|
||||
var newScore = squareness();
|
||||
var newScore = squareness(points);
|
||||
if (newScore < score) {
|
||||
best = _.clone(points);
|
||||
score = newScore;
|
||||
}
|
||||
if (score < 1.0e-8) {
|
||||
if (score < epsilon) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -16908,8 +16984,28 @@ iD.actions.Orthogonalize = function(wayId, projection) {
|
|||
points = best;
|
||||
|
||||
for (i = 0; i < points.length; i++) {
|
||||
graph = graph.replace(graph.entity(nodes[i].id)
|
||||
.move(projection.invert(points[i])));
|
||||
// only move the points that actually moved
|
||||
if (originalPoints[i][0] != points[i][0] || originalPoints[i][1] != points[i][1]) {
|
||||
graph = graph.replace(graph.entity(nodes[i].id)
|
||||
.move(projection.invert(points[i])));
|
||||
}
|
||||
}
|
||||
|
||||
// remove empty nodes on straight sections
|
||||
for (i = 0; i < points.length; i++) {
|
||||
var node = nodes[i];
|
||||
|
||||
if (graph.parentWays(node).length > 1 ||
|
||||
graph.parentRelations(node).length ||
|
||||
node.hasInterestingTags()) {
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
var dotp = normalizedDotProduct(i, points);
|
||||
if (dotp < -1 + epsilon) {
|
||||
graph = iD.actions.DeleteNode(nodes[i].id)(graph);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -16919,78 +17015,91 @@ iD.actions.Orthogonalize = function(wayId, projection) {
|
|||
var a = array[(i - 1 + array.length) % array.length],
|
||||
c = array[(i + 1) % array.length],
|
||||
p = subtractPoints(a, b),
|
||||
q = subtractPoints(c, b);
|
||||
q = subtractPoints(c, b),
|
||||
scale, dotp;
|
||||
|
||||
var scale = 2*Math.min(iD.geo.dist(p, [0, 0]), iD.geo.dist(q, [0, 0]));
|
||||
scale = 2 * Math.min(iD.geo.euclideanDistance(p, [0, 0]), iD.geo.euclideanDistance(q, [0, 0]));
|
||||
p = normalizePoint(p, 1.0);
|
||||
q = normalizePoint(q, 1.0);
|
||||
|
||||
var dotp = p[0] * q[0] + p[1] * q[1];
|
||||
dotp = filterDotProduct(p[0] * q[0] + p[1] * q[1]);
|
||||
|
||||
// nasty hack to deal with almost-straight segments (angle is closer to 180 than to 90/270).
|
||||
if (array.length > 3) {
|
||||
if (dotp < -0.707106781186547) {
|
||||
dotp += 1.0;
|
||||
}
|
||||
} else if (Math.abs(dotp) < corner.dotp) {
|
||||
} else if (dotp && Math.abs(dotp) < corner.dotp) {
|
||||
corner.i = i;
|
||||
corner.dotp = Math.abs(dotp);
|
||||
}
|
||||
|
||||
return normalizePoint(addPoints(p, q), 0.1 * dotp * scale);
|
||||
}
|
||||
|
||||
function squareness() {
|
||||
var g = 0.0;
|
||||
for (var i = 1; i < points.length - 1; i++) {
|
||||
var score = scoreOfPoints(points[i - 1], points[i], points[i + 1]);
|
||||
g += score;
|
||||
}
|
||||
var startScore = scoreOfPoints(points[points.length - 1], points[0], points[1]);
|
||||
var endScore = scoreOfPoints(points[points.length - 2], points[points.length - 1], points[0]);
|
||||
g += startScore;
|
||||
g += endScore;
|
||||
return g;
|
||||
}
|
||||
|
||||
function scoreOfPoints(a, b, c) {
|
||||
var p = subtractPoints(a, b),
|
||||
q = subtractPoints(c, b);
|
||||
|
||||
p = normalizePoint(p, 1.0);
|
||||
q = normalizePoint(q, 1.0);
|
||||
|
||||
var dotp = p[0] * q[0] + p[1] * q[1];
|
||||
// score is constructed so that +1, -1 and 0 are all scored 0, any other angle
|
||||
// is scored higher.
|
||||
return 2.0 * Math.min(Math.abs(dotp - 1.0), Math.min(Math.abs(dotp), Math.abs(dotp + 1)));
|
||||
}
|
||||
|
||||
function subtractPoints(a, b) {
|
||||
return [a[0] - b[0], a[1] - b[1]];
|
||||
}
|
||||
|
||||
function addPoints(a, b) {
|
||||
return [a[0] + b[0], a[1] + b[1]];
|
||||
}
|
||||
|
||||
function normalizePoint(point, scale) {
|
||||
var vector = [0, 0];
|
||||
var length = Math.sqrt(point[0] * point[0] + point[1] * point[1]);
|
||||
if (length !== 0) {
|
||||
vector[0] = point[0] / length;
|
||||
vector[1] = point[1] / length;
|
||||
}
|
||||
|
||||
vector[0] *= scale;
|
||||
vector[1] *= scale;
|
||||
|
||||
return vector;
|
||||
}
|
||||
};
|
||||
|
||||
function squareness(points) {
|
||||
return points.reduce(function(sum, val, i, array) {
|
||||
var dotp = normalizedDotProduct(i, array);
|
||||
|
||||
dotp = filterDotProduct(dotp);
|
||||
return sum + 2.0 * Math.min(Math.abs(dotp - 1.0), Math.min(Math.abs(dotp), Math.abs(dotp + 1)));
|
||||
}, 0);
|
||||
}
|
||||
|
||||
function normalizedDotProduct(i, points) {
|
||||
var a = points[(i - 1 + points.length) % points.length],
|
||||
b = points[i],
|
||||
c = points[(i + 1) % points.length],
|
||||
p = subtractPoints(a, b),
|
||||
q = subtractPoints(c, b);
|
||||
|
||||
p = normalizePoint(p, 1.0);
|
||||
q = normalizePoint(q, 1.0);
|
||||
|
||||
return p[0] * q[0] + p[1] * q[1];
|
||||
}
|
||||
|
||||
function subtractPoints(a, b) {
|
||||
return [a[0] - b[0], a[1] - b[1]];
|
||||
}
|
||||
|
||||
function addPoints(a, b) {
|
||||
return [a[0] + b[0], a[1] + b[1]];
|
||||
}
|
||||
|
||||
function normalizePoint(point, scale) {
|
||||
var vector = [0, 0];
|
||||
var length = Math.sqrt(point[0] * point[0] + point[1] * point[1]);
|
||||
if (length !== 0) {
|
||||
vector[0] = point[0] / length;
|
||||
vector[1] = point[1] / length;
|
||||
}
|
||||
|
||||
vector[0] *= scale;
|
||||
vector[1] *= scale;
|
||||
|
||||
return vector;
|
||||
}
|
||||
|
||||
function filterDotProduct(dotp) {
|
||||
if (lowerThreshold > Math.abs(dotp) || Math.abs(dotp) > upperThreshold) {
|
||||
return dotp;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
action.disabled = function(graph) {
|
||||
return false;
|
||||
var way = graph.entity(wayId),
|
||||
nodes = graph.childNodes(way),
|
||||
points = _.uniq(nodes).map(function(n) { return projection(n.loc); });
|
||||
|
||||
if (squareness(points)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return 'not_squarish';
|
||||
};
|
||||
|
||||
return action;
|
||||
|
@ -17114,19 +17223,70 @@ iD.actions.RotateWay = function(wayId, pivot, angle, projection) {
|
|||
iD.actions.Split = function(nodeId, newWayIds) {
|
||||
var wayIds;
|
||||
|
||||
// if the way is closed, we need to search for a partner node
|
||||
// to split the way at.
|
||||
//
|
||||
// The following looks for a node that is both far away from
|
||||
// the initial node in terms of way segment length and nearby
|
||||
// in terms of beeline-distance. This assures that areas get
|
||||
// split on the most "natural" points (independent of the number
|
||||
// of nodes).
|
||||
// For example: bone-shaped areas get split across their waist
|
||||
// line, circles across the diameter.
|
||||
function splitArea(nodes, idxA, graph) {
|
||||
var lengths = new Array(nodes.length),
|
||||
length,
|
||||
i,
|
||||
best = 0,
|
||||
idxB;
|
||||
|
||||
function wrap(index) {
|
||||
return iD.util.wrap(index, nodes.length);
|
||||
}
|
||||
|
||||
function dist(nA, nB) {
|
||||
return iD.geo.sphericalDistance(graph.entity(nA).loc, graph.entity(nB).loc);
|
||||
}
|
||||
|
||||
// calculate lengths
|
||||
length = 0;
|
||||
for (i = wrap(idxA+1); i != idxA; i = wrap(i+1)) {
|
||||
length += dist(nodes[i], nodes[wrap(i-1)]);
|
||||
lengths[i] = length;
|
||||
}
|
||||
|
||||
length = 0;
|
||||
for (i = wrap(idxA-1); i != idxA; i = wrap(i-1)) {
|
||||
length += dist(nodes[i], nodes[wrap(i+1)]);
|
||||
if (length < lengths[i])
|
||||
lengths[i] = length;
|
||||
}
|
||||
|
||||
// determine best opposite node to split
|
||||
for (i = 0; i < nodes.length; i++) {
|
||||
var cost = lengths[i] / dist(nodes[idxA], nodes[i]);
|
||||
if (cost > best) {
|
||||
idxB = i;
|
||||
best = cost;
|
||||
}
|
||||
}
|
||||
|
||||
return idxB;
|
||||
}
|
||||
|
||||
function split(graph, wayA, newWayId) {
|
||||
var wayB = iD.Way({id: newWayId, tags: wayA.tags}),
|
||||
nodesA,
|
||||
nodesB,
|
||||
isArea = wayA.isArea();
|
||||
isArea = wayA.isArea(),
|
||||
isOuter = iD.geo.isSimpleMultipolygonOuterMember(wayA, graph);
|
||||
|
||||
if (wayA.isClosed()) {
|
||||
var nodes = wayA.nodes.slice(0, -1),
|
||||
idxA = _.indexOf(nodes, nodeId),
|
||||
idxB = idxA + Math.floor(nodes.length / 2);
|
||||
idxB = splitArea(nodes, idxA, graph);
|
||||
|
||||
if (idxB >= nodes.length) {
|
||||
idxB %= nodes.length;
|
||||
if (idxB < idxA) {
|
||||
nodesA = nodes.slice(idxA).concat(nodes.slice(0, idxB + 1));
|
||||
nodesB = nodes.slice(idxB, idxA + 1);
|
||||
} else {
|
||||
|
@ -17153,24 +17313,23 @@ iD.actions.Split = function(nodeId, newWayIds) {
|
|||
graph = graph.replace(relation);
|
||||
}
|
||||
} else {
|
||||
var role = relation.memberById(wayA.id).role,
|
||||
last = wayB.last(),
|
||||
i = relation.memberById(wayA.id).index,
|
||||
j;
|
||||
|
||||
for (j = 0; j < relation.members.length; j++) {
|
||||
var entity = graph.hasEntity(relation.members[j].id);
|
||||
if (entity && entity.type === 'way' && entity.contains(last)) {
|
||||
break;
|
||||
}
|
||||
if (relation === isOuter) {
|
||||
graph = graph.replace(relation.mergeTags(wayA.tags));
|
||||
graph = graph.replace(wayA.update({tags: {}}));
|
||||
graph = graph.replace(wayB.update({tags: {}}));
|
||||
}
|
||||
|
||||
relation = relation.addMember({id: wayB.id, type: 'way', role: role}, i <= j ? i + 1 : i);
|
||||
graph = graph.replace(relation);
|
||||
var member = {
|
||||
id: wayB.id,
|
||||
type: 'way',
|
||||
role: relation.memberById(wayA.id).role
|
||||
};
|
||||
|
||||
graph = iD.actions.AddMember(relation.id, member)(graph);
|
||||
}
|
||||
});
|
||||
|
||||
if (isArea) {
|
||||
if (!isOuter && isArea) {
|
||||
var multipolygon = iD.Relation({
|
||||
tags: _.extend({}, wayA.tags, {type: 'multipolygon'}),
|
||||
members: [
|
||||
|
@ -17196,12 +17355,16 @@ iD.actions.Split = function(nodeId, newWayIds) {
|
|||
|
||||
action.ways = function(graph) {
|
||||
var node = graph.entity(nodeId),
|
||||
parents = graph.parentWays(node);
|
||||
parents = graph.parentWays(node),
|
||||
hasLines = _.any(parents, function(parent) { return parent.geometry(graph) === 'line'; });
|
||||
|
||||
return parents.filter(function(parent) {
|
||||
if (wayIds && wayIds.indexOf(parent.id) === -1)
|
||||
return false;
|
||||
|
||||
if (!wayIds && hasLines && parent.geometry(graph) !== 'line')
|
||||
return false;
|
||||
|
||||
if (parent.isClosed()) {
|
||||
return true;
|
||||
}
|
||||
|
@ -17253,7 +17416,10 @@ iD.actions.Straighten = function(wayId, projection) {
|
|||
var node = nodes[i],
|
||||
point = points[i];
|
||||
|
||||
if (graph.parentWays(node).length > 1 || (node.tags && Object.keys(node.tags).length)) {
|
||||
if (graph.parentWays(node).length > 1 ||
|
||||
graph.parentRelations(node).length ||
|
||||
node.hasInterestingTags()) {
|
||||
|
||||
var u = positionAlongWay(point, startPoint, endPoint),
|
||||
p0 = startPoint[0] + u * (endPoint[0] - startPoint[0]),
|
||||
p1 = startPoint[1] + u * (endPoint[1] - startPoint[1]),
|
||||
|
@ -17572,8 +17738,8 @@ iD.behavior.Draw = function(context) {
|
|||
|
||||
d3.select(window).on('mouseup.draw', function() {
|
||||
element.on('mousemove.draw', mousemove);
|
||||
if (iD.geo.dist(pos, point()) < closeTolerance ||
|
||||
(iD.geo.dist(pos, point()) < tolerance &&
|
||||
if (iD.geo.euclideanDistance(pos, point()) < closeTolerance ||
|
||||
(iD.geo.euclideanDistance(pos, point()) < tolerance &&
|
||||
(+new Date() - time) < 500)) {
|
||||
|
||||
// Prevent a quick second click
|
||||
|
@ -18501,8 +18667,6 @@ iD.modes.Browse = function(context) {
|
|||
iD.modes.DragNode(context).behavior];
|
||||
|
||||
mode.enter = function() {
|
||||
context.save();
|
||||
|
||||
behaviors.forEach(function(behavior) {
|
||||
context.install(behavior);
|
||||
});
|
||||
|
@ -18578,8 +18742,8 @@ iD.modes.DragNode = function(context) {
|
|||
return t('operations.move.annotation.' + entity.geometry(context.graph()));
|
||||
}
|
||||
|
||||
function connectAnnotation(datum) {
|
||||
return t('operations.connect.annotation.' + datum.geometry(context.graph()));
|
||||
function connectAnnotation(entity) {
|
||||
return t('operations.connect.annotation.' + entity.geometry(context.graph()));
|
||||
}
|
||||
|
||||
function origin(entity) {
|
||||
|
@ -18648,7 +18812,7 @@ iD.modes.DragNode = function(context) {
|
|||
|
||||
context.replace(
|
||||
iD.actions.MoveNode(entity.id, loc),
|
||||
t('operations.move.annotation.' + entity.geometry(context.graph())));
|
||||
moveAnnotation(entity));
|
||||
}
|
||||
|
||||
function end(entity) {
|
||||
|
@ -19186,8 +19350,6 @@ iD.modes.Select = function(context, selectedIDs) {
|
|||
};
|
||||
|
||||
mode.enter = function() {
|
||||
context.save();
|
||||
|
||||
behaviors.forEach(function(behavior) {
|
||||
context.install(behavior);
|
||||
});
|
||||
|
@ -19431,8 +19593,8 @@ iD.operations.Delete = function(selectedIDs, context) {
|
|||
} else if (i === nodes.length - 1) {
|
||||
i--;
|
||||
} else {
|
||||
var a = iD.geo.dist(entity.loc, context.entity(nodes[i - 1]).loc),
|
||||
b = iD.geo.dist(entity.loc, context.entity(nodes[i + 1]).loc);
|
||||
var a = iD.geo.sphericalDistance(entity.loc, context.entity(nodes[i - 1]).loc),
|
||||
b = iD.geo.sphericalDistance(entity.loc, context.entity(nodes[i + 1]).loc);
|
||||
i = a < b ? i - 1 : i + 1;
|
||||
}
|
||||
|
||||
|
@ -21636,23 +21798,26 @@ _.extend(iD.Way.prototype, {
|
|||
// of the following keys, and the value is _not_ one of the associated
|
||||
// values for the respective key.
|
||||
iD.Way.areaKeys = {
|
||||
aeroway: { taxiway: true},
|
||||
amenity: {},
|
||||
area: {},
|
||||
'area:highway': {},
|
||||
building: {},
|
||||
leisure: {},
|
||||
tourism: {},
|
||||
ruins: {},
|
||||
'building:part': {},
|
||||
historic: {},
|
||||
landuse: {},
|
||||
leisure: {},
|
||||
man_made: { cutline: true, embankment: true, pipeline: true},
|
||||
military: {},
|
||||
natural: { coastline: true },
|
||||
amenity: {},
|
||||
shop: {},
|
||||
man_made: {},
|
||||
public_transport: {},
|
||||
office: {},
|
||||
place: {},
|
||||
aeroway: {},
|
||||
waterway: {},
|
||||
power: {}
|
||||
power: {},
|
||||
public_transport: {},
|
||||
ruins: {},
|
||||
shop: {},
|
||||
tourism: {},
|
||||
waterway: {}
|
||||
};
|
||||
iD.Background = function(context) {
|
||||
var dispatch = d3.dispatch('change'),
|
||||
|
@ -22750,7 +22915,7 @@ iD.svg = {
|
|||
b = [x, y];
|
||||
|
||||
if (a) {
|
||||
var span = iD.geo.dist(a, b) - offset;
|
||||
var span = iD.geo.euclideanDistance(a, b) - offset;
|
||||
|
||||
if (span >= 0) {
|
||||
var angle = Math.atan2(b[1] - a[1], b[0] - a[0]),
|
||||
|
@ -23468,7 +23633,7 @@ iD.svg.Midpoints = function(projection, context) {
|
|||
// If neither of the nodes changed, no need to redraw midpoint
|
||||
if (!midpoints[id] && (filter(a) || filter(b))) {
|
||||
var loc = iD.geo.interp(a.loc, b.loc, 0.5);
|
||||
if (extent.intersects(loc) && iD.geo.dist(projection(a.loc), projection(b.loc)) > 40) {
|
||||
if (extent.intersects(loc) && iD.geo.euclideanDistance(projection(a.loc), projection(b.loc)) > 40) {
|
||||
midpoints[id] = {
|
||||
type: 'midpoint',
|
||||
id: id,
|
||||
|
@ -25097,7 +25262,7 @@ iD.ui.EntityEditor = function(context) {
|
|||
if (!arguments.length) return preset;
|
||||
if (_ !== preset) {
|
||||
preset = _;
|
||||
reference = iD.ui.TagReference(preset.reference())
|
||||
reference = iD.ui.TagReference(preset.reference(context.geometry(id)))
|
||||
.showing(false);
|
||||
}
|
||||
return entityEditor;
|
||||
|
@ -26477,7 +26642,7 @@ iD.ui.PresetList = function(context) {
|
|||
};
|
||||
|
||||
item.preset = preset;
|
||||
item.reference = iD.ui.TagReference(preset.reference());
|
||||
item.reference = iD.ui.TagReference(preset.reference(context.geometry(id)));
|
||||
|
||||
return item;
|
||||
}
|
||||
|
@ -26787,7 +26952,7 @@ iD.ui.RawMembershipEditor = function(context) {
|
|||
graph = context.graph();
|
||||
|
||||
context.intersects(context.extent()).forEach(function(entity) {
|
||||
if (entity.type !== 'relation')
|
||||
if (entity.type !== 'relation' || entity.id === id)
|
||||
return;
|
||||
|
||||
var presetName = context.presets().match(entity, graph).name(),
|
||||
|
@ -27175,12 +27340,12 @@ iD.ui.Restore = function(context) {
|
|||
introModal.append('div')
|
||||
.attr('class', 'modal-section')
|
||||
.append('h3')
|
||||
.text(t('restore.heading'));
|
||||
.text(t('restore.heading'));
|
||||
|
||||
introModal.append('div')
|
||||
.attr('class','modal-section')
|
||||
.append('p')
|
||||
.text(t('restore.description'));
|
||||
.text(t('restore.description'));
|
||||
|
||||
var buttonWrap = introModal.append('div')
|
||||
.attr('class', 'modal-actions cf');
|
||||
|
@ -27203,8 +27368,6 @@ iD.ui.Restore = function(context) {
|
|||
|
||||
restore.node().focus();
|
||||
};
|
||||
modal.select('button.close').attr('class','hide');
|
||||
|
||||
};
|
||||
iD.ui.Save = function(context) {
|
||||
var history = context.history(),
|
||||
|
@ -27877,7 +28040,6 @@ iD.ui.preset.access = function(field, context) {
|
|||
.attr('class', 'col6 preset-input-access-wrap')
|
||||
.append('input')
|
||||
.attr('type', 'text')
|
||||
.attr('placeholder', field.placeholder())
|
||||
.attr('class', 'preset-input-access')
|
||||
.attr('id', function(d) { return 'preset-input-access-' + d; })
|
||||
.each(function(d) {
|
||||
|
@ -27922,7 +28084,10 @@ iD.ui.preset.access = function(field, context) {
|
|||
|
||||
access.tags = function(tags) {
|
||||
items.selectAll('.preset-input-access')
|
||||
.value(function(d) { return tags[d] || ''; });
|
||||
.value(function(d) { return tags[d] || ''; })
|
||||
.attr('placeholder', function(d) {
|
||||
return d !== 'access' && tags.access ? tags.access : field.placeholder();
|
||||
});
|
||||
};
|
||||
|
||||
access.focus = function() {
|
||||
|
@ -29651,14 +29816,17 @@ iD.presets.Preset = function(id, preset, fields) {
|
|||
return Object.keys(preset.tags).length === 0;
|
||||
};
|
||||
|
||||
preset.reference = function() {
|
||||
var reference = {key: Object.keys(preset.tags)[0]};
|
||||
preset.reference = function(geometry) {
|
||||
var key = Object.keys(preset.tags)[0],
|
||||
value = preset.tags[key];
|
||||
|
||||
if (preset.tags[reference.key] !== '*') {
|
||||
reference.value = preset.tags[reference.key];
|
||||
if (geometry === 'relation' && key === 'type') {
|
||||
return { rtype: value };
|
||||
} else if (value === '*') {
|
||||
return { key: key };
|
||||
} else {
|
||||
return { key: key, value: value };
|
||||
}
|
||||
|
||||
return reference;
|
||||
};
|
||||
|
||||
var removeTags = preset.removeTags || preset.tags;
|
||||
|
@ -58743,7 +58911,6 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
|
|||
"icon": "shop",
|
||||
"fields": [
|
||||
"address",
|
||||
"building_area",
|
||||
"opening_hours"
|
||||
],
|
||||
"geometry": [
|
||||
|
@ -72767,7 +72934,8 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
|
|||
"annotation": {
|
||||
"line": "Squared the corners of a line.",
|
||||
"area": "Squared the corners of an area."
|
||||
}
|
||||
},
|
||||
"not_squarish": "This can't be made square because it is not squarish."
|
||||
},
|
||||
"straighten": {
|
||||
"title": "Straighten",
|
||||
|
|
40
vendor/assets/iD/iD/locales/bs.json
vendored
40
vendor/assets/iD/iD/locales/bs.json
vendored
|
@ -74,11 +74,24 @@
|
|||
"not_closed": "Ovo se ne može napraviti kružnim jer to nije petlja."
|
||||
},
|
||||
"orthogonalize": {
|
||||
"title": "Kvadrat",
|
||||
"description": {
|
||||
"line": "Oblikovati uglove ove linije u kvadrat.",
|
||||
"area": "Oblikovati uglove ovo područje u kvadrat."
|
||||
},
|
||||
"key": "Oblikovati",
|
||||
"annotation": {
|
||||
"line": "Ispravljeni uglovi linije.",
|
||||
"area": "Ispravljeni uglovi područja."
|
||||
}
|
||||
},
|
||||
"straighten": {
|
||||
"title": "Ispraviti",
|
||||
"description": "Ispraviti ovu liniju.",
|
||||
"key": "Oblikovati",
|
||||
"annotation": "Ispravljena linija.",
|
||||
"too_bendy": "Ovo ne može biti ispralvjeno jer se previše savija."
|
||||
},
|
||||
"delete": {
|
||||
"title": "Izbrišite",
|
||||
"description": "Uklonite ovo sa karte.",
|
||||
|
@ -457,6 +470,9 @@
|
|||
"atm": {
|
||||
"label": "Bankomat"
|
||||
},
|
||||
"backrest": {
|
||||
"label": "Naslon za leđa"
|
||||
},
|
||||
"barrier": {
|
||||
"label": "Vrsta"
|
||||
},
|
||||
|
@ -819,6 +835,10 @@
|
|||
"name": "Iznajmljivanje bicikala",
|
||||
"terms": "iznajmljivanje bicikala,najam bicikla"
|
||||
},
|
||||
"amenity/boat_rental": {
|
||||
"name": "Iznajmljivanje plovila",
|
||||
"terms": "iznajmljivanje čamaca,iznajmljivanje brodova,iznajmljivanje plovila"
|
||||
},
|
||||
"amenity/cafe": {
|
||||
"name": "Kafe",
|
||||
"terms": "kafe,kafana,kafe-bar"
|
||||
|
@ -1219,6 +1239,10 @@
|
|||
"name": "Stepenice",
|
||||
"terms": "stepenice,stube"
|
||||
},
|
||||
"highway/stop": {
|
||||
"name": "Znak stop",
|
||||
"terms": "znak stop,saobraćajni znak stop,saobraćajni znak zaustavljanja"
|
||||
},
|
||||
"highway/tertiary": {
|
||||
"name": "Tercijarna cesta",
|
||||
"terms": "tercijarna cesta,cesta od tercijarnog značaja"
|
||||
|
@ -1395,6 +1419,10 @@
|
|||
"name": "Košarkaški teren",
|
||||
"terms": "košarkaški teren,igralište za košarku"
|
||||
},
|
||||
"leisure/pitch/skateboard": {
|
||||
"name": "Poligon za skateboard",
|
||||
"terms": "poligon za skateboard,park za skateboard,poligon za klizanje"
|
||||
},
|
||||
"leisure/pitch/soccer": {
|
||||
"name": "Fudbalski teren",
|
||||
"terms": "fudbalski teren,igralište za fudbal"
|
||||
|
@ -1415,6 +1443,10 @@
|
|||
"name": "Navoz",
|
||||
"terms": "navoz,navoz na šine"
|
||||
},
|
||||
"leisure/sports_center": {
|
||||
"name": "Sportski centar",
|
||||
"terms": "sportski centar,centar za sport, centar za sportske aktivnosti"
|
||||
},
|
||||
"leisure/stadium": {
|
||||
"name": "Stadion",
|
||||
"terms": "stadion,sportsko borilište"
|
||||
|
@ -1499,6 +1531,10 @@
|
|||
"name": "Obala",
|
||||
"terms": "obala,obalno područje"
|
||||
},
|
||||
"natural/fell": {
|
||||
"name": "Planinska golet",
|
||||
"terms": "nekultivirana zemlja na visokim nadmorskim visinama,neobrađena zemlja,visoki pašnjak"
|
||||
},
|
||||
"natural/glacier": {
|
||||
"name": "Glečer",
|
||||
"terms": "glečer,ledenjak"
|
||||
|
@ -1515,6 +1551,10 @@
|
|||
"name": "Vrh",
|
||||
"terms": "vrh,kota"
|
||||
},
|
||||
"natural/scree": {
|
||||
"name": "Osulina",
|
||||
"terms": "sipar,sipina,osulina,nakupina osutog oštrobridnog materijala"
|
||||
},
|
||||
"natural/scrub": {
|
||||
"name": "Gustiš",
|
||||
"terms": "gustiš,šipražje,nisko raslinje"
|
||||
|
|
10
vendor/assets/iD/iD/locales/ca.json
vendored
10
vendor/assets/iD/iD/locales/ca.json
vendored
|
@ -74,6 +74,12 @@
|
|||
"not_closed": "Això no es pot fer circular perquè no té els extrems units."
|
||||
},
|
||||
"orthogonalize": {
|
||||
"title": "Quadrar",
|
||||
"description": {
|
||||
"line": "Quadrar les cantonades d'aquesta línia",
|
||||
"area": "Quadrar les cantonades d'aquesta àrea"
|
||||
},
|
||||
"key": "Q",
|
||||
"annotation": {
|
||||
"line": "Heu quadrat les cantonades d'una línia.",
|
||||
"area": "Heu quadrat les cantonades d'una àrea."
|
||||
|
@ -82,7 +88,9 @@
|
|||
"straighten": {
|
||||
"title": "Fer recta",
|
||||
"description": "Fes aquesta línia recta",
|
||||
"key": "S"
|
||||
"key": "S",
|
||||
"annotation": "Quadrar una línia",
|
||||
"too_bendy": "Això no es pot quadrar perquè és massa sinuós."
|
||||
},
|
||||
"delete": {
|
||||
"title": "Suprimeix",
|
||||
|
|
10
vendor/assets/iD/iD/locales/cs.json
vendored
10
vendor/assets/iD/iD/locales/cs.json
vendored
|
@ -74,6 +74,12 @@
|
|||
"not_closed": "Z objektu nelze udělat kruh, protože nejde o smyčku."
|
||||
},
|
||||
"orthogonalize": {
|
||||
"title": "Zhranatit",
|
||||
"description": {
|
||||
"line": "Udělat rohy této cesty do hranata.",
|
||||
"area": "Udělat rohy této plochy do hranata."
|
||||
},
|
||||
"key": "S",
|
||||
"annotation": {
|
||||
"line": "Úhly cesty do pravého úhle.",
|
||||
"area": "Rohy plochy do pravého úhle."
|
||||
|
@ -82,7 +88,9 @@
|
|||
"straighten": {
|
||||
"title": "Narovnat",
|
||||
"description": "Narovnat tuto cestu.",
|
||||
"key": "S"
|
||||
"key": "S",
|
||||
"annotation": "Narovnána cesta",
|
||||
"too_bendy": "Objekt není možné narovnat, protože je příliš zakroucený."
|
||||
},
|
||||
"delete": {
|
||||
"title": "Smazat",
|
||||
|
|
16
vendor/assets/iD/iD/locales/de.json
vendored
16
vendor/assets/iD/iD/locales/de.json
vendored
|
@ -74,6 +74,12 @@
|
|||
"not_closed": "Dieses Objekt kann nicht kreisförmig gemacht werden, da es keine geschlossene Linie ist."
|
||||
},
|
||||
"orthogonalize": {
|
||||
"title": "Rechteck",
|
||||
"description": {
|
||||
"line": "Die Ecken dieser Linien rechteckig machen.",
|
||||
"area": "Die Ecken dieser Fläche rechteckig machen."
|
||||
},
|
||||
"key": "R",
|
||||
"annotation": {
|
||||
"line": "Die Ecken einer Linie rechtwinklig ausgerichtet.",
|
||||
"area": "Die Ecken einer Fläche rechtwinklig ausgerichtet."
|
||||
|
@ -82,7 +88,9 @@
|
|||
"straighten": {
|
||||
"title": "Begradigen",
|
||||
"description": "Diese Linie begradigen.",
|
||||
"key": "S"
|
||||
"key": "S",
|
||||
"annotation": "Linie begradigt.",
|
||||
"too_bendy": "Dieses Objekt kann nicht begradigt werden, da es zu kurvig ist."
|
||||
},
|
||||
"delete": {
|
||||
"title": "Löschen",
|
||||
|
@ -123,8 +131,8 @@
|
|||
"description": "Vereinige diese Linien.",
|
||||
"key": "C",
|
||||
"annotation": "{n} Linien vereinigt.",
|
||||
"not_eligible": "Diese Objekte können nicht vereint werden.",
|
||||
"not_adjacent": "Diese Linien können nicht vereint werden, da sie nicht verbunden sind.",
|
||||
"not_eligible": "Diese Objekte können nicht vereinigt werden.",
|
||||
"not_adjacent": "Diese Linien können nicht vereinigt werden, da sie nicht verbunden sind.",
|
||||
"restriction": "Diese Linien können nicht vereinigt werden, da mindestens eine Linie ein Mitglied einer \"{relation}\" Relation ist."
|
||||
},
|
||||
"move": {
|
||||
|
@ -321,7 +329,7 @@
|
|||
"addresses": "# Adressen\n\nAdressen sind eine der wichtigsten Informationen einer Karte.\n\nObwohl Adressen oft als Teil einer Straße repräsentiert werden, werden sie in OpenStreetMap als Attribute von Gebäuden oder Objekten neben der Straße eingetragen.\n\nDu kannst Adressinformationen sowohl zu Flächen die als Gebäudegrundriss gezeichnet sind, als auch zu einzelnen Punkten hinzufügen. Adressen musst du über eine Stadtbegehung oder dein eigenes Wissen herausfinden, da die Nutzung kommerzieller Quellen wie Google Maps strikt verboten ist.\n",
|
||||
"inspector": "# Den Inspektor benutzen\n \nDer Inspektor ist das Bedienelement, das rechts im Editor erscheint, wenn du ein Objekt auswählst. Mit dem Inspektor kannst du die Details des Objektes bearbeiten.\n\n ### Eine Eigenschaft auswählen\n \nNachdem du einen Punkt, eine Linie oder eine Fläche hinzugefügt hast kannst du auswählen, welche Eigenschaft das Objekt hat - ob es eine Autobahn oder eine Wohnstraße; ein Supermarkt oder ein Café ist.\nDer Inspektor wird Knöpfe für die am häufigsten verwendeten Eigenschaften zeigen. Andere Eigenschaften findest du, indem du im Suchfeld eingibst wonach du suchst. \n \nKlicke auf den 'i'-Knopf in der Ecke rechts unten in einem Eigenschaften-Knopf, um mehr darüber zu erfahren. \n\n ### Vorlagen verwenden und Tags editieren\n \nNachdem du ein Objekt mit einer Eigenschaft versehen oder ausgewählt hast, zeigt der Inspektor Felder mit Details zu der Eigenschaft wie Name und Adresse an.\n\nUnter diesen Feldern kannst du Icons anklicken, um weitere Details hinzuzufügen wie zum Beispiel einen [Wikipedia](http://www.wikipedia.org/)-Link, Zugänglichkeit für Rollstühle und anderes.\n\nGanz unten im Inspektor kannst du auf 'Weitere Merkmale' klicken, um das Objekt mit beliebigen anderen Tags zu versehen.\n[Taginfo](http://taginfo.openstreetmap.org/) ist eine gute Quelle, um oft genutzte Kombinationen von Eigenschaften zu finden.\n\nÄnderungen die du im Inspektor vornimmst, werden automatisch auf die ausgewählten Objekte angewendet. Durch Klicken auf den 'Rückgängig'-Knopf kannst du sie rückgängig machen.\n\n ### Den Inspektor schließen\n\nDu kannst den Inspektor schließen, indem du auf den Schließen-Knopf oben rechts klickst, den 'Escape'-Knopf auf der Tastatur drückst oder in die Karte klickst.\n",
|
||||
"buildings": "# Gebäude\n\nOpenStreetMap ist die weltgrößte Datenbank für Gebäude und du kannst helfen sie\nweiter zu verbessern.\n\n### Auswahl\n\nDu kannst ein Gebäude auswählen, indem du auf dessen Umrisslinie klickst. Der\nUmriss wird nun hervorgehoben. Außerdem wird ein Werkzeugmenü und eine\nSeitenleiste eingeblendet, welche Informationen zum Gebäude zeigt.\n\n### Bearbeitung\n\nManchmal sind Gebäude falsch platziert oder haben falsche Eigenschaften.\n\nUm ein Gebäude komplett zu verschieben wähle es aus und klicke auf das\n„Bewegen“-Werkzeug. Verschiebe nun das Gebäude mit der Maus und Klicke einmal\nwenn es an der richtigen Stelle ist.\n\nUm den Gebäudeumriss zu korrigieren, klicke und ziehe die Umrissknoten, bis\nsie an der richtigen Stelle sind.\n\n### Erstellen\n\nEine oft gestellte Frage bezieht sich auf das Erstellen von Gebäuden als\nGebäudefläche und/oder als Punkt. Hier gilt, wann immer es möglich ist, sollte\ndas Gebäude als Fläche eingetragen werden. Firmen, Geschäfte und ähnliches\nwerden zusätzlich als Punkte innerhalb des Gebäudeumrisses angelegt.\n\nUm ein Gebäude als Fläche zu zeichnen, klicke auf den „Fläche“-Knopf oben\nlinks und vollende das Gebäude, indem du entweder die \"Enter\"-taste drückst,\noder auf den ersten Knoten klickst.\n\n### Löschen\n\nWenn du siehst und weißt, dass ein Gebäude nicht existiert - zum Beispiel,\nweil du vor Ort warst - kannst du es löschen und es wird von der Karte\nentfernt. Sei vorsichtig mit der Löschfunktion! Das Ergebnis kann, wie\nbei jeder anderen Veränderung, von allen gesehen werden. Außerdem sind\nSatellitenbilder oft veraltet und ein Gebäude könnte einfach neu gebaut sein.\n\nDu kannst ein Gebäude löschen, indem du es auswählst und auf das\nPapierkorbsymbol klickst oder die „Entfernen“-Taste betätigst.\n",
|
||||
"relations": "# Relationen ⏎\n⏎\nEine Relation ist ein besonderes Element in OpenStreetMap, welches andere Elemente⏎\ngruppiert. Es gibt zwei gängige Arten von Relationen: *Weg-Relationen*, die⏎\nzusammengehörende Abschnitte eines Weges gruppieren, die zu einer bestimmten Autobahn⏎\ngehören und *Multipolygone*, die mehrere Linien gruppieren, die ein komplexes⏎\nGebiet (eines mit mehreren Stücken oder Löcher in ihm wie ein Donut) beschreiben.⏎\n⏎\nDie Gruppe von Elemente in einer Relation werden *Mitglieder* genannt. In der Seitenleiste⏎\nist zu sehen, in welchen Relationen ein Element enthalten ist. Durch Klick kann eine Relation⏎\nausgewählt werden, dann werden alle Elemente der Relation in der Seitenleisten aufgeführt⏎\nund auf der Karte markiert.⏎\n⏎\nIn vielen Fällen kümmert sich iD um die Pflege der Relationen automatisch⏎\nwährend der Bearbeitung. Wenn Sie einen Abschnitt einer Straße löschen um⏎\nihn genauer neu zu zeichnen, sollten Sie sicherstellen, dass der neuen Abschnitt⏎\nein Mitglied der gleichen Relationen wird wie das Original.⏎\n⏎\n## Bearbeiten von Relationen⏎\n⏎\nWenn Sie die Relationen bearbeiten möchten, hier sind die Grundlagen:⏎\n⏎\nUm ein Elemente einer Relation hinzuzufügen, wählen Sie das Element und klicken⏎\nSie auf die Schaltfläche \"+\" im Abschnitt \"Alle Relationen\" in der Seitenleiste und⏎\nwählen Sie die Relation oder geben Sie den Namen der Relation ein.⏎\n⏎\nUm eine neue Relation erstellen, wählen Sie das erste zukünftige Mitglied,⏎\nklicken Sie auf die Schaltfläche \"+\" im Abschnitt \"Alle Relationen\" in der Seitenleiste⏎\nund wählen Sie \"Neue Relation ...\".⏎\n⏎\nUm ein Element aus einer Relation zu entfernen, wählen Sie das Element und klicken⏎\nauf den Papierkorb neben der Relation aus der sie es entfernen wollen.⏎\n⏎\nSie können Multipolygone mit Löchern mit dem \"Merge\"-Tool zu erstellen. Zeichnen Sie zwei Bereichen⏎\n(äußeren und inneren Bereich), klicken auf den äußeren Bereich, halten die Umschalttaste gedrückt und⏎\nklicken auf den inneren Bereich, dann klicken Sie auf \"Merge\" (+)-Taste.⏎\n"
|
||||
"relations": "# Relationen\n\nEine Relation ist ein besonderes Element in OpenStreetMap, welches andere Elemente\nzusammenfasst. Es gibt zwei gängige Arten von Relationen: *Weg-Relationen* fassen\nAbschnitte eines Weges zu einer Autobahn (oder zu einem anderen Weg) zusammenfassen.\n*Multipolygone* fassen mehrere Gebiete zu einem komplexen Gebiet zusammen, dabei\nkann auch ein Gebiet ein Loch in einem anderen Gebiet (wie in einem Donut) beschreiben.\n\nDie Elemente in einer Relation werden *Mitglieder* genannt. In der Seitenleiste kannst\nDu sehen, in welchen Relationen ein Element enthalten ist. Durch Klick auf eine Relation\nwerden alle Elemente der Relation in der Seitenleisten aufgezeigt und auf der Karte markiert.\n\nNormalerweise kümmert sich iD während der Bearbeitung automatisch um die Pflege der Relationen.\nWenn Du einen Abschnitt eines Weges löscht um ihn genauer neu zu zeichnen, solltest Du sicherstellen,\ndass der neuen Abschnitt Mitglied in den gleichen Relationen wie das Original wird.\n\n## Bearbeiten von Relationen\n\nUm ein Element einer Relation hinzuzufügen, wähle das zukünftige Mitglied aus und\nklicke in der Seitenleiste auf die Schaltfläche \"+\" im Abschnitt \"Alle Relationen\".\nDu kannst dann die Relation auswählen oder den Namen der Relation eintippen.\n\nUm eine neue Relation erstellen, wähle das erste zukünftige Mitglied aus und\nklicke in der Seitenleiste auf die Schaltfläche \"+\" im Abschnitt \"Alle Relationen\"\nund wähle \"Neue Relation ...\".\n\nUm ein Element aus einer Relation zu entfernen, wählen Sie das Mitglied aus und klicke\nauf den Papierkorb neben der Relation aus Du es entfernen willst.\n\nDu kannst Multipolygone mit Löchern mit dem \"Vereinigen\"-Werkzeug erstellen.\nZeichne zwei Bereiche (den äußeren und den inneren Bereich) und klicke auf den äußeren Bereich.\nDann halte die Umschalttaste gedrückt und klicke auf den inneren Bereich und klicke dann auf \"Vereinigen\" (+).\n"
|
||||
},
|
||||
"intro": {
|
||||
"navigation": {
|
||||
|
|
3
vendor/assets/iD/iD/locales/en.json
vendored
3
vendor/assets/iD/iD/locales/en.json
vendored
|
@ -83,7 +83,8 @@
|
|||
"annotation": {
|
||||
"line": "Squared the corners of a line.",
|
||||
"area": "Squared the corners of an area."
|
||||
}
|
||||
},
|
||||
"not_squarish": "This can't be made square because it is not squarish."
|
||||
},
|
||||
"straighten": {
|
||||
"title": "Straighten",
|
||||
|
|
76
vendor/assets/iD/iD/locales/fi.json
vendored
76
vendor/assets/iD/iD/locales/fi.json
vendored
|
@ -41,6 +41,9 @@
|
|||
}
|
||||
},
|
||||
"continue": {
|
||||
"key": "A",
|
||||
"title": "Pidennä",
|
||||
"description": "Jatka ja pidennä tätä viivaa.",
|
||||
"annotation": {
|
||||
"line": "Viivan muokkaaminen aloitettu.",
|
||||
"area": "Alueen muokkaaminen aloitettu."
|
||||
|
@ -69,11 +72,23 @@
|
|||
"not_closed": "Tätä ei voi tehdä ympyränmuotoiseksi, sillä sitä ei ole suljettu."
|
||||
},
|
||||
"orthogonalize": {
|
||||
"title": "Muuta suorakulmaiseksi",
|
||||
"description": {
|
||||
"line": "Muuta tämän viivan kulmat suorakulmiksi.",
|
||||
"area": "Muuta tämän alueen kulmat suorakulmiksi."
|
||||
},
|
||||
"key": "S",
|
||||
"annotation": {
|
||||
"line": "Viiva muutettu suorakulmaiseksi.",
|
||||
"area": "Alue muutettu suorakulmaiseksi."
|
||||
}
|
||||
},
|
||||
"straighten": {
|
||||
"title": "Suorista",
|
||||
"description": "Suorista tämä viiva.",
|
||||
"key": "S",
|
||||
"annotation": "Viiva suoristettiin."
|
||||
},
|
||||
"delete": {
|
||||
"title": "Poista",
|
||||
"description": "Poista tämä kohde kartalta.",
|
||||
|
@ -132,6 +147,7 @@
|
|||
},
|
||||
"rotate": {
|
||||
"title": "Käännä",
|
||||
"description": "Käännä tätä kappaletta sen keskipisteen ympäri.",
|
||||
"key": "R",
|
||||
"annotation": {
|
||||
"line": "Viiva käännetty.",
|
||||
|
@ -170,14 +186,14 @@
|
|||
"nothing": "Ei muokkaushistoriaa."
|
||||
},
|
||||
"tooltip_keyhint": "Pikanäppäin:",
|
||||
"browser_notice": "Tämä kartanmuokkausohjelma toimii Firefox-, Chrome-, Safari- ja Opera-selaimissa sekä Internet Explorer 9 tai uudemmalla selaimella. Nykyinen verkkoselain ei ole tuettu, joten päivitä verkkoselain tai muokkaa karttaa Potlatch 2 -ohjelmalla.",
|
||||
"browser_notice": "Tätä karttamuokkainta voi käyttää Firefox-, Chrome-, Safari- ja Opera-selaimilla sekä Internet Explorer 9 tai uudemmalla selaimella. Nykyinen verkkoselain ei ole tuettu, joten päivitä verkkoselain tai muokkaa karttaa Potlatch 2 -ohjelmalla.",
|
||||
"translate": {
|
||||
"translate": "Käännä",
|
||||
"localized_translation_label": "Monikielinen nimi",
|
||||
"localized_translation_language": "Valitse kieli",
|
||||
"localized_translation_name": "Nimi"
|
||||
},
|
||||
"zoom_in_edit": "Muokkaa lähentämällä karttaa",
|
||||
"zoom_in_edit": "Lähennä karttaa ennen muokkaamista",
|
||||
"logout": "kirjaudu ulos",
|
||||
"loading_auth": "Yhdistetään OpenStreetMap-palveluun...",
|
||||
"report_a_bug": "ilmoita ongelmasta",
|
||||
|
@ -191,7 +207,7 @@
|
|||
"description_placeholder": "Kuvaile lyhyesti karttaan tehtyjä muutoksia",
|
||||
"message_label": "Yhteenveto",
|
||||
"upload_explanation": "Palvelimelle lähetettävät muutokset tulevat pian näkyviin kaikkiin OpenStreetMap-kartta-aineistoa käyttäviin palveluihin.",
|
||||
"upload_explanation_with_user": "Palvelimelle lähetettävät muutokset käyttäjänä {user} tulevat pian näkyviin kaikkiin OpenStreetMap-kartta-aineistoa käyttäviin palveluihin.",
|
||||
"upload_explanation_with_user": "Palvelimelle lähetetään muutokset käyttäjätunnisteella {user}. Muutokset tulevat pian näkyviin kaikkiin OpenStreetMap-kartta-aineistoa käyttäviin palveluihin.",
|
||||
"save": "Tallenna",
|
||||
"cancel": "Peru",
|
||||
"warnings": "Varoitukset",
|
||||
|
@ -236,6 +252,7 @@
|
|||
"title": "Tausta",
|
||||
"description": "Taustan asetukset",
|
||||
"percent_brightness": "{opacity}% kirkkaus",
|
||||
"custom": "Mukautettu",
|
||||
"fix_misalignment": "Korjaa ilmakuvavirhe",
|
||||
"reset": "palauta"
|
||||
},
|
||||
|
@ -259,7 +276,8 @@
|
|||
"view_on_osm": "Näytä OSM-kartalla",
|
||||
"facebook": "Jaa Facebookissa",
|
||||
"twitter": "Jaa Twitterissä",
|
||||
"google": "Jaa Google+-palvelussa"
|
||||
"google": "Jaa Google+-palvelussa",
|
||||
"help_html": "Karttaan tehdyt muutokset ilmestyvät perinteiseen karttanäkymään muutaman minuutin kuluessa. Tiettyjen ominaisuuksien ilmestyminen kartalle ja muutokset tiettyihin karttanäkymiin voivat viedä kauemmin\n(<a href='https://help.openstreetmap.org/questions/4705/why-havent-my-changes-appeared-on-the-map' target='_blank'>lisätietoja</a>).\n"
|
||||
},
|
||||
"confirm": {
|
||||
"okay": "OK"
|
||||
|
@ -537,6 +555,9 @@
|
|||
"label": "Kerrokset",
|
||||
"placeholder": "2, 4, 6..."
|
||||
},
|
||||
"lit": {
|
||||
"label": "Valaistus"
|
||||
},
|
||||
"location": {
|
||||
"label": "Sijainti"
|
||||
},
|
||||
|
@ -730,6 +751,9 @@
|
|||
"amenity": {
|
||||
"name": "Palvelu"
|
||||
},
|
||||
"amenity/arts_centre": {
|
||||
"name": "Taidekeskus"
|
||||
},
|
||||
"amenity/atm": {
|
||||
"name": "Pankkiautomaatti",
|
||||
"terms": "otto, pankkiautomaatti, rahannostoautomaatti, pankki"
|
||||
|
@ -753,6 +777,10 @@
|
|||
"name": "Pyörävuokraamo",
|
||||
"terms": "pyörävuokraamo, kaupunkipyörä, pyöränvuokraus, pyörän vuokraus, polkupyörävuokraamo, polkupyörän vuokraus, polkupyöränvuokraus, polkupyörä, pyörä"
|
||||
},
|
||||
"amenity/boat_rental": {
|
||||
"name": "Venevuokraamo",
|
||||
"terms": "vene, laiva, paatti, jolla, veneenvuokraus, venevuokra, vuokra, venevuokraus, venevuokraamo, veneenvuokraamo"
|
||||
},
|
||||
"amenity/cafe": {
|
||||
"name": "Kahvila"
|
||||
},
|
||||
|
@ -776,8 +804,8 @@
|
|||
"terms": "leffa, leffateatteri, elokuva, elokuvateatteri"
|
||||
},
|
||||
"amenity/college": {
|
||||
"name": "Ammattikorkeakoulu",
|
||||
"terms": "college, ammattikorkeakoulu, amk"
|
||||
"name": "Ammattiopisto",
|
||||
"terms": "ammattiopisto, amis, ammattikoulu, koulu, koulutus, oppilaitos, toinen aste"
|
||||
},
|
||||
"amenity/courthouse": {
|
||||
"name": "Käräjäoikeus",
|
||||
|
@ -824,7 +852,7 @@
|
|||
},
|
||||
"amenity/parking": {
|
||||
"name": "Pysäköintialue",
|
||||
"terms": "pysäköinti, parkkipaikka, pysäköintipaikka, parkki, pysäköintitalo, parkkitalo"
|
||||
"terms": "pysäköinti, parkkipaikka, pysäköintipaikka, parkki, pysäköintitalo, parkkitalo, autoparkki, auto"
|
||||
},
|
||||
"amenity/pharmacy": {
|
||||
"name": "Apteekki",
|
||||
|
@ -863,16 +891,19 @@
|
|||
"name": "Ravintola"
|
||||
},
|
||||
"amenity/school": {
|
||||
"name": "Koulu"
|
||||
"name": "Koulu",
|
||||
"terms": "koulu, alakoulu, ala-aste, yläaste, yläkoulu, lukio, yhteislukio, keskikoulu, koulutus, opiskelu, oppilaitos"
|
||||
},
|
||||
"amenity/swimming_pool": {
|
||||
"name": "Uima-allas"
|
||||
},
|
||||
"amenity/taxi": {
|
||||
"name": "Taksitolppa"
|
||||
"name": "Taksitolppa",
|
||||
"terms": "taksitolppa, taksiasema, taksipiste, taksi, taksikyltti, taxi"
|
||||
},
|
||||
"amenity/telephone": {
|
||||
"name": "Puhelin"
|
||||
"name": "Yleinen puhelin",
|
||||
"terms": "puhelinkoppi, puhelin, puhelinkioski, yleinen puhelin, julkinen puhelin"
|
||||
},
|
||||
"amenity/theatre": {
|
||||
"name": "Teatteri"
|
||||
|
@ -885,7 +916,8 @@
|
|||
"terms": "kunnantalo, kaupungintalo, valtuusto,"
|
||||
},
|
||||
"amenity/university": {
|
||||
"name": "Yliopisto"
|
||||
"name": "Korkeakoulu",
|
||||
"terms": "yliopisto, korkeakoulu, college, ammattikorkeakoulu, amk"
|
||||
},
|
||||
"amenity/waste_basket": {
|
||||
"name": "Roskakori",
|
||||
|
@ -954,6 +986,9 @@
|
|||
"building/apartments": {
|
||||
"name": "Asunnot"
|
||||
},
|
||||
"building/commercial": {
|
||||
"name": "Kaupallinen rakennus"
|
||||
},
|
||||
"building/entrance": {
|
||||
"name": "Sisäänkäynti"
|
||||
},
|
||||
|
@ -968,10 +1003,20 @@
|
|||
"name": "Mökki",
|
||||
"terms": "maja, mökki, kesämökki, tönö, pikkutalo, pieni rakennus"
|
||||
},
|
||||
"building/industrial": {
|
||||
"name": "Teollisuusrakennus"
|
||||
},
|
||||
"building/residential": {
|
||||
"name": "Asuinrakennus"
|
||||
},
|
||||
"emergency/ambulance_station": {
|
||||
"name": "Ambulanssiasema",
|
||||
"terms": "ambulanssi, ambulanssit, hälytysajoneuvo, ambulanssihalli, ambulanssivarasto, ambulanssitalli, hälytysajoneuvohalli, hälytysajoneuvotalli, hälytysajoneuvovarasto"
|
||||
},
|
||||
"emergency/fire_hydrant": {
|
||||
"name": "Paloposti",
|
||||
"terms": "paloposti, vedensyöttö, vesisyöttö, palokunta, vesiposti"
|
||||
},
|
||||
"emergency/phone": {
|
||||
"name": "Hätäpuhelin",
|
||||
"terms": "hätänumero, hätäpuhelin, hätätilanne, poikkeuspuhelin, hätäkeskus, hätäilmoitus"
|
||||
|
@ -1192,6 +1237,10 @@
|
|||
"leisure/pitch/basketball": {
|
||||
"name": "Koripallokenttä"
|
||||
},
|
||||
"leisure/pitch/skateboard": {
|
||||
"name": "Rullalautailupuisto",
|
||||
"terms": "skeittipuisto, skeittaus, skeitti, rullalautailu, rullalauta, rullalautailupuisto, parkit, parkki, skeittiparkki, skeittiparkit"
|
||||
},
|
||||
"leisure/pitch/soccer": {
|
||||
"name": "Jalkapallokenttä"
|
||||
},
|
||||
|
@ -1287,7 +1336,7 @@
|
|||
"name": "Lähde"
|
||||
},
|
||||
"natural/tree": {
|
||||
"name": "Havupu"
|
||||
"name": "Havupuu"
|
||||
},
|
||||
"natural/water": {
|
||||
"name": "Vesi"
|
||||
|
@ -1516,7 +1565,8 @@
|
|||
"name": "Lehtikoju"
|
||||
},
|
||||
"shop/optician": {
|
||||
"name": "Optikko"
|
||||
"name": "Optikko",
|
||||
"terms": "optikko, optiikko, optometristi, optometri, optometria, silmälasi, silmälasit, aurinkolasi, aurinkolasit, silmälasiliike"
|
||||
},
|
||||
"shop/outdoor": {
|
||||
"name": "Ulkoilmamyymälä"
|
||||
|
|
12
vendor/assets/iD/iD/locales/fr.json
vendored
12
vendor/assets/iD/iD/locales/fr.json
vendored
|
@ -453,6 +453,9 @@
|
|||
"atm": {
|
||||
"label": "Distributeur de billets"
|
||||
},
|
||||
"backrest": {
|
||||
"label": "Dossier"
|
||||
},
|
||||
"barrier": {
|
||||
"label": "Type"
|
||||
},
|
||||
|
@ -1184,6 +1187,9 @@
|
|||
"name": "Escalier",
|
||||
"terms": "Escalier"
|
||||
},
|
||||
"highway/stop": {
|
||||
"name": "Paneau Stop"
|
||||
},
|
||||
"highway/tertiary": {
|
||||
"name": "Route tertiaire",
|
||||
"terms": "Route tertiaire"
|
||||
|
@ -1871,7 +1877,8 @@
|
|||
"terms": "Point de vue"
|
||||
},
|
||||
"tourism/zoo": {
|
||||
"name": "Zoo"
|
||||
"name": "Zoo",
|
||||
"terms": "Zoo"
|
||||
},
|
||||
"type/boundary": {
|
||||
"name": "Frontière"
|
||||
|
@ -1943,7 +1950,8 @@
|
|||
"name": "Canal d'évacuation d'eau pluviale"
|
||||
},
|
||||
"waterway/river": {
|
||||
"name": "Rivière"
|
||||
"name": "Rivière",
|
||||
"terms": "Rivière"
|
||||
},
|
||||
"waterway/riverbank": {
|
||||
"name": "Berge"
|
||||
|
|
16
vendor/assets/iD/iD/locales/hr.json
vendored
16
vendor/assets/iD/iD/locales/hr.json
vendored
|
@ -74,6 +74,12 @@
|
|||
"not_closed": "Ovo se ne može zaokružiti jer nije zatvoren objekt."
|
||||
},
|
||||
"orthogonalize": {
|
||||
"title": "Stavi pod pravi kut",
|
||||
"description": {
|
||||
"line": "Stavi pod pravi kut uglove linije.",
|
||||
"area": "Stavi pod pravi kut uglove područja."
|
||||
},
|
||||
"key": "S",
|
||||
"annotation": {
|
||||
"line": "Kutovi linije su pod pravim kutom.",
|
||||
"area": "Kutovi područja su pod pravim kutom."
|
||||
|
@ -82,7 +88,9 @@
|
|||
"straighten": {
|
||||
"title": "Izravnaj",
|
||||
"description": "Izravnaj ovu liniju.",
|
||||
"key": "S"
|
||||
"key": "S",
|
||||
"annotation": "Linija je izravnana.",
|
||||
"too_bendy": "Ovo se ne može izravnati jer je previše krivudavo."
|
||||
},
|
||||
"delete": {
|
||||
"title": "Izbriši",
|
||||
|
@ -1378,7 +1386,7 @@
|
|||
"terms": "svjetionik,svjetlosni signal,toranj za svjetlosnu navigaciju"
|
||||
},
|
||||
"man_made/pier": {
|
||||
"name": "Pristanište",
|
||||
"name": "Mol",
|
||||
"terms": "pristanište,mol,lukobran,molo,mul,gat"
|
||||
},
|
||||
"man_made/pipeline": {
|
||||
|
@ -1454,8 +1462,8 @@
|
|||
"terms": "hrpa gruha,sip,plazina,kršlje,krš,sitno kamenje na strmini,kamenje na strmini,kamenjar,kamen"
|
||||
},
|
||||
"natural/scrub": {
|
||||
"name": "Šikara",
|
||||
"terms": "šikara,zaraslo zemljište,gust šibljak,guštara,guštik,šiprag,šipražje,gustiš,šiblje, samoniklo šiblje,šibljar,šibljik"
|
||||
"name": "Makija",
|
||||
"terms": "šikara,zaraslo zemljište,gust šibljak,guštara,guštik,šiprag,šipražje,gustiš,šiblje, samoniklo šiblje,šibljar,šibljik,makija"
|
||||
},
|
||||
"natural/spring": {
|
||||
"name": "Izvor",
|
||||
|
|
4
vendor/assets/iD/iD/locales/lt.json
vendored
4
vendor/assets/iD/iD/locales/lt.json
vendored
|
@ -1,8 +1,8 @@
|
|||
{
|
||||
"modes": {
|
||||
"add_area": {
|
||||
"title": "Teritorija",
|
||||
"description": "Pridėti parkus, pastatus, ežerus ar kitas vietas į žemėlapį."
|
||||
"title": "Plotas",
|
||||
"description": "Pridėkite parkus, pastatus, ežerus ar kitas vietas į žemėlapį."
|
||||
},
|
||||
"add_line": {
|
||||
"title": "Linija",
|
||||
|
|
181
vendor/assets/iD/iD/locales/pl.json
vendored
181
vendor/assets/iD/iD/locales/pl.json
vendored
|
@ -41,6 +41,11 @@
|
|||
}
|
||||
},
|
||||
"continue": {
|
||||
"key": "A",
|
||||
"title": "Kontynuuj",
|
||||
"description": "Kontynuuj tą linię",
|
||||
"not_eligible": "Żadna linia nie może być w tym miejscu kontyuowana",
|
||||
"multiple": "Kilka linii może być tutaj kontynuowanych. Aby wybrać linię, kliknij w nią przytrzymując klawisz Shift.",
|
||||
"annotation": {
|
||||
"line": "Kontynuowano rysowanie linii.",
|
||||
"area": "Kontynuowano obszar."
|
||||
|
@ -69,11 +74,24 @@
|
|||
"not_closed": "Z tego nie można zrobić okręgu, bo nie jest pętlą."
|
||||
},
|
||||
"orthogonalize": {
|
||||
"title": "Koryguj prostopadłość",
|
||||
"description": {
|
||||
"line": "Spraw, aby kąty tej linii były proste.",
|
||||
"area": "Spraw, aby kąty tego obszaru były proste."
|
||||
},
|
||||
"key": "S",
|
||||
"annotation": {
|
||||
"line": "Stworzono kąty proste z narożników linii.",
|
||||
"area": "Stworzono kąty proste obszaru."
|
||||
}
|
||||
},
|
||||
"straighten": {
|
||||
"title": "Prostowanie",
|
||||
"description": "Wyprostuj tę linię.",
|
||||
"key": "S",
|
||||
"annotation": "Wyprostowano linię.",
|
||||
"too_bendy": "Nie można wyprostować tej linii gdyż zakręca ona zbyt mocno."
|
||||
},
|
||||
"delete": {
|
||||
"title": "Usuń",
|
||||
"description": "Usuń to z mapy.",
|
||||
|
@ -132,6 +150,7 @@
|
|||
},
|
||||
"rotate": {
|
||||
"title": "Obróć",
|
||||
"description": "Obróć ten obiekt względem jego środka.",
|
||||
"key": "R",
|
||||
"annotation": {
|
||||
"line": "Obrócono linię.",
|
||||
|
@ -237,6 +256,7 @@
|
|||
"description": "Ustawienia tła",
|
||||
"percent_brightness": "jasność {opacity}%",
|
||||
"custom": "Własne",
|
||||
"custom_prompt": "Wpisz adres kafelków w formacie {z}, {x}, {y} dla schematu Z/X/Y lub {u} dla schematu QuadTile.",
|
||||
"fix_misalignment": "Wyrównaj podkład",
|
||||
"reset": "resetuj"
|
||||
},
|
||||
|
@ -302,11 +322,14 @@
|
|||
"help": {
|
||||
"title": "Pomoc",
|
||||
"help": "# Pomoc\n\nTo jest edytor [OpenStreetMap](http://www.openstreetmap.org/),\nwolnej i edytowalnej mapy świata. Możesz go używać do dodawania i\naktualizacji danych w twoim rejonie, czyniąc otwartą mapę świata lepszą\ndla każdego.\n\nModyfikacje wprowadzone na tej mapie będą widoczne dla wszystkich\nużywających OpenStreetMap. Aby wprowadzić modyfikacje, potrzebujesz\n[darmowego konta OpenStreetMap](https://www.openstreetmap.org/user/new).\n\n[Edytor iD](http://ideditor.com/) jest projektem społecznościowym z\n[kodem dostępnym na GitHub](https://github.com/systemed/iD).\n",
|
||||
"editing_saving": "# Edycja i zapis\n\nTen edytor został zaprojektowany do pracy w trybie online i już go używasz poprzez stronę\ninternetową.\n\n### Wybieranie obiektów\n\nAby wybrać obiekt na mapie, na przykład droga, czy POI, kliknij go na mapie.\nSpowoduje to podświetlenie wybranego obiektu, otworzenie panelu zawierającego szczegóły\no nim i wyświetlenie menu z poleceniami, które możesz wykonać na obiekcie.\n\nWiele obiektów może zostać wybranych przez przytrzymanie wciśniętego klawisza 'Shift' i lewego klawisza myszy, z jednoczesnym przeciągnięciem zaznaczając interesujący nas obszar mapy. Spowoduje to wybór wszystkich obiektów zawartych w narysowanym prostokącie, umożliwiając Tobie wykonywanie działań na kilku obiektach naraz.\n\n### Zapisywanie modyfikacji\n\nGdy wprowadzisz zmiany, na przykład przez modyfikacje dróg, budynków i miejsc, są one\nprzechowywane lokalnie aż zapiszesz je na serwerze. Nie martw się, gdy popełnisz błąd - możesz\ncofnąć zmiany przez kliknięcie na przycisk cofnij i powtórzyć je poprzez kliknięcie na przycisk powtórz.\n\nKliknij 'Zapisz' aby skończyć grupę modyfikacji - na przykład, gdy skończyłeś pewien obszar miasta i\nchcesz zacząć następny. Będziesz miał wtedy szansę przejrzeć, co zrobiłeś, a edytor dostarczy pomocne\nsugestie i ostrzeżenia w razie, gdyby coś było nie tak z twoimi zmianami.\n\nJeśli wszystko dobrze wygląda, możesz podać krótki komentarz opisujący zmianę, którą wprowadziłeś\ni kliknąć 'Zapisz' ponownie, aby wysłać zmiany do [OpenStreetMap.org](http://www.openstreetmap.org/),\ngdzie będą one widoczne dla wszystkich użytkowników i dostępne dla innych do bazowania na nich i\ndalszego ulepszania.\n\nJeżeli nie możesz skończyć swoich modyfikacji w czasie jednej sesji, możesz opuścić okno edytora i\nwrócić później (na tym samym komputerze i w tej samej przeglądarce), a edytor zaoferuje ci przywrócenie\ntwojej pracy.\n",
|
||||
"roads": "# Drogi\n\nMożesz tworzyć, poprawiać i usuwać drogi używając tego edytora. Drogi mogą być wszelkiego rodzaju:\nścieżki, ulice, szlaki, ścieżki rowerowe i tak dalej - każdy często uczęszczany odcinek powinien dać się\nprzedstawić.\n\n### Zaznaczanie\n\nKliknij drogę, aby ją zaznaczyć. Obwiednia powinna stać się widoczna, wraz z małym menu\nnarzędziowym na mapie oraz panelem bocznym pokazującym więcej informacji na temat drogi.\n\n### Modyfikowanie\n\nCzęsto będziesz widział drogi, które nie są wyrównane ze zdjęciami satelitarnymi lub śladami GPS.\nMożesz dopasować te drogi tak, aby były we właściwym miejscu.\n\nNajpierw kliknij drogę, którą chcesz zmienić. Podświetli ją to oraz pokaże punkty kontrolne, które\nmożesz przesunąć w lepsze miejsce. Jeżeli chcesz dodać nowe punkty kontrolne, aby droga\nbyła bardziej szczegółowa, dwukrotnie kliknij część drogi bez punktu, a w tym miejscu nowy się\npojawi.\n\nJeżeli droga łączy się z inną drogą, ale nie jest prawidłowo połączona z nią na mapie, możesz\nprzeciągnąć jeden z puntów kontrolnych na drugą drogę w celu ich połączenia. Prawidłowe połączenia\ndróg są ważne dla mapy i kluczowe dla wyznaczania tras.\n\nMożesz też kliknąć narzędzie 'Przesuń' lub nacisnąć klawisz `M` aby przesunąć jednocześnie całą\ndrogę, a następnie kliknąć ponownie, aby zachować to przesunięcie.\n\n### Usuwanie\n\nGdy droga jest całkiem błędna - widzisz, że nie istnieje na zdjęciach satelitarnych (a najlepiej sam\nsprawdziłeś w terenie, że jej nie ma) - możesz usunąć ją. Uważaj, gdy usuwasz obiekty - wyniki usunięcia,\ntak jak każdej modyfikacji, są widoczne dla wszystkich, a zdjęcie satelitarne często nie są aktualne,\nwięc droga może być po prostu nowo wybudowana.\n\nMożesz usunąć drogę przez zaznaczenie jej, a następnie kliknięcie ikony kosza lub wciśnięcie\nklawisza 'Delete'.\n\n### Tworzenie\n\nGdzieś tam powinna być droga, ale jej nie ma? Kliknij przycisk 'Linia' w górnym lewym rogu edytora\nlub naciśnij klawisz '2' na klawiaturze, aby zacząć rysować linię.\n\nKliknij początek drogi na mapie, aby zacząć rysować. Jeżeli droga odchodzi od już istniejącej, zacznij\nprzez kliknięcie w miejscu, w którym się łączą.\n\nNastępnie klikaj na punktach wzdłuż drogi tak, aby biegła ona odpowiednio według zdjęć satelitarnych\nlub GPS. Jeżeli droga, którą rysujesz, krzyżuje się z inną, połącz je, klikając na punkcie przecięcia. Gdy\nskończysz rysować, dwukrotnie kliknij ostatni punkt lub naciśnij klawisz 'Enter' na klawiaturze.\n",
|
||||
"gps": "# GPS\n\nDane GPS są najbardziej zaufanym źródłem dla OpenStreetMap. Ten edytor obsługuje lokalne ślady -\npliki `.gpx` na twoim komputerze. Możesz zbierać tego rodzaju ślady GPS używając aplikacji na\nsmartfony lub sprzętu GPS.\n\nInformacje jak używać GPS-u do zbierania informacji o okolicy możesz znaleźć pod\n[Zbieranie informacji z GPS](http://learnosm.org/en/beginner/using-gps/).\n\nAby użyć śladu GPX do rysowania mapy, przeciągnij i upuść plik GPX na edytor. Jeżeli zostanie\nrozpoznany, zostanie dodany na mapę w postaci jaskrawej linii. Kliknij menu 'Ustawienia tła'\npo prawej stronie, aby włączyć, wyłączyć lub powiększyć do nowej warstwy GPX.\n\nŚlad GPX nie jest bezpośrednio wysyłany do OpenStreetMap - najlepiej użyć go do rysowania mapy,\nużywając go jako wzoru dla nowych obiektów, które dodasz. Aby wysłać ślad na serwer odwiedź stronę \n [Publiczne ślady GPS](http://www.openstreetmap.org/trace/create), będziesz mógł go udostępnić\ninnym użytkownikom.\n",
|
||||
"imagery": "# Zdjęcia\n\nZdjęcia lotnicze/satelitarne są ważnym zasobem w rysowaniu map. Kolekcja zdjęć lotniczych,\nsatelitarnych i innych wolnodostępnych źródeł jest dostępna w edytorze w menu 'Ustawienia tła' po\nlewej stronie.\n\nDomyślnie wyświetlana jest warstwa zdjęć satelitarnych z [Bing Maps](http://www.bing.com/maps/),\nale w miarę przybliżania i pojawiają się nowe źródła. Niektóre kraje, takie jak Stany Zjednoczone, Francja\nczy Dania mają w pewnych miejscach dostępne zdjęcia bardzo wysokiej jakości.\n\nZdjęcia są czasem przesunięte względem danych na mapie z powodu błędu dostawcy zdjęć. Jeżeli\nwidzisz dużo dróg przesuniętych względem tła, zastanów się, zanim je wszystkie wyrównasz względem\ntła. Zamiast tego może dostosować przesunięcie zdjęć tak, aby zgadzały się z istniejącymi danymi przez\nnaciśnięcie przycisku 'Wyrównaj podkład' na dole Ustawień tła.\n",
|
||||
"addresses": "# Adresy\n\nAdresy są jedną z najbardziej użytecznych informacji na mapie.\n\nMimo że adresy są często reprezentowane jako części ulic, w OpenStreetMap są one\nzapisywane jako atrybuty budynków i miejsc wzdłuż ulicy.\n\nMożesz dodać nową informację adresową do miejsc narysowanych w postaci\nobwiedni budynków jak również do tych narysowanych w postaci pojedynczych punktów.\nNajlepszym źródłem danych adresowych jest jak zwykle zwiedzanie okolicy\nlub własna wiedza - tak jak z każdym innym obiektem, kopiowanie danych z komercyjnych\nźródeł takich jak Google Maps jest zabronione.\n",
|
||||
"inspector": "# Używanie Inspektora\n\nInspektor jest elementem interfejsu po prawej stronie strony, który pojawia się po zaznaczeniu obiektu\ni który pozwala ci modyfikować jego szczegóły.\n\n### Zaznaczanie typu obiektu\n\nPo dodaniu punktu, linii lub obszaru, możesz wybrać, jakiego rodzaju to jest obiekt, na przykład czy jest\nto autostrada czy droga lokalna, kawiarnia czy supermarket. Inspektor wyświetli przyciski dla\npopularnych typów obiektów, a ty możesz znaleźć inne przez wpisanie tego, czego szukasz do pola\nszukania.\n\nKliknij 'i' w prawym dolnym rogu przycisku typu obiektu, aby dowiedzieć się o nim więcej.\nKliknij przycisk, aby wybrać ten typ.\n\n### Używanie formularzy i edycja tagów\n\nPo wybraniu typu obiektu lub gdy wybierzesz obiekt, który ma już nadany typ, inspektor wyświetli pola\nzawierające szczegóły na temat obiektu, takie jak nazwa i adres.\n\nPoniżej pól, które widzisz, możesz kliknąć ikony w celu dodania innych szczegółów, jak na przykład\ninformacja z [Wikipedii](http://www.wikipedia.org/), dostęp dla wózków inwalidzkich i innych.\n\nNa dole inspektora kliknij 'Dodatkowe tagi', aby dodać dowolne inne tagi do elementu.\n[Taginfo](http://taginfo.openstreetmap.org/) jest świetnym źródłem informacji o popularnych\nkombinacjach tagów.\n\nZmiany, które wprowadzisz w inspektorze, są automatycznie nanoszone na mapę. Możesz je cofnąć w\nkażdym momencie przez wciśnięcie przycisku 'Cofnij'.\n\n### Zamykanie Inspektora\n\nMożesz zamknąć inspektora przez kliknięcie na przycisk zamknij w górnym prawym rogu, wciśnięcie\nklawisza 'Escape' lub kliknięcie mapy.\n",
|
||||
"buildings": "# Budynki\n\nOpenStreetMap jest największą na świecie bazą budynków. Możesz\nprzyczynić się do rozwoju owej bazy.\n\n### Zaznaczanie\n\nMożesz zaznaczyć budynek przez kliknięcie jego obwodu. Podświetli\nto obiekt i otworzy małe menu narzędziowe oraz pasek boczny zawierający\ninformacje o budynku.\n\n### Modyfikowanie\n\nZdarza się, że budynki są umieszczone w nieprawidłowych miejscach\nlub mają nieodpowiednie tagi.\n\nAby przesunąć cały budynek, zaznacz go, a następnie wybierz narzędzie\nprzesuwania. Przesuń kursor myszy, aby zmienić pozycję obiektu, a następnie\nkliknij, gdy już będzie w odpowiednim miejscu.\n\nAby poprawić kształt budynku, kliknij i przeciągnij węzły, które tworzą obwód\nobiektu, w lepiej usytuowane miejsce.\n\n### Tworzenie\n\nJednym z głównych problemów podczas tworzenia budynków jest to,\nże OpenStreetMap przechowuje budynki zarówno w postaci punktów\njak i obszarów. Przyjęło się rysowanie budynków w postaci obszarów, a rysowanie\nfirm, domów czy innej infrastruktury w postaci punktów w obszarze budynku.\n\nZacznij rysować budynek w postaci obszaru przez kliknięcie przycisku 'Obszar'\nw górnym lewym rogu edytora i zakończ go przez naciśnięcie klawisza 'Enter'\nna klawiaturze lub przez kliknięcie na pierwszym rysowanym punkcie w celu\nzamknięcia obszaru.\n\n### Usuwanie\n\nJeżeli budynek jest całkiem błędny - widzisz, że nie ma go na zdjęciach satelitarnych,\na najlepiej sprawdziłeś w terenie, że nie istnieje - możesz go usunąć. Bądź ostrożny\nusuwając obiekty - tak jak po każdej innej modyfikacji, rezultaty są widoczne dla wszystkich,\na zdjęcia satelitarne często nie są aktualne, więc budynek może być po prostu nowo\nwybudowany.\n\nMożesz usunąć budynek przez kliknięcie na nim, a następnie na ikonie\nśmietnika lub wciśnięcie klawisza 'Delete'. \n"
|
||||
"buildings": "# Budynki\n\nOpenStreetMap jest największą na świecie bazą budynków. Możesz\nprzyczynić się do rozwoju owej bazy.\n\n### Zaznaczanie\n\nMożesz zaznaczyć budynek przez kliknięcie jego obwodu. Podświetli\nto obiekt i otworzy małe menu narzędziowe oraz pasek boczny zawierający\ninformacje o budynku.\n\n### Modyfikowanie\n\nZdarza się, że budynki są umieszczone w nieprawidłowych miejscach\nlub mają nieodpowiednie tagi.\n\nAby przesunąć cały budynek, zaznacz go, a następnie wybierz narzędzie\nprzesuwania. Przesuń kursor myszy, aby zmienić pozycję obiektu, a następnie\nkliknij, gdy już będzie w odpowiednim miejscu.\n\nAby poprawić kształt budynku, kliknij i przeciągnij węzły, które tworzą obwód\nobiektu, w lepiej usytuowane miejsce.\n\n### Tworzenie\n\nJednym z głównych problemów podczas tworzenia budynków jest to,\nże OpenStreetMap przechowuje budynki zarówno w postaci punktów\njak i obszarów. Przyjęło się rysowanie budynków w postaci obszarów, a rysowanie\nfirm, domów czy innej infrastruktury w postaci punktów w obszarze budynku.\n\nZacznij rysować budynek w postaci obszaru przez kliknięcie przycisku 'Obszar'\nw górnym lewym rogu edytora i zakończ go przez naciśnięcie klawisza 'Enter'\nna klawiaturze lub przez kliknięcie na pierwszym rysowanym punkcie w celu\nzamknięcia obszaru.\n\n### Usuwanie\n\nJeżeli budynek jest całkiem błędny - widzisz, że nie ma go na zdjęciach satelitarnych,\na najlepiej sprawdziłeś w terenie, że nie istnieje - możesz go usunąć. Bądź ostrożny\nusuwając obiekty - tak jak po każdej innej modyfikacji, rezultaty są widoczne dla wszystkich,\na zdjęcia satelitarne często nie są aktualne, więc budynek może być po prostu nowo\nwybudowany.\n\nMożesz usunąć budynek przez kliknięcie na nim, a następnie na ikonie\nśmietnika lub wciśnięcie klawisza 'Delete'. \n",
|
||||
"relations": "# Relacje\n\nRelacja to specjalny rodzaj obiektu w OpenStreetMap, który grupuje razem\ninne obiekty. Na przykład dwa powszechne rodzaje relacji to *relacje trasy*\nktóre grupują odcinki drogi należące do konkretnej autostrady lub drogi oraz\n*wielokąty* łączące razem kilka linii, które definiują bardziej złożony obszar\n(na przykład las z polaną w środku).\n\nKażdy element relacji nazywany jest *członkiem*. W pasku bocznym możesz\nzobaczyć do której relacji należy obiekt i kliknąć aby ją zaznaczyć. Gdy relacja\njest zaznaczona, ukaże nam się lista jej członków, które jednocześnie zostaną \npodświetlone na mapie.\n\nPrzeważnie edytor iD automatycznie sprawdza relacje podczas twoich edycji.\nTrzeba pamiętać o ważnej rzeczy, gdy kasujesz jakiś fragment linii (np. aby\ndokładniej go narysować), sprawdź wcześniej do jakich relacji należy oraz\njakie pełni w nich role aby uzupełnić te dane po wyrysowaniu linii.\n\n## Edycja relacji\n\nJeśli chcesz edytować relacje, oto podstawy wiedzy.\n\nAby dodać obiekt do relacji, zaznacz obiekt i wciśnij \"+\" w sekcji \"Wszystkie relacje\"\ni wybierz relację lub wpisz jej nazwę.\n\nAby utworzyć nową relację, zaznacz pierwszy obiekt, który ma być członkiem\nrelacji i wciśnij \"+\" w sekcji \"Wszystkie relacje\" i wybierz \"Nowa relacja...\"\n\nAby usunąć obiekt z relacji, zaznacz obiekt i kliknij ikonkę kosza obok\nrelacji, z której chcesz go usunąć.\n\nMożesz stworzyć wielokąt złożony z otworem używając narzędzia Scalanie.\nNarysuj dwa obszary, gdzie jeden znajduje się wewnątrz drugiego, zaznacz\noba przytrzymując klawisz Shift i kliknij przycisk \"Scal te linie\" (+).\n"
|
||||
},
|
||||
"intro": {
|
||||
"navigation": {
|
||||
|
@ -340,13 +363,15 @@
|
|||
},
|
||||
"lines": {
|
||||
"title": "Linie",
|
||||
"add": "Linie są używane do reprezentowania obiektów takich jak drogi, tory czy rzeki. **Naciśnij przycisk Linia, aby dodać nową linię.**",
|
||||
"start": "**Zacznij linię klikając na koniec drogi.**",
|
||||
"intersect": "Kliknij, aby dodać więcej punktów do linii. W razie potrzeby możesz przeciągać mapę podczas rysowania. Drogi i wiele innych typów linii są częścią większej sieci. Ważne jest ich prawidłowe połączenie, aby programy do wyznaczania tras działały poprawnie. **Kliknij na Flower Street, aby dodać skrzyżowanie łączące dwie linie.**",
|
||||
"finish": "Linie można zakończyć przez ponowne kliknięcie ostatniego punktu. **Zakończ rysowanie drogi.**",
|
||||
"road": "**Wybierz drogę z listy**",
|
||||
"residential": "Istnieje wiele rodzajów dróg, spośród których najpopularniejsze są drogi lokalne. **Wybierz typ drogi Lokalna**",
|
||||
"describe": "**Nazwij drogę i zamknij edytor obiektów.**",
|
||||
"restart": "Droga musi się skrzyżować z Flower Street."
|
||||
"restart": "Droga musi się skrzyżować z Flower Street.",
|
||||
"wrong_preset": "Nie zaznaczyłeś drogi typu lokalnego. **Kliknij tutaj aby wybrać ponownie**"
|
||||
},
|
||||
"startediting": {
|
||||
"title": "Rozpocznij edytowanie",
|
||||
|
@ -764,14 +789,16 @@
|
|||
"terms": "droga, rozbieg"
|
||||
},
|
||||
"aeroway/taxiway": {
|
||||
"name": "Droga kołowania"
|
||||
"name": "Droga kołowania",
|
||||
"terms": "droga kołowania"
|
||||
},
|
||||
"aeroway/terminal": {
|
||||
"name": "Terminal pasażerski",
|
||||
"terms": "samolot,port lotniczy"
|
||||
},
|
||||
"amenity": {
|
||||
"name": "Udogodnienie"
|
||||
"name": "Usługa",
|
||||
"terms": "usługi,usługa,udogodnienia,"
|
||||
},
|
||||
"amenity/arts_centre": {
|
||||
"name": "Centrum artystyczne"
|
||||
|
@ -785,64 +812,78 @@
|
|||
"terms": "kantor,towarzystwo kredytowe,depozyt,skarb państwa,fundusz,firma inwestycyjna,przedsiębiorstwo inwestycyjne,sejf,oszczędności,akcje,ekonomia,skarbiec,firma powiernicza"
|
||||
},
|
||||
"amenity/bar": {
|
||||
"name": "Bar"
|
||||
"name": "Bar",
|
||||
"terms": "bar"
|
||||
},
|
||||
"amenity/bench": {
|
||||
"name": "Ławka"
|
||||
"name": "Ławka",
|
||||
"terms": "ławka,siedzenie,siedzisko"
|
||||
},
|
||||
"amenity/bicycle_parking": {
|
||||
"name": "Parking dla rowerów"
|
||||
"name": "Parking dla rowerów",
|
||||
"terms": "stojak,parking"
|
||||
},
|
||||
"amenity/bicycle_rental": {
|
||||
"name": "Wypożyczalnia rowerów"
|
||||
"name": "Wypożyczalnia rowerów",
|
||||
"terms": "wypożyczalnia"
|
||||
},
|
||||
"amenity/cafe": {
|
||||
"name": "Kawiarnia",
|
||||
"terms": "kawa,herbata,kawiarnia"
|
||||
},
|
||||
"amenity/car_rental": {
|
||||
"name": "Wypożyczalnia samochodów"
|
||||
"name": "Wypożyczalnia samochodów",
|
||||
"terms": "wypożyczalnia samochodów"
|
||||
},
|
||||
"amenity/car_sharing": {
|
||||
"name": "Car-sharing"
|
||||
},
|
||||
"amenity/car_wash": {
|
||||
"name": "Myjnia samochodowa"
|
||||
"name": "Myjnia samochodowa",
|
||||
"terms": "myjnia"
|
||||
},
|
||||
"amenity/childcare": {
|
||||
"name": "Żłobek"
|
||||
"name": "Żłobek",
|
||||
"terms": "opieka,przedszkole"
|
||||
},
|
||||
"amenity/cinema": {
|
||||
"name": "Kino",
|
||||
"terms": "duży ekran,drive-in,film,ruchomy obraz,pokaz zdjęć,zdjęcia,pokaz,silver screen"
|
||||
},
|
||||
"amenity/college": {
|
||||
"name": "Uczelnia"
|
||||
"name": "Uczelnia",
|
||||
"terms": "uczelnia"
|
||||
},
|
||||
"amenity/courthouse": {
|
||||
"name": "Sąd"
|
||||
"name": "Sąd",
|
||||
"terms": "sąd,sprawiedliwość,trybunał"
|
||||
},
|
||||
"amenity/drinking_water": {
|
||||
"name": "Woda pitna",
|
||||
"terms": "wodotrysk,woda pitna"
|
||||
},
|
||||
"amenity/embassy": {
|
||||
"name": "Ambasada"
|
||||
"name": "Ambasada",
|
||||
"terms": "ambasada"
|
||||
},
|
||||
"amenity/fast_food": {
|
||||
"name": "Fast food"
|
||||
},
|
||||
"amenity/fire_station": {
|
||||
"name": "Straż pożarna"
|
||||
"name": "Straż pożarna",
|
||||
"terms": "straż,osp"
|
||||
},
|
||||
"amenity/fountain": {
|
||||
"name": "Fontanna"
|
||||
"name": "Fontanna",
|
||||
"terms": "fontanna,wodotrysk"
|
||||
},
|
||||
"amenity/fuel": {
|
||||
"name": "Stacja benzynowa"
|
||||
"name": "Stacja benzynowa",
|
||||
"terms": "gaz,lpg"
|
||||
},
|
||||
"amenity/grave_yard": {
|
||||
"name": "Cmentarz"
|
||||
"name": "Cmentarz",
|
||||
"terms": "cmentarz,pochówek"
|
||||
},
|
||||
"amenity/hospital": {
|
||||
"name": "Szpital",
|
||||
|
@ -853,16 +894,20 @@
|
|||
"terms": "zerówka,żłobek,opieka nad dzieckiem"
|
||||
},
|
||||
"amenity/library": {
|
||||
"name": "Biblioteka"
|
||||
"name": "Biblioteka",
|
||||
"terms": "biblioteka,czytelnia"
|
||||
},
|
||||
"amenity/marketplace": {
|
||||
"name": "Targowisko"
|
||||
"name": "Targowisko",
|
||||
"terms": "targowisko,targ,rynek,giełda"
|
||||
},
|
||||
"amenity/parking": {
|
||||
"name": "Parking"
|
||||
"name": "Parking",
|
||||
"terms": "parking,postój"
|
||||
},
|
||||
"amenity/pharmacy": {
|
||||
"name": "Apteka"
|
||||
"name": "Apteka",
|
||||
"terms": "apteka,leki"
|
||||
},
|
||||
"amenity/place_of_worship": {
|
||||
"name": "Miejsce kultu religijnego",
|
||||
|
@ -877,45 +922,56 @@
|
|||
"terms": "chrześcijaństwo,opactwo,bazylika,katedra,prezbiterium,kaplica,dom Boży,dom modlitwy,misja,oratorium,parafia,sanktuarium,świątynia,tabernakulum"
|
||||
},
|
||||
"amenity/place_of_worship/jewish": {
|
||||
"name": "Synagoga"
|
||||
"name": "Synagoga",
|
||||
"terms": "synagoga"
|
||||
},
|
||||
"amenity/place_of_worship/muslim": {
|
||||
"name": "Meczet"
|
||||
"name": "Meczet",
|
||||
"terms": "meczet"
|
||||
},
|
||||
"amenity/police": {
|
||||
"name": "Policja",
|
||||
"terms": "odznaka,niebiescy,gliniarz,detektyw,glina,żandarm,smerfy,psy,prawo,egzekucja prawa,funkcjonariusze"
|
||||
},
|
||||
"amenity/post_box": {
|
||||
"name": "Skrzynka pocztowa"
|
||||
"name": "Skrzynka pocztowa",
|
||||
"terms": "skrzynka,pocztowa,listy"
|
||||
},
|
||||
"amenity/post_office": {
|
||||
"name": "Poczta"
|
||||
"name": "Poczta",
|
||||
"terms": "poczta,urząd,pocztowy"
|
||||
},
|
||||
"amenity/pub": {
|
||||
"name": "Pub"
|
||||
"name": "Pub",
|
||||
"terms": "pub,piwo,wino"
|
||||
},
|
||||
"amenity/restaurant": {
|
||||
"name": "Restauracja",
|
||||
"terms": "bar,kawiarnia,stołówka,jadalnia,drive-in,knajpa,jadłodajnia,fast food,grill,gospoda,klub nocny,pizzeria"
|
||||
},
|
||||
"amenity/school": {
|
||||
"name": "Szkoła"
|
||||
"name": "Szkoła",
|
||||
"terms": "szkoła"
|
||||
},
|
||||
"amenity/swimming_pool": {
|
||||
"name": "Basen"
|
||||
"name": "Basen",
|
||||
"terms": "basen,pływalnia"
|
||||
},
|
||||
"amenity/taxi": {
|
||||
"name": "Postój taksówek"
|
||||
"name": "Postój taksówek",
|
||||
"terms": "postój,taksówek,taxi"
|
||||
},
|
||||
"amenity/telephone": {
|
||||
"name": "Telefon"
|
||||
"name": "Telefon",
|
||||
"terms": "telefon,budka,telefoniczna"
|
||||
},
|
||||
"amenity/theatre": {
|
||||
"name": "Teatr"
|
||||
"name": "Teatr",
|
||||
"terms": "teatr,sztuka,przedstawienie"
|
||||
},
|
||||
"amenity/toilets": {
|
||||
"name": "Toalety"
|
||||
"name": "Toalety",
|
||||
"terms": "toaleta,wc"
|
||||
},
|
||||
"amenity/townhall": {
|
||||
"name": "Ratusz",
|
||||
|
@ -930,22 +986,28 @@
|
|||
"terms": "kosz,kubeł,śmietnik"
|
||||
},
|
||||
"area": {
|
||||
"name": "Obszar"
|
||||
"name": "Obszar",
|
||||
"terms": "obszar,obręb,powierzchnia"
|
||||
},
|
||||
"barrier": {
|
||||
"name": "Bariera"
|
||||
"name": "Bariera",
|
||||
"terms": "bariera,przeszkoda,ograniczenie,utrudnienie"
|
||||
},
|
||||
"barrier/block": {
|
||||
"name": "Blok"
|
||||
"name": "Blok",
|
||||
"terms": "blok"
|
||||
},
|
||||
"barrier/bollard": {
|
||||
"name": "Słupek"
|
||||
"name": "Słupek",
|
||||
"terms": "słupek,słup,pal"
|
||||
},
|
||||
"barrier/cattle_grid": {
|
||||
"name": "Przeszkoda dla bydła"
|
||||
"name": "Przeszkoda dla bydła",
|
||||
"terms": "kratka,bydło"
|
||||
},
|
||||
"barrier/city_wall": {
|
||||
"name": "Mur miejski"
|
||||
"name": "Mur miejski",
|
||||
"terms": "mur,ściana,miejski"
|
||||
},
|
||||
"barrier/cycle_barrier": {
|
||||
"name": "Przegroda dla rowerzystów"
|
||||
|
@ -1011,7 +1073,8 @@
|
|||
"name": "Budynek przymysłowy"
|
||||
},
|
||||
"building/residential": {
|
||||
"name": "Budynek mieszklany"
|
||||
"name": "Budynek mieszkalny",
|
||||
"terms": "blok, kamienica, dom, czynszówka"
|
||||
},
|
||||
"emergency/ambulance_station": {
|
||||
"name": "Stacja pogotowia ratunkowego"
|
||||
|
@ -1052,10 +1115,12 @@
|
|||
"name": "Mini-rondo"
|
||||
},
|
||||
"highway/motorway": {
|
||||
"name": "Autostrada"
|
||||
"name": "Autostrada",
|
||||
"terms": "autostrada"
|
||||
},
|
||||
"highway/motorway_junction": {
|
||||
"name": "Węzeł autostradowy"
|
||||
"name": "Węzeł autostradowy",
|
||||
"terms": "węzeł, skrzyżowanie, autostrad"
|
||||
},
|
||||
"highway/motorway_link": {
|
||||
"name": "Autostrada - wjazd/zjazd",
|
||||
|
@ -1068,23 +1133,25 @@
|
|||
"name": "Deptak"
|
||||
},
|
||||
"highway/primary": {
|
||||
"name": "Droga krajowa"
|
||||
"name": "Droga pierwszorzędna",
|
||||
"terms": "główna droga, droga krajowa, główna, pierwszorzędna, DK, ważna"
|
||||
},
|
||||
"highway/primary_link": {
|
||||
"name": "Droga krajowa - wjazd/zjazd",
|
||||
"name": "Droga pierwszorzędna - wjazd/zjazd",
|
||||
"terms": "rampa,wjazd,wyjazd,zjazd"
|
||||
},
|
||||
"highway/residential": {
|
||||
"name": "Droga lokalna"
|
||||
"name": "Droga lokalna",
|
||||
"terms": "lokalna, osiedlowa, zamieszkała"
|
||||
},
|
||||
"highway/road": {
|
||||
"name": "Nieokreślona droga"
|
||||
},
|
||||
"highway/secondary": {
|
||||
"name": "Droga wojewódzka"
|
||||
"name": "Droga drugorzędna"
|
||||
},
|
||||
"highway/secondary_link": {
|
||||
"name": "Droga wojewódzka - wjazd/zjazd",
|
||||
"name": "Droga drugorzędna - wjazd/zjazd",
|
||||
"terms": "rampa,wjazd,wyjazd,zjazd"
|
||||
},
|
||||
"highway/service": {
|
||||
|
@ -1109,21 +1176,23 @@
|
|||
"name": "Schody"
|
||||
},
|
||||
"highway/tertiary": {
|
||||
"name": "Droga powiatowa"
|
||||
"name": "Droga trzeciorzędna"
|
||||
},
|
||||
"highway/tertiary_link": {
|
||||
"name": "Droga powiatowa - wjazd/zjazd",
|
||||
"name": "Droga trzeciorzędna - wjazd/zjazd",
|
||||
"terms": "rampa,wjazd,wyjazd,zjazd"
|
||||
},
|
||||
"highway/track": {
|
||||
"name": "Droga gruntowa"
|
||||
"name": "Droga gruntowa",
|
||||
"terms": "polna, leśna, gruntowa"
|
||||
},
|
||||
"highway/traffic_signals": {
|
||||
"name": "Sygnalizacja świetlna",
|
||||
"terms": "światła,sygnalizacja świetlna,sygnalizator"
|
||||
},
|
||||
"highway/trunk": {
|
||||
"name": "Droga ekspresowa"
|
||||
"name": "Droga ekspresowa",
|
||||
"terms": "ekspresowa,szybkiego,ruchu"
|
||||
},
|
||||
"highway/trunk_link": {
|
||||
"name": "Droga ekspresowa - zjazd/wjazd",
|
||||
|
@ -1166,7 +1235,7 @@
|
|||
"name": "Użytkowanie gruntów"
|
||||
},
|
||||
"landuse/allotments": {
|
||||
"name": "Działki"
|
||||
"name": "Ogródki działkowe"
|
||||
},
|
||||
"landuse/basin": {
|
||||
"name": "Zbiornik wodny"
|
||||
|
@ -1175,7 +1244,7 @@
|
|||
"name": "Cmentarz"
|
||||
},
|
||||
"landuse/commercial": {
|
||||
"name": "Biura i usługi"
|
||||
"name": "Handlowy"
|
||||
},
|
||||
"landuse/construction": {
|
||||
"name": "Budowa"
|
||||
|
@ -1205,7 +1274,8 @@
|
|||
"name": "Kamieniołom"
|
||||
},
|
||||
"landuse/residential": {
|
||||
"name": "Zabudowa mieszkaniowa"
|
||||
"name": "Zabudowa mieszkaniowa",
|
||||
"terms": "mieszkalny, zamieszkany, mieszkaniowy"
|
||||
},
|
||||
"landuse/retail": {
|
||||
"name": "Obszar handlowy"
|
||||
|
@ -1266,7 +1336,8 @@
|
|||
"name": "Basen"
|
||||
},
|
||||
"leisure/track": {
|
||||
"name": "Tor wyścigowy"
|
||||
"name": "Tor wyścigowy",
|
||||
"terms": "tor wyścigowy"
|
||||
},
|
||||
"line": {
|
||||
"name": "Linia"
|
||||
|
|
24
vendor/assets/iD/iD/locales/ru.json
vendored
24
vendor/assets/iD/iD/locales/ru.json
vendored
|
@ -847,7 +847,8 @@
|
|||
"name": "Питьевая вода"
|
||||
},
|
||||
"amenity/embassy": {
|
||||
"name": "Посольство"
|
||||
"name": "Посольство",
|
||||
"terms": "посольство"
|
||||
},
|
||||
"amenity/fast_food": {
|
||||
"name": "Фаст-фуд",
|
||||
|
@ -874,7 +875,8 @@
|
|||
"name": "Детский сад"
|
||||
},
|
||||
"amenity/library": {
|
||||
"name": "Библиотека"
|
||||
"name": "Библиотека",
|
||||
"terms": "библиотека"
|
||||
},
|
||||
"amenity/marketplace": {
|
||||
"name": "Рынок"
|
||||
|
@ -902,7 +904,8 @@
|
|||
"terms": "синагога"
|
||||
},
|
||||
"amenity/place_of_worship/muslim": {
|
||||
"name": "Мечеть"
|
||||
"name": "Мечеть",
|
||||
"terms": "мечеть"
|
||||
},
|
||||
"amenity/police": {
|
||||
"name": "Полиция",
|
||||
|
@ -926,7 +929,8 @@
|
|||
"terms": "Школа, лицей, гимназия"
|
||||
},
|
||||
"amenity/swimming_pool": {
|
||||
"name": "Бассейн"
|
||||
"name": "Бассейн",
|
||||
"terms": "плавательный бассейн, плавательный бассеин"
|
||||
},
|
||||
"amenity/taxi": {
|
||||
"name": "Стоянка такси"
|
||||
|
@ -1018,6 +1022,9 @@
|
|||
"building/apartments": {
|
||||
"name": "Многоквартирный дом"
|
||||
},
|
||||
"building/commercial": {
|
||||
"name": "Деловое здание,Коммерческое здание,Коммерческая недвижимость,Деловая недвижимость"
|
||||
},
|
||||
"building/entrance": {
|
||||
"name": "Вход"
|
||||
},
|
||||
|
@ -1030,6 +1037,9 @@
|
|||
"building/hut": {
|
||||
"name": "Хижина"
|
||||
},
|
||||
"building/industrial": {
|
||||
"name": "Промышленное здание,Производственное здание,Индустриальное здание"
|
||||
},
|
||||
"building/residential": {
|
||||
"name": "Жилой Дом"
|
||||
},
|
||||
|
@ -1191,7 +1201,8 @@
|
|||
"name": "Хранилище сточных вод"
|
||||
},
|
||||
"landuse/cemetery": {
|
||||
"name": "Кладбище"
|
||||
"name": "Кладбище",
|
||||
"terms": "кладбище"
|
||||
},
|
||||
"landuse/commercial": {
|
||||
"name": "Коммерческая застройка"
|
||||
|
@ -1324,7 +1335,8 @@
|
|||
"name": "Башня"
|
||||
},
|
||||
"man_made/wastewater_plant": {
|
||||
"name": "Станция водоочистки"
|
||||
"name": "Станция водоочистки",
|
||||
"terms": "станция водоочистки, станция очистки воды, очистные сооружения, водоочистные сооружения"
|
||||
},
|
||||
"man_made/water_tower": {
|
||||
"name": "Водонапорная башня"
|
||||
|
|
12
vendor/assets/iD/iD/locales/sk.json
vendored
12
vendor/assets/iD/iD/locales/sk.json
vendored
|
@ -74,6 +74,12 @@
|
|||
"not_closed": "Tento objekt nemožno usporiadať do kruhu, pretože nie je uzavretý do slučky."
|
||||
},
|
||||
"orthogonalize": {
|
||||
"title": "Usporiadaj do pravého uhla.",
|
||||
"description": {
|
||||
"line": "Sprav rohy tejto čiary do pravého uhla.",
|
||||
"area": "Sprav rohy tejto plochy do pravého uhla."
|
||||
},
|
||||
"key": "S",
|
||||
"annotation": {
|
||||
"line": "Usporiadanie rohov čiary do pravého uhla.",
|
||||
"area": "Usporiadanie rohov plochy do pravého uhla."
|
||||
|
@ -81,8 +87,10 @@
|
|||
},
|
||||
"straighten": {
|
||||
"title": "Vyrovnaj",
|
||||
"description": "Vyrovná túto čiaru",
|
||||
"key": "S"
|
||||
"description": "Vyrovnaj túto čiaru.",
|
||||
"key": "S",
|
||||
"annotation": "Vyrovnanie čiary.",
|
||||
"too_bendy": "Tento objekt nemožno vyrovnať, pretože je príliš nepravidelný."
|
||||
},
|
||||
"delete": {
|
||||
"title": "Vymaž",
|
||||
|
|
923
vendor/assets/iD/iD/locales/uk.json
vendored
923
vendor/assets/iD/iD/locales/uk.json
vendored
File diff suppressed because it is too large
Load diff
10
vendor/assets/iD/iD/locales/vi.json
vendored
10
vendor/assets/iD/iD/locales/vi.json
vendored
|
@ -74,6 +74,12 @@
|
|||
"not_closed": "Không thể làm tròn một đối tượng không phải là đa giác kín."
|
||||
},
|
||||
"orthogonalize": {
|
||||
"title": "Làm Vuông góc",
|
||||
"description": {
|
||||
"line": "Làm vuông góc đường kẻ này.",
|
||||
"area": "Làm vuông góc vùng này."
|
||||
},
|
||||
"key": "L",
|
||||
"annotation": {
|
||||
"line": "làm vuông góc một đường kẻ",
|
||||
"area": "làm vuông góc một vùng"
|
||||
|
@ -82,7 +88,9 @@
|
|||
"straighten": {
|
||||
"title": "Làm thẳng",
|
||||
"description": "Làm thẳng đường kẻ này.",
|
||||
"key": "L"
|
||||
"key": "L",
|
||||
"annotation": "làm thẳng một đường kẻ",
|
||||
"too_bendy": "Không thể làm thẳng đường kẻ này vì nó ngoằn ngoèo quá mức."
|
||||
},
|
||||
"delete": {
|
||||
"title": "Xóa",
|
||||
|
|
39
vendor/assets/iD/iD/locales/zh-TW.json
vendored
39
vendor/assets/iD/iD/locales/zh-TW.json
vendored
|
@ -700,7 +700,8 @@
|
|||
"name": "機場相關設施"
|
||||
},
|
||||
"aeroway/aerodrome": {
|
||||
"name": "機場"
|
||||
"name": "機場",
|
||||
"terms": "機場,飛機"
|
||||
},
|
||||
"aeroway/apron": {
|
||||
"name": "停機坪"
|
||||
|
@ -760,7 +761,8 @@
|
|||
"name": "戲院"
|
||||
},
|
||||
"amenity/college": {
|
||||
"name": "書院"
|
||||
"name": "書院",
|
||||
"terms": "學院,大學,專校,大專"
|
||||
},
|
||||
"amenity/courthouse": {
|
||||
"name": "法院"
|
||||
|
@ -787,7 +789,8 @@
|
|||
"name": "墓地"
|
||||
},
|
||||
"amenity/hospital": {
|
||||
"name": "醫院"
|
||||
"name": "醫院",
|
||||
"terms": "醫院,醫學中心"
|
||||
},
|
||||
"amenity/kindergarten": {
|
||||
"name": "幼稚園"
|
||||
|
@ -808,7 +811,8 @@
|
|||
"name": "宗教祟拜場所"
|
||||
},
|
||||
"amenity/place_of_worship/buddhist": {
|
||||
"name": "佛寺"
|
||||
"name": "佛寺",
|
||||
"terms": "寺,廟,閣,寶殿"
|
||||
},
|
||||
"amenity/place_of_worship/christian": {
|
||||
"name": "教堂"
|
||||
|
@ -835,10 +839,12 @@
|
|||
"name": "餐廳"
|
||||
},
|
||||
"amenity/school": {
|
||||
"name": "學校"
|
||||
"name": "學校",
|
||||
"terms": "學校,小學,中學,國小,國中,高中,校園,校區"
|
||||
},
|
||||
"amenity/swimming_pool": {
|
||||
"name": "游泳池"
|
||||
"name": "游泳池",
|
||||
"terms": "游泳池,泳池"
|
||||
},
|
||||
"amenity/taxi": {
|
||||
"name": "計程車站"
|
||||
|
@ -1012,7 +1018,8 @@
|
|||
"name": "停車場通道"
|
||||
},
|
||||
"highway/steps": {
|
||||
"name": "樓梯"
|
||||
"name": "樓梯",
|
||||
"terms": "樓梯,階梯,石階"
|
||||
},
|
||||
"highway/tertiary": {
|
||||
"name": "三級道路"
|
||||
|
@ -1084,7 +1091,8 @@
|
|||
"name": "建築工程"
|
||||
},
|
||||
"landuse/farm": {
|
||||
"name": "農場"
|
||||
"name": "農場",
|
||||
"terms": "農田,稻田,農地,田"
|
||||
},
|
||||
"landuse/farmyard": {
|
||||
"name": "農莊"
|
||||
|
@ -1120,7 +1128,8 @@
|
|||
"name": "休閒設施"
|
||||
},
|
||||
"leisure/garden": {
|
||||
"name": "花園"
|
||||
"name": "花園",
|
||||
"terms": "花園,果園,菜園,植物園,公園"
|
||||
},
|
||||
"leisure/golf_course": {
|
||||
"name": "高爾夫球場"
|
||||
|
@ -1141,7 +1150,8 @@
|
|||
"name": "棒球場"
|
||||
},
|
||||
"leisure/pitch/basketball": {
|
||||
"name": "籃球場"
|
||||
"name": "籃球場",
|
||||
"terms": "籃球場,球場"
|
||||
},
|
||||
"leisure/pitch/soccer": {
|
||||
"name": "足球場"
|
||||
|
@ -1219,7 +1229,8 @@
|
|||
"name": "海岸線"
|
||||
},
|
||||
"natural/glacier": {
|
||||
"name": "冰川"
|
||||
"name": "冰川",
|
||||
"terms": "冰川,冰河"
|
||||
},
|
||||
"natural/grassland": {
|
||||
"name": "草原"
|
||||
|
@ -1252,7 +1263,8 @@
|
|||
"name": "水塘"
|
||||
},
|
||||
"natural/wetland": {
|
||||
"name": "濕地"
|
||||
"name": "濕地",
|
||||
"terms": "濕地,潮間帶"
|
||||
},
|
||||
"natural/wood": {
|
||||
"name": "樹林"
|
||||
|
@ -1348,7 +1360,8 @@
|
|||
"name": "商店"
|
||||
},
|
||||
"shop/alcohol": {
|
||||
"name": "酒類商店"
|
||||
"name": "酒類商店",
|
||||
"terms": "酒店,酒莊"
|
||||
},
|
||||
"shop/bakery": {
|
||||
"name": "麵包店"
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue