Geoinformatika a környezetvédelemben
1
7. Táblázatok összekapcsolása és lekérdezés attribútumok alapján Feladatunk az, hogy az megtanuljuk, hogyan lehet a digitalizált adatokhoz külső adatforrásban már meglévő adatokat illeszteni és ezekből lekérdezéseket végezni. Ebben a gyakorlatban:
megtanuljuk, hogyan kell összefűzni az általunk digitalizált adatokhoz a külső forrásból származó adatokat, megtanuljuk, mit jelent a lekérdezés, ezen belül pedig az attribútumok alapján való lekérdezés, megtanuljuk, a VAGY és ÉS műveletek közötti különbséget.
A gyakorlat keretében hozzunk létre egy pontfedvényt, a neve legyen terkep.shp. A fedvényen hozzunk létre 20 pontot tetszőlegesen, ügyelve arra, hogy az ID mező legyen kitöltve. Következő lépésben az MS Excelben hozzunk létre egy 20 rekordból álló táblázatot adat.xls néven. Az első oszlop neve legyen ID, majd további 3 oszlopban (Adat1, Adat2 és Adat3) írjunk be tetszőleges adatokat 0 és 100 között. A feladat során az ArcViewban készített pontfedvényt fogjuk összefűzni az Excelben készített adatbázisunkkal. Ehhez a legfontosabb feltétel az, hogy mindkét táblázatban kell, hogy legyen egy olyan oszlop, mely egyedileg azonosítja az egyes rekordokat. Ez lesz az alapja minden további lépésnek, ezért nagyon fontos, hogy ezek az azonosítók (ID-k) hibátlanok legyenek. Mostani példánkban nehéz hibázni és igaz ez a legtöbb olyan esetre, amikor mi magunk állítjuk elő a térképet is és a külső adatbázist is. Sokszor adódhat azonban olyan probléma, mely már meglévő adatbázisok használatára „kényszerít” minket. A kényszer valójában nem kényszer, inkább segítség, mivel a már meglévő adatok használata mentesít minket az adatbevitel hosszadalmas művelete alól. Ilyenkor tehát előre adottak a feltételek és ha olyan ember készítette, aki nem készítette fel ezeket az adatbázisokat arra, hogy térben is megjelenítse az adatokat, akkor a hibalehetőség nagy. Vegyünk példának egy olyan feladatot, amikor több településen végzett valaki kérdőívezést (legyen pl. az ábrázolandó változó Hajdú-Bihar megye településeinek lakosságszáma) és csak a településnév van megadva a sorokban. Nekünk van egy településeket tartalmazó fedvényünk, de településnévvel nem tudjuk összefűzni az adatokkal, mivel a fájlkonverzió során nem jönnek át hibátlanul a településnevek az ékezetek miatt. A megoldást a KSH kódok jelenthetik, melyek számként elvileg nem okozhatnak fejtörést, de észre kell vennünk, hogy ez nem így van. A lehetséges hibaforrások: - Az Excel sajnos megenged „általános” formátumú cellákat, így akár szövegtípusú oszlopként is átjöhetnek az adatok. Ezen tudunk segíteni utólag is (erről egy
Geoinformatika a környezetvédelemben
2
későbbi órán beszélünk), de jobb mindjárt az elején rendbe tenni mindent: az Excelben a Formátum/Cellák menüpont alatt állítsuk be minden szám formátumú oszlopra a szám típust. - A KSH kódok 4, vagy 5 jegyű számok és előfordul, hogy a 4 jegyűek elé írnak egy 0-át (nullát), hogy egységes legyen a megjelenés, ez azonban biztosan nem szám formátumú adat, az előzőkben ismertetett műveletet kell elvégezni rajta. - A harmadik ok abból adódhat, hogy nincs meg minden adat térképi megfelelője, vagy fordítva. Ezt okozhatja az, hogy a) az adat hiányzik, b) hibás az adatbázis elgépelés miatt, c) valami nincs rendben. Utóbbi esetre példa lehet, hogy a térképen a települések szétválása, önállósodása miatt kevesebb települést tartunk nyilván, mint amennyi településről kérdőívünk van. Ezeket a hibákat meg kell keresni, ami akár hosszú időt is igénybe vehet. A táblázatok összefűzését az ArcView úgy végzi, hogy az első egyezés alapján összekapcsolja a rekordokat és ha ugyanazzal a kóddal még van adat, azokat elhagyja. Ha nincs párosítható adat, akkor a rekord azon része üres marad. Utóbbi esetben tehát könnyen azonosíthatjuk a hibát (mert az üres sor jól látszik), de ha az első adat nem a jó adat volt, akkor egy több ezres adatbázisból sokáig el lehet vele bíbelődni. Most végezzük el az összefűzést. Olvassuk be az Excel állományt ArcView-ba. Az ArcView nem tudja közvetlenül olvasni az Excel (és sok más egyéb szoftver specifikus) állományait, ezért vagy DBase (*.dbf), vagy tabulátorral tagolt szövegként (*.txt) formátumban kell a táblázatot elmenteni. Utóbbi esetében hiába formázzuk a cellákat, az exportálás során ez elveszik, azonban míg (számomra valamilyen rejtélyes okból) a DBase formátumú konverzió időnként nem sikerül, a text formátum mindig sikeres. Most formázzuk az oszlopokat EXCEL-ben szám formátumra a korábbiakban leírt módon. A File – Mentés másként menüpont alatt mentsük el DBase IV formátumban, a neve legyen adat.dbf. A következő lépéseket már ArcView-ban kell végezni, a navigátor ablakban a Tables ikonra kattintunk (7-1. ábra), majd az Add gombot nyomjuk meg. Ekkor be tudjuk olvasni a táblázatot. Következő lépésben nyissuk meg a terkep.shp állomány táblázatát. A két táblázat ekkor összefűzhető.
7-1. ábra. A navigátor ablak táblázatokhoz tartozó megjelenése
Geoinformatika a környezetvédelemben
3
A szoftvernek meg kell mutatnunk, hogy mely oszlopok alapján akarjuk elvégezni az összefűzést, nyomjuk meg a táblázatban a megfelelő oszlop nevét tartalmazó szürke sort (fejlécet). Mindkét táblázatban ki kell jelölni az ID oszlopot, de a sorrend nagyon fontos: alkalmazzuk az „ezt ehhez” elvet, tehát előbb a külső forrásból származó, utána a térképhez tartozó táblázatban kell kijelölni az azonosító oszlopokat (7-2. ábra).
7-2. ábra. Az összefűzésre váró táblázatok erre a célra kijelölt oszlopokkal Ezután aktívvá válik a egyesül (7-3. ábra).
(Join Tables) gomb, melyet lenyomva a két táblázat
Az eredmény a bal oldali ábrán látható, most már (látszólag) a terkep.shp állomány leíró adatai közé kerültek a külső adatok. Azért jegyeztem meg zárójelben, hogy mindez csak látszólagos, mert ebben a formában csak erre az alkalomra egyesült a két táblázat. A megőrzésre van egy fél- és egy teljes megoldás. A félmegoldás az, hogy ha most lementjük az egészet egy project 7-3. Az összefűzött táblázat (*.apr) fájlként, akkor nem kell újra egyesíteni a fájlokat, de nem válik hordozhatóvá a fájl (vagy csak nagyon körülményesen). A teljes megoldás az, hogy a Theme – Convert to Shapefile menüponttal egy új *.shp fájlt hozunk létre, amiben már saját adatként kezelhetők a korábban még külső adatok. A továbbiakban megtanuljuk, hogyan lehet az adatokat lekérdezni attribútumaik alapján. A lekérdezés azt jelenti, hogy igényeimnek megfelelően megfogalmazok a szoftver operátorait felhasználva egy feltételt, vagy több feltételből álló feltételrendszert és azok az objektumok, melyek eleget tesznek ezeknek, kijelölésre kerülnek.
Geoinformatika a környezetvédelemben
4
Ebben a feladatban visszatérünk a korábbiakban is használt uscities.shp (USA városai) állományhoz, amit egy új View ablakban nyissunk meg. Ügyeljünk rá, hogy a megnyitott fedvény egyúttal legyen aktív téma is. A Theme – Query paranccsal tudjuk elérni a lekérdezés párbeszédablakát (7-4. ábra). A bal oldali sávban a táblázat oszlopainak neve látható egymás alatt, középen az operátorok, jobbra pedig a táblázat adott oszlopának értékei. A bal és jobb oldalon mindig dupla kattintásra, középen egy szimpla 7-4. ábra. A lekérdezés (Query) ablak kattintásra van szükség az egérrel a kifejezés összerakásához. Egyszerűbb kifejezéseknél jó tanács, hogy amennyiben elrontjuk a műveletet, a legjobb bezárni a párbeszéd ablakot és elölről kezdeni az egészet, ugyanis a zárójelek, műveleti jelek stb. kitétele, alkalmazása elég kötött és könnyen hibaüzenetet kaphatunk. Ez bonyolult műveleteknél (több szempontos kifejezés) már nem segít, ilyenkor hibaüzenet esetén csak a kifejezés gondos átvizsgálása segít. Segítségként néhány alapelv: - []: a táblázat oszlopa kerül a szögletes zárójelek közé; - (): adott műveletet kell zárójelbe tenni; - az AND és OR operátorok automatikusan kitesznek egy „)” zárójelet, tehát nekünk nem kell - minden megkezdett zárójelet be is kell zárni. Az ArcView számos lehetőséget biztosít minden típusú adat lekérdezésére. Most először állítsunk össze egy egyszerű lekérdezést, melyben azokat a városokat válogatjuk le, melyek fővárosok. Szöveges kategória adatokról van szó, vagyis behatárolható mennyiségű adatról, melyek lekérdezése (értelmesen) csak egyenlőséggel oldható meg. Rakjuk össze a következő kifejezést: ( [Capital] = "Y" ), majd nyomjuk meg a New Set gombot. Ezzel kijelöltük a fővárosokat. Ha szeretnénk a lekérdezés eredményét (vagyis csak a fővárosokat) egy külön fájlba lementeni, akkor a megszokott Theme - Convert to Shape file paranccsal tudjuk megtenni. Szöveg típusú adatokból is lehet többféle lekérdezést végezni. Azt már láttuk, hogy miként működik az egyféle adatra való lekérdezés. Nézzük meg, milyen lehetőségek vannak még.
Geoinformatika a környezetvédelemben
-
-
-
5
használjuk a * jelet több karakter helyettesítő jeleként: ( [City_name] = "ab*" ) ezzel az összes ab-bal kezdődő városokat válogattuk le, vagy ( [City_name] = "*st" ) ami az st-re végződő városokat válogatja le; (megjegyzem, hogy Windows operációs rendszer alatt nincs különbség a kis és nagybetűk között, ezért nem erőltetettem a nagybetűs megoldást a kifejezésben); egy karakter helyettesítésére használjuk a „?” jelet: ( [City_name] = "?ashington" ) a kifejezés leválogatja az összes olyan szót, ami ashingtonra végződik és csak egyetlen karakter van előtte; használhatjuk a kisebb-nagyobb operátorokat az ABC-betűrend szerint: pl a ( [City_name] >= "s" ) kifejezés alapján az összes s betűs és az ábécében utána következő város kerül kijelölésre.
Metrikus adatok lekérdezése az egyenlőségen kívül megkívánhatja a kisebb, kisebb egyenlő, nagyobb, nagyobb egyenlő operátorok használatát is. Most válogassuk le azokat a városokat, melyek lakossága nagyobb, mint 100000. Rakjuk össze a következő kifejezést: ( [Pop1990] < 100000 ). A számot bizonyos esetekben kiválaszthatjuk a listából is, de ha nincs olyan érték a táblázatban, ami nekünk kell, akkor be kell írni magunktól. Ez egyébként is könnyebb és gyorsabb megoldás, mint keresgélni. Próbáljuk ki a kisebb egyenlő, mint 200000 kifejezést is. Ezen túlmenően a kifejezésekbe oszlopok közti számításokat is beletehetünk. Rakjunk össze egy kifejezést, mely alapján azok a városok kerülnek kijelölésre, melyeknél a városok nőmemű lakosainak aránya nagyobb, mint 50%: ( [Females]/[Pop1990] ) > 0.5 ) Vagy melyek azok a városok, ahol az arányokat tekintve kevesebb a férfi, mint a nő: ( [Males] /[Pop1990]) < ([Females]/[Pop1990] ) Lehetőségünk van komplex lekérdezésekre is, amikor többszörös feltételrendszert határozunk meg. Ezekhez használatosak az AND, OR és NOT operátorok. AND: két halmaz metszetének felel meg, vagyis csak azok az objektumok kerülnek kijelölésre, amelyek mindkét feltételnek eleget tesznek. OR: két halmaz uniójaként értelmezhető, elég az egyik feltételnek megfelelni. NOT: mindegy mi, csak ne a megadott feltétel legyen. Nézzünk néhány példát ezekre. - Jelöljük ki azokat a városokat, melyek lakosságszáma 50000 és 500000 közötti: ( [Pop1990] >= 50000 ) and ([Pop1990] <= 500000) - Jelöljük ki azokat a városokat, melyek lakosságszáma 50000 és 500000 közötti, és a fővárosokat: ([Pop1990] >= 50000 ) and ([Pop1990] <= 500000) or ([Capital] = "Y")
Geoinformatika a környezetvédelemben
6
-
Jelöljük ki azokat a városokat, melyek lakosságszáma 50000 és 500000 közötti, és nem fővárosok: not ([Capital] = "Y") and ([Pop1990] >= 50000 ) and ([Pop1990] <= 500000) A New Set gombon kívül további 2 gomb is van ezen a párbeszédpanelen. Az Add to Set gomb a már meglévő kiválasztott objektumokhoz hozzáadja az új lekérdezés eredményét, hatása az OR operátorhoz hasonló. A Select from Set gomb a meglévő leválogatásból (nem pedig az egészből) választja ki az új elemeket, hatása az AND operátorhoz hasonló. GYAKORLATOK 1. Készítsünk egy lekérdezést, melyben kiválasztjuk azokat a városokat, ahol a spanyolok aránya 70% feletti, a nők aránya 50% feletti, az afroamerikaiak aránya 10% alatti és nem a-val kezdődik a nevük! 2. Válogassuk le a nem főváros városokat, majd a Select from Set gombbal szűkítsük a találatokat azokra, amelyek neve c-vel kezdődik. Ezekhez adjuk hozzá az e-re végződőket, majd szűkítsük le azokra, ahol kevesebb a férfi, mint 50000.