Ahoj,
tak jsem se rozhodl přímo upravit plugin Czech Republic Address System na
webu JOSM o další kontroly:




- Dal jsem jazyk výstupů do češtiny nebo slovenštiny, nepočítám s tím, že by
se o kontrolu našeho unikátu starali cizinci, a pokud ano, tak buďto nebude
většina z přespolních mapperů ten unikát chápat, nebo jich bude malé
množství

- V Česku máme v RÚIAN datech používána pouze malá písmena, nehledě na
fyzické provedení velkých písmen za číslem orientačním jsem to omezil na
malá písmena za orientačními čísly

- Dle Zákona o obcích v ČR máme rozmezí čísel popisných a evidenčních 1-
9999, u čísel orientačních je po spuštění RÚIANu omezeno na 1-999

- Nepočítám již, jak už jednou o tom Dodko napsal, že už to slovenský
registr již nadále nepodporuje, s adresami na Slovensku s názvem ulice bez
orientačního čísla, tak jsem na ni přidal kontrolu

- Fixnul jsem kontrolu na chybějící číslo popisné a rozdělil to na chybějící
č.p. a číslo evidenční

- Přidal jsem veškeré možné překlepy, co mě napadly




Pokud byste k tomu měli nějaké připomínky nebo tam nefungovala Husova
nabodeníčka, tak mi dejte vědět.

--

Aleš



meta
{
  title: "Czech Republic Address System";
  version: "3.01_2025-08-03";
  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.";
  author: "Jose Riha, Ales AF HAF";
  icon: "Flag_of_the_Czech_Republic.svg";
  link: "https://josm.openstreetmap.de/wiki/Rules/CzechRepublicAddressSystem";;
  min-josm-version: "11424"; /* due to territory selectors */
}

/* implementation of Czech Republic Address System for JOSM validator as per 
https://wiki.openstreetmap.org/wiki/Cs:WikiProject_Czech_Republic/Address_system
Only makes sense to edits within borders of Czech and Slovak republic.

Not all but majority of cases should be covered by this.

Sada 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).

Pozn.
- čísla evidenční se přidelují jen budovám na území ČR
- 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
- limit čísla popisného v ČR a čísla evidenčního je 9999, u čísla 
orientačního je limit 999


please send fixes and suggestions to: jose1711 gmail com, f.ales1 seznam cz
*/

/* streetnumber syntax check
číslo orientační musí vyhovovat reg. výrazu popsanému na wiki: 
https://wiki.openstreetmap.org/wiki/Cs:WikiProject_Czech_Republic/Address_system
*/
*[addr:streetnumber][addr:streetnumber !~ 
/^[1-9][0-9]{0,2}*[a-z]{0,1}$/][inside("CZ")]{
throwError: 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");
}

/* streetnumber syntax check
orientačné číslo musí vyhovovať reg. výrazu popísanému na wiki: 
https://wiki.openstreetmap.org/wiki/Cs:WikiProject_Czech_Republic/Address_system
*/
*[addr:streetnumber][addr:streetnumber !~ 
/^[1-9]+[0-9]*[A-Z]{0,1}$/][inside("SK")]{
throwError: 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");
}

