Wikipedista:Matěj Suchánek/Případ LocMap

Původní diskuse: Diskuse k šabloně:LocMap#Využití Wikidat. Související diskuse: Wikipedie:Bot/Žádosti o provedení práce#žádost o doplnění infoboxu kostel.

Uvedení do problému

editovat

V článcích o místech, jako jsou města nebo hory, se v infoboxech vyplňuje parametr |loc-map, kterým se do článků vkládá mapa, na které je vyznačeno dané místo. Obsahem tohoto parametru bývá vyplněná šablona {{LocMap}}. Příklad z článku Kiruna:

| loc-map = {{LocMap |Švédsko |label=Kiruna |position=right |width=150 |lat=67.85 |long=20.216667 |float=center |caption=}}

V těchto článcích pak bývají v infoboxech vyplněny i parametry zeměpisných souřadnic a samotný název místa, např.

| název = Kiruna
| zeměpisná šířka = 67.85
| zeměpisná délka = 20.216667

Všimněme si, že obsah těchto parametrů je shodný s parametry |lat a |long, resp. |label. Právě tímto vznikají v článcích zbytečné duplicity údajů nebo jejich nesourodosti, které nemusí být vůbec zřetelné, zvlášť pokud jsou v daném článku přebírány souřadnice z Wikidat (zeměpisné souřadnice (P625)).

Řešení problému

editovat

Jako řešení se nabízí vytvářet LocMapy pomocí parametrů zadaných infoboxu (tímto způsobem se v článcích již spravují souřadnice). Tím by zároveň bylo dosaženo konzistentního zobrazení ve všech článcích s daným infoboxem (ne-li rovnou napříč všemi infoboxy). Toto se týká zejména parametrů |width, |float, |caption a také |relief. Parametry |lat a |long mají své protějšky v parametrech |zeměpisná šířka, resp. |zeměpisná délka, parametr |label pak v parametru |název nebo podobném.

Parametr |position určuje polohu textu u bodu na mapě, aby tento nepřetékal mimo mapu. Řešením by mohlo být zavedení hodnoty auto v šabloně {{LocMap}}, která by správné umístění textu odhadovala pomocí pevně stanovených práhových hodnot (řekněme 25–75 %).

Zbývá už jen první nepojmenovaný parametr, který společně se souřadnicemi patří mezi ty nejdůležitější. V článku Kiruna (město ve Švédsku) má hodnotu Švédsko – pomocná šablona {{LocMap+}} tak hledá šablonu LocMap Švédsko, která skutečně existuje. Z jejího kódu pak získává tyto důležité údaje:

{{#switch:{{{1}}}
| name = Švédsko
| top = 69.5
| bottom = 55.1
| left = 10.4
| right = 24.6
| image = Sweden location map.svg
| image1 = Sweden relief location map.jpg
}}

Jedná se o obrázky, které slouží jako podklad (politická a obecně zeměpisná mapa, které volí zmíněný parametr |relief), a souřadnice jejich okrajů, díky kterým se potom stupně přepočítají na pixely, čímž se bod na podkladu napozicuje pomocí CSS správně.

Tento parametr v tomto případě odpovídá státu, ve kterém se místo nachází. Infoboxy sice vesměs parametr |stát nebo podobný podporují, drtivá většina jich však nevynucuje zadání v požadovaném tvaru, tedy jako prostý text. Navíc (dle původní diskuse) neplatí, že podklad je vždy mapou daného státu (kupř. v Rusku).

Odstraňování šablon z článků tedy musí doprovázet některá z těchto změn:

  1. Přebírání státu, resp. vyšší administrativní jednotky z Wikidat – stát (P17) je jedna z nejčastěji používaných vlastností, díky kategorizačním stromům ji lze snadno importovat. Prostý text lze z cílové položky získat buď jako název článku na české Wikipedii, nebo jako štítek položky. Vyšší administrativní jednotku představuje vlastnost nachází se v administrativní jednotce (P131), jejíž import z kategorizačních stromů je také možný, byť v tomto případě pracnější, na druhou stranu její správné využití by vyžadovalo zavedení složitější mechanismů (skrze moduly).
  2. Zavedení parametru |loc-map poloha (nebo jinak pojmenovaného), jehož hodnota by korespondovala s hodnotou onoho prvního nepojmenovaného parametru šablony {{LocMap}}. Převod v článcích by vypadal takto:
