Víceuživatelská tvorba kartografické mapy

Martin Čadík

cadikm@centrum.cz

Spustit víceuživatelský editor
Stáhnout celý projekt jako archiv ZIP
Stáhnout dokumentaci jako archiv ZIP

1. Zadání

Vytvořte jednoduchý editor umožňující současnou práci několika uživatelům nad jednou kartografickou mapou. Uživatelé si mohou rozdělit úlohy, např. jeden může vytvářet a editovat vodní toky, zatímco jiný zakresluje komunikace a mosty přes řeky. Mapa bude udržována v konzistentním stavu za pomoci systému DILEWA.

2. Řešení

Víceuživatelský editor kartografické mapy MapEdit byl implementován jako applet v jazyce Java v. 1.4.0 s využitím API Java2D a serveru Dilewa. V následujících odstavcích jsou popsány základní aspekty implementace a ovládání appletu. K dispozici je též programátorská dokumentace.

2.1 Implementace

Vzhledem k tomu, že byl systém implementován jako applet v jazyce Java, je možné jej spouštět v internetovém prohlížeči. Prohlížeč musí podporovat Javu2, tzn. je potřebný tzv. Java plug-in.

2.1.1 Program MapEdit

Program MapEdit se skládá z následujících tříd:

Třída EditPanel zajišťuje interakci s uživatelem a pomocí konstruktů Javy2D vykresluje editované prvky na kreslicí plochu. Všechny prvky jsou uschovávány v poli shapes (Vector), ze kterého je zobrazuje metoda paintComponent(Graphics g). Vlastní způsob vykreslení prvku je však definován přímo v příslušné třídě (Arc, Text, Wall), v metodách draw, drawFill, drawFillSelected), které metoda paintComponent pouze volá. Před vykreslením se ještě provádí transformace souřadnic podle měřítka definovaného ve třídě Transform.

2.1.2 Rozšíření pro více uživatelů

Pro podporu víceuživatelského editovaní je využíván mechanismus zobecněných proměnných v sytému DILEWA. Pro využití DILEWy je třeba vykonat následující kroky: Všechny tyto kroky zajišťuje metoda setUpDilewa() ve třídě MapEdit.

Po úspěšném přihlášení je již možné na server posílat hodnoty zobecněných proměnných. Vzhledem k tomu, že v programu MapEdit může uživatel vytvářet nové prvky, je třeba udržovat v zobecněné proměnné stav daného prku (vytvoření, změna, zrušení). Pro každý prvek existuje na serveru jedna proměnná. Př.: pro přímý úsek komunikace má tato proměnná následující strukturu:

Vlastní odeslání hodnoty této zobecněné proměnné na server zajišťuje metoda updateWallOnDilewa(int ID, int x1, int y1, int x2, int y2, int type, int thickness, int state). Tato metoda je volána z třídy EditPanel, která zajišťuje interakci s uživatelem, při vytváření nové, editaci existující, resp. rušení existující komunikace.

Příjem zobecněné proměnné ošetřuje metoda variableUpdated(DVariableEvent e), která nejprve ověří, zda se identifikace klienta neshoduje s vlastním identifikátorem. Pokud tomu tak není, prochází se seznam prvků shapes, dokud není nalezen příslušný prvek. V závislosti na položce state zobecněné proměnné je tento prvek zrušen, resp. změněna jeho poloha. Pokud daný prvek nalezen nebyl, je vytvořen nový.

Ve víceuživatelské části byly implementovány prvky rovného úseku komunikace, vodní toky a mosty. Obohacení o ostatní prvky jednouživatelské verze (text a obloukový úsek komunikace) lze řešit obdobně.


Ukázka aplikace MapEdit
Obrázek 1: Víceuživatelská tvorba kartografické mapy - program MapEdit

2.2 Ovládání programu

Uživatelské rozhraní programu MapEdit se skládá z kreslicí plochy a ovládacího panelu, viz obr. 1. Vlevo a nad kreslicí plochou jsou pro přehlednost umístěna měřítka, ovládací panel se nachází napravo od kreslicí plochy. Pod kreslicí plochou se nachází záložky, které umožňují práci v několika vrstvách. Tyto vrstvy nelze vzájemně kombinovat a nejsou podporovány ve víceuživatelském režimu. Pod ovládacím panelem se nachází textové pole, ve kterém jsou zobrazována hlášení při komunikaci se serverem Dilewa.

2.2.1 Editační režim

Do editačního režimu se přepneme zatrhnutím položky editace. V tomto režimu je možné pomocí tažení myší měnit polohu již nakreslených prvků na kreslicí ploše. Pravým tlačítkem lze nakreslené prvky smazat. Zvolený prvek je zobrazen zeleně a jeho vlastnosti (typ, šířku, délku apod.) indikují příslušné položky na ovládacím panelu.

2.2.2 Zadávací režim

Pokud položka editace není zaškrtnuta, nacházíme se v zadávacím režimu, kdy za pomocí stisku levého tlačítka myši a současného tažení kreslíme do mapy zvolený prvek. K dispozici je několik ukázkových prvků: přímý úsek silnice, obloukový úsek (zobrazeny červenou barvou), přímý úsek vodního toku (modrá barva), mosty (tmavě šedá barva) a text. U všech těchto prvků kromě textu lze nastavit šířku z několika nabízených možností. Pro přesnější zakreslování přímých úseků lze zapnout mřížku. Textová plocha pod panelem nástrojů zobrazuje informace týkající se komunikace programu se serverem Dilewa.

3. Závěr

V rámci této práce byla navržena a implmenentována aplikace pro víceuživatelskou tvorbu kartografické mapy MapEdit. Popisovaná aplikace je velmi jednoduchá, a proto se hodí spíše k demonstraci použití serveru DILEWA a prostředků jazyka Java pro editaci dvojrozměrné grafiky. Je zřejmé, že server DILEWA lze využít i pro svojí podstatou "nevirtuální", 2D aplikace.

Použití funkčně rozšířené verze aplikace by však bylo možné např. pro víceuživatelskou práci při plánování WAN sítí, inženýrských sítí apod. Další z možných aplikací by byla např. kooperativní tvorba předpovědní mapy, kdy na jedné předpovědní mapě může současně pracovat několik meteorologů.