Atlas - GIS s časovou dimenzí

Milan Šimůnek

student VŠE Praha

E-mail: xsimm16@vse.cz

Abstract

Object-oriented approach is one of the possible way of developing GIS applications and it is obvious that also in this area it can increase quality of design and functionality of these applications. Moreover it can help to find new and better solutions to old problems. System Atlas is a demonstration of using object-oriented approach in developing graphic-based application. The goal of this application is to demonstrate historical evolution of the empires and states by areas they occupy and animating changes of these areas due to wars, moving etc. This article consists of some problems they have to be solved during analysis and design of this applications. Object-oriented approach promote to develop a system capable to animate wide range of changing two-dimensional data.

Abstrakt

Objektový přístup může i v oblasti GIS pomoci při vytváření aplikací zvýšením kvality jejich návrhu a funkčnosti a v některých případech i použitím dříve netušených postupů a netradičních řešení. Jedním z těchto případů je i využití objektového přístupu při návrhu systému zobrazujícího vývoj rozlohy říší a států pomocí animací na mapě. V následujícím příspěvku jsou uvedeny některé problémy, které bylo při návrhu tohoto systému nutné řešit. Objektový přístup umožnil vytvořit systém, který se neomezuje pouze historické mapy, ale ve své obecnosti dokáže zpracovávat téměř libovolná dvoudimenzionální data měnící se v čase.

Úvod

Pokud si vezmeme do ruky některý z dějepisných atlasů znázorňujících rozlohu říší a států v určitém období, pozorujeme určité nedostatky, které snižují vypovídací schopnost těchto jinak velice zajímavých map. V prvé řadě se autoři kreseb snaží na jedné mapě znázornit hned několik okamžiků v historii dané říše - změnou barvy nebo šrafováním znázorňují dobytá nebo ztracená území. U některých map potom zcela ztrácíme přehled. Druhý nedostatek vyplývá z nedostatečného znázornění spojitosti mezi osudy civilizací, které, ačkoliv zeměpisně vzdálené, se ve svém vývoji ovlivňovaly. Jako příklad si můžeme uvést zdánlivě nevýznamnou sérii neúrodných let ve střední Asii, která donutila zde žijící kočovné kmeny k hledání nových prostorů pro život a vyvolala tak řetězovou reakci končící vpádem Hunů do Evropy.

          Cílem systému Atlas je odstranit tyto nedostatky a to jednak promítáním "filmů" s plynulou změnou rozloh států a dále možností zobrazit celé mapy (např. světa) pro ukázku globálních souvislostí ale zároveň i pouhých výřezů pro detail. Během tvorby programu bylo důsledně dbáno na to, aby jej bylo možné využít i v široké škále úloh zabývajících se změnou prostorových dat v čase. Kromě dějepisných aplikací různého tématického zaměření (dějiny Evropy, dějiny Prahy, postupné zavádění všeobecného volebního práva) můžeme znázorňovat například úroveň znečištění ovzduší podle jednotlivých měřících stanic a jejich "spádových" oblastí, průběh povodní a úrovně zatopení, ale i průběžné a konečné výsledky voleb podle jednotlivých volebních okrsků.

          Celý systém slouží jako nástroj, který tvůrcům tématicky zaměřených aplikací umožňuje zpracovat jejich časoprostorová data do přehledné formy. Vlastní data na mapě je možné integrovat se zvukovými komentáři, videosekvencemi a HTML stránkami automaticky spouštěnými a zobrazovanými během promítání změn na mapě. Program byl vytvořen podle původní metodiky OOMT, která vznikla na VŠE Praha [1]. Jedná se o metodiku kladoucí důraz na objektový přístup a maximální flexibilitu vytvářených systémů. OOMT vychází z obecné metodiky OMT od J. Rumbaugha a kol. [2], která byla následně upravena a rozšířena na základě vlastních zkušeností.

Východiska tvorby systému Atlas

