GeoTools

Innen: GIS Wiki
A lap korábbi változatát látod, amilyen Xrbtk7 (vitalap | szerkesztései) 2016. június 21., 13:17-kor történt szerkesztése után volt.


GeoTools

A GeoTools egy általános célú nyílt forráskódú (LGPL) térinformatikai Java kód könyvtár, amely OGC szabványoknak megfelelő adatszerkezeten alapul, lehetővé téve vektor, raszter, adatbázis és térinformatikai formátumok kezelését előre definiált interfészen keresztül, mint:

• WMS: Web Map Service, GIS adatbázisból származó georeferenciával rendelkező térképek internetes továbbítását és megjelenítését teszi lehetővé (a térképi adatokat digitális képpé alakítja)

• WCS: Web Coverage Service, georeferált digitális képek (légifotó, űrfelvétel) internetes továbbítását teszi lehetővé

• WFS: Web Feature Service, georeferenciával rendelkező térbeli adatok (vektoros adatok) internetes továbbítását teszi lehetővé (nem alakítja az adatokat digitális képpé)


Története

1996-ban kezdődött a GeoTools 1 fejlesztése a leedsi egyetem (University of Leeds, West Yorkshire, Anglia) mesterképzésének keretében, amelynek célja, hogy egy olyan eszközt hozzanak létre az ügyfelek számára, mely lehetővé teszi különböző adatok interaktív földrajzi megjelenítését. 2002-ben fejlesztők egy nemzetközi csoportjával újraírták, követve az OGC előírásokat, ez a GeoTools 2. Addig a verziószámokat követve frissítették a projekt nevét, majd 2007-ben ezt ejtették és javították egyszerűen GeoTools-ra, a verziószámot pedig külön kezelik.


Felépítés

Java-ban íródott, nyílt forráskódú platformfüggetlen szoftver/bővítmény, melyet jelenleg is fejlesztenek. Moduláris felépítése lehetővé teszi funkcionalitásának egyszerű bővítését. Másrészről, így szakértői területek szerint tagolódik.

A többi open source szoftverhez hasonlóan a GeoTools is nyílt repozitorival kell, hogy rendelkezzen. Vagyis rendelkezik egy fejlesztői és egy vagy több futó verzióval (stabil és karbantartott). Ez utóbbiak, amelyeket fejlesztenek, ezek új szolgáltatásokat, fejlesztéseket és hibajavításokat tartalmaznak. Verziókezelőnek Git-et használ, ahol major.minor.patch számozási rendszert alkalmaz.

• major – a növekvő fő verziószámot jelöli (pl.: 8.xy-ról 9.0.0-ra), vagyis olyan jelentős változás következett be, amely tönkreteheti az előző verziókkal való kompatibilitást.

• minor – kisebb változás (pl.: 8.0.x-ről 9.0.1-re), ahol új funkciók és/vagy javítások következnek, amely nincs hatással a kompatibilitásra

• patch – csak a patch azonosító változik, azaz kisebb javításokat/változtatásokat eszközöltek az előző verzióhoz képest


Architektúra

Geotools.jpg

Egymásra épülő rétegekből áll.

• Térinformatikai rendszer használatához szükség van: gt-opengis, gt-referencing and gt-metadata,

• továbbá a használni kívánt adatokhoz a gt-api, gt-data, gt-main, jts, gt-opengis, gt-referencing, gt-opengis, gt-metadata modulokra.

Tereptárgyak, geometriák

Feature

A tereptárgy egy olyan objektum, amit a térképen megjeleníthetünk. JAVA-ra fordítva egy tereptárgy egy JAVA objektum (Object). Mint minden objektumnak, a tereptárgyaknak is lehetnek tulajdonságaik, amik a valós tulajdonságait jelölik (például elhelyezkedés, magasság, felület).

A hasonló tereptárgyakat - például települések, repülőterek - csoportosítani lehet, ezek lesznek a JAVA osztályok (class).

JAVA és GeoSpatial elemek megfeleltetése egymásnak
JAVA GeoSpatial
Object Feature
Class FetureType
Field Attribute
Method Operation


