Úvod do GeoTools

1. Prehľad

V tomto článku si prejdeme základy Open source knižnica Java GeoTools - na prácu s geopriestorovými údajmi. Táto knižnica poskytuje kompatibilné metódy implementácie Geografických informačných systémov (GIS) a implementuje a podporuje mnoho štandardov Open Geospatial Consortium (OGC).

Keď OGC vyvíja nové štandardy, implementuje ich GeoTools, čo je veľmi užitočné pre geopriestorové práce.

2. Závislosti

Budeme musieť pridať závislosti GeoTools do našej pom.xml spis. Pretože tieto závislosti nie sú hostené v Maven Central, musíme tiež deklarovať ich úložiská, aby ich Maven mohol stiahnuť:

  úložisko osgeo Open Source Geospatial Foundation //download.osgeo.org/webdav/geotools/ opengeo úložisko OpenGeo Maven //repo.opengeo.org 

Potom môžeme pridať naše závislosti:

 org.geotools gt-shapefile 15.2 org.geotools gt-epsg-hsql 15.2 

3. GIS a formovacie súbory

Na praktické využitie knižnice GeoTools budeme potrebovať niekoľko vecí o geografických informačných systémoch a tvarové súbory.

3.1. GIS

Ak chceme pracovať s geografickými údajmi, budeme potrebovať geografický informačný systém (GIS). Tento systém je možné použiť prezentovať, zachytávať, ukladať, manipulovať, analyzovať alebo spravovať geografické údaje.

Určitá časť geografických údajov je priestorová - odkazuje sa na konkrétne polohy na Zemi. Priestorové údaje sú obvykle sprevádzané údajmi o atribútoch. Dáta atribútov môžu byť akékoľvek ďalšie informácie o každej z priestorových funkcií.

Príkladom geografických údajov môžu byť mestá. Skutočná poloha miest sú priestorové údaje. Ďalšie údaje, ako napríklad názov mesta a počet obyvateľov, by tvorili údaje z atribútov.

3.2. Súbory tvarov

Pre prácu s geopriestorovými údajmi sú k dispozícii rôzne formáty. Raster a vektor sú dva primárne dátové typy.

V tomto článku sa pozrieme na to, ako pracovať s typom vektorových údajove. Tento dátový typ možno reprezentovať ako body, čiary alebo mnohouholníky.

Na ukladanie vektorových údajov do súboru použijeme a tvarový súbor. Tento formát súboru sa používa pri práci s typom geopriestorových vektorových údajov. Je tiež kompatibilný so širokou škálou softvéru GIS.

Pomocou programu GeoTools môžeme pridávať funkcie, ako sú mestá, školy a orientačné body tvarove subory.

4. Vytváranie funkcií

The GeoTools dokumentácia špecifikuje, že objekt je čokoľvek, čo je možné nakresliť na mapu, napríklad mesto alebo nejaký orientačný bod. A ako sme už spomenuli, po vytvorení je možné funkcie potom uložiť do súborov s názvom tvarové súbory.

4.1. Uchovávanie geopriestorových údajov

Pred vytvorením prvku musíme poznať jeho geopriestorové údaje alebo súradnice zemepisnej dĺžky a šírky jeho polohy na Zemi. Pokiaľ ide o údaje o atribútoch, musíme poznať názov objektu, ktorý chceme vytvoriť.

Tieto informácie možno nájsť na webe. Niektoré stránky, ako simplemaps.com alebo maxmind.com, ponúkajú bezplatné databázy s geopriestorovými údajmi.

Keď poznáme zemepisnú dĺžku a šírku mesta, môžeme ich ľahko uložiť do nejakého objektu. Môžeme použiť a Mapa objekt, ktorý bude obsahovať názov mesta a zoznam jeho súradníc.

Vytvorme pomocnú metódu na uľahčenie ukladania údajov v našom Mapa objekt:

private static void addToLocationMap (Názov reťazca, double lat, double lng, Mapa umiestnenia) {Zoznam súradníc = nový ArrayList (); Coordinates.add (lat); Coordinates.add (lng); locations.put (meno, súradnice); }