V rámci grantu zaměřeného na zkoumání využití objektového přístupu při analýze a návrhu programových systémů jsme se jako jeden z pilotních projektů pokusili zanalyzovat problematiku zobrazování dvourozměrných oblastí a popis jejich změny v čase. Po skončení grantu bylo nerozumné nepokračovat dále v analýze a nepokusit se navrhnout a vytvořit systém, který by dokázal zobrazovat prostorové změny oblastí a znázorňovat tak například geografické změny v Evropě 20. století.

          Úvodní fáze analýzy předmětné oblasti byly v rámci grantu zpracovávány pomocí objektové metodiky OOMT, která byla později publikována v [1]. Použití této metodiky a objektového přístupu obecně se ukázalo velmi výhodné pro tento typ aplikace, a proto byla analýza i návrh systému dokončen pomocí této metodiky.

Objektová metodika OOMT

Použití objektového přístupu v praxi usnadňují metodiky, které řešitelům poskytují nástroje pro popis zkoumané oblasti a také návody, jak tyto nástroje používat. OOMT se snaží nabídnout různé typy těchto nástrojů, aby řešitel mohl použít vždy ty, které se pro daný charakter problému hodí nejvíce. V metodice se tak klade co největší důraz na samostatná rozhodnutí řešitele a předpokládá se, že je to právě on, kdo dokáže nejlépe posoudit, které kroky popisované v metodice je skutečně nutné provést a které je možné vynechat. Použití této metodiky tedy vyžaduje u řešitelů určité zkušenosti s analýzou a návrhem programových systémů a schopnost přirozeného použití objektového přístupu. Na druhou stranu však řešitele nikterak neomezuje i při použití nestandardních postupů řešení. Zároveň je součástí metodiky souhrn zkušeností z dříve řešených problémů, který umožní i začínajícím řešitelům používat OOMT a volit správné postupy podle charakteru problému.

Analýza

Fáze analýzy trvala u systému Atlas přibližně jeden rok. Během této doby byly řešeny základní problémy s reprezentací dat na mapě a zejména popisu jejich změny v čase. Zároveň musela být na závěr této fáze učiněna rozhodnutí pro zjednodušení celého problému, aby se stal za současného stavu hardwarového a programového vybavení řešitelným v rozumně krátkém čase.

Zadání

Jedním z prvním problémů, který musel být v této fázi řešen, byla přesná specifikace zadání systému, který chceme analyzovat. Jednoznačně určené zadání je klíčovým požadavkem pro každý projekt, který řešíme, a je nutné mu věnovat velkou pozornost. Při konzultacích nad obsahem zadání dochází k důležitému sbližování pohledů na vytvářený systém mezi zadavatelem a řešitelem. Sebemenší nesrovnalost mezi oběma pohledy může mít později za následek neúspěch v řešení celého projektu. Odstranění těchto nesrovnalostí v libovolné pozdější fázi řešení bude navíc vyžadovat čím dále více práce a vyšší náklady.

          Určitým specifikem systému Atlas bylo splynutí osob řešitele i zadavatele. Zde je význam přesného zadání ještě zdůrazněn nutností udržet projekt v zadaných mezích. Proto bylo původní zadání vytvořeno co nejjednodušší a později rozšiřováno o další prvky tak, aby výsledný systém uspokojil stále větší nároky na něj kladené:

Zadání systému Atlas: Vytvořit program pro grafickou reprezentaci rozlohy oblastí. Rozloha oblastí se v jednotlivých časových okamžicích v rámci časové osy mění. Tyto změny jsou popisovány akcemi. Mapa je konkrétním zobrazením rozlohy oblastí v daném časovém okamžiku. Oblasti se mohou sdružovat do celků, aby bylo možné znázorňovat například politické celky skládající se z více oblastí (Římská říše = Itálie, Galie, Dalmácie, Hispánie, ...). Sekvence je postupné zobrazování map pro po sobě následující časové okamžiky.

Popis změn v čase

