„JTS” változatai közötti eltérés
84. sor: | 84. sor: | ||
Geometriai objektumok közötti egyezőség vizsgálatára szolgál a normálformájuk. Ennek segítségével a topológiai egyezőségnél pontosabb ekvivalencia vizsgálható, de a pontról pontra való vizsgálatnál gyengébb. A normálforma a koordináták lexikografikus rendezéseként van megvalósítva. | Geometriai objektumok közötti egyezőség vizsgálatára szolgál a normálformájuk. Ennek segítségével a topológiai egyezőségnél pontosabb ekvivalencia vizsgálható, de a pontról pontra való vizsgálatnál gyengébb. A normálforma a koordináták lexikografikus rendezéseként van megvalósítva. | ||
+ | |||
+ | Tulajdonságok: | ||
+ | * határ (Boundary): egy geometria határa az ő dimenziójánál eggyel kisebb dimenziójú geometriák gyűjteménye | ||
+ | * zártság (isClosed): csak körívekre értelmezett, megvizsgálja, hogy a kezdő és a végpont egybeesik-e | ||
+ | * érvényesség (isValid): megadja, hogy a geometria érvényes-e az SFS szabályai szerint | ||
=== Geometriai funkciók, algoritmusok === | === Geometriai funkciók, algoritmusok === | ||
A geometriai metódusok feltételezik, hogy a paraméterül szolgáló geometriák helyesek. | A geometriai metódusok feltételezik, hogy a paraméterül szolgáló geometriák helyesek. | ||
− | ==== Geometriák közötti | + | ==== Geometriák közötti kapcsolatok ==== |
Ki lehet számítani a megadott geometriák közötti kapcsolatot. A kapott érték lehet: | Ki lehet számítani a megadott geometriák közötti kapcsolatot. A kapott érték lehet: | ||
* ekvivalencia: a geometriák topológiailag ekvivalensek | * ekvivalencia: a geometriák topológiailag ekvivalensek | ||
96. sor: | 101. sor: | ||
* tartalmazó: a B geometria benne van az A geometriában | * tartalmazó: a B geometria benne van az A geometriában | ||
* átfedő: a geometriák néhány, de nem az összes pontja közös és a metszet dimenziója megegyezik a geometriák dimenziójával | * átfedő: a geometriák néhány, de nem az összes pontja közös és a metszet dimenziója megegyezik a geometriák dimenziójával | ||
+ | |||
+ | Műveletek: | ||
+ | * unió: azon pontok összessége, melyek A és B geometriában is benne vannak | ||
+ | * metszet: azon pontok, melyek A vagy B geometriában benne vannak | ||
+ | * különbség (két féle van: A.difference(B) és B.difference(A)): azon pontok, melyek az A geometriában benne vannak, de B-ben nem (a másik esetben fordítva) | ||
+ | * szimmetrikus differencia: azon pontok, melyek vagy A, vagy B geometriában benne vannak, de nem mindkettőben | ||
==== Pufferek ==== | ==== Pufferek ==== | ||
113. sor: | 124. sor: | ||
==== Sokszögesítés ==== | ==== Sokszögesítés ==== | ||
− | A sokszögesítés során vonalakból és szakaszokból, melyek egy sokszöget zárnak körbe, jön létre egy sokszög. | + | A sokszögesítés során vonalakból és szakaszokból, melyek egy sokszöget zárnak körbe, jön létre egy sokszög. Erre a Polygonizer osztály használható. Hibásan megadott vonalakból is készíthető sokszög, de ekkor az elkészült geometria invalid állapotú lesz. |
+ | <syntaxhighlight lang="java"> | ||
+ | Polygonizer polygonizer = new Polygonizer(); | ||
+ | polygonizer.add(lines); | ||
+ | Collection<Polygon> polygons = polygonizer.getPolygons(); | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | ==== Vonalak egyesítése ==== | ||
+ | Vonalak (LineString) lánca egyesíthető egyetlne/kevesebb vonallá. A függvény feltételezi, hogy a vonalak nem metszik egymást, de a kezdő és a végpontjuk egybeeshet. Ha az egyesítendő vonalak iránya nem egyezik meg, akkor az új vonal iránya a többségével fog megegyezni. | ||
+ | <syntaxhighlight lang="java"> | ||
+ | LineMerger lineMerger = new LineMerger(); | ||
+ | lineMerger.add(lines); | ||
+ | Collection mergedLines = lineMerger.getMergedLineStrings(); | ||
+ | </syntaxhighlight> | ||
+ | |||
=== Adatszerkezetek és algoritmusok === | === Adatszerkezetek és algoritmusok === | ||
A JTS programcsomag a következő, térinformatikai számításokhoz szükséges algoritmusokat szolgáltatja a felhasználóknak: | A JTS programcsomag a következő, térinformatikai számításokhoz szükséges algoritmusokat szolgáltatja a felhasználóknak: | ||
* | * | ||
− | |||
A lap 2017. április 30., 23:26-kori változata
A JTS (Java Topology Suite) egy nyílt forráskódú Java könyvtár síkgeometriai alakzatok modellezéséhez és informatikai alkalmazásukhoz. Az OpenGIS által kiadott "Simple Features Specification for SQL" leírásban meghatározott geometriai modelleket és API-kat implementálja.
Tartalomjegyzék
Használat
Használatához legalább Java 1.6 verzió szükséges. Maven segítségével a projektbe importálható, csupán a következő sorokat kell bemásolni a pom.xml-be.
<dependency>
<groupId>com.vividsolutions</groupId>
<artifactId>jts</artifactId>
<version>1.13</version>
</dependency>
Felépítés
Alap modulok
jts-core: geometriák, geometriai függvények, algoritmusok, térbeli adatszerkezetek
jts-io-common: I/O osztályok térbeli adatszerkezetekhez
Teszteléshez használt modulok
jts-tests: a JTS XML teszt komponens és a Test Runner alkalmazás
jts-app: TestBuilder GUI a JTS geometriák teszteléséhez
Egyéb
jts-io-ora: Oracle író-,olvasó osztályok
jts-io-sde: SDE író-,olvasó osztályok
Felhasználási lehetőségei, jelenlegi felhasználása
Geometriai alakzatok készítéséhez, geometriai függvények alkalmazásához, számításokhoz használható. Támogatja a WKT (Well Known Test) és WKB (Well Known Binary) formátumokat.
Egyéb térinformatikai projektek is használják a JTS programcsomagot. Pl.:
- GeoTools
- GeoServer
- Geoforge
Főbb funkcionalitások
Geometriai modell
A geometria modell segítségével pontokat, vonalakat, íveket, sokszögeket és sokszögek gyűjteményét lehet definiálni.
Geometriai típusok készíthetőek a GeometryFactory osztály segítségével, illetve WKT és WBT formában is meg lehet adni őket. A geometriákat reprezentáló osztályok a Geometry absztrakt osztályból származnak. Geometriai típusok:
- GeometryCollection: geometriai objektumok tárolására szolgál
- Point (pont): egy koordinátapárral van reprezentálva
GeometryFactory fact = new GeometryFactory();
Point p1 = fact.createPoint(new Coordinate(0,0));
- MultiPoint (pontok halmaza): kizárólag pontokat tartalmazó gyűjtemény (GeometryCollection)
GeometryFactory fact = new GeometryFactory();
MultiPoint mpt = fact.createMultiPoint(new Coordinate[] { new Coordinate(0,0), new Coordinate(1,1) } );
- LineString (vonal): pontok tömbje határozza meg
GeometryFactory fact = new GeometryFactory();
LineString ls = fact.createLineString(new Coordinate[] { new Coordinate(0,0), new Coordinate(1,1), new Coordinate(2, 3) } );
- LinearRing (körvonal): koordináták tömbjéből áll, ahol az első és az utolsó koordináta megegyezik
GeometryFactory fact = new GeometryFactory();
LinearRing lr = fact.createLinearRing(new Coordinate[] { new Coordinate(0,0), new Coordinate(1,1), new Coordinate(2, 3), new Coordinate(0, 0) });
- MultiLineString (vonalak halmaza): LineString típusú objektumokból álló gyűjtemény (GeometryCollection)
GeometryFactory fact = new GeometryFactory();
MultiLineString mls = fact.createMultiLineString(new LineString[] {ls1, ls2, ls3, ls4});
- Polygon (sokszög): egy LinearRing típusú objektum határozza meg a körvonalát és LinearRing típusú objektumok tömbje adja a lyukakat
GeometryFactory fact = new GeometryFactory();
Polygon polygon = fact.createPolygon(coordinates);
- MultiPolygon (sokszögek halmaza): sokszögekből álló gyűjtemény (GeometryCollection)
GeometryFactory fact = new GeometryFactory();
MultiPolygon mp = fact.createMultiPolygon(polygons);
Geometriai objektumok közötti egyezőség vizsgálatára szolgál a normálformájuk. Ennek segítségével a topológiai egyezőségnél pontosabb ekvivalencia vizsgálható, de a pontról pontra való vizsgálatnál gyengébb. A normálforma a koordináták lexikografikus rendezéseként van megvalósítva.
Tulajdonságok:
- határ (Boundary): egy geometria határa az ő dimenziójánál eggyel kisebb dimenziójú geometriák gyűjteménye
- zártság (isClosed): csak körívekre értelmezett, megvizsgálja, hogy a kezdő és a végpont egybeesik-e
- érvényesség (isValid): megadja, hogy a geometria érvényes-e az SFS szabályai szerint
Geometriai funkciók, algoritmusok
A geometriai metódusok feltételezik, hogy a paraméterül szolgáló geometriák helyesek.
Geometriák közötti kapcsolatok
Ki lehet számítani a megadott geometriák közötti kapcsolatot. A kapott érték lehet:
- ekvivalencia: a geometriák topológiailag ekvivalensek
- diszjunkt: a geometriáknak nincs között pontjuk
- metsző: a geometriáknak van legalább egy közös pontja
- érintkező: a geometriák határának van legalább egy közös pontja, de egyik belső pontjuk sem közös
- tartalmazott: az A geometria benne van a B geometriában
- tartalmazó: a B geometria benne van az A geometriában
- átfedő: a geometriák néhány, de nem az összes pontja közös és a metszet dimenziója megegyezik a geometriák dimenziójával
Műveletek:
- unió: azon pontok összessége, melyek A és B geometriában is benne vannak
- metszet: azon pontok, melyek A vagy B geometriában benne vannak
- különbség (két féle van: A.difference(B) és B.difference(A)): azon pontok, melyek az A geometriában benne vannak, de B-ben nem (a másik esetben fordítva)
- szimmetrikus differencia: azon pontok, melyek vagy A, vagy B geometriában benne vannak, de nem mindkettőben
Pufferek
Kiszámíthatóak a geometriák körüli pufferek, egy távolság megadásával. Ekkor kiszámítja a geometria körüli területet a megadott távolságon belül. Megkülönböztet pozitív és negatív puffert. A pozitív puffer mindig tartalmazza az adott geometriát, míg a negatív a geometrián belül található (pl.: egy sokszög belseje).
A pufferek végének a létrehozásához három lehetőség közül lehet választani:
- Lekerekítés: lekerekíti a puffer sarkait
- Közvetlen a vonal végén végződik a puffer is, nincs lekerekítve
- A puffer a vonal után, a puffernek megadott távolságra végződik, a sarkai nincsenek lekerekítve
Geometry geom = fact.createLineString(new Coordinate[] { new Coordinate(0,0), new Coordinate(1,1), new Coordinate(2, 3) } );
BufferOp bufOp = new BufferOp(geom);
bufOp.setEndCapStyle(BufferParameters.CAP_ROUND);
Geometry buffer = bufOp.getResultGeometry(distance);
Sokszögesítés
A sokszögesítés során vonalakból és szakaszokból, melyek egy sokszöget zárnak körbe, jön létre egy sokszög. Erre a Polygonizer osztály használható. Hibásan megadott vonalakból is készíthető sokszög, de ekkor az elkészült geometria invalid állapotú lesz.
Polygonizer polygonizer = new Polygonizer();
polygonizer.add(lines);
Collection<Polygon> polygons = polygonizer.getPolygons();
Vonalak egyesítése
Vonalak (LineString) lánca egyesíthető egyetlne/kevesebb vonallá. A függvény feltételezi, hogy a vonalak nem metszik egymást, de a kezdő és a végpontjuk egybeeshet. Ha az egyesítendő vonalak iránya nem egyezik meg, akkor az új vonal iránya a többségével fog megegyezni.
LineMerger lineMerger = new LineMerger();
lineMerger.add(lines);
Collection mergedLines = lineMerger.getMergedLineStrings();
Adatszerkezetek és algoritmusok
A JTS programcsomag a következő, térinformatikai számításokhoz szükséges algoritmusokat szolgáltatja a felhasználóknak:
Hivatkozások
https://github.com/locationtech/jts