FeatureClass

A GeoToolsban a Feature, a FeatureType és az Attribute külön, a GeoAPI projekt által nyújtott interfészeket használnak. Gyakori, hogy egy Featurenek csak szimpla attribútumai vannak (például név, mérési hely, mérr érték), ahelyett, hogy más Featureökre hivatkoznának vagy összetett struktúrákkal tárolnának adatokat. Emiatt lett különválaszta a Featuretől a SimpleFeature nevű objektum. Implementációs szemszögből ez nagyon hasonlít a Java mapekhez. Az atribútumok neve egy kulcs, ehhez a kulcshoz kapcsolódik az attribútum értéke.


Geometry

Az objektumok és tereptárgyak abban különböznek egymástól, hogy a tereptárgyak artalmaz valamilyen helyre vonatkozó információt. Ezt az információt tartalmmazza a geometria és egy attribútumként lesz tárolva. Geometriák reprezentálása a JTS használatával történik.

 GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory( null );
 WKTReader reader = new WKTReader( geometryFactory );
 Point point = (Point) reader.read("POINT (1 1)"); //új pont létrehozása Well-Known-Text formátummal
 
 GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory( null );
 Coordinate coord = new Coordinate( 1, 1 ); //új koordináta létrehozása
 Point point = geometryFactory.createPoint( coord ); //új pont létrehozása a korábban elkészített koordinátából


DataStore

A DataStore API olyan fájlok, szolgáltatások vagy adatbázisok reprezentálására szolgál, amik térbeli adatokat tartalmaznak. A FeatureSource osztály végzi az adatok beolvasását, az ezt implementáló FeatureStore használatos az írási/olvasási engedélyek vizsgálatára.

 String typeNames = dataStore.getTypeNames()[0];
 SimpleFeatureSource source = store.getfeatureSource( typeName );
 if( source instanceof SimpleFeatureStore){
    SimpleFeatureStore store = (SimpleFeatureStore) source; // írási jogosultság
    store.addFeatures( featureCollection ); //új objektumok hozzáadása a gyűjteményhez
    store.removeFeatures( filter ); // szűrés, mint az SQL where feltételében
    store.modifyFeature( attribute, value, filter ); //módosítás
 }

Alapfunkciók

  • Interfészek definiálása alapvető térbeli koncepciókhoz és adatstruktúrákhoz
    • Integlált geometria támogatás a Java Topology Suite (JTS) által
    • Attribútum és térbeli szűrések OGC szabványok alapján
  • Letisztult adatelérést biztosító API, tranzakciókezeléshez és szálkezeléshez
    • GIS adatokhoz való hozzáférés többféle fájlformátumból és térbeli adatbázisból
    • Referencia koordináta-rendszerek közötti konverzió támogatása
    • Vetületek széles körű támogatása
    • térbeli és nem-térbeli adatok szűrése és feldolgozása
  • Állapotmentes, alacsony memóriaigényű megjelenítőréteg, ami kifejezetten előnyös szerver-oldali környezetekben
    • Térképek szerkesztése és megjelenítése összetett stílusokkal
    • Címkék, színek kezelése bővítményeken keresztül
  • Hatékony séma alapú XML feldolgozás
  • Beépülő modulok: nyílt plugin rendszer nem támogatott formátumok feldolgozására
  • GeoTools Extensions: további térbeli funkcionalitást ad az alapfunkciókhoz
    • Gráfok és hálózatok támogatása (például legrövidebb utak meghatározásához)
    • Webes tékrépszerver és kliens
  • GeotTools által nem támogatott bővítményeken
    • Swing támogatás, lokális és webes folyamattámogatás, új formátumok, négyzetrácsok generálása és ISO geometriák implementációja

Modulok

OpenGIS (gt-opengis) – Térinformatikai koncepciók