Základním problémem analýzy bylo definování časové dimenze, v rámci které dochází ke změně rozlohy oblastí. V běžných aplikací GIS je v zásadě uchován pouze aktuální stav objektů v dvou- nebo trojrozměrném prostoru. Příkladem jsou mapy v GIS pro katastr nemovitostí. Pokud dojde ke změně parcel (například k jejich rozdělení nebo naopak spojení), je uvedená změna provedena i na mapě a v IS jsou opět údaje odpovídající realitě. V těchto systémech je pak hlavní důraz kladen na přesnost zachycení aktuální situace a od toho se odvíjejí i způsoby interní reprezentace dat.

          Naproti tomu v systému Atlas je hlavní důraz kladen na zachycení všech stavů, ve kterých se oblasti nacházely. Existují dvě možnosti jak zachytit všechny tyto stavy:

  1. Časové snímky mapy pro každý časový okamžik Pro každý časový okamžik je uchováván aktuální stav všech objektů na mapě podobně jako tomu je v GIS pro katastr nemovitostí pro jediný okamžik. Tento způsob je efektivní, pokud mezi jednotlivými časovými okamžiky dochází k velkému množství změn. Zároveň neklade žádné speciální nároky na interní reprezentaci dat a dokonce je možné, aby se tato reprezentace pro různé časové okamžiky lišila. Na druhou stranu je tento způsob velmi náročný na celkovou velikost uchovávaných dat.
  2. Inkrementální popis změn mezi dvěma časovými okamžiky Je definován počáteční stav objektů na mapě a zároveň existuje u každého časového okamžiku popis změn oproti předcházejícímu časovému okamžiku. Mapu pro daný časový okamžik získáme tak, že vezmeme počáteční stav a provedeme všechny změny od počátečního stavu až k tomuto okamžiku. Oproti předchozí variantě existují dodatečné režijní náklady na získání požadované mapy. Zároveň je nutné, aby interní reprezentace dat umožňovala snadné provádí operací typu přičtení/odečtení plochy k aktuálnímu tvaru oblasti, rozpad oblasti apod. Popis změn má však některé zásadní výhody:

Z uvedených důvodů je patrné, že zvolena byla varianta druhá a v dalších částech analýzy byly řešeny problémy s touto variantou související. Zároveň bylo rozhodnuto implementovat v případě nutnosti pomocné časové snímky (například vždy po 100 časových okamžicích) tak, aby při výpočtu mapy nemusely být prováděny všechny změny od počátečního stavu, ale byl použit nejbližší pomocný časový snímek.

Interní reprezentace dat

Existují v zásadě dva způsoby jak reprezentovat grafická data. Buď použijeme vektorovou reprezentaci, kdy všechna data skládáme z geometrických útvarů (úsečka, kruh apod.), nebo zvolíme reprezentaci rastrovou, kdy pracujeme pouze s bodem a všechna data zobrazujeme jako množinu různobarevných bodů umístěných do rastru (pravoúhlé mřížky). Případně je možné oba způsoby kombinovat s tím, že rastrové obrázky se používají jako textury vyplňující plochu vektorově určených objektů apod. Shrňme si nyní krátce výhody a nevýhody obou způsobů:

Realizace změny rozlohy oblastí

Při použití vektorové reprezentace bychom vytvořili systém, který by nalezl uplatnění v mnoha oblastech - např. ve výše zmiňovaných katastrálních úřadech, které by mohly ve svých GIS snadno získat přesný obraz parcel pro libovolný časový okamžik. Zatím se však ukazuje, že vektorová reprezentace přináší téměř neřešitelné komplikace při interní reprezentaci dat a efektivním provádění změny oblasti mezi časovými okamžiky:

Po určitém čase stráveném snahou o použití vektorové reprezentace byla zvolena reprezentace rastrová jako dočasné řešení s tím, že na implementaci vektorové reprezentace se nadále pracuje. K tomu vedla jednak snaha o vytvoření funkční verze systému a také fakt, že pro reprezentaci historických oblastí (které tvoří hlavní účel systému Atlas) není rozhodující absolutní přesnost, protože samotné historické prameny nejsou nikterak přesné. (V současné době neznáme ani přibližnou polohu oblasti, ve které původně žili Slované před velkým stěhováním národů, natož její přesný tvar. Stejně tak neexistovaly přesné hranice království a knížectví ve středověku. Přesné určování hranic je výsadou až 20. století.)

          Při použití rastrového reprezentace oblastí je možné vytvořit optimalizované funkce pro přičtení/odečtení plochy popisující změnu rozlohy oblasti apod. Tím je možné, spolu s mechanismem pomocných časových snímků popsaným výše, docílit téměř okamžité odezvy v podobě vytvořené mapy pro zvolený časový okamžik.

