Hidrológiai Közlöny 1996 (76. évfolyam)
6. szám - Zsuffa András: Földrajzi hidrológiai atlasz szerkesztése
358 HIDROLÓGIAI KÖZLÖNY 1996. 76. ÉVI". 3. SZ.. Az egyetlen probléma, hogy mikor tekintünk két vízfolyást egymásba torkollónak Erre - az általunk alkalmazott koordinátás tárolás mellett - csak az euklideszi távolság kiszámítása alkalmas, ha ez kisebb egy adott értéknél, a pontot torkolatnak tekintjük. A programban ez az adott érték 0.005 . Megjegyzés: Mértékegységet szándékosan nem írunk, mivel a program sem használja. A hosszmértéknek azt tekintjük, amit az AutoCad-ben egységnek használtunk, azaz, ha a koordinátákat kilométerben adtuk meg, akkor a program is km-rel, illetve km 2-rel számol (általában ezt javasoljuk, de természetesen akár verszt-ben is lehet dolgozni). Arra azért oda kell figyelni, hogy a választott mértékegységek mellett a 0.005 érték képes legyen a torkolat egyértelmű azonosítására. A gyakorlatban azonban ez nem probléma, mert a vízhálózat (és a vízgyűjtőhatárok) tabletről történő bevitelénél is ki lehet (és a jelen rendszerben ki is kell) használni az AutoCad-nék azt a lehetőségét, hogy egy vonalat egy másik vonal végpontjába húzzon (ENDPOINT OF). Ekkor a két egyenes közös végpontjainak koordinátái az AutoCad numerikus felbontásán belül azonosak. A DXF formátum előállításakor a tizedesek számát meg kell adni, ahol a 0,005-nek megfelelően elegendő a 4, sőt akár a 3 tizedes is. A programnak természetesen itt az összes olyan vízfolyás-poligonon végig kell mennie, amelynek utolsó tagja 0 NLI értékkel zárul. Ezekhez kell a kapcsolódási pontokat megkeresni. A kapcsolódási pontok keresésekor viszont az összes többi poligon összes pontján végig kell menni, hiszen előre semmit sem tudunk a pont helyéről. Vízgyűjtő-határok esetén minden olyan pont, ahol legalább három határvonal találkozik, kapcsolódási pont. Itt nyilván egy kicsit más az algoritmus, hurokgráfról lévén szó. Azért, hogy az összes rész-vízgyűjtőt külön is kezelni tudjuk, minden határ-poligonnak kapcsolódási ponttól kapcsolódási pontig kell tartania. Ez nemcsak azt jelenti, hogy nem érhet véget egyik sem a 'levegőben", hanem azt is, hogy azt a poligont, amely közbülső pontként tartalmaz kapcsolódási pontot, abban a pontban meg kell szakítani és két külön poligonra kell bontani (a rész-vízgyűjtő kereső algoritmusnál ezt részletesen megindokoljuk). Külön beépítettünk egy ellenőrzést, ami azt nézi végig, hogy egy határ-poligon kezdőés végpontja egy-egy másik határ-poligon kezdő- vagy végpontja-e. Ezzel tudjuk biztosítani, hogy minden vízgyűjtő-határ zárt poligont alkot A program következő lépése még mindig az adat-előkészítéshez tartozik. Ebben a részben az immár folytonosan összekapcsolt vízfolyás-gráfot vízfolyás-szakaszokra osztjuk. Ezeket a szakaszokat szektor-oknak nevezzük. Szektornak tekintünk minden forrástól a legelső torkolatig, illetve torkolattól a következő torkolatig tartó folytonos vízfolyás-poligont. Ez azt is jelenti, hogy egy szektor vagy forrással kezdődik, vagy két másik szektor egybetorkollásával és mindig torkolattal zárul. Minden egyes szektorról tároljuk kezdőpontjának és végpontjának indexét a vízfolyáspontokat tartalmazó tömbben, a hosszát, a Schumm-Strahler algoritmus és a Shreeve algoritmus szerinti kategória értékét. A Schumm-Strahler és Shreeve kategória értékek meghatározása A most már szektorokra osztott vízfolyáspoligonokon lényegesen könnyebb a keresés. Végigmegyünk a szektorokon, minden egyes szektor kezdőpont indexét összehasonlítjuk az összes többi vízfolyáspont NLI értékével, s ha egyikkel sem egyezik (azaz semelyik poligonnak sem torkolati pontja), akkor forrás-pont. Az összes ilyen szektor Schumm-Strahler kategória értéke 1, a többié ekkor még 0. Ezután egy ciklus következik, amely végigmegy az összes 0 kategóriájú szektoron (ezek már biztos, hogy nem forrással kezdődnek, hanem két másik szektor egybetorkollásával). Megkeresi mindegyik szektorhoz a bele torkolló két másikat. Ha mindkettő kategória-száma különbözik 0-tól (azaz már megvan), akkor a SchummStrahler algoritmus szerint meghatározza az aktuális szektor kategória értékét. A ciklust mindaddig ismétli, amíg egyetlen 0 kategória értékű szakasz sem marad. A Shreeve algoritmus szerinti kategorizálás esetén a forrásoktól induló szektorok meghatározása ugyanígy történik, a többinél - az algoritmusnak megfelelően - a betorkolló szektor-értékek összege lesz az adott szektor Shreeve kategória értéke. Ezzel az adat-előkészítés befejeződött. A program megjeleníti a vízfolyásokat és az összes vízgyűjtő-határt. Tekintsük át a rendelkezésre álló funkciókat: /. Egy rész-vízgyűjtő adatainak értékelése Ehhez az egérrel rá kell kattintanunk a kérdéses részvízgyűjtő egyik belső pontjára. Ezután a programnak meg kell határoznia azt a legkisebb vízgyűjtőt, amely a pontot még tartalmazza. Ebben az algoritmusban annyi szépség van, hogy részletezzük: Először megkeresi a ponthoz legközelebb lévő határpontot az összes határpont és az adott pont euklideszi távolságának kiszámításával, majd visszagyalogol az indexek szerint a megtalált határ-poligon legelső pontjára. Ezzel megvan a vízgyűjtő-határ első vonala Elindul a vonal mentén a szakasz végéig. Itt elvileg akár kettőnél több felé is elágazhat a vízgyűjtő-határ, ezért a következő történik. Az utolsó egyenes szakasz (poligon-él) és a kiinduló többi határ-poligon első szakaszainak szögeit kiszámolja és kiválasztja közülük a legkisebbet és a legnagyobbat. Két vonalat kell tehát végigkövetni. Minden egyes újabb poligon csomópontban ezután az első poligon után eldöntött szöget kell venni (azaz az egyik esetben mindig legkisebbet, a másikban mindig a legnagyobbat). Három dolog biztos: 1. Mindkét vonalon visszajutunk egyszer a kiinduló poligon kezdőpontjába (hurok-gráf). 2. Az így kapott két zárt poligon egyike tartalmazza a megadott pontot.