Térinformatikai elemzések a következőkre: környezettudomány, élettan, ökológia, geológia, járványtan. A GIS célja, hogy rögzítse, tárolja, elemezze, kezelni és megjeleníteni tudja a más-más típusú földrajzi adatokat, s azt különböző kontextusokban, műveletekben és alkalmazásokban felhasználja. Az adatok OGC vagy ISO szabvány szerint definiáltak. Interfészek: gt-main, gt-coverage, gt-referencing, gt-metadata

JTS (Java Topology Suite) – Geometriai adatokat alkalmazásához

Geometriai műveletek, tranformációk számítása Interfészek: gt-api, gt-main

API

Helper osztályokat tartalmaz, melyek geometriai adatokat fordítanak Interfészek: gt-main

Metadata

Térinformatikai adatok és szolgáltatások leírása Interfészek: gt-opengis

Referencing – (EPSG[1]) Referencia információk

A hivatkozott terület adatait, koordinátáit tartalmazza Interfészek: gt-opengis Coverage – Raszter adatok használata Lehetőséget biztosít különféle távérzékelési, térinformatikai, térképészeti, földmérési adatokat tartalmazó raszter képfájlok használatához (GeoTIFF) vagy többdimenziós mátrixhoz (NetCDF). A TIFF formátumú képek digitális műholdas felvételek tárolására és szállítására alkalmas, ami lehet légi fotó, terepmodell, térkép vagy különféle földrajzi elemzések. Interfészek: gt-opengis

MainSzűrők, funkciók, stílusok

Alapértelmezett implementációkat tartalmaz a gt-api és gt-opengis interfészek számára, mint szűrők, funkciók, stílusok használata, ezek összessége már elegendő egy alkalmazás készítéséhez. Interfészek: gt-opengis

Data

Támogatja a hozzáférést a különböző információkhoz, például vektorgrafikus adatok elérése, külső szolgáltatások, lemezfájlok használata az alkalmazásban. Interfészek: gt-api

JDBC

Hozzáférést biztosít a különböző adatbázisokhoz a Java JDBC segítségével.

CQL

A térinformatikai adatokkal való munkához, olyan ember által olvasható szűrőkifejezésekre van szükségünk, mint a gt-cql modulban található kontextus leíró nyelv. (ítéletlogika)

XML

XML használatával támogatja a térinformatikai adatok elemzését és kódolását.

Render

Java2D felhasználásával térinformatikai adatok képi megjelenítését teszi lehetővé a térképen.

Module.png

Java Topolgy Suite

A GeoTools erősen épít a Java Topology Suite (JTS) nyújtotta szolgáltatásokra.

A JTS is egy nyílt forráskódú könyvtár, az Euklideszi lineáris síkgeometria informatikai alkalmazásaihoz szolgáltat különböző eszközöket. Alapvetően GIS szoftverek részeként használt, az OpenGIS konzorcium által definiált geometriai modelleket és API-kat implementálja.

Geometriai modell

A geometria osztályok pontok, vonalláncok (Linestring), poligonok és gyűjtemények (collection) modellezését támogatják. A geometriák határai egyértelműen megfogalmazottak, a 2 dimenziós euklideszi térben definiáltak. Ugyanakkor egy Z értéket is tartalmazhatnak az objektumok.

Geometriai funkciók

  • Topológiai érvényesség vizsgálata
  • Terület és távolság funkciók
  • Fedési funkciók, mint például metszet, különbség, unió, szimmetrikus differencia
  • Bufferek számítása
  • Konvex burok
  • Geometriai egyszerűsítések
  • Geometriai sűrítés
  • Lineáris vonatkoztatás
  • Delaunay háromszögelés
  • Voronoi diagramm generálása
  • Legkisebb befoglaló háromszög

Térbeli struktúrák és algoritmusok

  • Vonalszegmensek metszete
  • Pont a poligonban hatékony meghatározása
  • Térbeli indexstruktúrák, mint például a negyedelő-fa
  • Planáris gráfstruktúrák és algoritmusok

Lekérdezések használata

A GeoTools programcsomag többféle lekérdezési műveletet és adatbázisok széles körét támogatja. Lehetőség van fájlokból (például shapefile) adatokat betölteni és raktuk lekérdezéseket elvégezni valamint lokális és távoli szerveren elérhető adatbázishoz csatlakozni és ott térbeli lekérdezéseket (spatial query) végrehajtani.

