Az OpenGis specifikáció két alapvető módot ajánl a térbeli objektumok kifejezésére, ez a WKT
(well-known-text) és a WKB (well-known-binary). A WKT az ember számára, a WKB a gép
számára olvashatóbb. A postgis elsősorban az alábbi 2 dimenziós objektumokat kezeli, de kísérleti
jelleggel a 3d és a 4d objektumokat is támogatja, mivel ez nem OGC ajánláson alapszik, így
EWKT és EWKB (E mint extended, kiterjesztett) jelöléseket használja a postgis ezekre a
formátumokra. Egy térbeli objektumot a vetület (térbeli koordináta rendszer) és az objektum típus
határozza meg, amik a következőek a WKT alapján: POINT (pont), LINESTRING
(vonal),POLYGON (poligon),MULTIPOINT (tömbösített pont) ,MULTILINESTRING
(tömbösített vonal) ,MULTIPOLYGON (tömbösített poligon),GEOMETRYCOLLECTION
(gyűjtemény). Fontos, hogy minden EWKT/EWKB érvényes WKT/WKB formátum is.
• POINT(0 0)
• LINESTRING(0 0,1 1,1 2)
• POLYGON((0 0,4 0,4 4,0 4,0 0),(1 1, 2 1, 2 2, 1 2,1 1))
• MULTIPOINT(0 0,1 2)
• MULTILINESTRING((0 0,1 1,1 2),(2 3,3 2,5 4))
• MULTIPOLYGON(((0 0,4 0,4 4,0 4,0 0),(1 1,2 1,2 2,1 2,1 1)), ((-1 -1,-1 -2,-2 -2,-2 -1,-1 -1)))
• GEOMETRYCOLLECTION(POINT(2 3),LINESTRING(2 3,3 4))
(forrás: POSTGIS Manual 15. oldal)
Pont
Pontból vonal:
Vonal létrehozása az ST_LineFromMultiPoint(geometry aMultiPoint) függvény segítségével
lehetséges, mivel a multipoint-on belül nincs sorrendiség megállapítva, így azt az ORDER BY
klauza segítségével lehet beállítani például a timestamp alapján.
Pontból poligon:
Vonalat kell először létrehozni a pontokból!
Vonal
Vonalból pont:
ST_DUMP() funkció segítségével lehet létrehozni:
CREATE TABLE pont AS SELECT (ST_Dump(the_geom)).geom as the_geom FROM vonal;
Vonalláncból poligon:
ST_BuildArea() funkció használatával: 1 db zárt vonalláncból lehet poligont létrehozni, de például
szigetpoligont csak körülményesen lehet kialakítani vele:
CREATE TABLE kivagat AS SELECT (ST_BuildArea(ST_Collect(nagy,kicsi))) FROM (SELECT
d.the_geom as nagy,f.the_geom as kicsi FROM mukter_inverz as d,mukodesi_terulet as f);
ST_MakePolygon() funkció használatával: Poligon külső és belső határát is meg lehet adni, így
egyszerűen lehet szigetpoligont létrehozni, de itt is csak 1 darab poligon hozható létre egyszerre.
ST_Polygonize() funkció használatával: Többszálú, de zárt vonalláncot alakít át poligonná.
CREATE TABLE st_polygonize AS (SELECT (ST_DUMP(ST_Polygonize(geom))).geom as geom
FROM lines);
Poligon
Poligonból pont:
CREATE TABLE pont AS SELECT (ST_DumpPoints(geom)).geom FROM poligon_tabla;
És így nem duplázza a poligonok találkozásánál a pontokat:
CREATE TABLE pont AS SELECT DISTINCT (ST_DUMPpoints(the_geom)).geom as geom
FROM poligon_tabla;
Poligonból vonal:
Poligonból egybefüggő vonal:
CREATE TABLE vonal AS SELECT ST_BOUNDARY(the_geom) FROM poligon;
Vonal feldarabolása vonal darabokra (szegmensek kezdő és végpontjainak megadása):
CREATE TABLE vonal_szegmentalt1 AS SELECT ST_PointN(geom,generate_series(1,ST_NPoints(geom)-1)) as kp, ST_PointN(geom,generate_series(2,ST_NPoints(geom))) as vp FROM vonal;
Szegmensek vonalláncá alakítása:
CREATE TABLE vonal_szegmentalt3 AS SELECT ST_MakeLine(kp,vp) FROM vonal_szegmentalt2;
Összevonva, poligonból vonallánc létrehozása:
CREATE TABLE szegmentalt_vonal AS (SELECT ST_MakeLine(kp,vp) FROM (SELECT
ST_PointN(geom,generate_series(1,ST_NPoints(geom)-1)) as kp,
ST_PointN(geom,generate_series(2,ST_NPoints(geom))) as vp FROM (SELECT
(ST_Dump(ST_BOUNDARY(the_geom))).geom as geom FROM poligon_tabla) as hatar) as
szegmens);
Nincsenek megjegyzések:
Megjegyzés küldése