GeoTools

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


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.


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

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.


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