Teraz vyplňme naše Mapa objekt:

Mapa locations = new HashMap (); addToLocationMap („Bangkok“, 13,752222, 100,493889, miesta); addToLocationMap ("New York", 53.083333, -0.15, miesta); addToLocationMap ("Cape Town", -33,925278, 18,423889, oblasti); addToLocationMap ("Sydney", -33,859972, 151,211111, miesta); addToLocationMap ("Ottawa", 45.420833, -75,69, oblasti); addToLocationMap ("Cairo", 30.07708, 31.285909, oblasti);

Ak si stiahneme databázu CSV, ktorá obsahuje tieto údaje, môžeme ľahko vytvoriť čítačku, ktorá údaje načíta, a nie ich uchovať v objekte, ako je tu.

4.2. Definovanie typov funkcií

Takže teraz máme mapu miest. Aby sme mohli pomocou týchto údajov vytvárať funkcie, budeme musieť najskôr definovať ich typ. GeoTools ponúka dva spôsoby definovania typov funkcií.

Jedným zo spôsobov je použitie createType metóda DataUtilites trieda:

SimpleFeatureType TYPE = DataUtilities.createType ("Location", "location: Point: srid = 4326," + "name: String");

Ďalším spôsobom je použite a SimpleFeatureTypeBuilder, ktorá poskytuje väčšiu flexibilitu. Napríklad môžeme pre typ nastaviť referenčný súradnicový systém a pre pole názvu môžeme nastaviť maximálnu dĺžku:

SimpleFeatureTypeBuilder builder = nový SimpleFeatureTypeBuilder (); builder.setName ("Umiestnenie"); builder.setCRS (DefaultGeographicCRS.WGS84); builder .add ("Umiestnenie", Point.class); .length (15) .add ("Name", String.class); SimpleFeatureType CITY = builder.buildFeatureType ();

Oba typy uchovávajú rovnaké informácie. Poloha mesta je uložená ako a Bod, a názov mesta je uložený ako String.

Pravdepodobne ste si všimli, že premenné typu TYP a MESTO sú pomenované veľkými písmenami, napríklad konštanty. S premennými typu by sa malo zaobchádzať ako s konečné premenné a po ich vytvorení by sa nemali meniť, takže tento spôsob pomenovania možno použiť len na označenie.

4.3. Vytváranie prvkov a zbierky prvkov

Keď máme definovaný typ prvku a máme objekt, ktorý má údaje potrebné na vytvorenie prvkov, môžeme ich začať vytvárať pomocou ich nástroja na tvorbu.

Vytvorme inštanciu a SimpleFeatureBuilder poskytujúce náš typ funkcie:

SimpleFeatureBuilder featureBuilder = nový SimpleFeatureBuilder (CITY);

Budeme tiež potrebovať kolekciu na ukladanie všetkých vytvorených objektov funkcií:

Kolekcia DefaultFeatureCollection = nová DefaultFeatureCollection ();

Keďže sme v našom type funkcie deklarovali, že Bod pre umiestnenie, budeme musieť vytvárať body pre naše mestá na základe ich súradníc. Môžeme to urobiť pomocou JTSGeometryFactoryFinder spoločnosti GeoTools:

GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory (null);

Poznač si to môžeme použiť aj iné Geometria triedy ako Riadok a Polygón.

Môžeme vytvoriť funkcie ktoré nám pomôžu vložiť do zbierky funkcie:

súkromná statická funkcia<>, SimpleFeature> toFeature (SimpleFeatureType CITY, GeometryFactory geometryFactory) {return location -> {Point point = geometryFactory.createPoint (new Coordinate (location.getValue () .get (0), location.getValue (). Get (1))) ; SimpleFeatureBuilder featureBuilder = nový SimpleFeatureBuilder (CITY); featureBuilder.add (bod); featureBuilder.add (location.getKey ()); návrat featureBuilder.buildFeature (null); }; }

Keď už máme staviteľa a kolekciu, použijeme predtým vytvorené funkcie, môžeme vytvárať funkcie a ukladať ich do našej zbierky:

locations.entrySet (). stream () .map (toFeature (CITY, geometryFactory)) .forEach (collection :: add);

Zbierka teraz obsahuje všetky funkcie vytvorené na základe našich Mapa objekt, ktorý obsahoval geopriestorové údaje.

5. Vytvorenie DataStore

GeoTools obsahuje a DataStore API ktorý sa používa na predstavenie zdroja geopriestorových údajov. Týmto zdrojom môže byť súbor, databáza alebo nejaká služba, ktorá vracia údaje. Môžeme použiť a DataStoreFactory aby sme vytvorili našu Uloženie údajov, ktorá bude obsahovať naše funkcie.

Nastavme súbor, ktorý bude obsahovať funkcie:

Súbor shapeFile = nový súbor (nový súbor ("."). GetAbsolutePath () + "shapefile.shp");

Teraz nastavíme parametre, ktoré budeme používať na zisťovanie DataStoreFactory ktorý súbor použiť, a naznačujú, že keď vytvárame náš, musíme uložiť priestorový index Uloženie údajov:

Parametre mapy = nový HashMap (); params.put ("url", shapeFile.toURI (). toURL ()); params.put ("vytvoriť priestorový index", Boolean.TRUE);

Vytvorme DataStoreFactory pomocou parametrov, ktoré sme práve vytvorili, a pomocou tejto továrne vytvoríme Uloženie údajov:

ShapefileDataStoreFactory dataStoreFactory = nový ShapefileDataStoreFactory (); ShapefileDataStore dataStore = (ShapefileDataStore) dataStoreFactory.createNewDataStore (parametre); dataStore.createSchema (CITY);

6. Zápis do súboru Shapefile

Posledným krokom, ktorý musíme urobiť, je zapísať naše údaje do a tvarový súbor. Aby sme to dosiahli bezpečne, chystáme sa Použi Transakcia rozhranie to je súčasť GeoTools API.

Toto rozhranie nám dáva možnosť ľahko spáchať naše zmeny v súbore. Poskytuje tiež spôsob, ako vykonať a rollback neúspešných zmien, ak sa vyskytne problém pri zápise do súboru:

Transakčná transakcia = nová DefaultTransaction ("vytvoriť"); Reťazec typeName = dataStore.getTypeNames () [0]; SimpleFeatureSource featureSource = dataStore.getFeatureSource (typeName); if (featureSource instanceof SimpleFeatureStore) {SimpleFeatureStore featureStore = (SimpleFeatureStore) featureSource; featureStore.setTransaction (transakcia); try {featureStore.addFeatures (collection); transaction.commit (); } catch (Výnimočný problém) {transaction.rollback (); } nakoniec {transaction.close (); }}

The SimpleFeatureSource sa používa na čítanie funkcií a SimpleFeatureStore sa používa na prístup na čítanie / zápis. Je to uvedené v dokumente GeoTools dokumentácia, ktorá pomocou inštancia metóda na kontrolu, či môžeme zapisovať do súboru, je správna cesta.

Toto tvarový súbor je možné neskôr otvoriť pomocou ľubovoľného prehliadača GIS, ktorý má tvarový súbor podpora.

7. Záver

V tomto článku sme videli, ako môžeme využiť GeoTools knižnica vykonať veľmi zaujímavé geopriestorové práce.

Aj keď bol príklad jednoduchý, je možné ho rozšíriť a použiť na vytváranie formátov rich tvarové súbory na rôzne účely.

Mali by sme to mať na pamäti GeoTools je živá knižnica a tento článok slúži iba ako základný úvod do knižnice. Tiež GeoTools sa neobmedzuje iba na vytváranie vektorových dátových typov - je možné ho tiež použiť na vytváranie alebo prácu s rastrovými dátovými typmi.

Celý príklad kódu použitého v tomto článku nájdete v našom projekte GitHub. Toto je projekt Maven, takže by ste mali byť schopní importovať ho a spustiť taký, aký je.


$config[zx-auto] not found$config[zx-overlay] not found