Dr. Sárközy Ferenc: Térinformatika
Monday, August 09, 1999
A téma keretében megismerkedünk
Az
európai, de még inkább a magyar szabványok ismertetése elég sok nehézséggel
párosul, mivel az elfogadott dokumentumok csak pénzért vásárolhatók meg, e
mellett a magyar szabványok esetében, pénzért is csak a szabványok kis része
szerezhető be digitális formátumban. Ha ehhez még hozzátesszük, hogy szabvány
javaslatokkal, ismertető cikkekkel sem bővelkedik a hálózat úgy az olvasó is
beláthatja, hogy nem a szerző hibája, ha a következő ismertetés a korábbiakhoz
képest kissé halványabbra sikerül. Ez feltehetőleg összhangban van a szabvány
alkotók és terjesztők törekvéseivel is, hiszen ha azt akarnák, hogy a szabványt
széleskörűen ismerjék és használják, úgy gondoskodnának a könnyű hozzáférésről
és nagyobb publicitásról.
Az
ismertetésünk alapját képező dokumentum az MSZ 7771 számú szabvány 1996 03 20
dátumú tervezete [11] illetve Nikl István és dr. Kummert
Ágnes Magyar Térinformatikai adatcsere szabvány alkalmazása című előadása [12], mely sajnos ábrák nélkül az Interneten is
megtalálható. Magát a szabványt 1997 áprilisában fogadták el és információim
szerint nem sokban különbözik a hivatkozott tervezettől. A [12] előadás
tanúsága szerint az első alkalmazás az MSZ 7772-1 számú szabvány (népszerű
nevén DAT szabvány) szerint készülő digitális alaptérképek alkalmazási
sémájának elkészítése alapján ezeknek az állományoknak az átvitele volt.
Mielőtt a
szabvány részletes ismertetésére áttérnénk alá szeretnénk húzni, hogy a
szabvány csak magának az EXPRESS nyelvnek egy
szűkített halmazát használja, és nem él azokkal az eszközökkel, melyeket az
EXPRESS sémák adatokkal való feltöltésével nyerhető emberi vagy számítógépes
megértésre alkalmas modellek létrehozására alkalmaznak: az EXPRESS I nyelvvel
(1.2 fejezet), illetve a 2. 1 fejezetben található úgy nevezett Tiszta Szöveg
Kódolással.
|
5.63 ábra - az átviteli folyamat logikai vázlata
|
Az ábra igen gondos tanulmányozása alapján a következőképpen
képzelhetjük el az átviteli adatállomány létrehozási folyamatát:
-
a későbbiekben ismertetendő geometriai definíció
együttes azaz séma illetve a metaadat séma
felhasználásával a felhasználó elkészíti a kérdéses termék (pld. digitális
alaptérkép) a szabványban megadott elemekből álló szűkített EXPRESS nyelvű
sémáját. Ebben a sémában tehát már lehet hivatkozni a geometriai és metaadat
sémákban deklarált entitásokra, típusokra, stb.;
-
a nyelvi séma segítségével, ami tulajdonképpen nem
más mint a szűkített EXPRESS nyelv definiálása ugyancsak EXPRESS nyelven, az
alkalmazási sémából létrehozható az alkalmazás adatszótára, mely
nem más, mint az alkalmazási séma által használt típusok és entitások EXPRESS
nyelvi megfogalmazása. Az adatszótár a többi metaadattal együtt bekerül a
metaadat állományba;
-
a másik irányban az alkalmazási séma példányosításával (a benne
található elemeknek történő értékadással) létrejön az alkalmazás adatállománya;
-
az adatállomány kódolása alatt tulajdonképpen azt értik a szabvány
szerzői, hogy minden egyes adatelemet EXPRESS entitásként deklarálnak, megadva
az entitás attribútumai között eredeti, alkalmazási sémabeli nevét is;
-
az adatcsere séma a metaadatokból és kódolt
adatokból deklarálja az átviteli állományt;
-
a kódolási szabályok-ról a
szabványtervezetben részletek nem találhatók.
Amint már említettük az
alkalmazási séma csak szűkített EXPRESS nyelvi elemeket használhat, melyek a
következők: Egyszerű adattípusok, Gyűjtő adattípusok közül ARRAY,
LIST, BAG,
SET, a Felsorolási adattípus és a
SELECT adattípus, az
entitás deklarációban szerepelhetnek az attribútumok, inverz attribútumok,
levezetett attribútumok, a különbözőségi feltétel, a tartomány szabály az
altípus és szupertípus, a Séma deklaráció, Konstans deklaráció, Szabály
deklaráció, Függvény és Eljárás deklaráció, a REFERENCE
FROM utasítás csak a geometriai alsémára és
a külső fájl sémára utalhat.
A geometriai alséma
tulajdonképpen csak a vektoros modellre vonatkozik, mivel a tervezet
megjegyzése szerint: “A raszteres állományok adatcseréjénél a adatcsere a
raszter adatok szabványos formáját használja." Hogy hány szabványos raszteres
formátum van azt még e fejezet megírása után sem tudom, hogy mit ért ez alatt a
tervezet szerzője arról pedig fogalmam sincs.
Lássunk ezután néhány
geometriai meghatározást. A koordináta rendszer entitás a következőképpen van
deklarálva:
ENTITY set_of_coordinates;
SUBTYPE
OF (position_information);
x1: coordinate;
x2: coordinate;
x3: OPTIONAL coordinate;
refers_to: reference;
WHERE
DR1:
exists(x3) XOR (refers_to.dimension = 2);
END_ENTITY;
Amint
látjuk a DR1 szabály segítségével biztosítjuk a megfelelő dimenzió számot a
rendszer deklarációjában.
A
koordináta rendszer deklarálása után deklaráljuk az úgy nevezett geometriai
primitíveket azaz a pontot, vonalat és területet, illetve gyűjtő absztrakt
szupertípusukat:
ENTITY
geometric_primitive;
ABSTRACT SUPERTYPE OF (ONEOF(point, line, area));
is_part_of: SET[1:?] OF spatial_view; -- az elem térbeli nézetei
INVERSE
is_description_of: SET[0:?] OF structure_primitive
FOR is_described_by; -- vonatkozó topológiai alapelemek
END_ENTITY;
Ezután
rátérhetünk a pont, vonal és terület deklarálására:
ENTITY
point;
SUBTYPE OF (geometric_primitive);
has_position: set_of_coordinates; -- a pont térbeli helye
END_ENTITY;
TYPE
interpolation_method = ENUMERATION OF (shortest_way, circular_arc, Bspline);
END_TYPE;
TYPE
direction = REAL;
WHERE
(SELF
> -PI) AND (SELF <= PI);
END_TYPE;
ENTITY
line;
SUBTYPE OF (geometric_primitive);
has_position: LIST [2 : ?] OF set_of_coordinates;
interpolation: interpolation_method;
tangent_direction_at_first_end: OPTIONAL direction;
tangent_direction_at_last_end: OPTIONAL direction;
WHERE
IR1: ; -- innét hiányzik a szabály, hogy két egymást követő pont nem lehet azonos
IR2: ; -- hiányzó szabály a pontokra kötelező azonos referencia
rendszerről
END_ENTITY;
Érdekes
vonása a specifikációnak, hogy a vonal összeköttetésére különféle interpolációs
módszerek közül lehet választani (ez inkább rajzi mint térinformatikai opció).
A
területet külső és belső határokkal specifikálja a tervezet. A három hiányzó
szabály ebben az esetben:
-
IR1
azt köti ki hogy a külső és belső határok nem metszhetik vagy érinthetik
egymást,
-
IR2
a belső határokra írja elő ugyanezt,
-
IR3
pedig azt követeli meg hogy a belső határok ne legyenek egymásba ágyazva.
Ezek a szabályok, különösen az utolsó, sok valós
alkalmazás esetében problémát jelenthetnek, gondoljunk egy tóra, melyben egy
olyan sziget van, amelyen egy kisebb tó található.
ENTITY
area;
SUBTYPE OF (geometric_primitive);
has_outer_boundary: boundary; -- a külső határ
has_inner_boundary: SET [0:?] OF boundary; -- a lukak
határai
WHERE
IR1:
;
IR2: ;
IR3: ;
END_ENTITY;
ENTITY
boundary;
is_composed_of:
LIST [1:?] OF UNIQUE boundary_line;
INVERSE
is_outer_boundary:
SET [0:1] OF area FOR has_outer_boundary;
is_inner_boundary: SET [0:1]
OF area FOR has_inner_boundary;
WHERE
DR1:
SIZEOF (is_outer_boundary) + SIZEOF (is_inner_boundary)
=
1; -- a határ vagy belső
vagy külső, de nem lehet mindkettő
IR1: ; -- az
egyik határvonal végpontja = a következő határvonal kezdőponttal
IR2: ; -- a határ nem
metszheti önmagát
IR3: ; -- az első
határvonal kezdőpontja = az utolsó végpontjával
END_ENTITY;
Ezután
már csak a határokat alkotó határvonalak szorulnak meghatározásra, melyek bár
azonosak a már meghatározott vonalakkal, a szabvány szerzői szerint a területek
létrehozásában játszott szerepük miatt indokolt a külön entitásként történő
deklarációjuk.
ENTITY
boundary_line;
has_position: LIST
[2 : ?] OF set_of_coordinates;
interpolation: interpolation_method;
tangent_direction_at_first_end: OPTIONAL direction;
tangent_direction_at_last_end: OPTIONAL direction;
INVERSE
is_part_of: SET [1:1] OF boundary FOR
is_composed_of;
END_ENTITY;
A
geometria belső szerkezetét a topológiai alapelemek segítségével
lehet megadni. A szabvány az alapelemek három típusát határozza meg. Ezek a csomópont,
él és felület.
Itt
is először az absztrakt topológiai típust deklaráljuk, majd ezt követik az
alapelemek különböző válfajainak deklarálása.
ENTITY
structure_primitive;
ABSTRACT
SUPERTYPE OF (ONEOF (node, edge, face));
is_described_by: OPTIONAL SET [1:?] OF geometric_primitive;
is_part_of: SET [1:?] OF
spatial_view; -- a
topológiai elemek térbeli nézete
END_ENTITY;
Ezután
kerül sor a csomópont deklarálására. A szabvány megkülönbözteti az önálló
pontot és az összeköttetésekre (élekre) illeszkedő csomópontokat és mind a
kettőt csomópontnak (node) hívja. Az illeszkedő csomópontokat tovább
osztja vég- és közbenső csomópontra.
Ez
utóbbi felosztás nem konform a térinformatikában megszokott felosztással. Ott
ugyanis a csomópontokat a szerint osztályozzák, hogy hány ív illeszkedik rájuk
(ha egy – végpont, ha kettő közbenső pont (álcsomópont), ha pedig három vagy
több – elágazás), addig a szabvány szerint: “végcsomópont olyan kapcsolódó csomópont,
amely legalább egy él végpontjaként/kezdőpontjaként szerepel", azaz a szabvány szerinti
végcsomópont tulajdonképpen összefoglalja a térinformatika mindhárom csomópont
típusát, míg a szabvány szerinti közbenső csomópont “az a kapcsolódó csomópont, amely rajta van
az élen, de nem végpontja" a a térinformatikában nem létezik, mivel
ez legfeljebb töréspont, ami nem része a topológiának.
A
csomópont tehát altípusa a szerkezeti primitíveknek és főtípusa az említett két
pontosztálynak, míg az illeszkedő csomópont a végcsomópont és közbenső
csomópont főtípusa, azaz:
ENTITY
node;
SUBTYPE
OF (structure_primitive);
ABSTRACT SUPERTYPE OF (ONEOF
(connected_node, isolated_node);
END_ENTITY;
Ezután
deklaráljuk a két pontféleséget
ENTITY
isolated_node;
SUBTYPE OF (node);
is_within: SET
[0:?] OF face; -- a pontot
tartalmazó felületek halmaza
END_ENTITY;
ENTITY
connected_node;
SUBTYPE OF (node);
ABSTRACT SUPERTYPE OF
(terminating_node ANDOR intermediate_node);
END_ENTITY;
majd
az illeszkedő csomópont korábban már felvázolt altípusait
ENTITY
terminating_node;
SUBTYPE OF (connected_node);
INVERSE
is_start_node_of: SET [0:?] OF edge FOR starts_at -- az induló élek halmaza
is_end_node_of: SET [0:?] OF edge FOR ends_at – a végződő élek halmaza
WHERE
DR1: SIZEOF (is_start_node_of) + SIZEOF
(is_end_node_of) > 0;
END_ENTITY;
A
DR1 feltétel azt köti ki, hogy a pontra legalább egy él illeszkedjen.
ENTITY
intermediate_node;
SUBTYPE OF (connected_node);
Is_coincident_with: SET [1:?] OF edge; -- a pontra illeszkedő élek halmaza
END_ENTITY;
A
következő topológiai primitív az él, amit a térinformatika az
ARC/Info hatására inkább ívnek (arc) ismer. A
szabvány szerinti élek irányítottak, azaz kezdőpontjuk és végpontjuk nem
cserélhető fel. Az élek attribútumai között a kötelező kezdő és végcsomóponton
kívül opcionálisan szerepelhetnek még a jobb és baloldali területek (topológiai
értelemben lapok), külön - külön a kezdő és végcsomóponthoz csatlakozó
legközelebbi jobb és baloldali él, az élhez tartozó köztes csomópontok és azok
a gyűrűk, melyek tartalmazzák az élt. Mindez EXPRESS nyelven a következőképpen
néz ki:
ENTITY
edge;
starts_at: terminating_node; -- kiinduló csomópont
ends_at: terminating_node; -- végcsomópont
has_on_its_left: OPTIONAL SET [1:?] OF face; -- baloldali lapok
(poligonok)
has_on_its_right: OPTIONAL SET [1:?] OF face; -- jobboldali lapok
(poligonok)
next_right: OPTIONAL edge; -- a végpontból induló első jobboldali él
next_left: OPTIONAL edge; -- a végpontból induló első baloldali él
previous_right: OPTIONAL edge; -- a kezdőpontból induló első jobboldali
él
previous_left: OPTIONAL edge; -- a kezdőpontból induló első baloldali él
INVERSE
supports: SET [0:?] OF intermediate_node FOR
is_coincident_with; -- az
élen lévő köztes pontok halmaza
is_part_of: SET [0:?] OF ring FOR is_composed_of; -- az élet tartalmazó
gyűrűk halmaza
END_ENTITY;
Bár
ez a deklaráció a szokásosnál több topológiai kapcsolat rögzítését teszi
lehetővé nem teljesen világos, hogy mit ért a végpontból illetve a kezdőpontból
kiinduló legközelebbi baloldali és jobboldali éleken, illetve, hogy ezek a
jellemzők milyen adatszerkezet kedvéért kerültek be a szabványba.
A
következő szerkezeti primitív a lap – face, mely tulajdonképpen a
belső szigetekkel rendelkező poligon szabvány szerinti elnevezése.
ENTITY
face;
SUBTYPE
OF (structure_primitive);
has_outer_ring: OPTIONAL ring; -- külső határoló gyűrű
has_inner_ring: OPTIONAL SET [0:?] OF ring; -- sziget gyűrűk
halmaza
INVERSE
contains: SET
[0:?] OF isolated_node FOR
is_within; -- a felületen
lévő önálló pontok halmaza
is_on_the_left_of: SET [0:?] OF edge FOR
has_on_its_left; -- az élek melyektől a lap balra van
is_on_the_right_of: SET [0:?] OF edge
FOR has_on_its_right; -- az élek melyektől a lap jobbra van
WHERE
DR1:
SIZEOF (is_on_the_left_of) + SIZEOF
(is_on_the_right_of) > 0; –
a lapot minimum egy él határolja
END_ENTITY;
Az
utolsó topológiai elem az úgynevezett gyűrű – ring, mely leírja a
poligont illetve a belső szigeteket alkotó éleket. Figyeljük meg, hogy a lap
meghatározásához nem feltétlenül szükséges a gyűrű megléte, mivel az élek jobb
és baloldali lap attribútumaiból a poligont határoló élek sorozata
helyreállítható. Bizonyos adatszerkezetek azonban a feldolgozó szoftver
tehermentesítése érdekében ezt az entitást is tárolhatják. A fentiek miatt a
gyűrű már nem tartozik a szerkezeti primitívek főtipusába.
ENTITY
ring;
is_composed_of:
LIST [0:?] OF UNIQUE edge; --
az alkotó élek listája
INVERSE
is_the_outer_ring_of:
SET [0:?] OF face
FOR has_outer_ring; -- a lap
melynek külső gyűrűje
is_inner_ring_within: SET
[0:?] OF face FOR has_inner_ring; -- a lap melynek
belső gyűrűje
WHERE
DR1:
SIZEOF (is_the_outer_ring_of) + SIZEOF
(is_ inner_ring_within) = 1; --
a gyűrű vagy külső vagy belső
IR1:; -- hiányzó
szabály az egymás utáni élek kötelező kapcsolódásáról
END_ENTITY;
A
következő geometriai – topológiai entitás a térbeli nézet
tulajdonképpen a fedvény fogalom általánosítása. A topológiai alapelemekre
vonatkozó szabályok egy térbeli nézetre vonatkoznak. A térbeli nézet EXPRESS
deklarációja előtt még deklarálnunk kell a benne szereplő séma azonosító
típusát is.
TYPE
schema_id = STRING;
END_TYPE;
ENTITY
spatial_view;
conforming_to: schema_id; -- a vonatkozó séma azonosítója
INVERSE
has_geometric_parts: SET [0:?] OF geometric_primitive
FOR is_part OF; -- a
hozzátartozó geometriai elemek
has_structure_parts: SET [0:?] OF structure_primitive FOR
is_part OF; -- a hozzátartozó topológiai elemek
WHERE
DR1:
SIZEOF (has_geometric_parts) + SIZEOF
(has_structure_parts) > 0; --
egy típus egy alapeleme mindenképpen ; -- szükséges
END_ENTITY;
A
szabvány röviden összefoglalja az adatminőséget érintő
legfontosabb kérdéseket, utalva arra, hogy ezt a témát részletesen külön
szabvány fogja tárgyalni. A felsorolt témák a következők:
-
helyzeti
pontosság;
-
tematikus
pontosság;
-
időbeli
pontosság;
-
teljesség;
-
logikai
konzisztencia;
-
szöveghűség.
Hasonlóképpen
más szabvány lesz hivatott a metaadatok átfogó szabályozására,
ezért az ismertetett szabvány csak a legfontosabb metaadatokat foglalja össze,
de e mellett megadja a metaadat séma EXPRESS nyelvű leírását is.
A
szabványban található legfontosabb metaadatok a következők:
-
az
adathalmaz egyedi neve;
-
az
adathalmaz tartalmának rövid összefoglalása;
-
felhasználási
terület, szervezet, idő;
-
topológiai
típus;
-
térbeli
referencia rendszer (koordinátás vagy indirekt);
-
térképi
vetület;
-
magassági
referencia rendszer;
-
a
maximális és minimális koordináták;
-
határoló
poligon
-
közvetett
térbeli referencia rendszer típus;
-
a
terület földrajzi neve;
-
a
minimális és maximális magasság értékek;
-
időintervallum,
melyre az adatok vonatkoznak;
-
kapcsolattartó
személy adatai;
-
a
metaadatok létrehozási ideje, megtörtént és tervezett frissítésének időpontjai;
-
az
adatok hálózati címe.
Lássuk
ezután a kérdéses metaadat séma EXPRESS nyelvi megfogalmazását.
SCHEMA metadata;
USE FROM CoordinateSystem (set_of_coordinates); -- séma a 6. mellékletből
USE FROM data_encoding (dataset); -- kódolási séma 2. melléklet
TYPE conceptual_geometry_subschema = ENUMERATION OF
(spaghetti, network, planar_graph); -- 3 lehetséges elvi modell
END_TYPE;
TYPE extent_status = ENUMERATION OF (actual, future);
END_TYPE;
TYPE geometric_primitive_type = ENUMERATION OF
(point, line, area);
END_TYPE;
TYPE structure_primitive_type = ENUMERATION OF(node,
edge, face);
END_TYPE;
TYPE external_graphic_file_type = SELECT
(vector_file, raster_file);
END_TYPE; -- külső fájlok
átvitelére is van lehetőség a szabványban
TYPE raster_file = STRING;
END_TYPE;
TYPE vector_file = STRING;
END_TYPE;
ENTITY dataset_description;
SUBTYPE
OF (dataset);
dataset_title: STRING;
dataset_abstract: STRING;
purpose: STRING;
usage: STRING;
geometry_subschema_type: conceptual_geometry_subschema;
spatial_reference_system_info:
STRING;
has_extent: SET [1:?]
OF extent;
has_planar_extent: SET [1:?] OF
planar_extent;
has_contact_person: SET [1:?] OF contact_person;
entry_date: date;
last_update_date: date;
last_check_date: date;
on_line_access: STRING;
END_ENTITY;
ENTITY extent;
ABSTRACT
SUPERTYPE OF (ONEOF (planar_extent, vertical_extent, temporal_extent));
extent_date: date;
extent_status: extent_status;
END_ENTITY;
ENTITY bounding_xy;
SUBTYPE
OF (planar_extent);
min_xy: LIST OF UNIQUE set_of_coordinates;
max_xy: LIST OF UNIQUE set_of_coordinates;
END_ENTITY;
ENTITY bounding_area;
SUBTYPE
OF (planar_extent);
definition: LIST [3:?] OF set_of_coordinates;
END_ENTITY;
ENTITY geographic_area;
SUBTYPE
OF (planar_extent);
type_of_indirect_spat_ref_system: STRING;
areal_unit: SET [1:?] OF geographic_areal_unit;
END_ENTITY;
ENTITY geographic_areal_unit;
name: STRING;
code: STRING;
coverage: STRING;
INVERSE
geographic_areas: SET of geographic_area
FOR areal_unit;
END_ENTITY;
ENTITY vertical_extent;
SUBTYPE
OF (extent);
min_value: REAL;
max_value: REAL;
END_ENTITY;
ENTITY temporal_extent;
SUBTYPE
OF (extent);
from_date: date;
to_date: date;
END_ENTITY;
ENTITY contact_person;
name: STRING;
role: STRING;
organisation: STRING;
address: STRING;
telephon: STRING;
fax: STRING;
e_mail: STRING;
END_ENTITY;
END_SCHEMA;
A szabvány amint a
bevezetőben említettük több EXPRESS nyelven megfogalmazott sémát tartalmaz
mellékleteiben (Nyelvi séma – 1. melléklet, kódolási séma – 2. melléklet,
adatállomány átviteli séma – 3. melléklet, földrajzi helyzet sémák – 6.
melléklet, geometriai séma (az általunk is közölt geometriai és topológiai
elemek egy sémában összefoglalva) –7. melléklet és végül a közölt metaadat séma
– 8. melléklet.
Úgy gondoljuk, hogy
ahhoz, hogy a szabványról általános elképzelésünk legyen nem szükséges a többi
sémát is leírnunk, az érdeklődők a szabvány végleges változatát beszerezhetik a
Magyar Szabványügyi Testületben.
Amint a [12] irodalomból kitűnik a már említett DAT alkalmazási
sémához kapcsolódva elkészült már egy programozói segédlet is az adatcsere
állomány fogadását és előállítását szolgáló interfész kifejlesztéséhez.
Érdekes a cikk azon
megállapítása miszerint “ A GEOVIEW SYSTEMS kft gyakorlatban is kipróbálta az
adatcserét a szabvány logikáját követve (szemantikailag azonos,
szintaktikailag más)" (a kiemelés tőlem). Hogy ez a mondat valójában
mit jelent nagyon nehéz eldönteni, különösen egy olyan összefüggésben, ahol egy
adott formális nyelv alkalmazása van előírva. Ha a szintaktika más akkor a
nyelvi formalizmusok is mások és az átvitel nem a szabvány szerint valósul meg.
Összefoglalva megállapíthatjuk, hogy az ismertetett szabvány
széleskörű gyakorlati alkalmazása még várat magára.
-
a következő
részben megismerkedünk az OpenGIS koncepcióval
-
esetleg visszatérhet az előző részhez
-
illetve a tartalomjegyzékhez
Megjegyzéseit
E-mail-en várja a szerző: Dr Sárközy Ferenc