source: josm/trunk/resources/data/validator/geometry.mapcss@ 18653

Last change on this file since 18653 was 18653, checked in by taylor.smock, 2 years ago

Fix #22716: Duplicate natural=wood line in geometry.mapcss caused duplicate warnings (patch by Famlam, modified)

This patch was modified to also sort the natural tag section of the check, so
that it is harder to miss duplicates in the future.

  • Property svn:eol-style set to native
File size: 15.8 KB
Line 
1/* {0} on a node, should be a way */
2node[area=no],
3node[oneway],
4node[bridge],
5node[sidewalk],
6node[footway][footway!=crossing], /* footway=crossing has own warning in highway.mapcss */
7node[man_made=embankment],
8node[man_made=groyne],
9node[man_made=cutline],
10node[power=line],
11node[cutline],
12node[aerialway=cable_car],
13node[aerialway=gondola],
14node[aerialway=chair_lift],
15node[aerialway=mixed_lift],
16node[aerialway=drag_lift],
17node[aerialway=t-bar],
18node[aerialway=j-bar],
19node[aerialway=platter],
20node[aerialway=magic_carpet],
21node[aerialway=rope_tow],
22node[aerialway=goods],
23node[aeroway=taxiway],
24node[aeroway=runway],
25node[railway=rail],
26node[railway=narrow_gauge],
27node[railway=monorail],
28node[railway=preserved],
29node[railway=light_rail],
30node[railway=subway],
31node[railway=tram],
32node[railway=disused],
33node[railway=abandoned],
34node[waterway=river],
35node[waterway=canal],
36node[waterway=stream],
37node[waterway=ditch],
38node[waterway=drain],
39node[natural=coastline],
40node[natural=ridge],
41node[natural=valley],
42node[natural=tree_row] {
43 throwWarning: tr("{0} on a node. Should be used on a way.", "{0.tag}");
44 assertMatch: "node oneway=-1";
45 assertNoMatch: "way oneway=-1";
46 assertMatch: "node bridge=yes";
47 assertMatch: "node bridge=viaduct";
48}
49
50/* {0} on a node, should be a way or relation */
51node[boundary=administrative] {
52 throwWarning: tr("{0} on a node. Should be used on a way or relation.", "{0.tag}");
53}
54
55/* {0} on a node, should be an area; #10679 #16528 #16792 #12502 #17402*/
56node[golf=green],
57node[golf=bunker],
58node[golf=fairway],
59node[area=yes],
60node[area:highway],
61node[landuse],
62node[natural=bare_rock],
63node[natural=beach],
64node[natural=fell],
65node[natural=glacier],
66node[natural=grassland],
67node[natural=heath],
68node[natural=mud],
69node[natural=sand],
70node[natural=scree],
71node[natural=scrub],
72node[natural=water],
73node[natural=wetland],
74node[natural=wood],
75node[leisure=park][natural!=tree], /* For nodes with both tags another warning is created in combinations.mapcss */
76node[leisure=nature_reserve],
77node[waterway=riverbank],
78node[man_made=bridge],
79node[man_made=breakwater],
80node[aeroway=apron],
81node[power=plant],
82node[power=switchgear],
83node[building:part],
84node[source:outline] {
85 throwWarning: tr("{0} on a node. Should be drawn as an area.", "{0.tag}");
86}
87
88/* {0} on a node, should be a relation; Error level; #10252, #10769, #14288 */
89node[type=multipolygon],
90node[interval],
91node[route],
92node[restriction] {
93 throwError: tr("{0} on a node. Should be used in a relation", "{0.tag}");
94}
95
96/* {0} on a way, should be a node (0.tag) */
97way[emergency=fire_hydrant],
98way[emergency=defibrillator],
99way[railway=subway_entrance],
100way[man_made=survey_point],
101way[power=transformer],
102way[power=pole],
103way[power=catenary_mast],
104way[power=connection],
105way[power=terminal],
106way[power=tower]!:closed,
107way[amenity=vending_machine],
108way[natural=peak],
109way[natural=saddle],
110way[natural=volcano],
111way[natural=tree],
112way[highway=give_way],
113way[highway=milestone],
114way[highway=mini_roundabout],
115way[highway=stop],
116way[highway=street_lamp],
117way[highway=traffic_signals],
118way[highway=turning_loop],
119way[highway=turning_circle],
120way[highway=motorway_junction] {
121 throwWarning: tr("{0} on a way. Should be used on a node.", "{0.tag}");
122}
123
124/* {0} on a way, should be a node (0.key) */
125way[voltage:primary],
126way[voltage:secondary],
127way[voltage:tertiary],
128way[transformer],
129way[line_attachment],
130way[line_management],
131way[entrance],
132way[door] {
133 throwWarning: tr("{0} on a way. Should be used on a node.", "{0.key}");
134}
135
136/* {0} on a way, should be a relation; #15642, #10252, #14288 */
137way[restriction][restriction =~ /^(no_right_turn|no_left_turn|no_u_turn|no_straight_on|only_right_turn|only_left_turn|only_straight_on|no_entry|no_exit)$/],
138way[type=multipolygon],
139way[interval][route!=ferry],
140way[route=bus] {
141 throwError: tr("{0} on a way. Should be used in a relation", "{0.tag}");
142}
143
144/* {0} on a closed way, should be a unclosed way; #19981 */
145way:closed[power=line] {
146 throwWarning: tr("{0} on a closed way. Should be used on an unclosed way.", "{1.tag}");
147}
148
149/* #20902 */
150relation[area?] {
151 throwWarning: tr("{0} on a relation", "{0.key}");
152 fixRemove: "{0.key}";
153}
154
155/* #14395, #17025, #19506 */
156way[highway][area!=yes][!tunnel][!covered] > node {
157 set node_in_highway;
158}
159way[highway][area!=yes][!tunnel][!covered]:closed > node {
160 set node_in_closed_highway;
161}
162way[highway][area!=yes][!tunnel][!covered] >[index=1] node,
163way[highway][area!=yes][!tunnel][!covered] >[index=-1] node {
164 set first_last_highway_node;
165}
166way[building][building!=no] > node[!entrance].node_in_closed_highway {
167 set node_connects_highway_and_building; /* avoids duplicate warnings with following rule */
168 throwWarning: tr("node connects highway and building");
169}
170way[building][building!=no] > node[!entrance].node_in_highway!.first_last_highway_node!.node_connects_highway_and_building {
171 throwWarning: tr("node connects highway and building");
172}
173
174/* #15035, must not warn for node 3815077900*/
175node[man_made!=monitoring_station][at(0.0,0.0)] {
176 throwError: tr("Object at Position 0.00E 0.00N. There is nothing at this position except an already mapped weather buoy.");
177 fixDeleteObject: this;
178}
179
180/* #10125 */
181node[source:geometry] {
182 throwWarning: tr("{0} on a node", "{0.key}");
183 fixChangeKey: "source:geometry => source:position";
184}
185
186/* Building inside building (spatial test) */
187*[building][building!~/no|entrance/][any(tag("layer"),"0") = any(parent_tag("layer"),"0")]
188area[building][building!~/no|entrance/] {
189 throwWarning: tr("Building inside building");
190}
191
192/* Building overlapping building or building:part (spatial test) */
193area[building][building!~/no|entrance/] area[building:part][building:part!~/no|entrance/],
194area[building][building!~/no|entrance/] area[building][building!~/no|entrance/] {
195 throwWarning: tr("Overlapping buildings");
196}
197
198/* Overlapping areas (spatial test) */
199area[natural =~ /^(water|wetland|coastline)$/], area[waterway=riverbank], area[landuse=reservoir] {
200 set water_area;
201}
202
203/* area:closed.water_area ⧉ area:closed.water_area -- does not work for now -- see ticket#10215 */
204area:closed[natural =~ /^(water|wetland|coastline)$/] area:closed.water_area,
205area:closed[waterway=riverbank] area:closed.water_area,
206area:closed[landuse=reservoir] area:closed.water_area {
207 throwWarning: tr("Overlapping Water Areas");
208}
209
210/* Water area inside water area (spatial test) */
211area:closed[natural =~ /^(water|wetland|coastline)$/] area:closed.water_area,
212area:closed[waterway=riverbank] area:closed.water_area,
213area:closed[landuse=reservoir] area:closed.water_area,
214area:closed[natural =~ /^(water|wetland|coastline)$/] area:closed.water_area,
215area:closed[waterway=riverbank] area:closed.water_area,
216area:closed[landuse=reservoir] area:closed.water_area {
217 throwWarning: tr("Water area inside water area");
218}
219
220area:completely_downloaded:closed:areaStyle area:completely_downloaded:closed:areaStyle {
221 throwOther: tr("Overlapping Areas");
222}
223
224/* #9311 */
225node[amenity=parking]["capacity:disabled" !~ /^(yes|[0-9]+)$/] area[amenity=parking] {
226 throwWarning: tr("{0} inside {1}", "amenity=parking", "amenity=parking");
227 group: tr("{0} inside {1}", "amenity", "amenity");
228}
229
230/* #9556, #20570 */
231area:closed:areaStyle[tag("natural") = parent_tag("natural")] area:closed:areaStyle[natural][natural !~ /^(water|wetland|coastline)$/] {
232 throwWarning: tr("Overlapping Identical Natural Areas");
233}
234
235area:closed[tag("landuse") = parent_tag("landuse")] area:closed[landuse] {
236 throwWarning: tr("Overlapping Identical Landuses");
237}
238
239/* #9522 */
240node[tag("amenity") = parent_tag("amenity")] area[amenity][amenity != parking] {
241 throwWarning: tr("{0} inside {1}", concat("amenity=", tag("amenity")), concat("amenity=", tag("amenity")));
242 group: tr("{0} inside {1}", "amenity", "amenity");
243}
244node[tag("leisure") = parent_tag("leisure")] area[leisure] {
245 throwWarning: tr("{0} inside {1}", concat("leisure=", tag("leisure")), concat("leisure=", tag("leisure")));
246 group: tr("{0} inside {1}", "leisure", "leisure");
247}
248node[tag("tourism") = parent_tag("tourism")] area[tourism] {
249 throwWarning: tr("{0} inside {1}", concat("tourism=", tag("tourism")), concat("tourism=", tag("tourism")));
250 group: tr("{0} inside {1}", "tourism", "tourism");
251}
252node[tag("shop") = parent_tag("shop")] area[shop] {
253 throwWarning: tr("{0} inside {1}", concat("shop=", tag("shop")), concat("shop=", tag("shop")));
254 group: tr("{0} inside {1}", "shop", "shop");
255}
256node[tag("power") = parent_tag("power")] area[power] {
257 throwWarning: tr("{0} inside {1}", concat("power=", tag("power")), concat("power=", tag("power")));
258 group: tr("{0} inside {1}", "power", "power");
259}
260
261/* isolated nodes which should be part of a way; #10825, #15478, #21688 */
262node:unconnected:in-downloaded-area[entrance],
263node:unconnected:in-downloaded-area[traffic_calming],
264node:unconnected:in-downloaded-area[highway=passing_place],
265node:unconnected:in-downloaded-area[highway=mini_roundabout],
266node:unconnected:in-downloaded-area[highway=motorway_junction],
267node:unconnected:in-downloaded-area[highway=turning_loop],
268node:unconnected:in-downloaded-area[highway=turning_circle],
269node:unconnected:in-downloaded-area[highway=stop],
270node:unconnected:in-downloaded-area[highway=give_way],
271node:unconnected:in-downloaded-area[highway=traffic_signals],
272node:unconnected:in-downloaded-area[highway=crossing],
273node:unconnected:in-downloaded-area[crossing],
274node:unconnected:in-downloaded-area[railway=milestone],
275node:unconnected:in-downloaded-area[railway=crossing],
276node:unconnected:in-downloaded-area[railway=level_crossing],
277node:unconnected:in-downloaded-area[railway=buffer_stop],
278node:unconnected:in-downloaded-area[public_transport=stop_position],
279node:unconnected:in-downloaded-area[aeroway=holding_position],
280node:unconnected:in-downloaded-area[noexit],
281node:unconnected:in-downloaded-area[waterway=dam],
282node:unconnected:in-downloaded-area[waterway=weir],
283node:unconnected:in-downloaded-area[waterway=waterfall],
284node:unconnected:in-downloaded-area[amenity=ferry_terminal],
285node:unconnected:in-downloaded-area[leisure=slipway],
286node:unconnected:in-downloaded-area[mountain_pass=yes],
287node:unconnected:in-downloaded-area[barrier=gate],
288node:unconnected:in-downloaded-area[barrier=lift_gate],
289node:unconnected:in-downloaded-area[barrier=swing_gate],
290node:unconnected:in-downloaded-area[barrier=toll_booth],
291node:unconnected:in-downloaded-area[barrier=turnstile],
292node:unconnected:in-downloaded-area[barrier=full-height_turnstile],
293node:unconnected:in-downloaded-area[barrier=motorcycle_barrier],
294node:unconnected:in-downloaded-area[barrier=rope],
295node:unconnected:in-downloaded-area[barrier=sally_port],
296node:unconnected:in-downloaded-area[barrier=spikes],
297node:unconnected:in-downloaded-area[barrier=stile],
298node:unconnected:in-downloaded-area[barrier=sump_buster],
299node:unconnected:in-downloaded-area[barrier=kerb],
300node:unconnected:in-downloaded-area[barrier=border_control],
301node:unconnected:in-downloaded-area[barrier=bump_gate],
302node:unconnected:in-downloaded-area[barrier=bus_trap],
303node:unconnected:in-downloaded-area[barrier=cattle_grid],
304node:unconnected:in-downloaded-area[barrier=chain],
305node:unconnected:in-downloaded-area[barrier=cycle_barrier],
306node:unconnected:in-downloaded-area[barrier=hampshire_gate],
307node:unconnected:in-downloaded-area[barrier=height_restrictor],
308node:unconnected:in-downloaded-area[barrier=debris] {
309 throwWarning: tr("{0}", "{2.tag}");
310 group: tr("isolated node which must be connected to a way");
311}
312
313/* #11127 */
314way[railway][bridge] > node,
315way[highway][bridge] > node {
316 set node_in_bridge;
317}
318way[waterway] > node.node_in_bridge {
319 throwWarning: tr("node connects waterway and bridge");
320}
321
322/* #11128, #14812, #15032 */
323way[highway] > node[tourism=information][information=guidepost] {
324 set guidepost;
325 throwOther: tr("{0} node connected to a highway", "{1.tag}");
326}
327way >[index=1] node,
328way >[index=-1] node {
329 set first_last_node;
330}
331way[highway] > node[amenity][!entrance][amenity!~/^(parking|parking_space|parking_entrance|motorcycle_parking|bicycle_parking|bus_station|car_wash|ferry_terminal|weighbridge|taxi|toilets|ticket_validator)$/],
332way[highway] > node[building][!entrance],
333way[highway] > node[leisure][!entrance][leisure!=slipway][leisure!=fitness_station],
334way[highway] > node[office][!entrance],
335way[highway][highway!=corridor] > node[shop][!entrance],
336way[highway] > node[tourism][!entrance][tourism!=viewpoint]!.guidepost.first_last_node:connection,
337way[highway] > node[tourism][!entrance][tourism!=viewpoint]!.guidepost!.first_last_node {
338 throwWarning: tr("{0} node connected to a highway", "{0.key}");
339}
340
341/* #18817 */
342way[man_made=pipeline][location=underground] > node[marker],
343way[power=cable ][location=underground] > node[marker] {
344 throwWarning: tr("{0} node connected to an underground object", "{0.key}");
345}
346
347way[junction=roundabout]:righthandtraffic:clockwise,
348way[junction=roundabout]!:righthandtraffic:anticlockwise {
349 throwWarning: tr("suspicious roundabout direction");
350}
351
352/* #12496 */
353area:closed[place=islet][eval(areasize()) > 1500000] {
354 throwWarning: tr("{0} on a large area", "{1.tag}");
355 suggestAlternative: "place=island";
356 fixAdd: "place=island";
357}
358
359area:closed[place=island][eval(areasize()) < 500000] {
360 throwWarning: tr("{0} on a small area", "{1.tag}");
361 suggestAlternative: "place=islet";
362 fixAdd: "place=islet";
363}
364
365/* #12561 - building larger than Lada car factory (906280 m^2 in OSM) way id 47121317 at N53.56, E49.25, https://en.wikipedia.org/wiki/List_of_largest_buildings#Largest_footprint*/
366area:closed[building][building!=no][eval(areasize()) > 920000] {
367 throwError: tr("Too large building");
368}
369
370/* #12646, #12992, #16334 */
371way[waterway=~/^(stream|river|drain)$/]!:closed >[index=-1] node[natural!=sinkhole][natural!=cave_entrance][waterway!=stream_end]!:connection:in-downloaded-area {
372 throwWarning: tr("Waterway ends without a connection to another waterway or the direction of the waterway is wrong.");
373}
374
375/* #10717, #14535 */
376way:closed[natural=coastline] area[natural=water],
377way:closed[natural=coastline] area[waterway=riverbank] {
378 throwError: tr("Coastline inside {1}", "{0.tag}");
379}
380
381/* #10471 */
382way[waterway] > node[ford?] { set ford_on_waterway; }
383way[highway] > node[ford?] { set ford_on_highway; }
384node[ford?]:in-downloaded-area!.ford_on_waterway, node[ford?]:in-downloaded-area!.ford_on_highway {
385 throwWarning: tr("{0} should be on the node where {1} and {2} intersect", "ford", "highway", "waterway");
386}
387
388/* #13877 */
389area:closed[waterway = canal][area!=no],
390area:closed[waterway = drain][area!=no],
391area:closed[waterway = ditch][area!=no],
392area:closed[waterway = stream][area!=no],
393area:closed[waterway = river][area!=no] {
394 throwWarning: tr("{0} is the tag for the linear waterway. To tag the water area use {1} + {2} instead.", "{1.tag}", "natural=water", "water=*");
395}
396
397/* #15097 */
398way[highway][area!=yes] > node,
399way[man_made=pier] > node {
400 set node_in_highway_pier;
401}
402way[route=ferry][tunnel=yes] > node,
403way[route=ferry][bridge=yes] > node {
404 set node_in_ferry_bridge_tunnel;
405}
406way[route=ferry]!:closed >[index= 1] node!.node_in_highway_pier!.node_in_ferry_bridge_tunnel:in-downloaded-area,
407way[route=ferry]!:closed >[index=-1] node!.node_in_highway_pier!.node_in_ferry_bridge_tunnel:in-downloaded-area {
408 throwWarning: tr("Ferry route is not connected to the road network or branches.");
409}
410way[amenity=ferry_terminal] > node,
411way[man_made=pier] > node {
412 set node_in_terminal_pier;
413}
414way[route=ferry]!:closed >[index= 1] node[amenity!=ferry_terminal][man_made!=pier]!.node_in_terminal_pier!.node_in_ferry_bridge_tunnel:in-downloaded-area,
415way[route=ferry]!:closed >[index=-1] node[amenity!=ferry_terminal][man_made!=pier]!.node_in_terminal_pier!.node_in_ferry_bridge_tunnel:in-downloaded-area {
416 throwWarning: tr("Ferry route is not connected to a ferry terminal or branches.");
417}
Note: See TracBrowser for help on using the repository browser.