wiki:Rules/QAToolInspiredValidations

Version 15 (modified by abalosc1, 5 years ago) ( diff )

remove 2020 elevation and 6030 place without name to put in combinations.mapcss

meta
{
  title: "Osmose Validations";
  version: "37_2020-11-06";
  description: "Checks for errors based on Osmose tag checks";
  author: "Dave Manzer";
  watch-modified: true;
  link: "https://wiki.openstreetmap.org/wiki/Osmose/issues";
}

/* not-connected highway/cycleway -- OSMOSE Item 1210 */

/* Set connected_node */

way[highway] node:connection {
    set connected_node;
}

/* set nodes in downloaded area */

way[highway] node:in-downloaded-area {
    set downloaded;
}

/* set new_feature */

way[highway] node:new {
    set new_feature;
}

/* Unconnected Cycleway */

way[highway=cycleway]!:closed!.connected_node.downloaded >[index=1] node[noexit!=yes][amenity!=parking_entrance][amenity!=parking],
way[highway=cycleway]!:closed!.connected_node.downloaded >[index=-1] node[noexit!=yes][amenity!=parking_entrance][amenity!=parking],
way[highway=cycleway]!:closed!.connected_node.new_feature >[index=1] node[noexit!=yes][amenity!=parking_entrance][amenity!=parking],
way[highway=cycleway]!:closed!.connected_node.new_feature >[index=-1] node[noexit!=yes][amenity!=parking_entrance][amenity!=parking] {
    throwWarning: "1210: Unconnected Cycleway";
    group: "OSMOSE";
}

/* Unconnected Road -- Motorway to Residential */

way[highway=~/^(motorway|trunk|primary|secondary|tertiary|unclassified)$/]!:closed!.connected_node.downloaded >[index=-1] node[noexit!=yes][amenity!=parking_entrance][amenity!=parking][highway!=turning_circle],
way[highway=~/^(motorway|trunk|primary|secondary|tertiary|unclassified)$/]!:closed!.connected_node.downloaded >[index=1] node[noexit!=yes][amenity!=parking_entrance][amenity!=parking][highway!=turning_circle],
way[highway=~/^(motorway|trunk|primary|secondary|tertiary|unclassified)$/]!:closed!.connected_node.new_feature >[index=-1] node[noexit!=yes][amenity!=parking_entrance][amenity!=parking][highway!=turning_circle],
way[highway=~/^(motorway|trunk|primary|secondary|tertiary|unclassified)$/]!:closed!.connected_node.new_feature >[index=1] node[noexit!=yes][amenity!=parking_entrance][amenity!=parking][highway!=turning_circle] {
    throwWarning: "1210: Unconnected Highway";
    group: "OSMOSE";
}

/* 1-member-relation -- OSMOSE Item 1200 */

relation[type] >[index=-1] way {
    set member;
}

relation[type] >[index=1].member way {
    throwWarning: "1200: One Member Relation; Check for other members";
    group: "OSMOSE";
}

 /* Bad link highway -- OSMOSE Item 1110 */ 

/*class 2*/
way[highway*="_link"][eval(waylength()) > 1000] {
    throwWarning: "1110/2: Bad *_link Highway; highway too long for a *_link";
    group: "OSMOSE";
}

 /* Bridge to tag -- OSMOSE Item 7012 */
way[bridge=yes][!/^bridge:/][eval(waylength()) > 500] {
    throwWarning: "7012: Bridge to Tag; bridge deserving of more detail";
    group: "OSMOSE";
}

/* on junction = roundabout -- OSMOSE Item 4020 */ 

*[junction=roundabout][oneway] {
    throwWarning: "4020: On junction=roundabout; Unnecessary oneway tag";
    group: "OSMOSE";
    fixRemove: "oneway";
}

*[junction=roundabout][ref] {
    throwWarning: "4020: On junction=roundabout; Unnecessary ref tag";
    group: "OSMOSE";
    fixRemove: "ref";
}