A GeoTools adatbázis kezelő rétegének felépítése

Adatbázisból úgynevezett Filterek segítségével tudunk lekérdezni. A filterek a CQL nyelv segítségével fogalmazhatjuk meg. A CQL hasonló az SQL nyelv where záradékában használt feltételekhez. Az adatbázist egy DataStore nevű objektum reprezentálja. A CQL nyelv segítségével lehetőségünk van különféle térbeli lekérdezéseket (példáull legkisebb befoglaló négyzet, terület, kerület, távolság meghatározása) elvégezni, de lehetséges nem-térbeli lekérdezések végrehajtása is.

Az adatbázis-kapcsolat felépítésében egy beépített, JDataStoreWizard nevű komponens nyújt segítséget. Itt csak be kell paramétereznünk, hogy milyen adatbázisból vagy fájlból szeretnénk kinyírni az adatokat.

Példa kódrészletek

JDataStoreWizard inícializálása

 JDataStoreWizard wizard = new JDataStoreWizard(format);
 int result = wizard.showModalDialog();
 if (result == JWizard.FINISH) {
    Map<String, Object> connectionParameters = wizard.getConnectionParameters();
    dataStore = DataStoreFinder.getDataStore(connectionParameters);
    if (dataStore == null) {
       JOptionPane.showMessageDialog(null, "Could not connect - check parameters");
    }
    updateUI();
 }

Szűrések

 Filter filter = CQL.toFilter("BBOX(ATTR1, 151.12, 151.14, -33.5, -33.51)");
 SimpleFeatureCollection features = source.getFeatures(filter);
 FeatureCollectionTableModel model = new FeatureCollectionTableModel(features);
 table.setModel(model);

Az első sorban létrehozzuk a Filter objektumot. A Filter az argumentumban megadott CQL lekérdezés eredményét - jelen esetben a pontok által határolt befoglaló négyszögben lévő térobjektumokat - adja vissza.

A második sorban lévő kód végzi a tényleges szűrést: egy FeatureCollection-be tölti be a lekérdezésnek eleget tevő tereptárgyakat.

Ez után létrehozunk egy modellt, amit később egy táblázatban meg tudunk jeleníteni grafikusan.

Lekérdezés megjelenítése grafikusan

A lekérdezett tereptárgyakat grafikus úton a következőképpen tudjuk megjeleníteni:

 StyleBuilder styleBuilder = new StyleBuilder();
 PolygonSymbolizer restrictedSymb = styleBuilder.createPolygonSymbolizer(Color.BLUE, Color.BLACK, 0);
 Style myStyle = styleBuilder.createStyle(restrictedSymb);
 FeatureLayer layer = new FeatureLayer(features, myStyle);
 layer.setTitle(text.getText());
 mapFrame.getMapContent().addLayer(layer);

A StyleBuilder osztállyal tudunk egyéni megjelenítési stílust létrehozni.
A 2. sorban beállítjuk, hogy fekete kontúrú, kék színnel kitöltött objektumok keletkezzenek.
Ezután létrehozunk egy FeatureBuildert, ami a tereptárgyak megjelenítésében segít. Erre a rétegre helyezzük fel a különböző objektumokat. Később ezt a réteget tudjuk megjeleníteni a térképen.

Geotools terkep.jpg

Rövid magyarázat a képhez:

  1. Rétegek neve, színek, láthatósága
  2. Lekérdezések eredményének táblázatos megjelenítése az összes attribútummal együtt
  3. A lekérdezés eredményét (vörös) és az eredeti adathalmazt megjelenítő térkép
  4. A térkép nagyítására, kicsinyítésére és mozgatására használható eszköztár

Használata

Telepítést nem igényel, mivel ez egy könyvtár. Szükség van fejlesztői környezetre (Eclipse, NetBeans), valamint magára a könyvtárra[2], ahol a 11-es verziótól kezdődően Java 1.7 SDK szükséges.