Rozdělení na subsystémy

Pro další analýzu byl systém Atlas rozdělen na dva subsystémy - prohlížení a editace. První subsystém se zabývá pouze zobrazování map a sekvencí na základě již vytvořených popisů změn a druhý tvorbou těchto popisů. Je nutné říci, že právě tvorba popisů změn je stěžejní částí celého systému.

Prvky na mapě

Pro další výklad je nezbytné, abychom se seznámili s některými pojmy. Jedná se zejména o tzv. prvky mapy. Pod prvkem mapy si můžeme představit vše, co se může na mapě objevit. Je to (mimo jiné) oblast, celek a akce.

          Jako základním stavebním kamenem mapy byla zvolena oblast. Může se jednat o jakékoliv území, které chceme v daném kontextu odlišovat. Oblastí může být historicky významné území - např. Halič v aplikaci zobrazující vývoj první světové války nebo Malá Strana v aplikaci o vývoji Prahy. Oblast může patřit do některého celku. Během své existence může oblast dokonce patřit postupně do několika celků - nikdy však nemůže patřit do více celků najednou. Celky tedy agregují oblasti z důvodu existence států složených z více oddělených oblastí - např. Italské království se na začátku 20. století skládá z těchto oblastí: Itálie, Sicílie a Sardinie - nebo proto, že chceme vyjádřit složení většího celku z menších částí - např. Obvod Praha 10 (celek) se po roce 1974 skládá z mnoha městských částí (oblastí): Strašnice, Štěrboholy, Uhříněves atd.

Posledním prvkem mapy jsou akce. Ty popisují změnu rozlohy území oblasti nebo celku. Může se jednat o zvětšení území na úkor jiného státu, vznik nového státu apod. Akce jsou narozdíl od oblastí a celků na mapě vyznačeny šrafováním. Při zvětšování území je šrafování v barvě zvětšované oblasti nebo celku. Při zmenšování je barva shodná s barvou podkladu mapy. Akce však nemusí znamenat změnu rozlohy oblasti nebo celku na mapě. Může vyjadřovat změnu názvu oblasti/celku nebo pouhé textové vyjádření události, která se v daný okamžik stala - 1966: V pražské železniční dopravě vyřazeny z provozu parní lokomotivy. V množině dostupných akcí je tedy skryta veškerá funkčnost systému týkající se změn mezi jednotlivými časovými okamžiky. Objektový přístup umožňuje vytvářet celou hierarchii těchto akcí, kde na principu dědičnosti a specializace vytváříme nové akce - Dobytí území není nic jiného než využití dvou akcí odvozených od základní třídy CAkceOblast a to Zmenšení území (dobývané oblasti) a Zvětšení území (dobyvatele).

Reprezentace prvků mapy

Každý prvek je na mapě reprezentován svým obrazem. Důsledné odlišení prvku od jeho obrazu je jeden z nejvýznamnějších přínosů rok prováděné analýzy. Při zpětném pohledu se může zdát, že se jedná o naprostou samozřejmost, ale není tomu tak. Při vyslovení pojmu "oblast" nebo "území" si většina z nás představí barevně odlišenou plochu na mapě - např. Československo. Problémem však je, že někdo si představí Československo tak, jak vypadalo v roce 1992, a někdo tak, jak vypadalo při svém vzniku v roce 1918. Jedná se stále o to samé Československo (pokud nebereme v úvahu období 2. světové války), ale jeho Obraz se v průběhu času mění. Během analýzy byl intuitivně tento "vývoj" oblasti chápán, ale tím, že existovala pouze jediná entita Oblast, docházelo k nekonzistentním úvahám - jednou byla entita Oblast považována za něco, co existuje stále (jako Československo ve své podstatě), a podruhé jako obraz Československa v určitý časový okamžik. Z tohoto důvodu budeme v následujícím textu odlišovat Oblast jako entitu popisující existenci nějakého území a Obraz jako entitu popisující Oblast v daný časový okamžik (zejména její plochu, ale také např. barvu, příslušnost k celku apod.).

