Simplify translation strings

This commit is contained in:
Bryan Housel
2018-12-22 12:12:28 -05:00
parent f7150004c0
commit 3785ffb154
5 changed files with 990 additions and 1102 deletions
+175 -246
View File
@@ -667,263 +667,192 @@ en:
node: "Node {id}" node: "Node {id}"
way: "Way {id}" way: "Way {id}"
relation: "Relation {id}" relation: "Relation {id}"
highway: "Highway {id}"
cycleway: "Cycleway {id}"
waterway: "Waterway {id}"
riverbank: "Riverbank {id}"
errorTypes: errorTypes:
errors: 20:
_30: title: 'Multiple nodes on the same spot'
title: 'non-closed_areas' description: 'There is more than one node in this spot. Node IDs: {0}.'
description: 'This way is tagged with {var1}={var2} and should be closed-loop.' 30:
_40: title: 'Non-closed areas'
title: 'dead-ended one-ways' description: 'This way is tagged with "{0}={1}" and should be a closed loop.'
description: 'The first node (id {var1}) of this one-way is not connected to any other way.' 40:
_41: title: 'Impossible oneways'
title: '' description: 'The first node ({0}) of this oneway is not connected to any other way.'
description: 'The last node (id {var1}) of this one-way is not connected to any other way.' 41:
_42: description: 'The last node ({0}) of this oneway is not connected to any other way.'
title: '' 42:
description: 'This node cannot be reached because one-ways only lead away from here.' description: 'You cannot reach this node because all ways leading from it are oneway.'
_43: 43:
title: '' description: 'You cannot escape from this node because all ways leading to it are oneway.'
description: 'You cannot escape from this node because one-ways only lead to here.' 50:
_50: title: 'Almost-junctions'
title: 'almost-junctions' description: 'This node is very close but not connected to way {0}.'
description: 'This node is very close but not connected to way #{var1}.' 60:
_70: title: 'Deprecated tags'
title: 'missing tags' description: 'This {0} uses deprecated tag "{1}={2}". Please use "{3}" instead.'
description: 'This {var1} has an empty tag: "{var2}".' 70:
_71: title: 'Missing tags'
title: 'way without tags' description: 'This {0} has an empty tag: "{1}".'
71:
description: 'This way has no tags.' description: 'This way has no tags.'
_72: 72:
title: 'node without tags'
description: 'This node is not member of any way and doesn''t have any tags.' description: 'This node is not member of any way and doesn''t have any tags.'
_73: 73:
title: 'tracktype with no highway tag'
description: 'This way has a "tracktype" tag but no "highway" tag.' description: 'This way has a "tracktype" tag but no "highway" tag.'
_74: 74:
title: 'empty tag' description: 'This {0} has an empty tag: "{1}".'
description: 'This {var1} has an empty tag: "{var2}".' 75:
_75: description: 'This {0} has a name "{1}" but no other tags.'
title: 'name without tags' 90:
description: 'This {var1} has a name ("{var2}") but no other tags.' title: 'Motorway without ref tag'
_90: description: 'This way is tagged as motorway and therefore needs a "ref", "nat_ref", or "int_ref" tag.'
title: 'motorways without ref' 100:
description: 'This way is tagged as motorway and therefore needs a ref nat_ref or int_ref tag.' title: 'Place of worship without religion'
_100: description: 'This {0} is tagged as place of worship and therefore needs a "religion" tag.'
title: 'places of worship without religion' 110:
description: 'This {var1} is tagged as place of worship and therefore needs a religion tag.' title: 'Point of interest without name'
_110: description: 'This node is tagged as {0} and therefore needs a name tag.'
title: 'point of interest without name' 120:
description: 'This node is tagged as {var1} and therefore needs a name tag.' title: 'Way without nodes'
_120:
title: 'ways without nodes'
description: 'This way has just one single node.' description: 'This way has just one single node.'
_130: 130:
title: 'floating islands' title: 'Disconnected way'
description: 'This way is not connected to the rest of the map.' description: 'This way is not connected to the rest of the map.'
_150: 150:
title: 'railway crossing without tag' title: 'Railway crossing without tag'
description: 'This crossing of a highway and a railway needs to be tagged as railway=crossing or railway=level_crossing.' description: 'This crossing of a highway and a railway needs to be tagged as "railway=crossing" or "railway=level_crossing".'
_160: 160:
title: 'wrongly used railway tag' title: 'Wrongly used railway tag'
description: 'There are ways in different layers coming together in this railway crossing. There are ways tagged as tunnel or bridge coming together in this railway crossing.' description: 'There are ways in different layers (e.g. tunnel or bridge) meeting at this railway crossing.'
_170: 170:
title: 'FIXME tagged items' title: 'FIXME tagged items'
description: '{var1}' description: '{0}'
_180: 180:
title: 'relations without type' title: 'Relation without type'
description: 'This relation has no type tag which is mandatory for relations.' description: 'This relation is missing a "type" tag.'
_190: 190:
title: 'intersections without junctions' title: 'Intersection without junctions'
description: 'Finds way crossings on same layer without common node as a junction.' description: 'This {0} intersects the {1} {2} but there is no junction node.'
_191: 200:
title: 'highway-highway' title: 'Overlapping ways'
description: 'This {var1} intersects the {var2} #{var3} but there is no junction node.' description: 'This {0} overlaps the {1} {2}.'
_192: 210:
title: 'highway-waterway' title: 'Self-intersecting ways'
description: 'This {var1} intersects the {var2} #{var3}.'
_193:
title: 'highway-riverbank'
description: 'This {var1} intersects the {var2} #{var3}.'
_194:
title: 'waterway-waterway'
description: 'This {var1} intersects the {var2} #{var3} but there is no junction node.'
_195:
title: 'cycleway-cycleway'
description: 'This {var1} intersects the {var2} #{var3} but there is no junction node.'
_196:
title: 'highway-cycleway'
description: 'This {var1} intersects the {var2} #{var3} but there is no junction node.'
_197:
title: 'cycleway-waterway'
description: 'This {var1} intersects the {var2} #{var3}.'
_198:
title: 'cycleway-riverbank'
description: 'This {var1} intersects the {var2} #{var3}.'
_200:
title: 'overlapping ways'
description: 'Finds overlapping ways on same layer.'
_201:
title: 'highway-highway'
description: 'This {var1} overlaps the {var2} #{var3}.'
_202:
title: 'highway-waterway'
description: 'This {var1} overlaps the {var2} #{var3}.'
_203:
title: 'highway-riverbank'
description: 'This {var1} overlaps the {var2} #{var3}.'
_204:
title: 'waterway-waterway'
description: 'This {var1} overlaps the {var2} #{var3}.'
_205:
title: 'cycleway-cycleway'
description: 'This {var1} overlaps the {var2} #{var3}.'
_206:
title: 'highway-cycleway'
description: 'This {var1} overlaps the {var2} #{var3}.'
_207:
title: 'cycleway-waterway'
description: 'This {var1} overlaps the {var2} #{var3}.'
_208:
title: 'cycleway-riverbank'
description: 'This {var1} overlaps the {var2} #{var3}.'
_210:
title: 'loopings'
description: 'These errors contain self intersecting ways.' description: 'These errors contain self intersecting ways.'
_211: 211:
title: '' description: 'This way contains more than one node multiple times. Nodes are {0}. This may or may not be an error.'
description: 'This way contains more than one node multiple times. Nodes are {var1}. This may or may not be an error.' 212:
_212:
title: ''
description: 'This way has only two different nodes and contains one of them more than once.' description: 'This way has only two different nodes and contains one of them more than once.'
_220: 220:
title: 'misspelled tags' title: 'Misspelled tag'
description: 'This {var1} is tagged "{var2}"="{var3}" where "{var4}" looks like "{var5}".' description: 'This {0} is tagged "{1}={2}" where "{3}" looks like "{4}".'
_221: 221:
title: '' description: 'This {0} has a tag with key "{1}".'
description: 'This {var1} has a tag with key "key"="{var2}".' 230:
_230: title: 'Layer Conflict'
title: 'layer conflicts' description: 'This node is a junction of ways on different layers.'
description: '' 231:
_231: description: 'This node is a junction of ways on different layers: {0}.'
title: 'mixed layers intersection' 232:
description: 'This node is a junction of ways on different layers: {var1}.' description: 'This {0} is tagged with "layer={1}". This need not be an error but it looks strange.'
_232: 270:
title: 'strange layers' title: 'Unusual motorway connection'
description: 'This {var1} is tagged with layer {var2}. This need not be an error but it looks strange.' description: 'This node is a junction of a motorway and a highway other than "motorway", "motorway_link", "trunk", "rest_area", or "construction". Connection to "service" or "unclassified" is only valid if it has "access=no/private", or it leads to a motorway service area, or if it is a "service=parking_aisle".'
_270: 280:
title: 'motorways connected directly' title: 'Boundary issue'
description: 'This node is a junction of a motorway and a highway other than motorway, motorway_link, trunk, rest_area or construction. Service or unclassified is only valid if it has access=no/private or it leads to a motorway service area or if it is a service=parking_aisle.' description: 'There is an unspecified issue with this boundary.'
_280: 281:
title: 'boundaries' title: 'Boundary missing name'
description: ''
_281:
title: 'missing name'
description: 'This boundary has no name.' description: 'This boundary has no name.'
_282: 282:
title: 'missing admin level' title: 'Boundary missing admin level'
description: 'The boundary of {var1} has no valid numeric admin_level. Please do not use admin levels like for example 6;7. Always tag the lowest admin_level of all boundaries.' description: 'The boundary of {0} has no valid numeric admin_level. Please do not mix admin levels (e.g. "6;7"). Always tag the lowest admin_level of all boundaries.'
_283: 283:
title: 'no closed loop' title: 'Boundary not a closed loop'
description: 'The boundary of {var1} is not closed-loop.' description: 'The boundary of {0} is not a closed loop.'
_284: 284:
title: 'splitting boundary' title: 'Boundary is split'
description: 'The boundary of {var1} splits here.' description: 'The boundary of {0} splits here.'
_285: 285:
title: 'admin_level too high' title: 'Boundary admin_level too high'
description: 'This boundary-way has admin_level {var1} but belongs to a relation with lower admin_level (higher priority); it should have the lowest admin_level of all relations.' description: 'This boundary way has "admin_level={0}" but belongs to a relation with lower "admin_level" (e.g. higher priority); it should have the lowest "admin_level" of all relations.'
_290: 290:
title: 'restrictions' title: 'Restriction issue'
description: 'Analyses all relations tagged type=restriction or following variations type=restriction:hgv type=restriction:caravan type=restriction:motorcar type=restriction:bus type=restriction:agricultural type=restriction:motorcycle type=restriction:bicycle and type=restriction:hazmat.' description: 'There is an unspecified issue with this restriction.'
_291: 291:
title: 'missing type' title: 'Restriction missing type'
description: 'This turn-restriction has no known restriction type.' description: 'This turn restriction has no known restriction type.'
_292: 292:
title: 'missing from way' title: 'Restriction missing "from" way'
description: 'A turn-restriction needs exactly one "from" member. This one has {var1}.' description: 'A turn restriction needs exactly one "from" member. This one has {0}.'
_293: 293:
title: 'missing to way' title: 'Restriction missing "to" way'
description: 'A turn-restriction needs exactly one "to" member. This one has {var1}.' description: 'A turn restriction needs exactly one "to" member. This one has {0}.'
_294: 294:
title: 'from or to not a way' title: 'Restriction "from" or "to" is not a way'
description: '"from" and "to" members of turn restrictions need to be ways. {var1}.' description: '"from" and "to" members of turn restrictions need to be ways. {0}.'
_295: 295:
title: 'via is not on the way ends' title: 'Restriction "via" is not on the way ends'
description: '"via" (node #{var1}) is not the first or the last member of "from" (way #{var2}).' description: '"via" (node #{0}) is not the first or the last member of "from" (way #{1}).'
_296: 296:
title: 'wrong restriction angle' title: 'Wrong restriction angle'
description: 'restriction type is {var1} but angle is {var2} degrees. Maybe the restriction type is not appropriate?' description: 'Restriction type is "{0}" but angle is {1} degrees. Maybe the restriction type is not appropriate?'
_297: 297:
title: 'wrong direction of to member' title: 'Wrong direction of to member'
description: 'wrong direction of to way {var1}.' description: 'Wrong direction of "to" way {0}.'
_298: 298:
title: 'already restricted by oneway' title: 'Redundant restriction - oneway'
description: 'entry already prohibited by oneway tag on {var1}.' description: 'Entry already prohibited by "oneway" tag on {0}.'
_310: 300:
title: 'roundabouts' title: 'Missing maxspeed'
description: 'Analyses ways with tag junction=roundabout. More then one way can form a roundabout. It supports tag oneway=-1.' description: 'Missing maxspeed tag.'
_311: 310:
title: 'not closed loop' title: 'Roundabout issue'
description: 'There is an unspecified issue with this roundabout.'
311:
title: 'Roundabout not closed loop'
description: 'This way is part of a roundabout but is not closed-loop. (split carriageways approaching a roundabout should not be tagged as roundabout).' description: 'This way is part of a roundabout but is not closed-loop. (split carriageways approaching a roundabout should not be tagged as roundabout).'
_312: 312:
title: 'wrong direction' title: 'Roundabout wrong direction'
description: 'If this {var1} is in a country with {var2}-hand traffic then its orientation goes the wrong way around' description: 'If this {0} is in a country with {1}-hand traffic then its orientation goes the wrong way around'
_313: 313:
title: 'faintly connected' title: 'Roundabout weakly connected'
description: 'This roundabout has only {var1} other road(s) connected. Roundabouts typically have 3 or more.' description: 'This roundabout has only {0} other road(s) connected. Roundabouts typically have 3 or more.'
_320: 320:
title: '*_link connections' title: 'Improper link connection'
description: 'This way is tagged as highway={var1}_link but doesn''t have a connection to any other {var1} or {var1}_link.' description: 'This way is tagged as "highway={0}_link" but doesn''t have a connection to any other "{1}" or "{2}_link".'
_350: 350:
title: 'bridge-tags' title: 'Improper bridge tags'
description: 'This bridge doesn''t have a tag in common with its surrounding ways that shows the purpose of this bridge. There should be one of these tags: {var1}.' description: 'This bridge doesn''t have a tag in common with its surrounding ways that shows the purpose of this bridge. There should be one of these tags: {0}.'
_370: 360:
title: 'doubled places' title: 'Language unknown'
description: 'This node has tags in common with the surrounding way #{var1} {var2}and seems to be redundant.' description: 'It would be nice if this {0} had an additional tag "name:XX"="{1}" where XX shows the language of its name "{1}".'
_380: 370:
title: 'non-physical use of sport-tag' title: 'Doubled places'
description: 'This way is tagged "sport"="{var1}" but has no physical tag like e.g. leisure, building, amenity or highway.' description: 'This node has tags in common with the surrounding way #{0} {1} and seems to be redundant.'
_400: 380:
title: 'geometry glitches' title: 'Non-physical use of sport tag'
description: '' description: 'This way is tagged "sport={0}" but has no physical tag (e.g. "leisure", "building", "amenity", or "highway".'
_401: 390:
title: 'missing turn restriction' title: 'Missing tracktype'
description: 'ways {var1} and {var2} join in a very sharp angle here and there is no oneway tag or turn restriction that prevents turning from way {var3} to {var4}.' description: This track doesn't have a "tracktype" tag.
addition: ' from way {var3} to {var4}.' 400:
_402: title: 'Geometry issue'
title: 'impossible angles' description: 'There is an unspecified issue with the geometry here.'
description: 'this way bends in a very sharp angle here.' 401:
_410: title: 'Missing turn restriction'
title: 'website' description: 'Ways {0} and {1} join in a very sharp angle here and there is no oneway tag or turn restriction that prevents turning from way {2} to {3}.'
description: 'Web pages are analyzed. Web page is defined by any of the following tags website=* url=* website:mobile=* contact:website=* contact:url=* image=* source:website=* or source:url=*.' 402:
_411: title: 'Impossible angles'
title: 'http error' description: 'This way bends in a very sharp angle here.'
description: 'The URL cannot be opened (HTTP status code {var2}).' 410:
_412: title: 'Website issue'
title: 'domain hijacking' description: 'There is an unspecified issue with a contact website or URL.'
description: 'Possible domain squatting: The URL has Suspicious text: "{var2}".' 411:
_413: description: 'The URL cannot be opened (HTTP status code {0}).'
title: 'non-match' 412:
description: 'Content of the URL did not contain these keywords: ({var2}).' description: 'Possible domain squatting: The URL has suspicious text: "{0}".'
warnings: 413:
_20: description: 'Possible non-match. Content of the URL did not contain these keywords: ({0}).'
title: 'multiple nodes on the same spot'
description: 'There is more than one node in this spot. Offending node IDs: {var1}.'
_60:
title: 'depreciated tags'
description: 'This {var1} uses deprecated tag "{var2}"="{var3}". Please use {var4} instead!'
_300:
title: 'missing maxspeed'
description: 'missing maxspeed tag.'
_360:
title: 'language unknown'
description: 'It would be nice if this {var1} had an additional tag "name:XX"="{var2}" where XX shows the language of its name "{var2}".'
_390:
title: 'missing tracktype'
description: This track doesn't have a tracktype.
streetside: streetside:
tooltip: "Streetside photos from Microsoft" tooltip: "Streetside photos from Microsoft"
title: "Photo Overlay (Bing Streetside)" title: "Photo Overlay (Bing Streetside)"
+478 -401
View File
@@ -1,424 +1,501 @@
{ {
"errorTypes": { "errorTypes": {
"errors": { "20": {
"_30": {
"title": "non-closed_areas",
"description": "This way is tagged with ''([\\w:]+)=(\\w+)''and should be closed-loop",
"regex": true
},
"_40": {
"title": "dead-ended one-ways",
"description": "The first node \\(id (\\d+)\\) of this one-way is not connected to any other way",
"IDs": ["n"],
"regex": true
},
"_41": {
"title": "",
"description": "The last node \\(id (\\d+)\\) of this one-way is not connected to any other way",
"IDs": ["n"],
"regex": true
},
"_42": {
"title": "",
"description": "This node cannot be reached because one-ways only lead away from here"
},
"_43": {
"title": "",
"description": "You cannot escape from this node because one-ways only lead to here"
},
"_50": {
"title": "almost-junctions",
"description": "This node is very close but not connected to way #(\\d+)",
"IDs": ["w"],
"regex": true
},
"_70": {
"title": "missing tags",
"description": ""
},
"_71": {
"title": "",
"description": "This way has no tags"
},
"_72": {
"title": "",
"description": "This node is not member of any way and does not have any tags"
},
"_73": {
"title": "",
"description": "This way has a tracktype tag but no highway tag"
},
"_74": {
"title": "missing tags",
"description": "This (node|way|relation) has an empty tag: "([\\w:]+)="",
"regex": true
},
"_75": {
"description": "This (node|way|relation) has a name \\((.+)\\) but no other tag",
"regex": true
},
"_90": {
"title": "motorways without ref",
"description": "This way is tagged as motorway and therefore needs a ref nat_ref or int_ref tag"
},
"_100": {
"title": "places of worship without religion",
"description": "This (node|way|relation) is tagged as place of worship and therefore needs a religion tag",
"regex": true
},
"_110": {
"title": "point of interest without name",
"description": "This node is tagged as ([\\w:]+) and therefore needs a name tag",
"regex": true
},
"_120": {
"title": "ways without nodes",
"description": "This way has just one single node"
},
"_130": {
"title": "floating islands",
"description": "This way is not connected to the rest of the map"
},
"_150": {
"title": "railway crossing without tag",
"description": "This crossing of a highway and a railway needs to be tagged as railway=crossing or railway=level_crossing"
},
"_160": {
"title": "wrongly used railway tag",
"description": "There are ways in different layers coming together in this railway crossing. There are ways tagged as tunnel or bridge coming together in this railway crossing"
},
"_170": {
"title": "FIXME tagged items",
"description": "(.*)",
"regex": true
},
"_180": {
"title": "relations without type",
"description": "This relation has no type tag which is mandatory for relations"
},
"_190": {
"title": "intersections without junctions",
"description": "Finds way crossings on same layer without common node as a junction"
},
"_191": {
"title": "highway-highway",
"description": "This (highway) intersects the (highway) #(\\d+) but there is no junction node",
"IDs": ["", "", "w"],
"regex": true
},
"_192": {
"title": "highway-waterway",
"description": "This (highway|waterway) intersects the (highway|waterway) #(\\d+)",
"IDs": ["", "", "w"],
"regex": true
},
"_193": {
"title": "highway-riverbank",
"description": "This (highway|riverbank) intersects the (highway|riverbank) #(\\d+)",
"IDs": ["", "", "w"],
"regex": true
},
"_194": {
"title": "waterway-waterway",
"description": "This (waterway) intersects the (waterway) #(\\d+) but there is no junction node",
"IDs": ["", "", "w"],
"regex": true
},
"_195": {
"title": "cycleway-cycleway",
"description": "This (cycleway/footpath) intersects the (cycleway/footpath) #(\\d+) but there is no junction node",
"IDs": ["", "", "w"],
"regex": true
},
"_196": {
"title": "highway-cycleway",
"description": "This (highway|cycleway/footpath) intersects the (highway|cycleway/footpath) #(\\d+) but there is no junction node",
"IDs": ["", "", "w"],
"regex": true
},
"_197": {
"title": "cycleway-waterway",
"description": "This (waterway|cycleway/footpath) intersects the (waterway|cycleway/footpath) #(\\d+)",
"IDs": ["", "", "w"],
"regex": true
},
"_198": {
"title": "cycleway-riverbank",
"description": "This (riverbank|cycleway/footpath) intersects the (riverbank|cycleway/footpath) #(\\d+)",
"IDs": ["", "", "w"],
"regex": true
},
"_200": {
"title": "overlapping ways",
"description": "Finds overlapping ways on same layer"
},
"_201": {
"title": "highway-highway",
"description": "This (highway) overlaps the (highway) #(\\d+)",
"IDs": ["", "", "w"],
"regex": true
},
"_202": {
"title": "highway-waterway",
"description": "This (highway|waterway) overlaps the (highway|waterway) #(\\d+)",
"IDs": ["", "", "w"],
"regex": true
},
"_203": {
"title": "highway-riverbank",
"description": "This (highway|riverbank) overlaps the (highway|riverbank) #(\\d+)",
"IDs": ["", "", "w"],
"regex": true
},
"_204": {
"title": "waterway-waterway",
"description": "This (waterway) overlaps the (waterway) #(\\d+)",
"IDs": ["", "", "w"],
"regex": true
},
"_205": {
"title": "cycleway-cycleway",
"description": "This (cycleway/footpath) overlaps the (cycleway/footpath) #(\\d+)",
"IDs": ["", "", "w"],
"regex": true
},
"_206": {
"title": "highway-cycleway",
"description": "This (highway|cycleway/footpath) overlaps the (highway|cycleway/footpath) #(\\d+)",
"IDs": ["", "", "w"],
"regex": true
},
"_207": {
"title": "cycleway-waterway",
"description": "This (waterway|cycleway/footpath) overlaps the (waterway|cycleway/footpath) #(\\d+)",
"IDs": ["", "", "w"],
"regex": true
},
"_208": {
"title": "cycleway-riverbank",
"description": "This (riverbank|cycleway/footpath) overlaps the (riverbank|cycleway/footpath) #(\\d+)",
"IDs": ["", "", "w"],
"regex": true
},
"_210": {
"title": "loopings",
"description": "These errors contain self intersecting ways"
},
"_211": {
"title": "",
"description": "This way contains more than one node at least twice\\. Nodes are ((?:#\\d+(?:, )?)+)\\. This may or may not be an error",
"IDs": ["211"],
"regex": true
},
"_212": {
"title": "",
"description": "This way has only two different nodes and contains one of them more than once"
},
"_220": {
"title": "misspelled tags",
"description": "This (node|way|relation) is tagged '([\\w]+)(:([\\w]+))?=(.+)' where "(\\2|\\3|\\4|\\5)" looks like "([\\w\\s]+)"",
"regex": true
},
"_221": {
"title": "",
"description": "The key of this (node|way|relation)''s tag is ''key'': key=(.+)",
"regex": true
},
"_230": {
"title": "layer conflicts",
"description": "Connected ways should be on the same layer. Crossings on intermediate nodes of ways on different layers are obviously wrong. Junctions on end-nodes of ways on different layers are also deprecated, but common practice. So you may ignore this part of the check and switch them off separately. Please note that bridges are set to layer +1, and tunnels to -1, anything else to layer 0 implicitly if no layer tag is present."
},
"_231": {
"title": "mixed layers intersection",
"description": "This node is a junction of ways on different layers: ((?:#\\d+\\(-?\\d+\\),?)+)",
"IDs": ["231"],
"regex": true
},
"_232": {
"title": "strange layers",
"description": "This (bridge|tunnel) is tagged with layer (-?\\d+)\\. This need not be an error but it looks strange",
"regex": true
},
"_270": {
"title": "motorways connected directly",
"description": "This node is a junction of a motorway and a highway other than motorway, motorway_link, trunk, rest_area or construction. Service or unclassified is only valid if it has access=no/private or it leads to a motorway service area or if it is a service=parking_aisle."
},
"_280": {
"title": "boundaries",
"description": "Administrative Boundaries can be expressed either by tagging ways or by adding them to a relation. They should be closed-loop sequences of ways, they must not self-intersect or split and they must have a name and an admin_level."
},
"_281": {
"title": "missing name",
"description": "This boundary has no name"
},
"_282": {
"title": "missing admin level",
"description": "The boundary of (.+) has no (?:valid numeric )?admin_level\\..*",
"regex": true
},
"_283": {
"title": "no closed loop",
"description": "The boundary of (.+) is not closed-loop",
"regex": true
},
"_284": {
"title": "splitting boundary",
"description": "The boundary of (.+) splits here",
"regex": true
},
"_285": {
"title": "admin_level too high",
"description": "This boundary-way has admin_level (-?\\d+) but belongs to a relation with lower admin_level (higher priority); it should have the lowest admin_level of all relations",
"regex": true
},
"_290": {
"title": "restrictions",
"description": "Analyses all relations tagged type=restriction or following variations type=restriction:hgv type=restriction:caravan type=restriction:motorcar type=restriction:bus type=restriction:agricultural type=restriction:motorcycle type=restriction:bicycle and type=restriction:hazmat"
},
"_291": {
"title": "missing type",
"description": "This turn-restriction has no (?:known )?restriction type",
"regex": true
},
"_292": {
"title": "missing from way",
"description": "A turn-restriction needs exactly one from member\\. This one has (\\d+)",
"regex": true
},
"_293": {
"title": "missing to way",
"description": "A turn-restriction needs exactly one to member\\. This one has (\\d+)",
"regex": true
},
"_294": {
"title": "from or to not a way",
"description": "From- and To-members of turn restrictions need to be ways\\. ((?:(?:from|to) (?:node|relation) #\\d+,?)+)",
"IDs": ["294"],
"regex": true
},
"_295": {
"title": "via is not on the way ends",
"description": "via \\(node #(\\d+)\\) is not the first or the last member of from \\(way #(\\d+)\\)",
"IDs": ["n", "w"],
"regex": true
},
"_296": {
"title": "wrong restriction angle",
"description": "restriction type is (\\w+) but angle is (\\d+) degrees. Maybe the restriction type is not appropriate?",
"regex": true
},
"_297": {
"title": "wrong direction of to member",
"description": "wrong direction of to way (\\d+)",
"IDs": ["w"],
"regex": true
},
"_298": {
"title": "already restricted by oneway",
"description": "entry already prohibited by oneway tag on (\\d+)",
"IDs": ["w"],
"regex": true
},
"_310": {
"title": "roundabouts",
"description": "Analyses ways with tag junction=roundabout. More then one way can form a roundabout. It supports tag oneway=-1"
},
"_311": {
"title": "not closed loop",
"description": "This way is part of a roundabout but is not closed-loop. (split carriageways approaching a roundabout should not be tagged as roundabout)"
},
"_312": {
"title": "wrong direction",
"description": "If this ((?:mini_)?roundabout) is in a country with (left|right)-hand traffic then its orientation goes the wrong way around",
"regex": true
},
"_313": {
"title": "faintly connected",
"description": "This roundabout has only (\\d) other roads connected. Roundabouts typically have three",
"regex": true
},
"_320": {
"title": "*_link connections",
"description": "This way is tagged as highway=(\\w+)_link but doesn't have a connection to any other \\1 or \\1_link",
"regex": true
},
"_350": {
"title": "bridge-tags",
"description": "This bridge does not have a tag in common with its surrounding ways that shows the purpose of this bridge. There should be one of these tags: (.+)",
"NOTE": "Group can be arbitrary list of form: key=value,key=value,key=value...",
"regex": true
},
"_370": {
"title": "doubled places",
"description": "This node has tags in common with the surrounding way #(\\d+) ((?:\\(including the name '.+'\\) )?)and seems to be redundand",
"IDs": ["w"],
"regex": true
},
"_380": {
"title": "non-physical use of sport-tag",
"description": "This way is tagged sport=(\\w+) but has no physical tag like e.g. leisure, building, amenity or highway",
"regex": true
},
"_400": {
"title": "geometry glitches",
"description": ""
},
"_401": {
"title": "missing turn restriction",
"description": "ways (\\d+) and (\\d+) join in a very sharp angle here and there is no oneway tag or turn restriction that prevents turning( from way (\\1|\\2) to (\\1|\\2))?",
"IDs": ["w", "w", "w", "w"],
"regex": true
},
"_402": {
"title": "impossible angles",
"description": "this way bends in a very sharp angle here"
},
"_410": {
"title": "website",
"description": "Web pages are analyzed. Web page is defined by any of the following tags website=* url=* website:mobile=* contact:website=* contact:url=* image=* source:website=* or source:url=*"
},
"_411": {
"title": "http error",
"description": "The URL \\(<a target=_blank href=(.+)>\\1</a>\\) cannot be opened \\(HTTP status code (\\d+)\\)",
"regex": true
},
"_412": {
"title": "domain hijacking",
"description": "Possible domain squatting: <a target=_blank href=(.+)>\\1</a>\\. Suspicious text is: ''(.+)''",
"regex": true
},
"_413": {
"title": "non-match",
"description": "Content of the URL (<a target=_blank href=(.+)>\\1</a>) did not contain these keywords: \\((.+)\\)",
"regex": true
}
},
"warnings": {
"_20": {
"title": "multiple nodes on the same spot", "title": "multiple nodes on the same spot",
"severity": "warning",
"description": "There is more than one node in this spot\\. Offending node IDs: ((?:#\\d+,?)+)", "description": "There is more than one node in this spot\\. Offending node IDs: ((?:#\\d+,?)+)",
"IDs": ["20"], "IDs": ["20"],
"regex": true "regex": true
}, },
"_60": { "30": {
"title": "non-closed_areas",
"severity": "error",
"description": "This way is tagged with ''([\\w:]+)=(\\w+)''and should be closed-loop",
"regex": true
},
"40": {
"title": "dead-ended one-ways",
"severity": "error",
"description": "The first node \\(id (\\d+)\\) of this one-way is not connected to any other way",
"IDs": ["n"],
"regex": true
},
"41": {
"title": "",
"severity": "error",
"description": "The last node \\(id (\\d+)\\) of this one-way is not connected to any other way",
"IDs": ["n"],
"regex": true
},
"42": {
"title": "",
"severity": "error",
"description": "This node cannot be reached because one-ways only lead away from here"
},
"43": {
"title": "",
"severity": "error",
"description": "You cannot escape from this node because one-ways only lead to here"
},
"50": {
"title": "almost-junctions",
"severity": "error",
"description": "This node is very close but not connected to way #(\\d+)",
"IDs": ["w"],
"regex": true
},
"60": {
"title": "depreciated tags", "title": "depreciated tags",
"severity": "warning",
"description": "This (node|way|relation) uses deprecated tag '([\\w:]+)=(.+)'\\. Please use &quot;(.+)&quot; instead!", "description": "This (node|way|relation) uses deprecated tag '([\\w:]+)=(.+)'\\. Please use &quot;(.+)&quot; instead!",
"regex": true "regex": true
}, },
"_300": { "70": {
"title": "missing tags",
"severity": "error",
"description": ""
},
"71": {
"title": "",
"severity": "error",
"description": "This way has no tags"
},
"72": {
"title": "",
"severity": "error",
"description": "This node is not member of any way and does not have any tags"
},
"73": {
"title": "",
"severity": "error",
"description": "This way has a tracktype tag but no highway tag"
},
"74": {
"title": "missing tags",
"severity": "error",
"description": "This (node|way|relation) has an empty tag: &quot;([\\w:]+)=&quot;",
"regex": true
},
"75": {
"description": "This (node|way|relation) has a name \\((.+)\\) but no other tag",
"regex": true
},
"90": {
"title": "motorways without ref",
"severity": "error",
"description": "This way is tagged as motorway and therefore needs a ref nat_ref or int_ref tag"
},
"100": {
"title": "places of worship without religion",
"severity": "error",
"description": "This (node|way|relation) is tagged as place of worship and therefore needs a religion tag",
"regex": true
},
"110": {
"title": "point of interest without name",
"severity": "error",
"description": "This node is tagged as ([\\w:]+) and therefore needs a name tag",
"regex": true
},
"120": {
"title": "ways without nodes",
"severity": "error",
"description": "This way has just one single node"
},
"130": {
"title": "floating islands",
"severity": "error",
"description": "This way is not connected to the rest of the map"
},
"150": {
"title": "railway crossing without tag",
"severity": "error",
"description": "This crossing of a highway and a railway needs to be tagged as railway=crossing or railway=level_crossing"
},
"160": {
"title": "wrongly used railway tag",
"severity": "error",
"description": "There are ways in different layers coming together in this railway crossing. There are ways tagged as tunnel or bridge coming together in this railway crossing"
},
"170": {
"title": "FIXME tagged items",
"severity": "error",
"description": "(.*)",
"regex": true
},
"180": {
"title": "relations without type",
"severity": "error",
"description": "This relation has no type tag which is mandatory for relations"
},
"190": {
"title": "intersections without junctions",
"severity": "error",
"description": "Finds way crossings on same layer without common node as a junction"
},
"191": {
"title": "highway-highway",
"severity": "error",
"description": "This (highway) intersects the (highway) #(\\d+) but there is no junction node",
"IDs": ["", "", "w"],
"regex": true
},
"192": {
"title": "highway-waterway",
"severity": "error",
"description": "This (highway|waterway) intersects the (highway|waterway) #(\\d+)",
"IDs": ["", "", "w"],
"regex": true
},
"193": {
"title": "highway-riverbank",
"severity": "error",
"description": "This (highway|riverbank) intersects the (highway|riverbank) #(\\d+)",
"IDs": ["", "", "w"],
"regex": true
},
"194": {
"title": "waterway-waterway",
"severity": "error",
"description": "This (waterway) intersects the (waterway) #(\\d+) but there is no junction node",
"IDs": ["", "","w"],
"regex": true
},
"195": {
"title": "cycleway-cycleway",
"severity": "error",
"description": "This (cycleway/footpath) intersects the (cycleway/footpath) #(\\d+) but there is no junction node",
"IDs": ["", "","w"],
"regex": true
},
"196": {
"title": "highway-cycleway",
"severity": "error",
"description": "This (highway|cycleway/footpath) intersects the (highway|cycleway/footpath) #(\\d+) but there is no junction node",
"IDs": ["", "","w"],
"regex": true
},
"197": {
"title": "cycleway-waterway",
"severity": "error",
"description": "This (waterway|cycleway/footpath) intersects the (waterway|cycleway/footpath) #(\\d+)",
"IDs": ["", "","w"],
"regex": true
},
"198": {
"title": "cycleway-riverbank",
"severity": "error",
"description": "This (riverbank|cycleway/footpath) intersects the (riverbank|cycleway/footpath) #(\\d+)",
"IDs": ["", "","w"],
"regex": true
},
"200": {
"title": "overlapping ways",
"severity": "error",
"description": "Finds overlapping ways on same layer"
},
"201": {
"title": "highway-highway",
"severity": "error",
"description": "This (highway) overlaps the (highway) #(\\d+)",
"IDs": ["", "","w"],
"regex": true
},
"202": {
"title": "highway-waterway",
"severity": "error",
"description": "This (highway|waterway) overlaps the (highway|waterway) #(\\d+)",
"IDs": ["", "","w"],
"regex": true
},
"203": {
"title": "highway-riverbank",
"severity": "error",
"description": "This (highway|riverbank) overlaps the (highway|riverbank) #(\\d+)",
"IDs": ["", "","w"],
"regex": true
},
"204": {
"title": "waterway-waterway",
"severity": "error",
"description": "This (waterway) overlaps the (waterway) #(\\d+)",
"IDs": ["", "","w"],
"regex": true
},
"205": {
"title": "cycleway-cycleway",
"severity": "error",
"description": "This (cycleway/footpath) overlaps the (cycleway/footpath) #(\\d+)",
"IDs": ["", "","w"],
"regex": true
},
"206": {
"title": "highway-cycleway",
"severity": "error",
"description": "This (highway|cycleway/footpath) overlaps the (highway|cycleway/footpath) #(\\d+)",
"IDs": ["", "","w"],
"regex": true
},
"207": {
"title": "cycleway-waterway",
"severity": "error",
"description": "This (waterway|cycleway/footpath) overlaps the (waterway|cycleway/footpath) #(\\d+)",
"IDs": ["", "","w"],
"regex": true
},
"208": {
"title": "cycleway-riverbank",
"severity": "error",
"description": "This (riverbank|cycleway/footpath) overlaps the (riverbank|cycleway/footpath) #(\\d+)",
"IDs": ["", "","w"],
"regex": true
},
"210": {
"title": "loopings",
"severity": "error",
"description": "These errors contain self intersecting ways"
},
"211": {
"title": "",
"severity": "error",
"description": "This way contains more than one node at least twice\\. Nodes are ((?:#\\d+(?:, )?)+)\\. This may or may not be an error",
"IDs": ["211"],
"regex": true
},
"212": {
"title": "",
"severity": "error",
"description": "This way has only two different nodes and contains one of them more than once"
},
"220": {
"title": "misspelled tags",
"severity": "error",
"description": "This (node|way|relation) is tagged '([\\w]+)(:([\\w]+))?=(.+)' where &quot;(\\2|\\3|\\4|\\5)&quot; looks like &quot;([\\w\\s]+)&quot;",
"regex": true
},
"221": {
"title": "",
"severity": "error",
"description": "The key of this (node|way|relation)''s tag is ''key'': key=(.+)",
"regex": true
},
"230": {
"title": "layer conflicts",
"severity": "error",
"description": "Connected ways should be on the same layer. Crossings on intermediate nodes of ways on different layers are obviously wrong. Junctions on end-nodes of ways on different layers are also deprecated, but common practice. So you may ignore this part of the check and switch them off separately. Please note that bridges are set to layer +1, and tunnels to -1, anything else to layer 0 implicitly if no layer tag is present."
},
"231": {
"title": "mixed layers intersection",
"severity": "error",
"description": "This node is a junction of ways on different layers: ((?:#\\d+\\(-?\\d+\\),?)+)",
"IDs": ["231"],
"regex": true
},
"232": {
"title": "strange layers",
"severity": "error",
"description": "This (bridge|tunnel) is tagged with layer (-?\\d+)\\. This need not be an error but it looks strange",
"regex": true
},
"270": {
"title": "motorways connected directly",
"severity": "error",
"description": "This node is a junction of a motorway and a highway other than motorway, motorway_link, trunk, rest_area or construction. Service or unclassified is only valid if it has access=no/private or it leads to a motorway service area or if it is a service=parking_aisle."
},
"280": {
"title": "boundaries",
"severity": "error",
"description": "Administrative Boundaries can be expressed either by tagging ways or by adding them to a relation. They should be closed-loop sequences of ways, they must not self-intersect or split and they must have a name and an admin_level."
},
"281": {
"title": "missing name",
"severity": "error",
"description": "This boundary has no name"
},
"282": {
"title": "missing admin level",
"severity": "error",
"description": "The boundary of (.+) has no (?:valid numeric )?admin_level\\..*",
"regex": true
},
"283": {
"title": "no closed loop",
"severity": "error",
"description": "The boundary of (.+) is not closed-loop",
"regex": true
},
"284": {
"title": "splitting boundary",
"severity": "error",
"description": "The boundary of (.+) splits here",
"regex": true
},
"285": {
"title": "admin_level too high",
"severity": "error",
"description": "This boundary-way has admin_level (-?\\d+) but belongs to a relation with lower admin_level (higher priority); it should have the lowest admin_level of all relations",
"regex": true
},
"290": {
"title": "restrictions",
"severity": "error",
"description": "Analyses all relations tagged type=restriction or following variations type=restriction:hgv type=restriction:caravan type=restriction:motorcar type=restriction:bus type=restriction:agricultural type=restriction:motorcycle type=restriction:bicycle and type=restriction:hazmat"
},
"291": {
"title": "missing type",
"severity": "error",
"description": "This turn-restriction has no (?:known )?restriction type",
"regex": true
},
"292": {
"title": "missing from way",
"severity": "error",
"description": "A turn-restriction needs exactly one from member\\. This one has (\\d+)",
"regex": true
},
"293": {
"title": "missing to way",
"severity": "error",
"description": "A turn-restriction needs exactly one to member\\. This one has (\\d+)",
"regex": true
},
"294": {
"title": "from or to not a way",
"severity": "error",
"description": "From- and To-members of turn restrictions need to be ways\\. ((?:(?:from|to) (?:node|relation) #\\d+,?)+)",
"IDs": ["294"],
"regex": true
},
"295": {
"title": "via is not on the way ends",
"severity": "error",
"description": "via \\(node #(\\d+)\\) is not the first or the last member of from \\(way #(\\d+)\\)",
"IDs": ["n","w"],
"regex": true
},
"296": {
"title": "wrong restriction angle",
"severity": "error",
"description": "restriction type is (\\w+) but angle is (\\d+) degrees. Maybe the restriction type is not appropriate?",
"regex": true
},
"297": {
"title": "wrong direction of to member",
"severity": "error",
"description": "wrong direction of to way (\\d+)",
"IDs": ["w"],
"regex": true
},
"298": {
"title": "already restricted by oneway",
"severity": "error",
"description": "entry already prohibited by oneway tag on (\\d+)",
"IDs": ["w"],
"regex": true
},
"300": {
"title": "missing maxspeed", "title": "missing maxspeed",
"severity": "warning",
"description": "missing maxspeed tag" "description": "missing maxspeed tag"
}, },
"_360": { "310": {
"title": "roundabouts",
"severity": "error",
"description": "Analyses ways with tag junction=roundabout. More then one way can form a roundabout. It supports tag oneway=-1"
},
"311": {
"title": "not closed loop",
"severity": "error",
"description": "This way is part of a roundabout but is not closed-loop. (split carriageways approaching a roundabout should not be tagged as roundabout)"
},
"312": {
"title": "wrong direction",
"severity": "error",
"description": "If this ((?:mini_)?roundabout) is in a country with (left|right)-hand traffic then its orientation goes the wrong way around",
"regex": true
},
"313": {
"title": "faintly connected",
"severity": "error",
"description": "This roundabout has only (\\d) other roads connected. Roundabouts typically have three",
"regex": true
},
"320": {
"title": "*_link connections",
"severity": "error",
"description": "This way is tagged as highway=(\\w+)_link but doesn't have a connection to any other \\1 or \\1_link",
"regex": true
},
"350": {
"title": "bridge-tags",
"severity": "error",
"description": "This bridge does not have a tag in common with its surrounding ways that shows the purpose of this bridge. There should be one of these tags: (.+)",
"NOTE": "Group can be arbitrary list of form: key=value,key=value,key=value...",
"regex": true
},
"360": {
"title": "language unknown", "title": "language unknown",
"severity": "warning",
"description": "It would be nice if this (node|way|relation) had an additional tag 'name:XX=(.+)' where XX shows the language of its name '\\2'", "description": "It would be nice if this (node|way|relation) had an additional tag 'name:XX=(.+)' where XX shows the language of its name '\\2'",
"regex": true "regex": true
}, },
"_390": { "370": {
"title": "doubled places",
"severity": "error",
"description": "This node has tags in common with the surrounding way #(\\d+) ((?:\\(including the name '.+'\\) )?)and seems to be redundand",
"IDs": ["w"],
"regex": true
},
"380": {
"title": "non-physical use of sport-tag",
"severity": "error",
"description": "This way is tagged sport=(\\w+) but has no physical tag like e.g. leisure, building, amenity or highway",
"regex": true
},
"390": {
"title": "missing tracktype", "title": "missing tracktype",
"severity": "warning",
"description": "This track doesn''t have a tracktype" "description": "This track doesn''t have a tracktype"
} },
"400": {
"title": "geometry glitches",
"severity": "error",
"description": ""
},
"401": {
"title": "missing turn restriction",
"severity": "error",
"description": "ways (\\d+) and (\\d+) join in a very sharp angle here and there is no oneway tag or turn restriction that prevents turning( from way (\\1|\\2) to (\\1|\\2))?",
"IDs": ["w", "w", "w", "w"],
"regex": true
},
"402": {
"title": "impossible angles",
"severity": "error",
"description": "this way bends in a very sharp angle here"
},
"410": {
"title": "website",
"severity": "error",
"description": "Web pages are analyzed. Web page is defined by any of the following tags website=* url=* website:mobile=* contact:website=* contact:url=* image=* source:website=* or source:url=*"
},
"411": {
"title": "http error",
"severity": "error",
"description": "The URL \\(<a target=_blank href=(.+)>\\1</a>\\) cannot be opened \\(HTTP status code (\\d+)\\)",
"regex": true
},
"412": {
"title": "domain hijacking",
"severity": "error",
"description": "Possible domain squatting: <a target=_blank href=(.+)>\\1</a>\\. Suspicious text is: ''(.+)''",
"regex": true
},
"413": {
"title": "non-match",
"severity": "error",
"description": "Content of the URL (<a target=_blank href=(.+)>\\1</a>) did not contain these keywords: \\((.+)\\)",
"regex": true
} }
} }
} }
+179 -268
View File
@@ -806,349 +806,260 @@
"entities": { "entities": {
"node": "Node {id}", "node": "Node {id}",
"way": "Way {id}", "way": "Way {id}",
"relation": "Relation {id}", "relation": "Relation {id}"
"highway": "Highway {id}",
"cycleway": "Cycleway {id}",
"waterway": "Waterway {id}",
"riverbank": "Riverbank {id}"
}, },
"errorTypes": { "errorTypes": {
"errors": { "20": {
"_30": { "title": "Multiple nodes on the same spot",
"title": "non-closed_areas", "description": "There is more than one node in this spot. Node IDs: {0}."
"description": "This way is tagged with {var1}={var2} and should be closed-loop."
}, },
"_40": { "30": {
"title": "dead-ended one-ways", "title": "Non-closed areas",
"description": "The first node (id {var1}) of this one-way is not connected to any other way." "description": "This way is tagged with \"{0}={1}\" and should be a closed loop."
}, },
"_41": { "40": {
"title": "", "title": "Impossible oneways",
"description": "The last node (id {var1}) of this one-way is not connected to any other way." "description": "The first node ({0}) of this oneway is not connected to any other way."
}, },
"_42": { "41": {
"title": "", "description": "The last node ({0}) of this oneway is not connected to any other way."
"description": "This node cannot be reached because one-ways only lead away from here."
}, },
"_43": { "42": {
"title": "", "description": "You cannot reach this node because all ways leading from it are oneway."
"description": "You cannot escape from this node because one-ways only lead to here."
}, },
"_50": { "43": {
"title": "almost-junctions", "description": "You cannot escape from this node because all ways leading to it are oneway."
"description": "This node is very close but not connected to way #{var1}."
}, },
"_70": { "50": {
"title": "missing tags", "title": "Almost-junctions",
"description": "This {var1} has an empty tag: \"{var2}\"." "description": "This node is very close but not connected to way {0}."
}, },
"_71": { "60": {
"title": "way without tags", "title": "Deprecated tags",
"description": "This {0} uses deprecated tag \"{1}={2}\". Please use \"{3}\" instead."
},
"70": {
"title": "Missing tags",
"description": "This {0} has an empty tag: \"{1}\"."
},
"71": {
"description": "This way has no tags." "description": "This way has no tags."
}, },
"_72": { "72": {
"title": "node without tags",
"description": "This node is not member of any way and doesn't have any tags." "description": "This node is not member of any way and doesn't have any tags."
}, },
"_73": { "73": {
"title": "tracktype with no highway tag",
"description": "This way has a \"tracktype\" tag but no \"highway\" tag." "description": "This way has a \"tracktype\" tag but no \"highway\" tag."
}, },
"_74": { "74": {
"title": "empty tag", "description": "This {0} has an empty tag: \"{1}\"."
"description": "This {var1} has an empty tag: \"{var2}\"."
}, },
"_75": { "75": {
"title": "name without tags", "description": "This {0} has a name \"{1}\" but no other tags."
"description": "This {var1} has a name (\"{var2}\") but no other tags."
}, },
"_90": { "90": {
"title": "motorways without ref", "title": "Motorway without ref tag",
"description": "This way is tagged as motorway and therefore needs a ref nat_ref or int_ref tag." "description": "This way is tagged as motorway and therefore needs a \"ref\", \"nat_ref\", or \"int_ref\" tag."
}, },
"_100": { "100": {
"title": "places of worship without religion", "title": "Place of worship without religion",
"description": "This {var1} is tagged as place of worship and therefore needs a religion tag." "description": "This {0} is tagged as place of worship and therefore needs a \"religion\" tag."
}, },
"_110": { "110": {
"title": "point of interest without name", "title": "Point of interest without name",
"description": "This node is tagged as {var1} and therefore needs a name tag." "description": "This node is tagged as {0} and therefore needs a name tag."
}, },
"_120": { "120": {
"title": "ways without nodes", "title": "Way without nodes",
"description": "This way has just one single node." "description": "This way has just one single node."
}, },
"_130": { "130": {
"title": "floating islands", "title": "Disconnected way",
"description": "This way is not connected to the rest of the map." "description": "This way is not connected to the rest of the map."
}, },
"_150": { "150": {
"title": "railway crossing without tag", "title": "Railway crossing without tag",
"description": "This crossing of a highway and a railway needs to be tagged as railway=crossing or railway=level_crossing." "description": "This crossing of a highway and a railway needs to be tagged as \"railway=crossing\" or \"railway=level_crossing\"."
}, },
"_160": { "160": {
"title": "wrongly used railway tag", "title": "Wrongly used railway tag",
"description": "There are ways in different layers coming together in this railway crossing. There are ways tagged as tunnel or bridge coming together in this railway crossing." "description": "There are ways in different layers (e.g. tunnel or bridge) meeting at this railway crossing."
}, },
"_170": { "170": {
"title": "FIXME tagged items", "title": "FIXME tagged items",
"description": "{var1}" "description": "{0}"
}, },
"_180": { "180": {
"title": "relations without type", "title": "Relation without type",
"description": "This relation has no type tag which is mandatory for relations." "description": "This relation is missing a \"type\" tag."
}, },
"_190": { "190": {
"title": "intersections without junctions", "title": "Intersection without junctions",
"description": "Finds way crossings on same layer without common node as a junction." "description": "This {0} intersects the {1} {2} but there is no junction node."
}, },
"_191": { "200": {
"title": "highway-highway", "title": "Overlapping ways",
"description": "This {var1} intersects the {var2} #{var3} but there is no junction node." "description": "This {0} overlaps the {1} {2}."
}, },
"_192": { "210": {
"title": "highway-waterway", "title": "Self-intersecting ways",
"description": "This {var1} intersects the {var2} #{var3}."
},
"_193": {
"title": "highway-riverbank",
"description": "This {var1} intersects the {var2} #{var3}."
},
"_194": {
"title": "waterway-waterway",
"description": "This {var1} intersects the {var2} #{var3} but there is no junction node."
},
"_195": {
"title": "cycleway-cycleway",
"description": "This {var1} intersects the {var2} #{var3} but there is no junction node."
},
"_196": {
"title": "highway-cycleway",
"description": "This {var1} intersects the {var2} #{var3} but there is no junction node."
},
"_197": {
"title": "cycleway-waterway",
"description": "This {var1} intersects the {var2} #{var3}."
},
"_198": {
"title": "cycleway-riverbank",
"description": "This {var1} intersects the {var2} #{var3}."
},
"_200": {
"title": "overlapping ways",
"description": "Finds overlapping ways on same layer."
},
"_201": {
"title": "highway-highway",
"description": "This {var1} overlaps the {var2} #{var3}."
},
"_202": {
"title": "highway-waterway",
"description": "This {var1} overlaps the {var2} #{var3}."
},
"_203": {
"title": "highway-riverbank",
"description": "This {var1} overlaps the {var2} #{var3}."
},
"_204": {
"title": "waterway-waterway",
"description": "This {var1} overlaps the {var2} #{var3}."
},
"_205": {
"title": "cycleway-cycleway",
"description": "This {var1} overlaps the {var2} #{var3}."
},
"_206": {
"title": "highway-cycleway",
"description": "This {var1} overlaps the {var2} #{var3}."
},
"_207": {
"title": "cycleway-waterway",
"description": "This {var1} overlaps the {var2} #{var3}."
},
"_208": {
"title": "cycleway-riverbank",
"description": "This {var1} overlaps the {var2} #{var3}."
},
"_210": {
"title": "loopings",
"description": "These errors contain self intersecting ways." "description": "These errors contain self intersecting ways."
}, },
"_211": { "211": {
"title": "", "description": "This way contains more than one node multiple times. Nodes are {0}. This may or may not be an error."
"description": "This way contains more than one node multiple times. Nodes are {var1}. This may or may not be an error."
}, },
"_212": { "212": {
"title": "",
"description": "This way has only two different nodes and contains one of them more than once." "description": "This way has only two different nodes and contains one of them more than once."
}, },
"_220": { "220": {
"title": "misspelled tags", "title": "Misspelled tag",
"description": "This {var1} is tagged \"{var2}\"=\"{var3}\" where \"{var4}\" looks like \"{var5}\"." "description": "This {0} is tagged \"{1}={2}\" where \"{3}\" looks like \"{4}\"."
}, },
"_221": { "221": {
"title": "", "description": "This {0} has a tag with key \"{1}\"."
"description": "This {var1} has a tag with key \"key\"=\"{var2}\"."
}, },
"_230": { "230": {
"title": "layer conflicts", "title": "Layer Conflict",
"description": "" "description": "This node is a junction of ways on different layers."
}, },
"_231": { "231": {
"title": "mixed layers intersection", "description": "This node is a junction of ways on different layers: {0}."
"description": "This node is a junction of ways on different layers: {var1}."
}, },
"_232": { "232": {
"title": "strange layers", "description": "This {0} is tagged with \"layer={1}\". This need not be an error but it looks strange."
"description": "This {var1} is tagged with layer {var2}. This need not be an error but it looks strange."
}, },
"_270": { "270": {
"title": "motorways connected directly", "title": "Unusual motorway connection",
"description": "This node is a junction of a motorway and a highway other than motorway, motorway_link, trunk, rest_area or construction. Service or unclassified is only valid if it has access=no/private or it leads to a motorway service area or if it is a service=parking_aisle." "description": "This node is a junction of a motorway and a highway other than \"motorway\", \"motorway_link\", \"trunk\", \"rest_area\", or \"construction\". Connection to \"service\" or \"unclassified\" is only valid if it has \"access=no/private\", or it leads to a motorway service area, or if it is a \"service=parking_aisle\"."
}, },
"_280": { "280": {
"title": "boundaries", "title": "Boundary issue",
"description": "" "description": "There is an unspecified issue with this boundary."
}, },
"_281": { "281": {
"title": "missing name", "title": "Boundary missing name",
"description": "This boundary has no name." "description": "This boundary has no name."
}, },
"_282": { "282": {
"title": "missing admin level", "title": "Boundary missing admin level",
"description": "The boundary of {var1} has no valid numeric admin_level. Please do not use admin levels like for example 6;7. Always tag the lowest admin_level of all boundaries." "description": "The boundary of {0} has no valid numeric admin_level. Please do not mix admin levels (e.g. \"6;7\"). Always tag the lowest admin_level of all boundaries."
}, },
"_283": { "283": {
"title": "no closed loop", "title": "Boundary not a closed loop",
"description": "The boundary of {var1} is not closed-loop." "description": "The boundary of {0} is not a closed loop."
}, },
"_284": { "284": {
"title": "splitting boundary", "title": "Boundary is split",
"description": "The boundary of {var1} splits here." "description": "The boundary of {0} splits here."
}, },
"_285": { "285": {
"title": "admin_level too high", "title": "Boundary admin_level too high",
"description": "This boundary-way has admin_level {var1} but belongs to a relation with lower admin_level (higher priority); it should have the lowest admin_level of all relations." "description": "This boundary way has \"admin_level={0}\" but belongs to a relation with lower \"admin_level\" (e.g. higher priority); it should have the lowest \"admin_level\" of all relations."
}, },
"_290": { "290": {
"title": "restrictions", "title": "Restriction issue",
"description": "Analyses all relations tagged type=restriction or following variations type=restriction:hgv type=restriction:caravan type=restriction:motorcar type=restriction:bus type=restriction:agricultural type=restriction:motorcycle type=restriction:bicycle and type=restriction:hazmat." "description": "There is an unspecified issue with this restriction."
}, },
"_291": { "291": {
"title": "missing type", "title": "Restriction missing type",
"description": "This turn-restriction has no known restriction type." "description": "This turn restriction has no known restriction type."
}, },
"_292": { "292": {
"title": "missing from way", "title": "Restriction missing \"from\" way",
"description": "A turn-restriction needs exactly one \"from\" member. This one has {var1}." "description": "A turn restriction needs exactly one \"from\" member. This one has {0}."
}, },
"_293": { "293": {
"title": "missing to way", "title": "Restriction missing \"to\" way",
"description": "A turn-restriction needs exactly one \"to\" member. This one has {var1}." "description": "A turn restriction needs exactly one \"to\" member. This one has {0}."
}, },
"_294": { "294": {
"title": "from or to not a way", "title": "Restriction \"from\" or \"to\" is not a way",
"description": "\"from\" and \"to\" members of turn restrictions need to be ways. {var1}." "description": "\"from\" and \"to\" members of turn restrictions need to be ways. {0}."
}, },
"_295": { "295": {
"title": "via is not on the way ends", "title": "Restriction \"via\" is not on the way ends",
"description": "\"via\" (node #{var1}) is not the first or the last member of \"from\" (way #{var2})." "description": "\"via\" (node #{0}) is not the first or the last member of \"from\" (way #{1})."
}, },
"_296": { "296": {
"title": "wrong restriction angle", "title": "Wrong restriction angle",
"description": "restriction type is {var1} but angle is {var2} degrees. Maybe the restriction type is not appropriate?" "description": "Restriction type is \"{0}\" but angle is {1} degrees. Maybe the restriction type is not appropriate?"
}, },
"_297": { "297": {
"title": "wrong direction of to member", "title": "Wrong direction of to member",
"description": "wrong direction of to way {var1}." "description": "Wrong direction of \"to\" way {0}."
}, },
"_298": { "298": {
"title": "already restricted by oneway", "title": "Redundant restriction - oneway",
"description": "entry already prohibited by oneway tag on {var1}." "description": "Entry already prohibited by \"oneway\" tag on {0}."
}, },
"_310": { "300": {
"title": "roundabouts", "title": "Missing maxspeed",
"description": "Analyses ways with tag junction=roundabout. More then one way can form a roundabout. It supports tag oneway=-1." "description": "Missing maxspeed tag."
}, },
"_311": { "310": {
"title": "not closed loop", "title": "Roundabout issue",
"description": "There is an unspecified issue with this roundabout."
},
"311": {
"title": "Roundabout not closed loop",
"description": "This way is part of a roundabout but is not closed-loop. (split carriageways approaching a roundabout should not be tagged as roundabout)." "description": "This way is part of a roundabout but is not closed-loop. (split carriageways approaching a roundabout should not be tagged as roundabout)."
}, },
"_312": { "312": {
"title": "wrong direction", "title": "Roundabout wrong direction",
"description": "If this {var1} is in a country with {var2}-hand traffic then its orientation goes the wrong way around" "description": "If this {0} is in a country with {1}-hand traffic then its orientation goes the wrong way around"
}, },
"_313": { "313": {
"title": "faintly connected", "title": "Roundabout weakly connected",
"description": "This roundabout has only {var1} other road(s) connected. Roundabouts typically have 3 or more." "description": "This roundabout has only {0} other road(s) connected. Roundabouts typically have 3 or more."
}, },
"_320": { "320": {
"title": "*_link connections", "title": "Improper link connection",
"description": "This way is tagged as highway={var1}_link but doesn't have a connection to any other {var1} or {var1}_link." "description": "This way is tagged as \"highway={0}_link\" but doesn't have a connection to any other \"{1}\" or \"{2}_link\"."
}, },
"_350": { "350": {
"title": "bridge-tags", "title": "Improper bridge tags",
"description": "This bridge doesn't have a tag in common with its surrounding ways that shows the purpose of this bridge. There should be one of these tags: {var1}." "description": "This bridge doesn't have a tag in common with its surrounding ways that shows the purpose of this bridge. There should be one of these tags: {0}."
}, },
"_370": { "360": {
"title": "doubled places", "title": "Language unknown",
"description": "This node has tags in common with the surrounding way #{var1} {var2}and seems to be redundant." "description": "It would be nice if this {0} had an additional tag \"name:XX\"=\"{1}\" where XX shows the language of its name \"{1}\"."
}, },
"_380": { "370": {
"title": "non-physical use of sport-tag", "title": "Doubled places",
"description": "This way is tagged \"sport\"=\"{var1}\" but has no physical tag like e.g. leisure, building, amenity or highway." "description": "This node has tags in common with the surrounding way #{0} {1} and seems to be redundant."
}, },
"_400": { "380": {
"title": "geometry glitches", "title": "Non-physical use of sport tag",
"description": "" "description": "This way is tagged \"sport={0}\" but has no physical tag (e.g. \"leisure\", \"building\", \"amenity\", or \"highway\"."
}, },
"_401": { "390": {
"title": "missing turn restriction", "title": "Missing tracktype",
"description": "ways {var1} and {var2} join in a very sharp angle here and there is no oneway tag or turn restriction that prevents turning from way {var3} to {var4}.", "description": "This track doesn't have a \"tracktype\" tag."
"addition": " from way {var3} to {var4}."
}, },
"_402": { "400": {
"title": "impossible angles", "title": "Geometry issue",
"description": "this way bends in a very sharp angle here." "description": "There is an unspecified issue with the geometry here."
}, },
"_410": { "401": {
"title": "website", "title": "Missing turn restriction",
"description": "Web pages are analyzed. Web page is defined by any of the following tags website=* url=* website:mobile=* contact:website=* contact:url=* image=* source:website=* or source:url=*." "description": "Ways {0} and {1} join in a very sharp angle here and there is no oneway tag or turn restriction that prevents turning from way {2} to {3}."
}, },
"_411": { "402": {
"title": "http error", "title": "Impossible angles",
"description": "The URL cannot be opened (HTTP status code {var2})." "description": "This way bends in a very sharp angle here."
}, },
"_412": { "410": {
"title": "domain hijacking", "title": "Website issue",
"description": "Possible domain squatting: The URL has Suspicious text: \"{var2}\"." "description": "There is an unspecified issue with a contact website or URL."
}, },
"_413": { "411": {
"title": "non-match", "description": "The URL cannot be opened (HTTP status code {0})."
"description": "Content of the URL did not contain these keywords: ({var2})."
}
}, },
"warnings": { "412": {
"_20": { "description": "Possible domain squatting: The URL has suspicious text: \"{0}\"."
"title": "multiple nodes on the same spot",
"description": "There is more than one node in this spot. Offending node IDs: {var1}."
}, },
"_60": { "413": {
"title": "depreciated tags", "description": "Possible non-match. Content of the URL did not contain these keywords: ({0})."
"description": "This {var1} uses deprecated tag \"{var2}\"=\"{var3}\". Please use {var4} instead!"
},
"_300": {
"title": "missing maxspeed",
"description": "missing maxspeed tag."
},
"_360": {
"title": "language unknown",
"description": "It would be nice if this {var1} had an additional tag \"name:XX\"=\"{var2}\" where XX shows the language of its name \"{var2}\"."
},
"_390": {
"title": "missing tracktype",
"description": "This track doesn't have a tracktype."
}
} }
} }
} }
+22 -30
View File
@@ -23,7 +23,13 @@ var dispatch = d3_dispatch('loaded');
var _krCache; var _krCache;
var _krZoom = 14; var _krZoom = 14;
var apibase = 'https://www.keepright.at/'; var apibase = 'https://www.keepright.at/';
var defaultRuleset = [0,30,40,50,70,90,100,110,120,130,150,160,170,180,191,192,193,194,195,196,197,198,201,202,203,204,205,206,207,208,210,220,231,232,270,281,282,283,284,285,291,292,293,294,295,296,297,298,311,312,313,320,350,370,380,401,402,411,412,413]; var defaultRuleset = [
0, 30, 40, 50, 70, 90, 100, 110, 120, 130, 150, 160, 170, 180,
191, 192, 193, 194, 195, 196, 197, 198, 201, 202, 203, 204, 205,
206, 207, 208, 210, 220, 231, 232, 270, 281, 282, 283, 284, 285,
291, 292 ,293, 294, 295, 296, 297, 298, 311, 312, 313, 320, 350,
370, 380, 401, 402, 411, 412, 413
];
function abortRequest(i) { function abortRequest(i) {
@@ -62,45 +68,34 @@ function updateRtree(item, replace) {
} }
function tokenReplacements(datum) { function tokenReplacements(d) {
if (!(datum instanceof krError)) return; if (!(d instanceof krError)) return;
var replacements = {}; var replacements = {};
var html_re = new RegExp(/<\/[a-z][\s\S]*>/); var html_re = new RegExp(/<\/[a-z][\s\S]*>/);
var commonEntities = ['node', 'way', 'relation', 'highway', 'cycleway', 'waterway', 'riverbank'];
var errorType; var errorTemplate = errorTypes[d.error_type];
var errorTemplate;
var errorDescription;
var errorRegex;
var errorMatch;
// find the matching template from the error schema
errorType = '_' + datum.error_type;
errorTemplate = errorTypes.errors[errorType] || errorTypes.warnings[errorType];
if (!errorTemplate) return; if (!errorTemplate) return;
// some descriptions are just fixed text // some descriptions are just fixed text
if (!('regex' in errorTemplate)) return; if (!errorTemplate.regex) return;
// regex pattern should match description with variable details captured as groups // regex pattern should match description with variable details captured as groups
errorDescription = datum.description; var errorDescription = d.description;
errorRegex = new RegExp(errorTemplate.description); var errorRegex = new RegExp(errorTemplate.description);
errorMatch = errorRegex.exec(errorDescription); var errorMatch = errorRegex.exec(errorDescription);
if (!errorMatch) { if (!errorMatch) {
// TODO: Remove, for regex dev testing // TODO: Remove, for regex dev testing
console.log('Unmatched:', errorType, errorDescription, errorRegex); console.log('Unmatched:', d.error_type, d.description, errorRegex);
return; return;
} }
errorMatch.forEach(function(group, index) { for (var i = 1; i < errorMatch.length; i++) { // skip first
var group = errorMatch[i];
var idType; var idType;
// index 0 is the whole match, skip it
if (!index) return;
// link IDs if present in the group // link IDs if present in the group
idType = 'IDs' in errorTemplate ? errorTemplate.IDs[index-1] : ''; idType = 'IDs' in errorTemplate ? errorTemplate.IDs[i-1] : '';
if (idType && group) { if (idType && group) {
group = parseError(group, idType); group = parseError(group, idType);
} else if (html_re.test(group)) { } else if (html_re.test(group)) {
@@ -108,21 +103,18 @@ function tokenReplacements(datum) {
group = '\\' + group + '\\'; group = '\\' + group + '\\';
} }
// translate common words (e.g. node, way, relation) replacements[i-1] = group;
if (commonEntities.includes(group)) {
group = t('QA.keepRight.entities.' + group);
} }
replacements['var' + index] = group;
});
return replacements; return replacements;
} }
function parseError(group, idType) { function parseError(group, idType) {
function fillPlaceholder(d) { return '<span><a class="kr_error_description-id">' + d + '</a></span>'; } function fillPlaceholder(d) {
return '<span><a class="kr_error_description-id">' + d + '</a></span>';
}
// arbitrary node list of form: #ID, #ID, #ID... // arbitrary node list of form: #ID, #ID, #ID...
function parseError211(list) { function parseError211(list) {
+32 -53
View File
@@ -5,43 +5,22 @@ import { t } from '../util/locale';
export function uiKeepRightDetails(context) { export function uiKeepRightDetails(context) {
var stringBase = 'QA.keepRight.errorTypes.';
var _error; var _error;
var _template;
var _templateErrorType;
var _category;
var _categoryElements;
var _parent_error_type;
var _titleBase;
function initDetails() {
_parent_error_type = '';
if (errorTypes.errors['_' + _error.error_type]) {
_templateErrorType = '_' + _error.error_type;
_template = errorTypes.errors[_templateErrorType];
_category = 'errors';
} else if (errorTypes.warnings[_templateErrorType]) {
_template = errorTypes.warnings[_templateErrorType];
_category = 'warnings';
} else { return; }
// if there is a parent, save it's error type
_categoryElements = errorTypes[_category];
var base_error_type = (Math.round(_error.error_type / 10) * 10).toString();
if ((_categoryElements['_' + base_error_type]) && (base_error_type !== _error.error_type) ) {
_parent_error_type = '_' + base_error_type;
}
_titleBase = 'QA.keepRight.errorTypes.' + _category + '.';
}
function keepRightDetails(selection) { function keepRightDetails(selection) {
if (!_error || !_error.error_type) return; if (!_error) return;
initDetails(); var errorType = _error.error_type;
if (!_template) return; var template = errorTypes[errorType];
if (!template) return;
// if there is a parent, save its error type e.g.:
// Error 191 = "highway-highway"
// Error 190 = "intersections without junctions" (parent)
var parentErrorType = (Math.floor(errorType / 10) * 10).toString();
var parentTemplate = errorTypes[parentErrorType];
if (!parentTemplate) return;
var details = selection.selectAll('.kr_error-details') var details = selection.selectAll('.kr_error-details')
@@ -57,30 +36,24 @@ export function uiKeepRightDetails(context) {
.append('div') .append('div')
.attr('class', 'kr_error-details kr_error-details-container'); .attr('class', 'kr_error-details kr_error-details-container');
var titleEnter = detailsEnter
// title
var title = detailsEnter
.append('div') .append('div')
.attr('class', 'kr_error-details-title'); .attr('class', 'kr_error-details-title');
title.append('h4') titleEnter
.append('h4')
.text(function() { return t('QA.keepRight.detail_title'); }); .text(function() { return t('QA.keepRight.detail_title'); });
title.append('div') titleEnter
.append('div')
.text(function() { .text(function() {
var title = ''; var result;
try {
// if this is a subtype, append it's parent title result = t(stringBase + errorType + '.title');
if (_parent_error_type) { } catch (e) {
title = t(_titleBase + _parent_error_type + '.title') + ': \n'; result = t(stringBase + parentErrorType + '.title');
} }
return result;
// append title
if (_error.error_type) {
title += t(_titleBase + _templateErrorType + '.title');
}
return title;
}); });
@@ -97,17 +70,23 @@ export function uiKeepRightDetails(context) {
.append('div') .append('div')
.attr('class', 'kr_error-details-description-text') .attr('class', 'kr_error-details-description-text')
.html(function(d) { .html(function(d) {
return t(_titleBase + _templateErrorType + '.description', d.replacements); var result;
try {
result = t(stringBase + errorType + '.description', d.replacements);
} catch (e) {
result = t(stringBase + parentErrorType + '.description');
}
return result;
}); });
description.selectAll('.kr_error_description-id') description.selectAll('.kr_error_description-id')
.on('click', function() { clickLink(context, this.text); }); .on('click', function() { clickLink(context, this.text); });
function clickLink(context, id) { function clickLink(context, entityID) {
d3_event.preventDefault(); d3_event.preventDefault();
context.layers().layer('osm').enabled(true); context.layers().layer('osm').enabled(true);
context.zoomToEntity(id); context.zoomToEntity(entityID);
} }
} }