Maven használata (ajánlott) Eclipse-ben:

1. Válasszuk a File > New > Other menüpontot

2. A varázslóban a Maven > Maven project pontot

3. A New Maven varázslójában menjünk tovább, majd az alapértelmezett maven-archtype-quickstart –ot választjuk és tovább megyünk

4. A következő pontban meg kell adnunk a projekt adatait:

• Group Id: org.geotools

• Artifact Id: tutorial

• Version: 0.0.1-SNAPSHOT (default)

• Package: org.geotools.tutorial

5. Finish-re kattintva létrejött az új projekt

6. Az App.java futtatásakor megjelenik a konzolon a „Hello World!”

A pom.xml fájlban a különböző pluginokhoz tartozó Jar fájlokat a Maven projekt letölti az ún. „local repository”-ba. A GeoTools használatához adjuk hozzá a következőket a pom.xml fájlunkhoz:

  <properties>
          <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
          <geotools.version>12-RC1</geotools.version>
      </properties>
     <dependencies>
       <dependency>
           <groupId>junit</groupId>
           <artifactId>junit</artifactId>
           <version>4.11</version>
           <scope>test</scope>
       </dependency>
       <dependency>
           <groupId>org.geotools</groupId>
           <artifactId>gt-shapefile</artifactId>
           <version>${geotools.version}</version>
       </dependency>
       <dependency>
           <groupId>org.geotools</groupId>
           <artifactId>gt-swing</artifactId>
           <version>${geotools.version}</version>
       </dependency>
     </dependencies>
       <repositories>
         <repository>
             <id>maven2-repository.dev.java.net</id>
             <name>Java.net repository</name>
             <url>http://download.java.net/maven/2</url>
         </repository>
         <repository>
             <id>osgeo</id>
             <name>Open Source Geospatial Foundation Repository</name>
             <url>http://download.osgeo.org/webdav/geotools/</url>
         </repository>
     </repositories>


Példaprogram shapefájlok megjelenítésére

1. Az előző Maven projektben hozzunk létre egy új csomagot org.geotools.tutorial.quickstart névvel a következő osztállyal org.geotools.tutorial.quickstart.Quickstart

2. Egy fájlválasztó létrehozásával megkönnyítjük a shapefájlok kiválasztásához

 File file = JFileDataStoreChooser.showOpenFile("shp", null);
       if (file == null) {
           return;
       }
       FileDataStore store = FileDataStoreFinder.getDataStore(file);
       SimpleFeatureSource featureSource = store.getFeatureSource();

3. Betöltjük a shapefájlt

  MapContent map = new MapContent();
       map.setTitle("Quickstart");
       
       Style style = SLD.createSimpleStyle(featureSource.getSchema());
       Layer layer = new FeatureLayer(featureSource, style);
       map.addLayer(layer);

4. Megjelenítjük

  JMapFrame.showMap(map);


Programozási megoldások

GeoServer

1. Telepítés után a következő linken érjük el: http://localhost:8080/geoserver/web/

2. Hozzunk létre egy új Workspace-t

3. Ehhez adjunk egy új adattárat, amely shapefájlokat tartalmaz, tehát válasszuk a Directory of spatial files (shapefiles) lehetőséget

4. A GeoServer telepítési helyét keressük meg a számítógépen, ebben a Server Status menüpont szolgál segítségül. Majd a data_dir mappába másoljunk kedvünk szerint shapefájlokat.

5. Válasszuk ki a 2. pontban létrehozott Workspace-t, töltsük ki az erre a pontra vonatkozó leírást, valamint válasszuk ki a GeoServer data_dir mappájába azt a mappát, amely tartalmazza a használni kívánt shapefájlokat és mentsünk.

6. A Layers menüpontban tegyük nyilvánossá azokat a shapefájlokat, amelyeket használni szeretnénk a továbbiakban. Ehhez szükséges egy SRS kód, ami legyen 4326 (WSG – földmérési adatokat tartalmaz). Ezek után a határok számítása következik, ezt kitölti az oldal a Compute linkekre kattintva. Mentsünk.