Objektový design

Během objektového designu se provádí úprava rozhodnutí provedených v analýze vzhledem k implementačnímu prostředí. Zvoleno bylo 32-bitové prostředí Windows - tedy Windows NT a Windows95. U graficky orientované aplikace jako je Atlas bylo především nutné optimalizovat způsob vykreslování mapy a dále nároky na velikost zabíraného místa u dat popisujících změny na mapě.

Kreslení mapy

Hlavní část práce s programem bude uživatel manipulovat s mapou. Proto bylo nutné velmi dobře rozmyslet způsob uchování informací o obrazech a způsob jejich vykreslování s ohledem na další optimalizaci tohoto procesu.

Rastr a vrstvy mapy

Jak již bylo řečeno, byl zvolen rastrový způsob definice plochy obrazu. To však ještě neznamená, že i vykreslování ploch bude probíhat rastrově. Vykreslování by mohlo probíhat např. pomocí Beziérových křivek, jejichž řídící body by byly ve vrcholech hraničních čtverců plochy. Tento způsob vykreslování by však přinášel některé potíže - např. vyplňování nakreslených ploch, ošetření dotyku více ploch v jednom bodě apod. Z tohoto důvodu bylo rozhodnuto, že i vykreslování bude probíhat rastrově.

          Nejmenší jednotkou pro kreslení byl určen čtverec. Šířka a výška mapy je udána počtem čtverců na šířku a na výšku. Čtverec na dané pozici může být prázdný nebo patřit některému obrazu. Pouze z důvodů optimalizace bylo vytvořeno dvourozměrné pole o stejných rozměrech jako je šířka a výška mapy obsahující odkazy na obrazy nebo hodnotu NULL, v případě, že je čtverec prázdný. Potom je velmi snadné určit, který obraz je na dané pozici, aniž bychom museli prohledávat všechny obrazy a kontrolovat plochu, kterou zabírají.

          V předcházejícím odstavci jsme počítali s tím, že v daném čtverci může být maximálně jeden obraz. Situace se poněkud zkomplikuje, když si uvědomíme, že máme více druhů prvků mapy. Kromě oblastí, celků a akcí, o kterých jsme se zmínili již dříve, existuje ještě pozadí a podklad. Pomocí pozadí se definují neměnná území nebo oblasti (např. moře nebo kontinenty). Podklad slouží pouze pro definici barvy podkladu mapy. Na jednom čtverci mapy potom může ve stejný okamžik být jak oblast a z toho i vyplývající celek (do kterého tato oblast patří), tak i akce znázorňující např. dobytí tohoto čtverce jiným státem). Na tom samém čtverci může být nakonec i pozadí. Vidíme, že na jednom čtverci může být najednou i více obrazů a my musíme vědět o každém z nich. Z tohoto důvodu se definice mapy skládá z několika vrstev, z nichž každá obsahuje dvourozměrné pole odkazů.

Kreslení prvků mapy

Při kreslení prvků mapy musíme mít na paměti, že prvky jsou umístěny v několika vrstvách ??oblasti překrývají pozadí a podklad; akce jsou vždy viditelné apod. Dále si musíme uvědomit, určitá specifika kreslení pomocí GDI ve Windows, která byla zvolena jako implementační prostředí.

Výsledkem je způsob vykreslování, při kterém používáme rastry v jednotlivých vrstvách a hledáme první neprázdný čtverec ve vrstvě ve směru "od" uživatele. Nalezenou vrstvou může být i podklad, který zde slouží jako zarážka. Po nalezení neprázdného čtverce postupujeme po řádku až do čtverce, který je prázdný nebo se neprázdný čtverec vyskytl ve vyšší vrstvě.

Zaoblení rohů

