Jan Pytel, Aleš Čepek
Katedra mapování a kartografie, Stavební fakulta ČVUT
Thákurova 7,
166 29 Praha6
E - mail: pytel@gama.fsv.cvut.cz, cepek@fsv.cvut.cz
The article is aimed to introduce briefly project GNU Gama and data structures which are used in this project. The article is divided into four parts. First part contains basic informations about project GNU Gama. Second part is introduced into GNU Gama data structures, third part explain using of XML in the project. Last part is involved into project Rocinante.
Příspěvek se zabývá projektem GNU Gama a datovými strukturami v tomto projektu použitými. Je rozdělen do čtyř částí. První část obsahuje základní informace o projektu GNU Gama. Ve druhé části jsou představeny datové struktury, třetí část se zabývá použitím formátu XML v projektu. Poslední část je věnována projektu Rocinante.
Projekt GNU Gama je věnován vyrovnávání geodetických sítí, jde o GNU projekt a je proto volně šiřitelný, včetně zdrojových kódů, pod licencí GNU General Public Licence (GPL)
http://www.gnu.org/software/gama.
Začátky projektu GNU Gama se datují rokem 1998 a u zrodu stál Aleš Čepek z Katedry mapování a kartografie FSV ČVUT. Hlavní motivací pro vytvoření tohoto projektu byla snaha demonstrovat sílu a možnosti objektového programování. Počátky projektu jsou silně ovlivněny prací Františka Charamzy, zejména jeho výzkum na poli Gram-Schmidtovy ortogonalizace jako univerzální metody pro řešení úloh vyrovnávacího počtu.
V listopadu 2001 získal projekt GNU Gama oficiální statut GNU software
v oboru geodézie jde o první případ udělení statutu GNU pro aplikační software. Projekt je založen na C++ knihovně tříd pro vyrovnání a organizaci geodetických měření (maximální důraz je kladen na přenositelnost zdrojového kódu), součástí projektu je též C++ knihovna gmatvec pro práci s maticemi a vektory.
GNU Gama poskytuje kromě "klasického" vyrovnání sítí i řadu informací pro analýzu vyrovnané sítě. Vyrovnání měření řeší projekt GNU Gama přímým řešením rovnic oprav (ortogonalizační algoritmy SVD anebo GSO), tj. bez nutnosti sestavování tzv. normálních rovnic. Jako základní numerické metody pro řešení soustavy rovnic oprav se využívají algoritmy singulárního rozkladu (SVD), k dispozici je i Gram-Schmidtova ortogonalizace. Samozřejmostí je automatický výpočet přibližných souřadnic a iterativní zpřesnění výsledků vyrovnání (pokud je potřeba).
Projekt je rozdělen na dvě vývojové větve: stabilní a vývojovou.
Stabilní větev projektu je zaměřena na vyrovnání geodetických sítí v lokální soustavě (vzorem byl systém Geodet/PC vyvinutý ve VÚGTK Zdiby Ing. Františkem Charamzou, CSc.). V této větvi jsou podporovány následující typy měření: vodorovné směry a délky, vodorovné úhly, šikmé délky a zenitové úhly, výškové rozdíly, měřené souřadnice (souřadnice s kovarianční maticí) a měřené souřadnicové rozdíly (vektory).
Stabilní větev projektu GNU Gama je reprezentována konzolovým programem gama-local pro vyrovnání lokálních geodetických prostorových sítí. K dispozici je i platformově nezávislé grafické uživatelské rozhraní (GUI) rocinante, viz. dále.
Zdrojové kódy stabilní větve jsou přístupné přes CVS
cvs -d:pserver:anoncvs@subversions.gnu.org:/cvsroot/gama login cvs -z3 -d:pserver:anoncvs@subversions.gnu.org:/cvsroot/gama co -rgama-1-6 gama
Zatímco změny ve stabilní větvi projektu jsou zapříčiněny převážně opravami chyb, či malými úpravami, ve vývojové větvi se "aktivně pracuje".
Vývojová větev projektu je zaměřena na vyrovnání sítí v geocentrickém souřadnicovém systému (model vyrovnání na elipsoidu) a je reprezentována programem gama-g3 pro vyrovnání v globálním souřadnicovém systému na elipsoidu.
Zdrojové kódy vývojové větve jsou opět přístupné přes CVS
cvs -d:pserver:anoncvs@subversions.gnu.org:/cvsroot/gama login cvs -z3 -d:pserver:anoncvs@subversions.gnu.org:/cvsroot/gama co gama
Nosnou částí návrhu projektu GNU Gama je objektová realizace observačních dat vybudovaná na konceptu tzv. clusterů (z anglického slova cluster - hrozen). Koncept clusterů umožňuje spravovat (vyrovnávat) libovolné kombinace korelovaných (a samozřejmě též nekorelovaných) měření.
Pokud popíšeme cluster C++ terminologií, pak cluster je objekt obsahující seznam ukazatelů na objekty měření (směry, délky, úhly) a obsahující jednu kovarianční matici odpovídající daným měřením.
Vztah clusterů s ostatními objekty je znázorněn na obr. 1.
Obr č. 1 Datové struktury - použití koncepce clusterů
Váhy byly odstraněny z observací (bázová třída Observation) a nahrazeny ukazatelem na cluster ke kterému náleží. Všechny clustery jsou seskupeny v objektu ObservationData a každý cluster obsahuje ukazatel na tento objekt.
Observační datové struktury byly navrženy tak, aby umožňovaly jednoduchou implementaci nových observačních typů. Pokud chceme implementovat nový observační typ, je nutné pouze odvodit novou třídu z bázové třídy Observation a definovat několik virtuálních funkcí (např. virtuální funkci pro linearizaci), případně ještě odvodit vhodnou třídu z třídy Cluster. V současné době jsou podporovány následující typy měření:
Vývojová větev též nově obsahuje objektové schéma "Acyclic visitor", více informací o metodě "Acyclic visitor" viz. příspěvek Jana Pytla.
Vstupní data pro projekt GNU Gama jsou definována v souladu se standardem metajazyka Extended Markup Language (XML) pro popis strukturovaných dat
Data jsou popsána (podobně jako HTML) množinou uživatelem definovaných značek (párové značky <xxx> a </xxx> a nepárové značky <yyy />). XML dokument je tedy klasický textový soubor doplněný o tagy a pro jeho vytváření a následnou editaci je možno využít libovolný textový editor (autoři tohoto textu s oblibou používají [nejen] pro editaci XML dat editor GNU Emacs). Strukturu vstupních dat definuje formálně DTD (Document Type Definition), poskytující formální sadu pravidel pro definici strukturovaných dat. DTD pro projekt GNU Gama je přístupný na adrese
http://www.gnu.org/software/gama/gama-xml.dtd.
Pro analýzu XML vstupních dat je v projektu GNU Gama využit parser expat, napsaný Jamesem Clarkem
http://www.jclark.com/xml/expat.html.
Ve stabilní verzi věnované vyrovnání lokálních sítí bylo XML využito pouze pro popis vstupních dat, v nové verzi je plánováno využití XML i pro popis výstupních informací, tak by bylo možno snadno propojit vyrovnání poskytované projektem GNU Gama i pro jiné systémy.
Ukázka jednoduché sítě:
<?xml version="1.0" ?> <!DOCTYPE gama-xml SYSTEM "gama-xml.dtd"> <gama-xml version="2.0"> <network> <description> Frantisek Charamza: GEODET/PC, Prirucka uzivatele, Zdiby 1990 ------------------------------------------------------------------- priklad: stdev. 238, dodateb B varianta: trojuhelnik - pb / ob / ub jedna osnova o dvou smerech nahrazena uhlem </description> <parameters txt="trojuhelnik-2.txt" sigma-apr ="10" conf-pr="0.95" tol-abs="1000" sigma-act ="aposteriori" /> <points-observations> <point id= "1" y="644498.590" x="1054980.484" fix="xy" /> <point id= "2" y="643654.101" x="1054933.801" adj="XY" /> <point id="407" y="644025.978" x="1054821.167" adj="xy" /> <obs from="1"> <direction to="2" val="0.0000" stdev="10.0" /> <direction to="407" val="382.8182" stdev="10.0" /> <distance to="2" val="845.777" stdev="5.0" /> <distance to="407" val="498.750" stdev="5.0" /> </obs> <obs from="2"> <direction to="1" val="0.0000" stdev="10.0" /> <direction to="407" val="22.2376" stdev="10.0" /> <distance to="407" val="388.562" stdev="5.0" /> </obs> <obs from="407"> <angle to="1" rs="2" val="239.4204" stdev="14.142"/> </obs> </points-observations> </network> </gama-xml>
Při tvorbě vstupních dat pro projekt GNU Gama je nutná znalost metajazyka XML a vstupní dávky projektu GNU Gama, což je pro řadu potencionálních uživatelů problém. Právě tato skutečnost byla hlavním impulzem pro zahájení vývoje projektu Rocinante. Vývoj projektu Rocinante zahájil v létě 2001 student Jan Pytel a první beta verse byla k dispozici v prosinci téhož roku.
Projekt Rocinante je platformově nezávislé grafické uživatelské rozhraní (GUI) pro program gama-local, které je sířeno pod licencí GNU General Public Licence. Projekt Rocinante je napsán v programovacím jazyku C++ s využitím grafické knihovny Qt
http://www.trolltech.com/products/qt/index.html.
Domovská stránka projektu se nachází na adrese
http://sourceforge.net/projects/roci.
Na domovské stránce projektu se nachází zkompilovaný projekt ("binárky") pro platformy MS Windows a GNU/Linux. Zdrojové kódy aktuální verse projektu přístupné pouze přes CVS:
cvs -d:pserver:anonymous@cvs.roci.sourceforge.net:/cvsroot/roci login cvs -z3 -d:pserver:anonymous@cvs.roci.sourceforge.net:/cvsroot/roci co modulname
Práce v programu Rocinante je snadná a intuitivní. Veškeré operace s body či měřeními jsou uskutečňovány pomocí přehledných dialogových oken. Ukázka projektu Rocinante, viz. obrázek 2.
Obr č. 2 Ukázka projektu Rocinante
Základní rysy projektu Rocinante:
Více o projektu Rocinante viz. [4].
Projekt GNU Gama je používán ve výuce vybraných předmětů na studijním oboru geodézie a kartografie stavební fakulty ČVUT v Praze, probíhá též spolupráce se Západočeskou univerzitou v Plzni. Další vývoj projektu GNU Gama je v současnosti podporován tříletým grantem GA ČR. Projekt byl mezinárodní geodetické veřejnosti prezentován z rámci mezinárodní organizace zeměměřičů FIG (http://www.fig.net/).
Tento článek vznikl za podpory Grantové agentury České republiky při řešení projektu Vyrovnání a analýza geodetických měření, registrovaného pod číslem 205/03/0017 GA ČR.