/* conscriptionnumber syntax check
súpisné číslo musí vyhovovať reg. výrazu popísanému na wiki: 
https://wiki.openstreetmap.org/wiki/Cs:WikiProject_Czech_Republic/Address_system
*/
*[addr:conscriptionnumber][addr:conscriptionnumber !~ 
/^[1-9]+[0-9]*$/][inside("CZ,SK")]{
throwError: tr("Formát {0} nebyl rozpoznán – očekává se přirozené 
číslo", "{0.key}");
}

/* conscriptionnumber syntax check
číslo popisné musí vyhovovat reg. výrazu popsanému na wiki: 
https://wiki.openstreetmap.org/wiki/Cs:WikiProject_Czech_Republic/Address_system
*/
*[addr:conscriptionnumber][addr:conscriptionnumber =~ 
/^[0-9]{5}$/][inside("CZ")]{
throwError: tr("Číslo popisné je příliš vysoké – očekává se číslo 
nižší než 9999");
}

/* provisionalnumber syntax check
číslo evidenční musí vyhovovat reg. výrazu popsanému na wiki: 
https://wiki.openstreetmap.org/wiki/Cs:WikiProject_Czech_Republic/Address_system
*/
*[addr:provisionalnumber][addr:provisionalnumber !~ 
/^[1-9]+[0-9]*$/][inside("CZ")]{
throwError: tr("Formát {0} nebyl rozpoznán – očekává se přirozené 
číslo nižší než 9999", "{0.key}");
}

/* each address should have at least addr:street or addr:place
každá adresa by mala obsahovať buď addr:street alebo addr:place, prípadne 
oboje
*/
*[any(tag("addr:streetnumber"),tag("addr:conscriptionnumber"),tag("addr:provisionalnumber"),tag("addr:housenumber"))][!addr:street][!addr:place][inside("CZ,SK")]
 {
throwWarning: tr("Každá adresa by měla mít alespoň značku addr:street 
nebo addr:place");
}


/* conscriptionnumber and provisionalnumber are mutualy exclusive
žádný dům by neměl mít číslo popisné a evidenční současně
*/
*[addr:conscriptionnumber][addr:provisionalnumber][inside("CZ")]{
throwError: tr("Mělo by existovat buď addr:conscriptionnumber nebo 
addr:provisionalnumber, nikoli obojí současně");
}

/* check for missing street in presence of streetnumber tag
orientačné číslo by malo byť použité spolu s názvom ulice
*/
*[addr:streetnumber][!addr:street][inside("CZ,SK")]{
throwWarning: tr("Číslo orientační bez ulice");
}

/* check for missing streetnumber in presence of street tag
každá adresa s názvom ulice by mala obsahovať aj orientačné číslo
*/
*[!addr:streetnumber][addr:street][inside("SK")]{
throwWarning: tr("Ulica bez orientačného čísla");
}

/* if both streetnumber and conscriptionnumber are present then housenumber 
should be formatted as conscriptionnumber/streetnumber
v 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
*/
*[addr:housenumber][addr:streetnumber][addr:conscriptionnumber][not(tag("addr:housenumber")
 = 
concat(tag("addr:conscriptionnumber"),"/",tag("addr:streetnumber")))][inside("CZ,SK")]{
throwWarning: tr("Addr:housenumber v neočakávanom formáte (očakávané: 
conscriptionnumber/streetnumber)");
fixAdd: 
concat("addr:housenumber=",tag("addr:conscriptionnumber"),"/",tag("addr:streetnumber"));
}

/* if both streetnumber and provisionalnumber are present then housenumber 
should be formatted as "ev."+provisionalnumber/streetnumber
v 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
*/
*[addr:housenumber][addr:streetnumber][addr:provisionalnumber][not(tag("addr:housenumber")
 = 
concat("ev.",tag("addr:provisionalnumber"),"/",tag("addr:streetnumber")))][inside("CZ")]{
throwWarning: tr("Addr:housenumber v neočekávaném formátě (očekáváno: 
ev.+provisional/streetnumber)");
fixAdd: 
concat("addr:housenumber=ev.",tag("addr:provisionalnumber"),"/",tag("addr:streetnumber"));
}

/* if both streetnumber and conscriptionnumber are present then housenumber 
should be formatted as conscriptionnumber/streetnumber
v 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
*/
*[!addr:housenumber][addr:streetnumber][addr:conscriptionnumber][inside("CZ,SK")]{
throwWarning: tr("Addr:housenumber chybí - očekáváno: 
conscriptionnumber/streetnumber");
fixAdd: 
concat("addr:housenumber=",tag("addr:conscriptionnumber"),"/",tag("addr:streetnumber"));
}

/* if both streetnumber and provisionalnumber are present then housenumber 
should be formatted as "ev."+provisionalnumber/streetnumber
v 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
*/
*[!addr:housenumber][addr:streetnumber][addr:provisionalnumber][inside("CZ")]{
throwWarning: tr("Addr:housenumber chybí - očekáváno: 
ev.+provisionalnumber/streetnumber");
fixAdd: 
concat("addr:housenumber=ev.",tag("addr:provisionalnumber"),"/",tag("addr:streetnumber"));
}

/* if only conscriptionnumber is present then housenumber should contain its 
value
pre dom, ktorý je identifikovaný len súpisným číslom, by sa toto číslo 
malo objaviť aj v housenumber
*/
*[addr:housenumber][!addr:streetnumber][addr:conscriptionnumber][not(tag("addr:housenumber")
 = tag("addr:conscriptionnumber"))][inside("CZ,SK")]{
throwWarning: tr("{0} by měl obsahovat addr:conscriptionnumber","{0.key}");
fixAdd: concat("addr:housenumber=",tag("addr:conscriptionnumber"));
}

/* if only provisionalnumber is present then housenumber should contain its 
value
pro dům, který je identifikovaný pouze číslem evidenčním, by se toto 
číslo mělo objevit i v housenumber
*/
*[addr:housenumber][!addr:streetnumber][addr:provisionalnumber][not(tag("addr:housenumber")
 = concat("ev.",tag("addr:provisionalnumber")))][inside("CZ")]{
throwWarning: tr("{0} by měl obsahovat ev. + 
addr:provisionalnumber","{0.key}");
fixAdd: concat("addr:housenumber=ev.",tag("addr:provisionalnumber"));
}

/* if housenumber is not empty we want to have conscriptionnumber and 
streetnumber populated as well
ak číslo domu nie je prázdne, chceme, aby bolo vyplnené aj súpisné a 
orientačné číslo
*/
*[addr:housenumber][!addr:streetnumber][!addr:conscriptionnumber][addr:housenumber
 =~ /\/[1-9]+/][inside("CZ,SK")] {
throwWarning: tr("Addr:streetnumber a addr:conscriptionnumber chýbajú");
fixAdd: 
concat("addr:conscriptionnumber=",get(split("/",tag("addr:housenumber")),0));
fixAdd: concat("addr:streetnumber=",get(split("/",tag("addr:housenumber")),1));
}

/* both housenumber and streetnumber is populated but conscriptionnumber is 
missing
housenumber i číslo orientační obsahují hodnotu, ale číslo popisné je 
prázdné
 */
*[addr:streetnumber][!addr:conscriptionnumber][addr:housenumber =~ 
/^[1-9]+\/[0-9]+[A-Za-z]?$/][inside("CZ,SK")] {
throwWarning: tr("Addr:conscriptionnumber chýba");
fixAdd: 
concat("addr:conscriptionnumber=",get(split("/",tag("addr:housenumber")),0));
}

/* both housenumber and streetnumber is populated but provisionalnumber is 
missing
housenumber i číslo orientační obsahují hodnotu, ale číslo evidenční 
je prázdné
 */
*[addr:streetnumber][!addr:provisionalnumber][addr:housenumber =~ 
/^ev\.[1-9]+\/[0-9]+[A-Za-z]?$/][inside("CZ")] {
throwWarning: tr("Číslo evidenční chybí");
fixAdd: 
concat("addr:provisionalnnumber=",get(split("/",tag("addr:housenumber")),0));
}

/* typo checks
detekcia možných preklepov
*/
*[addr:streetnumbe][inside("CZ,SK")]{
throwError: tr("Zistený preklep u addr:streetnumber");
suggestAlternative: "addr:streetnumber";
fixChangeKey: "addr:streetnumbe=>addr:streetnumber";
}

*[addr:conscriptionumber][inside("CZ,SK")]{
throwError: tr("Zistený preklep u addr:conscriptionnumber");
suggestAlternative: "addr:conscriptionnumber";
fixChangeKey: "addr:conscriptionumber=>addr:conscriptionnumber";
}

*[addr:conscriptionnumbe][inside("CZ,SK")]{
throwError: tr("Zistený preklep u addr:conscriptionnumber");
suggestAlternative: "addr:conscriptionnumber";
fixChangeKey: "addr:conscriptionnumbe=>addr:conscriptionnumber";
}

*[addr:conscriptionsnumber][inside("CZ,SK")]{
throwError: tr("Zistený preklep u addr:conscriptionnumber");
suggestAlternative: "addr:conscriptionnumber";
fixChangeKey: "addr:conscriptionsnumber=>addr:conscriptionnumber";
}

*[addr:provisionnumber][inside("CZ")]{
throwError: tr("Zjištěný překlep u addr:provisionalnumber");
suggestAlternative: "addr:conscriptionnumber";
fixChangeKey: "addr:provisionsnumber=>addr:provisionalnumber";
}

*[addr:provisionalnumbe][inside("CZ")]{
throwError: tr("Zjištěný překlep u addr:provisionalnumber");
suggestAlternative: "addr:conscriptionnumber";
fixChangeKey: "addr:provisionalsnumbe=>addr:provisionalnumber";
}
meta
{
  title: "Czech Republic Address System";
  version: "2.17_2020-10-05";
  description: "Rules implementing checks for address tags specified by Czech 
Republic Address System. Only used in CZ and SK.";
  author: "Jose Riha";
  icon: "Flag_of_the_Czech_Republic.svg";
  link: "https://josm.openstreetmap.de/wiki/Rules/CzechRepublicAddressSystem";;
  min-josm-version: "11424"; /* due to territory selectors */
}

/* implementation of Czech Republic Address System for JOSM validator as per 
https://wiki.openstreetmap.org/wiki/Cs:WikiProject_Czech_Republic/Address_system
Only makes sense to edits within borders of Czech and Slovak republic.

Not all but majority of cases should be covered by this.

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).

Pozn.
- evidencne cisla sa prideluju len budovam na uzemi CR
- orientacne cisla na Slovensku obsahujuce pismeno sa pisu velkym pismenom, 
napr. 12A, 3B, 8C


please send fixes and suggestions to: jose1711 gmail com
*/

/* streetnumber syntax check
orientacne cislo musi vyhovovat reg. vyrazu popisanemu na wiki: 
https://wiki.openstreetmap.org/wiki/Cs:WikiProject_Czech_Republic/Address_system
*/
*[addr:streetnumber][addr:streetnumber !~ 
/^[1-9]+[0-9]*[A-Za-z]{0,1}$/][inside("CZ")]{
throwError: tr("Format of streetnumber not recognized - expected a number 
followed by an optional single letter");
}

/* streetnumber syntax check
orientacne cislo musi vyhovovat reg. vyrazu popisanemu na wiki: 
https://wiki.openstreetmap.org/wiki/Cs:WikiProject_Czech_Republic/Address_system
*/
*[addr:streetnumber][addr:streetnumber !~ 
/^[1-9]+[0-9]*[A-Z]{0,1}$/][inside("SK")]{
throwError: tr("Format of streetnumber not recognized - expected a number 
followed by an optional single letter");
}

/* conscriptionnumber syntax check
supisne cislo musi vyhovovat reg. vyrazu popisanemu na wiki: 
https://wiki.openstreetmap.org/wiki/Cs:WikiProject_Czech_Republic/Address_system
*/
*[addr:conscriptionnumber][addr:conscriptionnumber !~ 
/^[1-9]+[0-9]*$/][inside("CZ,SK")]{
throwError: tr("Format of {0} not recognized - expected a natural number", 
"{0.key}");
}

/* provisionalnumber syntax check
evidencne cislo musi vyhovovat reg. vyrazu popisanemu na wiki: 
https://wiki.openstreetmap.org/wiki/Cs:WikiProject_Czech_Republic/Address_system
*/
*[addr:provisionalnumber][addr:provisionalnumber !~ 
/^[1-9]+[0-9]*$/][inside("CZ")]{
throwError: tr("Format of {0} not recognized - expected a natural number", 
"{0.key}");
}

/* each address should have at least addr:street or addr:place
kazda adresa by mala obsahovat bud addr:street alebo addr:place, pripadne oboje
*/
*[any(tag("addr:streetnumber"),tag("addr:conscriptionnumber"),tag("addr:housenumber"))][!addr:street][!addr:place][inside("CZ,SK")]
 {
throwWarning: tr("Each address should have at least addr:street or addr:place 
tag");
}


/* conscriptionnumber and provisionalnumber are mutualy exclusive
ziaden dom by nemal mat sucasne supisne a evidencne cislo
*/
*[addr:conscriptionnumber][addr:provisionalnumber][inside("CZ")]{
throwError: tr("There should be either addr:conscriptionnumber or 
addr:provisionalnumber, not both at the same time");
}

/* check for missing street in presence of streetnumber tag
streetnumber by malo byt pouzite len spolu s orientacnym cislom
*/
*[addr:streetnumber][!addr:street][inside("CZ,SK")]{
throwWarning: tr("Addr:streetnumber used without an addr:street tag");
}

/* if both streetnumber and conscriptionnumber are present then housenumber 
should be formatted as conscriptionnumber/streetnumber
v pripade pouzitia supisneho aj orientacneho cisla by hodnota housenumber mala 
obsahovat kombinaciu oboch vo forme supisne/orientacne cislo
*/
*[addr:housenumber][addr:streetnumber][addr:conscriptionnumber][not(tag("addr:housenumber")
 = 
concat(tag("addr:conscriptionnumber"),"/",tag("addr:streetnumber")))][inside("CZ,SK")]{
throwWarning: tr("Addr:housenumber in unexpected format (expected: 
conscriptionnumber/streetnumber)");
fixAdd: 
concat("addr:housenumber=",tag("addr:conscriptionnumber"),"/",tag("addr:streetnumber"));
}

/* if both streetnumber and provisionalnumber are present then housenumber 
should be formatted as "ev."+provisionalnumber/streetnumber
v pripade pouzitia evidencneho aj orientacneho cisla by hodnota housenumber 
mala obsahovat kombinaciu oboch vo forme ev.evidencne/orientacne cislo
*/
*[addr:housenumber][addr:streetnumber][addr:provisionalnumber][not(tag("addr:housenumber")
 = 
concat("ev.",tag("addr:provisionalnumber"),"/",tag("addr:streetnumber")))][inside("CZ")]{
throwWarning: tr("Addr:housenumber in unexpected format (expected: 
ev.+provisional/streetnumber)");
fixAdd: 
concat("addr:housenumber=ev.",tag("addr:provisionalnumber"),"/",tag("addr:streetnumber"));
}

/* if both streetnumber and conscriptionnumber are present then housenumber 
should be formatted as conscriptionnumber/streetnumber
v pripade pouzitia supisneho aj orientacneho cisla by hodnota housenumber mala 
obsahovat kombinaciu oboch vo forme supisne/orientacne cislo
*/
*[!addr:housenumber][addr:streetnumber][addr:conscriptionnumber][inside("CZ,SK")]{
throwWarning: tr("Addr:housenumber missing - expected: 
conscriptionnumber/streetnumber");
fixAdd: 
concat("addr:housenumber=",tag("addr:conscriptionnumber"),"/",tag("addr:streetnumber"));
}

/* if both streetnumber and provisionalnumber are present then housenumber 
should be formatted as "ev."+provisionalnumber/streetnumber
v pripade pouzitia evidencneho aj orientacneho cisla by hodnota housenumber 
mala obsahovat kombinaciu oboch vo forme ev.evidencne/orientacne cislo
*/
*[!addr:housenumber][addr:streetnumber][addr:provisionalnumber][inside("CZ")]{
throwWarning: tr("Addr:housenumber missing - expected: 
ev.+provisionalnumber/streetnumber");
fixAdd: 
concat("addr:housenumber=ev.",tag("addr:provisionalnumber"),"/",tag("addr:streetnumber"));
}

/* if only conscriptionnumber is present then housenumber should contain its 
value
pre dom, ktory je identifikovany len supisnym cislom, by sa toto cislo malo 
objavit aj v housenumber
*/
*[addr:housenumber][!addr:streetnumber][addr:conscriptionnumber][not(tag("addr:housenumber")
 = tag("addr:conscriptionnumber"))][inside("CZ,SK")]{
throwWarning: tr("{0} should contain addr:conscriptionnumber","{0.key}");
fixAdd: concat("addr:housenumber=",tag("addr:conscriptionnumber"));
}

/* if only provisionalnumber is present then housenumber should contain its 
value
pre dom, ktory je identifikovany len evidencnym cislom, by sa toto cislo malo 
objavit aj v housenumber
*/
*[addr:housenumber][!addr:streetnumber][addr:provisionalnumber][not(tag("addr:housenumber")
 = concat("ev.",tag("addr:provisionalnumber")))][inside("CZ")]{
throwWarning: tr("{0} should contain ev. + addr:provisionalnumber","{0.key}");
fixAdd: concat("addr:housenumber=ev.",tag("addr:provisionalnumber"));
}

/* if housenumber is not empty we want to have conscriptionnumber and/or 
streetnumber populated as well */
*[addr:housenumber][!addr:streetnumber][!addr:conscriptionnumber][addr:housenumber
 =~ /\/[1-9]+/][inside("CZ,SK")] {
throwWarning: tr("Streetnumber and conscriptionnumber missing");
fixAdd: 
concat("addr:conscriptionnumber=",get(split("/",tag("addr:housenumber")),0));
fixAdd: concat("addr:streetnumber=",get(split("/",tag("addr:housenumber")),1));
}

/* both housenumber and streetnumber is populated but conscriptionnumber is 
missing
housenumber aj orientacne cislo obsahuju hodnotu, no supisne cislo je prazdne
 */
*[addr:streetnumber][!addr:conscriptionnumber][addr:housenumber =~ 
/\/[1-9]+/][inside("CZ,SK")] {
throwWarning: tr("Conscriptionnumber missing");
fixAdd: 
concat("addr:conscriptionnumber=",get(split("/",tag("addr:housenumber")),0));
}

/* typo checks
detekcia castych preklepov
*/
*[addr:streetnumbe][inside("CZ,SK")]{
throwError: tr("Typo detected with streetnumber");
suggestAlternative: "addr:streetnumber";
fixChangeKey: "addr:streetnumbe=>addr:streetnumber";
}

*[addr:conscriptionumber][inside("CZ,SK")]{
throwError: tr("Typo detected with conscriptionnumber");
suggestAlternative: "addr:conscriptionnumber";
fixChangeKey: "addr:conscriptionumber=>addr:conscriptionnumber";
}
_______________________________________________
talk-cz mailing list
[email protected]
https://lists.openstreetmap.org/listinfo/talk-cz
https://openstreetmap.cz/talkcz

Odpovedet emailem