Předtím Poté
| název = Kiruna
| stát = {{Vlajka a název|Švédsko}}
| zeměpisná šířka = 67.85
| zeměpisná délka = 20.216667
| loc-map = {{LocMap |Švédsko |label=Kiruna |position=right |width=150 |lat=67.85 |long=20.216667 |float=center |caption=}}
| název = Kiruna
| stát = {{Vlajka a název|Švédsko}}
| zeměpisná šířka = 67.85
| zeměpisná délka = 20.216667
| loc-map poloha = Švédsko
Tímto by sice vznikaly další duplicity, konkrétně s parametrem |stát, na druhou stranu by se tím vyřešil problém zmíněný v původní diskusi, tedy užívání podkladů nižších administrativních jednotek.
  1. Vynucení prostého textu v parametrech |stát. Tento parametr by pak infobox používal jak pro zobrazení běžného údaje (jako odkaz nebo šablonou {{Vlajka a název}}), tak pro tvorbu LocMap. Převod by pak vypadal takto:
Předtím Poté
| název = Kiruna
| stát = {{Vlajka a název|Švédsko}}
| zeměpisná šířka = 67.85
| zeměpisná délka = 20.216667
| loc-map = {{LocMap |Švédsko |label=Kiruna |position=right |width=150 |lat=67.85 |long=20.216667 |float=center |caption=}}
| název = Kiruna
| stát = Švédsko
| zeměpisná šířka = 67.85
| zeměpisná délka = 20.216667
To by ovšem nevyřešilo problém zmíněný v původní diskusi, pro nějž je jediným řešením bod číslo 2. Jako další možné úskalí tohoto řešení se jeví objekty (především jezera nebo hory), které se nacházejí na území více států. Na druhou stranu by tato změna byla zpětně kompatibilní se šablonou {{Infobox - sídlo světa}} (tedy i v článku Kiruna), která vyžaduje zadání státu ve formě prostého textu.

Centrální správa LocMap

editovat

Současný systém vyžaduje, aby se pro každou LocMapu zakládala vlastní šablona ({{LocMap Švédsko}}). Za zvážení však také stojí zavedení centrální správy – pomocí modulu, případně Wikidat. (Implementace je díky víceúrovňové tvorbě LocMap na řešení předešlého problému nezávislá.)

Mějme moduly Modul:LocMap a Modul:LocMap/data. První by poskytoval přístup k údajům v druhém. Struktura druhého modulu by mohla vypadat takto:

return {
    ["Česko"] = {
        top = 51.3,
        bottom = 48.3,
        left = 11.8,
        right = 19.2,
        image = "Czech Republic location map.svg",
        image1 = "Relief Map of Czech Republic.png",
    },
    ["Slovensko"] = {
        top = 49.8,
        bottom = 47.6,
        left = 16.6,
        right = 23.0,
        image = "Slovakia location map.svg",
        image1 = "Relief Map of Slovakia 2.png",
    },
    ["Švédsko"] = {
        top = 69.5,
        bottom = 55.1,
        left = 10.4,
        right = 24.6,
        image = "Sweden location map.svg",
        image1 = "Sweden relief location map.jpg",
    },
    -- atd.
}

Struktura toho prvního pak třeba takto:

local p = {}

local data = mw.loadData("Modul:LocMap/data")

function p.getField(frame)
    return p._getField(frame.args)
end

function p._getField(args)
    if args.map and args.field then
        if data and data[args.map] then
            return data[args.map][args.field]
        end
    end
end

return p

Pomocná šablona {{LocMap+}} by pak byla upravena tak, aby využívala tento modul.

Wikidata

editovat

Na Wikidatech je LocMapám věnována vlastnost mapa umístění (P1943), resp. fyzická mapa umístění (P1944), nicméně jediným ukládaným údajem je název souboru. Důležitý údaj souřadnic okrajů podporován není. Tento problém (v současné době řešitelný asi jen pomocí vymezení) by však mohl vyřešit příchod strukturovaných dat na Wikimedia Commons, na jejichž vývoji se na konci roku 2016 intenzivně pracovalo.