7. A Layers Group menüpontban hozzunk létre egy csoportját az új rétegeknek. Adjunk nevet és leírást a csoportnak. Majd adjuk hozzá a használni kívánt rétegeket (shapefájlokat). Ezeket kirajzolásuk szerinti sorrendbe helyezhetjük. Mentsünk.

8. A Layer Prewiev menüpontban keressük meg azt a csoportot, amit az előző pontban létrehoztunk, majd kattintsunk az OpenLayers hivatkozásra. Ekkor egy új lapon kirajzolódnak a shapefájlok.

Geoserver.jpg


Felhasználási helye

  • GeoServer
    • Nyílt forráskódú szerver alkalmazás, térbeli adatok megosztására
  • uDig
    • Teljeskörű JAVA asztali megoldás GIS adatok feldolgozására, GIS szoftverek készítéséhez
  • GeoPublisher
  • Geomajas
    • Nyílt forráskódú GIS könyvtárak, eszközök és API-k gyűjteménye, szerver-alapú térképészeti megoldások támogatásához
  • Postgresql/PostGIS
  • 52N
  • Atlas Styler
    • Térképszerkesztő szoftver, fejlesztése mára megszűnt, azonban a forráskód szabadon elérhető ([3])

Felhasználási lehetőségek

- Térinformatikai adatok, szimbólumok megjelenítése és szűrése OGC szabványból (CQL, SLD, SFS, WCS, WCPS, WFS, WMS, WMTS, WPS)

- JTS - az Euklideszi vektorteren végzett geometriai transzformációk modellezéséhez

- Rácshálók, shape fájlok és raszter felvételek olvasása

- Grafikonok és hálózatok készítése, elemzése


Jellemző funkciók

Térbeli fogalmakra és adatszerkezetekre meghatározott interfészek

• Attribútum és térbeli szűrőkkel OGC adatok használata

• Geometriai transzformációk modellezése

Adatelérés

• Térbeli adatbázisok és GIS adatok számos formátumának támogatása

Alacsony memóriahasználat

• Disk-ről renderel, nem a memóriába ír. Különösen hasznos szerveroldali környezetben.

• Bonyolult térképek megjelenítése


Támogatott formátumok

Raszter formátum: arcsde, arcgrid, geotiff, grassraster, gtopo30, image (JPEG, TIFF, GIF, PNG), imageio-ext-gdal, imagemoasaic, imagepyramid, JP2K, matlab

Adatbázis “jdbc-ng” támogatás: db2, h2, mysql, oracle, postgis, spatialite, sqlserver

Vektor formátum: app-schema, arcsde, csv, dxf, edigeo, excel, geojson, org, property, shapefile, wfs

XML: xsd-core (xml simple types), fes, filter, gml2, gml3, kml, ows, sld, wcs, wfs, wms, wps, vpf.

Implementált szabványok

  • OGC Styled Layer Descriptor
    • Tereptárgyak, felületek felhasználó által definiálható szimbolizálása, színezése
  • OGC General Feature Model
  • Raszteres adatok OGC Grid Coverage reprezentációja
  • OGC Filter and Common Constraint Language (CQL)
  • ISO 19107 Geometry
    • A tereptárgyakat leíró objektumok alapvetó karakterisztikáját írja le

Hivatkozások

http://geotools.org/

http://www.geoapi.org/

http://geoserver.org/

http://www.opengeospatial.org/

Mi az az OGC? - https://www.youtube.com/watch?v=bfkCdir-yO8

http://svn.osgeo.org/geotools/trunk/modules/plugin/

https://github.com/geotools/geotools/wiki

http://sourceforge.net/projects/geotools/files/

http://www.naturalearthdata.com/

http://www.epsg-registry.org/

http://spatialreference.org/ref/epsg/wgs-84/

http://docs.geotools.org/latest/userguide/tutorial/filter/query.html

https://github.com/geopublishing/atlasframework

https://en.wikipedia.org/wiki/JTS_Topology_Suite

http://docs.geotools.org/latest/userguide/tutorial/feature/csv2shp.html