*[junction=roundabout][area] {
    throwWarning: "4020: On junction=roundabout; Unnecessary area tag";
    group: "OSMOSE";
    fixRemove: "area";
}

/* Oneway -- OSMOSE Item 2030 */ 

/*-------Class 2-------*/

way[highway] node:connection {
    set highway_node;
}

way[junction=roundabout] node.highway_node {
    set junc_node
}

/* 
Typically does not apply
node[junction=roundabout] < way[highway][!oneway][eval(waylength()) < 100] {
    throwError: "Missing Oneway - Check highway entering/exiting roundabout";
    group: tr("oneway -- OSMOSE Item 2030/2")
}
*/

way[highway][!junction][!oneway][eval(waylength()) < 100]  node.junc_node {
    throwWarning: "2030/2 Oneway; Missing Oneway - Check highway entering/exiting roundabout";
    group: "OSMOSE";
}

/* ----- Class 20301 ------ */ 
way[cycleway=opposite][!oneway],
way[cycleway=opposite_lane][!oneway] {
    throwWarning: "2030/20301 Oneway; Opposite cycleway without oneway";
    group: "OSMOSE";
}

/* source -- OSMOSE Item 2040 -- administrative boundary does not contain tag source=* */
way[boundary=administrative][!source]{
    throwError: "2040: Source; administrative boundary does not have source tag";
    group: "OSMOSE";
}


/* Highway Roundabout OSMOSE Item 3010 */

/*      Class 1 -- Wrong highway on roundabout  */ 
/*---------- SET CLASSES ---------- */

way[highway=primary] node:connection,
way[highway=primary_link] node:connection {
    set primary_junc;
}

way[highway=secondary] node:connection,
way[highway=secondary_link] node:connection {
    set secondary_junc;
}

way[highway=tertiary] node:connection,
way[highway=tertiary_link] node:connection {
    set tertiary_junc;
}

/*---------- VALIDATIONS ---------- */


/*Primary*/
way[highway=secondary][junction=roundabout] node:connection.primary_junc,
way[highway=tertiary][junction=roundabout] node:connection.primary_junc,
way[highway=unclassified][junction=roundabout] node:connection.primary_junc,
way[highway=residential][junction=roundabout] node:connection.primary_junc,
way[highway=living_street][junction=roundabout] node:connection.primary_junc {
    throwWarning: "3010/1: Highway Roundabout; highway tag on roundabout must match highest level of connected routes";
    group: "OSMOSE";
}

/*Secondary*/
way[highway=tertiary][junction=roundabout] node:connection.secondary_junc,
way[highway=unclassified][junction=roundabout] node:connection.secondary_junc,
way[highway=residential][junction=roundabout] node:connection.secondary_junc,
way[highway=living_street][junction=roundabout] node:connection.secondary_junc {
    throwWarning: "3010/1: Highway Roundabout; highway tag on roundabout must match highest level of connected routes";
    group: "OSMOSE";
}

/*Tertiary*/
way[highway=unclassified][junction=roundabout] node:connection.tertiary_junc,
way[highway=residential][junction=roundabout] node:connection.tertiary_junc,
way[highway=living_street][junction=roundabout] node:connection.tertiary_junc {
    throwWarning: "3010/1: Highway Roundabout; highway tag on roundabout must match highest level of connected routes";
    group: "OSMOSE";
}

/*      Class 4 -- Roundabout crossing  */

way[highway][!junction] >[index=-1] node,
way[highway][!junction] >[index=1] node {
    set crossing;
}

way[highway][junction] >[index=-1] node,
way[highway][junction] >[index=1] node {
    set junc_to_junc;
}

way[highway][junction=roundabout] node:connection!.crossing!.junc_to_junc {
    throwWarning: "3010/4: Highway Roundabout; highway crossing roundabout without stopping";
    group: "OSMOSE";
}   

Rules_QAToolInspiredValidations.validator.mapcss, Rules_QAToolInspiredValidations.zip

Note: See TracWiki for help on using the wiki.