Jednou z nevýhod použitého rastrového zobrazení ploch je jejich velká "hranatost" zvláště při zvětšení měřítka mapy. Pokud bychom zvýšili horizontální a vertikální rozměry rastru, dosáhli

bychom (podobně jako u monitoru) lepšího rozlišení. To by však bylo vykoupeno neúměrně zvýšenými nároky na výkon a kapacitu počítače.

          Možností, jak tento problém vyřešit, je opticky zvětšit rozlišení tím, že za nejmenší obrazovou jednotku nebudeme považovat čtverec, ale jeho část. Pomocí několika jednoduchých principů pro dopočítání barvy různých částí hraničních čtverců dosáhneme optického zvětšení rozlišení, aniž bychom museli zvyšovat rozlišení skutečné.

          Na obrázku si můžeme prohlédnout princip tohoto "zaoblení" rohů. Pokud mají dvě plochy společnou hranici, která není svislá nebo vodorovná, bude vlivem malého rozlišení část plochy A patřit do plochy B a naopak. Rozdíl je patrný na ukázce původního obrazu a ideálního tvaru. Naším úkolem bude vybarvit co nejvíce bodů kolem hranice barvou oblasti, do které skutečně patří.

Nejvíce přesným způsobem by bylo rozdělit čtverec na čtyři menší a použít diagonály v těchto malých čtvercích. Kreslení šikmých čar však bývá velmi pomalé. Proto lze s jistou mírou zkreslení použít opakované dělení menších čtverců na čtyři ještě menší a vyplňovat ty, které jsou celou svou plochou pod resp. nad diagonálou. Pro každou velikost hlavního čtverce (v obrazovkových bodech) lze určit počet malých čtverců, které jsou nutné pro opticky postačující vyplnění, jak je vidět na dalším obrázku.

Kreslení hranic

Kreslení hranic mezi obrazy je další časově náročnou operací. Nakreslením hranice rozumíme vykreslením čáry kolem obrysu dané plochy. Pro její vykreslení potřebujeme tento obrys znát. Možností, ale velmi časově náročnou, by bylo vyhledávat hrany v popisu plochy. Tím, že jsme vytvořili pomocné pole odkazů (rastr), jsme situaci značně zjednodušili: chceme-li pro daný čtverec zjistit, která jeho strana je hraniční, stačí porovnat odkaz na pozici čtverce s odkazy na pozici všech jeho sousedních čtverců. Pokud bychom však nakreslili čáru všude tam, kde odkaz v jednom čtverci je rozdílný od odkazu ve čtverci druhém, byly by hranice zdvojeny nebo by se minimálně každá čára kreslila dvakrát. Příčinou je fakt, že relace "mít hranici s" je symetrická. Proto bude stačit, když každý čtverec bude mít "na starost" např. pouze hranici nalevo a nahoru od něj. Sníží se tak počet vykreslovaných čar a také i počet potřebných testů.

Kreslení hranic a zaoblení rohů

V oddíle o kreslení prvků mapy jsme si vysvětlili princip a výhody zaoblování rohů. Nyní jsme však nuceni upravit i vykreslování hranic. Kdybychom totiž kreslili hranice i nadále pouze podle čtverců, ztratili bychom úplně výhodu zaoblování rohů a navíc by odlišně barevné body uvnitř hranic plochy působily rušivě (jak je vidět na obrázku). Proto je nutné v místech, kde kreslíme zaoblené rohy, zaoblit i hraniční čáru. Pro zaoblení postačí kreslení hranice po diagonále malého čtverce. Rozdíl mezi diagonálou a vyplňováním pomocí malých barevných čtverců o dostatečně malém kroku není téměř patrný a nepůsobí již rušivě.

Odborná literatura

[1] Drbal P. a spolupracovníci: OOMT, Objektově orientované metodiky a technologie. Skripta, Vysoká škola ekonomická, Praha, 1997

[2] Rumbaugh J., Blaha M., Premerlani W., Eddy F., Lorensen W.: Object-Oriented Modeling and Design. Prentice-Hall International Editions, 1991