Changes between Version 17 and Version 18 of Rules/CzechRepublicAddressSystem


Ignore:
Timestamp:
2025-10-31T18:16:28+01:00 (5 months ago)
Author:
afhafkartograf
Comment:

update with more specific rules

Legend:

Unmodified
Added
Removed
Modified
  • Rules/CzechRepublicAddressSystem

    v17 v18  
    1 Rules to validate address tags as defined by Czech Republic Address System: osmwiki:Cs:WikiProject_Czech_Republic/Address_system. This system is exclusively used in Czech Republic and Slovakia.
    2 
    3 {{{
    4 #!rule
    51meta
    62{
    73  title: "Czech Republic Address System";
    8   version: "2.[[revision]]_[[date]]";
    9   description: "Rules implementing checks for address tags specified by Czech Republic Address System. Only used in CZ and SK.";
    10   author: "Jose Riha";
     4  version: "3.05_2025-10-31";
     5  description: "Rules implementing checks for address tags specified by Czech Republic Address System. Only used in CZ and SK. Messages are in Czech or Slovak due to better understanding for local mappers.";
     6  author: "Jose Riha, Ales AF HAF";
    117  icon: "Flag_of_the_Czech_Republic.svg";
    128  link: "https://josm.openstreetmap.de/wiki/Rules/CzechRepublicAddressSystem";
     9  baselanguage: "cs";
    1310  min-josm-version: "11424"; /* due to territory selectors */
    1411}
     
    1916Not all but majority of cases should be covered by this.
    2017
    21 Sada pravidiel pre JOSM validator implementujuca kontrolu tagov zadavanych podla unikatneho systemu cislovania budov pre Cesku a Slovensku republiku (https://wiki.openstreetmap.org/wiki/Cs:WikiProject_Czech_Republic/Address_system).
     18Sada pravidiel pre JOSM validátor implementujúci kontrolu tagov zadávaných podľa unikátneho systému číslovania budov pre Českú a Slovenskú republiku (https://wiki.openstreetmap.org/wiki/Cs:WikiProject_Czech_Republic/Address_system).
    2219
    2320Pozn.
    24 - evidencne cisla sa prideluju len budovam na uzemi CR
    25 - orientacne cisla na Slovensku obsahujuce pismeno sa pisu velkym pismenom, napr. 12A, 3B, 8C
    26 
    27 
    28 please send fixes and suggestions to: jose1711 gmail com
     21- čísla evidenční se přidelují jen budovám na území ČR
     22- orientačné čísla na Slovensku obsahujúce písmeno sa píšu veľkým písmenom, napr. 12A, 3B, 8C; v Česku se orientační čísla obsahující písmeno píší malým písmenem, například 12a, 3b, 8c
     23- limit čísla popisného v ČR a čísla evidenčního je 9999, u čísla orientačního je limit 999
     24
     25
     26please send fixes and suggestions to: jose1711 gmail com, f.ales1 seznam cz
    2927*/
    3028
    3129/* streetnumber syntax check
    32 orientacne cislo musi vyhovovat reg. vyrazu popisanemu na wiki: https://wiki.openstreetmap.org/wiki/Cs:WikiProject_Czech_Republic/Address_system
    33 */
    34 *[addr:streetnumber][addr:streetnumber !~ /^[1-9]+[0-9]*[A-Za-z]{0,1}$/][inside("CZ")]{
    35 throwError: tr("Format of streetnumber not recognized - expected a number followed by an optional single letter");
     30číslo orientační musí vyhovovat reg. výrazu popsanému na wiki: https://wiki.openstreetmap.org/wiki/Cs:WikiProject_Czech_Republic/Address_system
     31*/
     32*[addr:streetnumber][addr:streetnumber !~ /^[1-9][0-9]{0,2}[a-z]{0,1}$/][inside("CZ")]{
     33throwError: tr("Nebyl rozpoznán formát čísla orientačního – očekává se číslo menší než 999 s volitelným jedním malým písmenem bez diakritiky");
    3634}
    3735
    3836/* streetnumber syntax check
    39 orientacne cislo musi vyhovovat reg. vyrazu popisanemu na wiki: https://wiki.openstreetmap.org/wiki/Cs:WikiProject_Czech_Republic/Address_system
     37orientačné číslo musí vyhovovať reg. výrazu popísanému na wiki: https://wiki.openstreetmap.org/wiki/Cs:WikiProject_Czech_Republic/Address_system
    4038*/
    4139*[addr:streetnumber][addr:streetnumber !~ /^[1-9]+[0-9]*[A-Z]{0,1}$/][inside("SK")]{
    42 throwError: tr("Format of streetnumber not recognized - expected a number followed by an optional single letter");
     40throwError: tr("Nebol rozpoznaný formát orientačného čísla – očekáva sa číslo nasledované voliteľným jedným veľkým písmenom bez diakritiky");
    4341}
    4442
    4543/* conscriptionnumber syntax check
    46 supisne cislo musi vyhovovat reg. vyrazu popisanemu na wiki: https://wiki.openstreetmap.org/wiki/Cs:WikiProject_Czech_Republic/Address_system
     44súpisné číslo musí vyhovovať reg. výrazu popísanému na wiki: https://wiki.openstreetmap.org/wiki/Cs:WikiProject_Czech_Republic/Address_system
    4745*/
    4846*[addr:conscriptionnumber][addr:conscriptionnumber !~ /^[1-9]+[0-9]*$/][inside("CZ,SK")]{
    49 throwError: tr("Format of {0} not recognized - expected a natural number", "{0.key}");
     47throwError: tr("Formát {0} nebyl rozpoznán – očekává se přirozené číslo", "{0.key}");
     48}
     49
     50/* conscriptionnumber syntax check
     51číslo popisné musí vyhovovat reg. výrazu popsanému na wiki: https://wiki.openstreetmap.org/wiki/Cs:WikiProject_Czech_Republic/Address_system
     52*/
     53*[addr:conscriptionnumber][addr:conscriptionnumber =~ /^[0-9]{5}$/][inside("CZ")]{
     54throwError: tr("Číslo popisné je příliš vysoké – očekává se číslo nižší než 9999");
    5055}
    5156
    5257/* provisionalnumber syntax check
    53 evidencne cislo musi vyhovovat reg. vyrazu popisanemu na wiki: https://wiki.openstreetmap.org/wiki/Cs:WikiProject_Czech_Republic/Address_system
     58číslo evidenční musí vyhovovat reg. výrazu popsanému na wiki: https://wiki.openstreetmap.org/wiki/Cs:WikiProject_Czech_Republic/Address_system
    5459*/
    5560*[addr:provisionalnumber][addr:provisionalnumber !~ /^[1-9]+[0-9]*$/][inside("CZ")]{
    56 throwError: tr("Format of {0} not recognized - expected a natural number", "{0.key}");
     61throwError: tr("Formát {0} nebyl rozpoznán – očekává se přirozené číslo nižší než 9999", "{0.key}");
    5762}
    5863
    5964/* each address should have at least addr:street or addr:place
    60 kazda adresa by mala obsahovat bud addr:street alebo addr:place, pripadne oboje
    61 */
    62 *[any(tag("addr:streetnumber"),tag("addr:conscriptionnumber"),tag("addr:housenumber"))][!addr:street][!addr:place][inside("CZ,SK")] {
    63 throwWarning: tr("Each address should have at least addr:street or addr:place tag");
    64 }
    65 
     65každá adresa by mala obsahovať buď addr:street alebo addr:place, prípadne oboje
     66*/
     67*[any(tag("addr:streetnumber"),tag("addr:conscriptionnumber"),tag("addr:provisionalnumber"),tag("addr:housenumber"))][!addr:street][!addr:place][inside("CZ,SK")] {
     68throwWarning: tr("Každá adresa by měla mít alespoň značku addr:street nebo addr:place");
     69}
     70
     71/* each address without addr:streetnumber should have at least addr:place
     72každá adresa bez addr:streetnumber by měla obsahovat addr:place
     73*/
     74*[any(tag("addr:conscriptionnumber"),tag("addr:provisionalnumber"))][!addr:streetnumber][!addr:place][inside("CZ")] {
     75throwWarning: tr("Každá adresa bez čísla orientačního by měla mít addr:place");
     76}
    6677
    6778/* conscriptionnumber and provisionalnumber are mutualy exclusive
    68 ziaden dom by nemal mat sucasne supisne a evidencne cislo
     79žádný dům by neměl mít číslo popisné a evidenční současně
    6980*/
    7081*[addr:conscriptionnumber][addr:provisionalnumber][inside("CZ")]{
    71 throwError: tr("There should be either addr:conscriptionnumber or addr:provisionalnumber, not both at the same time");
     82throwError: tr("Mělo by existovat buď addr:conscriptionnumber nebo addr:provisionalnumber, nikoli obojí současně");
    7283}
    7384
    7485/* check for missing street in presence of streetnumber tag
    75 streetnumber by malo byt pouzite len spolu s orientacnym cislom
     86orientačné číslo by malo byť použité spolu s názvom ulice
    7687*/
    7788*[addr:streetnumber][!addr:street][inside("CZ,SK")]{
    78 throwWarning: tr("Addr:streetnumber used without an addr:street tag");
     89throwWarning: tr("Addr:streetnumber bez ulice");
     90}
     91
     92/* check for missing streetnumber in presence of street tag
     93každá adresa s názvom ulice by mala obsahovať aj orientačné číslo
     94*/
     95*[!addr:streetnumber][addr:street][addr:conscriptionnumber][inside("SK")]{
     96throwWarning: tr("Ulica bez addr:streetnumber");
    7997}
    8098
    8199/* if both streetnumber and conscriptionnumber are present then housenumber should be formatted as conscriptionnumber/streetnumber
    82 v pripade pouzitia supisneho aj orientacneho cisla by hodnota housenumber mala obsahovat kombinaciu oboch vo forme supisne/orientacne cislo
     100v prípade použitia súpisného aj orientačného čísla by hodnota housenumber mala obsahovať kombináciu oboch vo forme súpisné/orientačné číslo
    83101*/
    84102*[addr:housenumber][addr:streetnumber][addr:conscriptionnumber][not(tag("addr:housenumber") = concat(tag("addr:conscriptionnumber"),"/",tag("addr:streetnumber")))][inside("CZ,SK")]{
    85 throwWarning: tr("Addr:housenumber in unexpected format (expected: conscriptionnumber/streetnumber)");
     103throwWarning: tr("Addr:housenumber v neočekávaném formátě (očekáváno: conscriptionnumber/streetnumber)");
    86104fixAdd: concat("addr:housenumber=",tag("addr:conscriptionnumber"),"/",tag("addr:streetnumber"));
    87105}
    88106
    89107/* if both streetnumber and provisionalnumber are present then housenumber should be formatted as "ev."+provisionalnumber/streetnumber
    90 v pripade pouzitia evidencneho aj orientacneho cisla by hodnota housenumber mala obsahovat kombinaciu oboch vo forme ev.evidencne/orientacne cislo
     108v případě použití čísla evidenčního i orientačního by hodnota housenumber měla obsahovat kombinaci obou ve formě ev.evidenční/orientační číslo
    91109*/
    92110*[addr:housenumber][addr:streetnumber][addr:provisionalnumber][not(tag("addr:housenumber") = concat("ev.",tag("addr:provisionalnumber"),"/",tag("addr:streetnumber")))][inside("CZ")]{
    93 throwWarning: tr("Addr:housenumber in unexpected format (expected: ev.+provisional/streetnumber)");
     111throwWarning: tr("Addr:housenumber v neočekávaném formátě (očekáváno: ev.+provisional/streetnumber)");
    94112fixAdd: concat("addr:housenumber=ev.",tag("addr:provisionalnumber"),"/",tag("addr:streetnumber"));
    95113}
    96114
    97115/* if both streetnumber and conscriptionnumber are present then housenumber should be formatted as conscriptionnumber/streetnumber
    98 v pripade pouzitia supisneho aj orientacneho cisla by hodnota housenumber mala obsahovat kombinaciu oboch vo forme supisne/orientacne cislo
     116v prípade použitia súpisného aj orientačného čísla by hodnota housenumber mala obsahovať kombináciu oboch vo forme súpisné/orientačné číslo
    99117*/
    100118*[!addr:housenumber][addr:streetnumber][addr:conscriptionnumber][inside("CZ,SK")]{
    101 throwWarning: tr("Addr:housenumber missing - expected: conscriptionnumber/streetnumber");
     119throwWarning: tr("Addr:housenumber chybí - očekáváno: conscriptionnumber/streetnumber");
    102120fixAdd: concat("addr:housenumber=",tag("addr:conscriptionnumber"),"/",tag("addr:streetnumber"));
    103121}
    104122
    105123/* if both streetnumber and provisionalnumber are present then housenumber should be formatted as "ev."+provisionalnumber/streetnumber
    106 v pripade pouzitia evidencneho aj orientacneho cisla by hodnota housenumber mala obsahovat kombinaciu oboch vo forme ev.evidencne/orientacne cislo
     124v případě použití čísla evidenčního i orientačního by hodnota housenumber měla obsahovat kombinaci obou ve formě ev.evidenční/orientační cislo
    107125*/
    108126*[!addr:housenumber][addr:streetnumber][addr:provisionalnumber][inside("CZ")]{
    109 throwWarning: tr("Addr:housenumber missing - expected: ev.+provisionalnumber/streetnumber");
     127throwWarning: tr("Addr:housenumber chybí - očekáváno: ev.+provisionalnumber/streetnumber");
    110128fixAdd: concat("addr:housenumber=ev.",tag("addr:provisionalnumber"),"/",tag("addr:streetnumber"));
    111129}
    112130
    113131/* if only conscriptionnumber is present then housenumber should contain its value
    114 pre dom, ktory je identifikovany len supisnym cislom, by sa toto cislo malo objavit aj v housenumber
     132pre dom, ktorý je identifikovaný len súpisným číslom, by sa toto číslo malo objaviť aj v housenumber
    115133*/
    116134*[addr:housenumber][!addr:streetnumber][addr:conscriptionnumber][not(tag("addr:housenumber") = tag("addr:conscriptionnumber"))][inside("CZ,SK")]{
    117 throwWarning: tr("{0} should contain addr:conscriptionnumber","{0.key}");
     135throwWarning: tr("{0} by měl obsahovat addr:conscriptionnumber","{0.key}");
    118136fixAdd: concat("addr:housenumber=",tag("addr:conscriptionnumber"));
    119137}
    120138
    121139/* if only provisionalnumber is present then housenumber should contain its value
    122 pre dom, ktory je identifikovany len evidencnym cislom, by sa toto cislo malo objavit aj v housenumber
     140pro dům, který je identifikovaný pouze číslem evidenčním, by se toto číslo mělo objevit i v housenumber
    123141*/
    124142*[addr:housenumber][!addr:streetnumber][addr:provisionalnumber][not(tag("addr:housenumber") = concat("ev.",tag("addr:provisionalnumber")))][inside("CZ")]{
    125 throwWarning: tr("{0} should contain ev. + addr:provisionalnumber","{0.key}");
     143throwWarning: tr("{0} by měl obsahovat ev. + addr:provisionalnumber","{0.key}");
    126144fixAdd: concat("addr:housenumber=ev.",tag("addr:provisionalnumber"));
    127145}
    128146
    129 /* if housenumber is not empty we want to have conscriptionnumber and/or streetnumber populated as well */
    130 *[addr:housenumber][!addr:streetnumber][!addr:conscriptionnumber][addr:housenumber =~ /\/[1-9]+/][inside("CZ,SK")] {
    131 throwWarning: tr("Streetnumber and conscriptionnumber missing");
     147/* if housenumber is not empty we want to have conscriptionnumber and streetnumber populated as well
     148ak číslo domu nie je prázdne, chceme, aby bolo vyplnené aj súpisné a orientačné číslo
     149*/
     150*[addr:housenumber][!addr:streetnumber][!addr:conscriptionnumber][addr:housenumber =~ /^[1-9]+\/[0-9]+[A-Za-z]?$/][inside("CZ,SK")] {
     151throwWarning: tr("Addr:conscriptionnumber a addr:streetnumber chybí");
    132152fixAdd: concat("addr:conscriptionnumber=",get(split("/",tag("addr:housenumber")),0));
    133153fixAdd: concat("addr:streetnumber=",get(split("/",tag("addr:housenumber")),1));
    134154}
    135155
     156/* if housenumber with ev. is not empty we want to have provisionalnumber and streetnumber populated as well
     157pokud číslo domu nie s ev. není prázdné, chceme, aby bylo vyplněné i číslo evidenční a orientační
     158*/
     159*[addr:housenumber][!addr:streetnumber][!addr:provisionalnumber][addr:housenumber =~ /^ev\.[1-9]+\/[0-9]+[A-Za-z]?$/][inside("CZ")] {
     160throwWarning: tr("Addr:provisionalnumber a addr:streetnumber chybí");
     161fixAdd: concat("addr:conscriptionnumber=",get(split("/",tag("addr:housenumber")),0));
     162fixAdd: concat("addr:streetnumber=",get(split("/",tag("addr:housenumber")),1));
     163}
     164
    136165/* both housenumber and streetnumber is populated but conscriptionnumber is missing
    137 housenumber aj orientacne cislo obsahuju hodnotu, no supisne cislo je prazdne
     166housenumber i číslo orientační obsahují hodnotu, ale číslo popisné je prázdné
    138167 */
    139 *[addr:streetnumber][!addr:conscriptionnumber][addr:housenumber =~ /\/[1-9]+/][inside("CZ,SK")] {
    140 throwWarning: tr("Conscriptionnumber missing");
     168*[addr:streetnumber][!addr:conscriptionnumber][addr:housenumber =~ /^[1-9]+\/[0-9]+[A-Za-z]?$/][inside("CZ,SK")] {
     169throwWarning: tr("Addr:conscriptionnumber chybí");
    141170fixAdd: concat("addr:conscriptionnumber=",get(split("/",tag("addr:housenumber")),0));
    142171}
    143172
     173/* both housenumber and streetnumber is populated but provisionalnumber is missing
     174housenumber i číslo orientační obsahují hodnotu, ale číslo evidenční je prázdné
     175 */
     176*[addr:streetnumber][!addr:provisionalnumber][addr:housenumber =~ /^ev\.[1-9]+\/[0-9]+[A-Za-z]?$/][inside("CZ")] {
     177throwWarning: tr("Addr:provisionalnumber chybí");
     178fixAdd: concat("addr:provisionalnnumber=",get(split("/",tag("addr:housenumber")),0));
     179}
     180
    144181/* typo checks
    145 detekcia castych preklepov
     182detekcia možných preklepov
    146183*/
    147184*[addr:streetnumbe][inside("CZ,SK")]{
    148 throwError: tr("Typo detected with streetnumber");
     185throwError: tr("Zjištěný překlep u addr:streetnumber");
    149186suggestAlternative: "addr:streetnumber";
    150187fixChangeKey: "addr:streetnumbe=>addr:streetnumber";
     
    152189
    153190*[addr:conscriptionumber][inside("CZ,SK")]{
    154 throwError: tr("Typo detected with conscriptionnumber");
     191throwError: tr("Zjištěný překlep u addr:conscriptionnumber");
    155192suggestAlternative: "addr:conscriptionnumber";
    156193fixChangeKey: "addr:conscriptionumber=>addr:conscriptionnumber";
    157194}
    158 }}}
     195
     196*[addr:conscriptionnumbe][inside("CZ,SK")]{
     197throwError: tr("Zjištěný překlep u addr:conscriptionnumber");
     198suggestAlternative: "addr:conscriptionnumber";
     199fixChangeKey: "addr:conscriptionnumbe=>addr:conscriptionnumber";
     200}
     201
     202*[addr:conscriptionsnumber][inside("CZ,SK")]{
     203throwError: tr("Zjištěný překlep u addr:conscriptionnumber");
     204suggestAlternative: "addr:conscriptionnumber";
     205fixChangeKey: "addr:conscriptionsnumber=>addr:conscriptionnumber";
     206}
     207
     208*[addr:provisionnumber][inside("CZ")]{
     209throwError: tr("Zjištěný překlep u addr:provisionalnumber");
     210suggestAlternative: "addr:provisionalnumber";
     211fixChangeKey: "addr:provisionsnumber=>addr:provisionalnumber";
     212}
     213
     214*[addr:provisionalnumbe][inside("CZ")]{
     215throwError: tr("Zjištěný překlep u addr:provisionalnumber");
     216suggestAlternative: "addr:provisionalnumber";
     217fixChangeKey: "addr:provisionalsnumbe=>addr:provisionalnumber";
     218}