Prvním krokem při zakládání databáze je vytvoření nové prázdné prostorové databáze, do které později přibudou nové tabulky se záznamy, které můžeme vkládat, upravovat a dotazovat se na ně.
PostGIS: Existují dvě možnosti, jak vytvořit databázi v pgAdminIII. První možností je tlačítko pro SQL dotazy na liště nástrojů. Toto tlačítko není aktivní pokud neklikneme na některou již vytvořenou databázi.
Po kliknutí na toto tlačítko se otevře nové okno pro dotazování (Query), zde se zadá příkaz CREATE DATABASE. Druhou možností je kliknout pravým tlačítkem na Databáze ve Stromu objektů nebo na záložku Upravit – Nový objekt a zvolit NOVÁ DATABÁZE. V obou případech se otevře dialogové okno, ve kterém si lze navolit parametry nové databáze.
Chceme vytvořit prostorovou databázi, která se bude jmenovat postgisdatabase, kódování bude UTF8 a bude vytvořena podle šablony template_postgis, která zaručí, že se jedná o prostorovou databázi a bude mít vytvořeny zásadní tabulky spatial_ref_sys a geometry_columns.
Ukázka kódu, který lze zadat do okna pro SQL dotazování:
PkCD: CREATE DATABASE postgisdatabase
WITH ENCODING='UTF8'
TEMPLATE=template_postgis
CONNECTION LIMIT=-1;
MyGIS: V MySQL Query Browser se databáze označují jako Schemata. Databázi lze vytvořit tak, že klikneme pravým tlačítkem do záložky Schemata a zvolíme CREATE NEW SCHEMA.
Poté už stačí novou databázi jenom pojmenovat (mygisdatabase). MySQL nevytvoří do nového schématu metadatové tabulky geometry_columns a spatial_ref_sys. Tyto tabulky se vytvoří pokud do databáze importujeme shapefile nebo si je můžeme vytvořit sami (viz. kap. 4.2)
Pokud vytváříme databázi (schéma) pomocí MySQL příkazového řádku zadáme příkaz:
MkCD: CREATE DATABASE mygisdatabase;
SpatiaLite: Ve SpatiaLite musíme pro vytvoření databáze zvolit z nabídky FILES položku Creating a New (empty) SQLite DB a nebo tuto položku vybrat přímo z lišty nástrojů.
Poté už stačí novou databázi pouze pojmenovat (spatialitedatabase) a vybrat místo na disku, kam ji uložíme. Nově vytvořená databáze už obsahuje metadatové tabulky spatial_ref_sys a geometry_columns.
Z tohoto vyplývá, že pouze v PostGIS a MyGIS lze vytvořit databázi pomocí příkazu CREATE DATABASE. Ve SpatiaLite je databáze uložena jako samostatný soubor na disku (spatialitedatabase.sqlite). Nejdéle trvalo vytvoření databáze v PostGIS. Žádné velké časové rozdíly ve vytvoření databáze však v jednotlivých softwarech nejsou.
Předtím než jsou vkládány záznamy do databáze, je nutno si vytvořit tabulky, do kterých se budou záznamy ukládat a přiřadit datové typy jednotlivým atributům tabulky.
Chceme vytvořit tabulky T1, T2, T3 a T4, které budou obsahovat atributy Name, ID a geometry. Atributu Name je přiřazen datový typ character (30) a atributu ID datový typ integer, který nesmí být prázdný (NOT NULL). To bude stejné pro všechny databáze.
V PostGIS a SpatiaLite je atributu geometry přiřazen datový typ geometry. Toto lze provést i v MyGIS, ale pro ukázku byly vytvořeny tabulky (T1,T2,..) zvlášť s každým datovým typem geometrie (point, linestring, polygon, geometrycollection).
PostGIS: Pomocí pgAdminIII máme dvě možnosti vytvoření tabulky. První možností je tlačítko pro SQL dotazování na liště nástrojů.
Tlačítko je aktivní jen pokud je označena databáze, kterou chceme editovat. Po kliknutí se otevře nové okno pro dotazování, zde je zadán příkaz CREATE TABLE. Obrázek č.21 zobrazuje druhou možnost, což je rozbalit Schémata databáze, kliknout pravým tlačítkem na Tabulky a vybrat NOVÁ TABULKA. Otevře se nové okno, kde je možné, si nastavit potřebné parametry tabulky.
Ukázka kódu, který lze zadat do okna pro SQL dotazování:
PkCTt1: CREATE TABLE "T1"(
"Name" character(30),
"ID" integer NOT NULL,
geometry geometry,
CONSTRAINT "T1_pkey" PRIMARY KEY ("ID")
)
WITH (OIDS=FALSE);
MyGIS: Nástroj MySQLQuery Browser nabízí také dvě možnosti vytvoření tabulky. První možností je „Query Toolbar“, kde lze tabulku vytvořit pomocí SQL příkazu. Druhou možností je kliknout pravým tlačítkem na název databáze, ve výběru vpravo, do které má být tabulka přidána a zvolit CREATE NEW TABLE.
Otevře se nové okno (MySQL Table Editor), které je velice intuitivní a srozumitelné a zde tabulku jednoduše vytvoříme. Po potvrzení, že chceme tabulku vytvořit se objeví malé okno s SQL kódem pro vytvoření tabulky. Ten můžeme jednoduše zkopírovat a uložit si ho třeba jako skript pro další použití.
Ukázky kódů pro vytvoření tabulek s geometriemi (point, linestring, polygon, geometrycollection):
MkCTt1: CREATE TABLE `mygisdatabase`.`t1` (
`Name` CHAR(30),
`ID` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
`geometry` POINT,
PRIMARY KEY(`ID`)
)
ENGINE = MYISAM;
MkCTt2: CREATE TABLE `mygisdatabase`.`t2` (
`Name` CHAR(30),
`ID` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
`geometry` LINESTRING,
PRIMARY KEY(`ID`)
)
ENGINE = MYISAM;
MkCTt3: CREATE TABLE `mygisdatabase`.`t3` (
`Name` CHAR(30),
`ID` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
`geometry` POLYGON,
PRIMARY KEY(`ID`)
)
ENGINE = MYISAM;
MkCTt4: CREATE TABLE `mygisdatabase`.`t4` (
`Name` CHAR(30),
`ID` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
`geometry` GEOMETRYCOLLECTION,
PRIMARY KEY(`ID`)
)
ENGINE = MYISAM;
SpatiaLite: Tabulku ve SpatiaLite lze vytvořit pouze pomocí kódu, který se zadá do okna pro SQL dotaz a provede tlačítkem Execute SQL statement. Lze si to ale i trochu zjednodušit, pokud klikneme pravým tlačítkem na databázi a zvolíme CREATE NEW TABLE. Do okna pro SQL dotaz se přidá syntax nápověda pro tento příkaz.
Ukázka kódu, který lze zadat do okna pro SQL dotazování:
SkCTt1: CREATE TABLE "T1"(
"Name" character(30),
"ID" integer NOT NULL,
geometry geometry,
CONSTRAINT "T1_pkey" PRIMARY KEY ("ID")
);
Příkazy jsou ve všech třech databázích velmi podobné. V PostGIS je velmi důležité používat správné uvozovky - " (tedy dvojité, ne‘). V MyGIS se před názvem tabulky udává ještě název databáze (schematu), do kterého se tabulka uloží. Rychlost provedení příkazu v jednotlivých softwarech je velmi rychlá, zabere pár setin sekundy. Nejlépe propracované prostředí pro vytvoření tabulky má dle mého názoru MySQL Query Browser, který používá MySQL Table Editor.
Tyto tabulky jsou dále dostupné pro jakékoliv dotazování pomocí SQL, implementaci do databází a procesů založených na využití pouze jazyka SQL. Pokud chceme uložené záznamy využít v GIS, je přítomnost GDAL/OGR knihovny v softwaru nejčastějším řešením, které zajišťuje import a převedení do GIS formátu. Pro konkrétní chování je nezbytná existence dalších dvou metadatových tabulek: SPATIAL_REF_SYS a GEOMETRY_COLUMNS. V tabulce spatial_ref_sys jsou uložena číselná ID a textové popisy souřadnicových systémů používaných v prostorové databázi a tabulka geometry_columns obsahuje informace o sloupcích geometrie geoprvků.
Ukázka kódů pro vytvoření metadatových tabulek v PostGIS:
PkCTgeometry_columns: CREATE TABLE geometry_columns(
f_table_catalog character varying(256) NOT NULL,
f_table_schema character varying(256) NOT NULL,
f_table_name character varying(256) NOT NULL,
f_geometry_column character varying(256) NOT NULL,
coord_dimension integer NOT NULL,
srid integer NOT NULL,
"type" character varying(30) NOT NULL,
CONSTRAINT geometry_columns_pk PRIMARY KEY (
f_table_catalog, f_table_schema, f_table_name, f_geometry_column)
)
WITH (OIDS=TRUE);
PkCTspatial_ref_sys: CREATE TABLE spatial_ref_sys(
srid integer NOT NULL,
auth_name character varying(256),
auth_srid integer,
srtext character varying(2048),
proj4text character varying(2048),
CONSTRAINT spatial_ref_sys_pkey PRIMARY KEY (srid)
)
WITH (OIDS=FALSE);
Kódy pro vytvoření metadatových tabulek v MyGIS:
MkCTgeometry_columns: CREATE TABLE geometry_columns (
F_TABLE_CATALOG varchar(256),
F_TABLE_SCHEMA varchar(256),
F_TABLE_NAME varchar(256),
F_GEOMETRY_COLUMN varchar(256),
COORD_DIMENSION int(11),
SRID int(11),
TYPE varchar(256))
TYPE = InnoDB;
MkCTspatial_ref_sys: CREATE TABLE spatial_ref_sys (
SRID int(11),
AUTH_NAME varchar(256),
AUTH_SRID int(11),
SRTEXT varchar(2048))
TYPE = InnoDB;
Pro zobrazení vrstev (vytvořených v geodatabázi) v GIS softwaru (Janitor, QGIS), musí být vlastní prostorová tabulka zaevidována v metadatové tabulce geometry_columns (viz. kapitoly 3.4.1, 3.4.2). Jeden záznam v metadatové tabulce je roven jedné prostorové tabulce.
Příkazem INSERT se vloží do tabulky nový záznam. Za názvem tabulky se nejprve zadává seznam názvů sloupců (není třeba vždy zadávat) a poté seznam vkládaných hodnot. Je možné vložit jeden nebo současně více řádků hodnot (PostGIS, MyGIS).
V následujících ukázkách jsou vkládána data do tabulek vytvořených v předchozím kroku. Do každé databáze je do tabulek vložen bod, linie, polygon a kolekce. Kromě geometrických hodnot jsou vkládány hodnoty atributů Name a ID.
PostGIS: V pgAdminIII máme opět dvě možnosti vkládání záznamů. První možností je tlačítko pro SQL dotazování na liště nástrojů. To se zobrazí jen pokud je označena databáze, kterou chceme editovat. To je podobné jako při vytvoření tabulky. Po kliknutí se otevře nové okno pro dotazování, zde se zadá příkaz INSERT. Druhou možností je označit tabulku, do které chceme údaje vkládat, kliknout na ni pravým tlačítkem a z nabídky vybrat Skripty – Skript INSERT. Opět se objeví okno pro dotazování, ale bude již obsahovat skript pro příkaz, do kterého jen doplníme hodnoty (VALUES) na místo otazníků.
Ukázky kódů pro vkládání geoobjektů (bod, linie, polygon, kolekce) v PostGIS:
PkINt1: INSERT INTO "T1"
VALUES ('bod1', 3, GEOMFROMTEXT('POINT(72 27)'));
PkINt2: INSERT INTO "T2"("Name", "ID", geometry)
VALUES ('linie1', 4, GEOMFROMTEXT('LINESTRING(6500 3500, 8000 3000)')), ('linie2', 5, GEOMFROMTEXT('LINESTRING(0 0,1 1,2 2,3 3,4 4)'));
PkINt3: INSERT INTO "T3"("Name", "ID", geometry)
VALUES ('ctverec2', 2, GEOMFROMTEXT('POLYGON((7000 2000,5500 2000, 6500 3000, 6500 5000, 7000 5500, 8000 5000, 8500 4000, 8000 3000,8500 2500, 7000 2000))'));
PkINt4: INSERT INTO "T4"("Name", "ID", geometry)
VALUES ('kolekce1', 6, GEOMFROMTEXT('GEOMETRYCOLLECTION(POINT(1 1), LINESTRING(0 4, 4 6, 7 2))'));
MyGIS: V MySQL Query Browser jsou záznamy vkládány přes „Query Toolbar“. Query Toolbar obsahuje tři navigační tlačítka (GO BACK, NEXT, REFRESH), oblast pro dotazy, kde se zapisují jednotlivé kódy a dvě akční tlačítka (EXECUTE a STOP).
Ukázky kódů pro vkládání geoobjektů (bod, linie, polygon, kolekce) v MyGIS:
MkINt1: INSERT INTO t1
VALUES ('bod1', 3, GEOMFROMTEXT('POINT(72 27)')),('bod2', 2, GEOMFROMTEXT('POINT(70 40)'));
MkINt2: INSERT INTO t2 (Name, ID, geometry)
VALUES ('linie1', 4, GEOMFROMTEXT('LINESTRING(6500 3500, 8000 3000)'));
MkINt3: INSERT INTO t3 (Name, ID, geometry)
VALUES ('ctverec2', 2, GEOMFROMTEXT('POLYGON((7000 2000,5500 2000, 6500 3000, 6500 5000, 7000 5500, 8000 5000, 8500 4000, 8000 3000,8500 2500, 7000 2000))'));
MkINt4: INSERT INTO t4 (Name, ID, geometry)
VALUES ('kolekce1', 1, GEOMFROMTEXT('GEOMETRYCOLLECTION(POINT(1 1), LINESTRING(0 4, 4 6, 7 2))'));
Pozn. Pokud zadáváme tento příkaz pomocí MySQL příkazového řádku, je potřeba před název tabulky připsat název databáze, ve které se tabulka nachází a uvést názvy sloupců. (např. insert into spatialdatabase.t2 (Name, ID, geometry) values ('linie1', 4, geomfromtext('linestring(6500 3500, 8000 3000)'));)
SpatiaLite: Hodnoty záznamů se vkládají do tabulky pomocí kódu, který se zadá do okna pro SQL dotaz a provede tlačítkem Execute SQL statement.
Ukázky kódů, které lze zadat do okna pro SQL dotazování:
SkINt1: INSERT INTO "T1"
VALUES ('bod1', 3, GEOMFROMTEXT('POINT(72 27)'));
SkINt2: INSERT INTO "T2"("Name", "ID", geometry)
VALUES ('linie1', 4, GEOMFROMTEXT('LINESTRING(6500 3500, 8000 3000)'));
SkINt3: INSERT INTO "T3"("Name", "ID", geometry)
VALUES ('ctverec2', 2, GEOMFROMTEXT('POLYGON((7000 2000,5500 2000, 6500 3000, 6500 5000, 7000 5500, 8000 5000, 8500 4000, 8000 3000,8500 2500, 7000 2000))'));
SkINt4: INSERT INTO "T4"("Name", "ID", geometry)
VALUES ('kolekce1', 6, GEOMFROMTEXT('GEOMETRYCOLLECTION(POINT(1 1), LINESTRING(0 4, 4 6, 7 2))'));
Příkazy jsou opět ve všech třech databázích velmi podobné. V PostGIS a SpatiaLite je důležité používat dvojité uvozovky pro název tabulky a názvy atributů, které neobsahují geometrii. Pro textové hodnoty vkládané do tabulky se používají jednoduché uvozovky. V MyGIS se názvy tabulek a atributů do uvozovek nedávají, ale stejně jako v PostGIS a SpatiaLite se používají jednoduché uvozovky pro vkládání textových hodnot. Ve všech třech databázích se příkazy ukončují středníkem.
Pomocí funkce konverze formátu geometrie GEOMFROMTEXT se převede hodnota řetězce, ve WKT podobě, do interního formátu geometrie.
DELETE je syntakticky nejjednodušším příkazem. Je užíván pro mazání záznamů z tabulky. Všechny záznamy vybrané pomocí WHERE se po zadání příkazu DELETE odstraní. Není nutné zde zadávat sloupce, protože se beztoho odstraní celý záznam [2]. Pokud použijeme příkaz DELETE bez podmínky WHERE, odstraní se z tabulky všechny záznamy a tuto akci není možné vrátit zpět. Zůstane pouze tabulka se všemi názvy sloupců atd. Chceme-li odstranit i samotnou tabulku, použijeme příkaz DROP TABLE.
PostGIS: Pomocí pgAdminIII existují opět dvě možnosti mazání záznamů. První možnost je stejná jako pří vytváření tabulky a vložení záznamů, tedy pomocí SQL dotazovacího okna spustitelného pomocí tlačítka na liště nástrojů. Druhou možností je označit tabulku, ze které chceme údaje mazat, kliknout na ni pravým tlačítkem a z nabídky vybrat Skripty – Skript DELETE. Opět se objeví okno pro dotazování, ale bude již obsahovat skript pro příkaz, do kterého se doplní hodnoty. Celou tabulku můžeme odstranit příkazem DROP TABLE nebo ji označit, kliknout na ni pravým tlačítkem a vybrat ODSTRANIT.
Ukázka kódu pro mazání v PostGIS:
PkDE: DELETE FROM obojzivelnici
WHERE id_tax='Hyla arborea'
AND file_lok='mchu71_p';
MyGIS: V MySQL Query Browser mažeme záznamy stejně jako byly vkládány, tedy přes „Query Toolbar“. Query Toolbar obsahuje tři navigační tlačítka (GO BACK, NEXT, REFRESH), oblast pro dotazy, kde se zapisují jednotlivé kódy a dvě akční tlačítka (EXECUTE a STOP). Celou tabulku můžeme odstranit kliknutím pravým tlačítkem na vybranou tabulku a vybráním DROP TABLE nebo zadáním příkazu DROP TABLE do oblasti pro dotazy v Query Toolbaru.
Ukázka kódu pro mazání v MyGIS:
MkDE: DELETE FROM obojzivelnici
WHERE id_tax='Hyla arborea'
AND file_lok='mchu71_p';
SpatiaLite: Záznamy se z tabulky mažou stejně jako vkládají, tedy pomocí kódu, který se zadá do okna pro SQL dotaz a provede tlačítkem Execute SQL statement. Celou tabulku lze odstranit příkazem DROP TABLE nebo tento příkaz vyvolat kliknutím pravým tlačítkem na vybranou tabulku a výběrem DROP TABLE.
Ukázka kódu, který lze zadat do okna pro SQL dotazování:
SkDE: DELETE FROM obojzivelnici
WHERE id_tax='Hyla arborea'
AND file_lok='mchu71_p';
Pomocí příkazu UPDATE lze měnit obsah polí existujícího záznamu. UPDATE mění hodnoty uvedených sloupců ve všech řádcích, které splňují podmínku. Pouze sloupce, které mají být změněny, musí být uvedeny v klauzuli SET. Sloupce, které nejsou výslovně upravené, si ponechávají své předchozí hodnoty.
PostGIS: Opět existují dvě možnosti změny záznamů pomocí pgAdminIII. První možností je tlačítko pro SQL dotazování na liště nástrojů. To je podobné jako u všech předchozích příkazů. Po kliknutí se otevře nové okno pro dotazování, zde se zadá příkaz pro UPDATE záznamu. Druhou možností je označit tabulku, do které chceme údaje vkládat, kliknout na ni pravým tlačítkem a z nabídky vybrat Skripty – Skript UPDATE. Opět se nám objeví okno pro dotazování, ale bude již obsahovat skript pro příkaz, do kterého jen doplníme hodnoty.
Ukázka kódu pro změnu atributovou:
PkUPatr: UPDATE "T1"
SET "Name"='bodik'
WHERE "ID"=3;
Aktualizovala se tabulka T1. Byla nastavena hodnota bodik pro atribut Name pro záznam, který má atribut ID=3.
Ukázky pro změnu geometrickou (změnu tvaru):
1) celý tvar
PkUPtvar: UPDATE "T1"
SET geometry=GEOMFROMTEXT('POINT(82 30)')
WHERE "ID"=3;
V tabulce T1 byla změněna hodnota atributu geometry pro záznam s atributem ID=3.
2) jeden lomový bod
PkUPlombod: UPDATE "T2"
SET geometry=GEOMFROMTEXT('LINESTRING(6565 3545, 8000 3000)')
WHERE "ID"=4;
V tabulce T2 byla změněna hodnota atributu geometry pro záznam s atributem ID=4.
Pozn. Editovány jsou tvary, které byly výše vloženy.
MyGIS: V MySQL Query Browser lze editovat záznamy přímo nástrojem Edit, který je umístěn dole na liště (černá tužka), a který se musí aktivovat. Vybereme pole, změníme záznam a potvrdíme změny (Apply changes). Po dokončení editace se nástroj musí zpět deaktivovat. Další možnost, jak editovat, je napsat kód do Query Toolbar okna a potvrdit EXECUTE.
Ukázka kódu pro atributovou změnu:
MkUPatr: UPDATE t2
SET Name='carka'
WHERE geometry='LINESTRING(6500 3500, 8000 3000)';
Aktualizovala se tabulka T2. Byla nastavena hodnota carka pro atribut Name pro záznam, který má atribut geometry= LINESTRING(6500 3500, 8000 3000).
Ukázky pro změnu geometrickou (změnu tvaru):
1) celý tvar
MkUPtvar: UPDATE t4
SET geometry=GEOMFROMTEXT('GEOMETRYCOLLECTION(POINT(3 3), LINESTRING(1 5, 5 7, 8 3))')
WHERE ID=1;
V tabulce T4 byla změněna hodnota atributu geometry pro záznam s atributem ID=1.
2) jeden lomový bod
MkUPlombod: UPDATE t2
SET geometry=GEOMFROMTEXT('LINESTRING(6500 3500, 8008 3003)')
WHERE ID=4;
V tabulce T2 byla změněna hodnota atributu geometry pro záznam s atributem ID=4.
Pozn. Editovány jsou tvary, které byly výše vloženy.
SpatiaLite: Záznamy tabulky se mění stejně jako vkládají a mažou, pomocí kódu, který se zadá do okna pro SQL dotaz a provede tlačítkem Execute SQL statement. Další možností je editovat záznamy přímo v tabulce, kterou je možné zobrazit kliknutím pravým tlačítkem na tabulku, která má být změněna a zvolit EDIT TABLE ROWS. Takto se dají editovat pouze textové záznamy.
Ukázka kódu pro atributovou změnu, který lze zadat do okna pro SQL dotazování:
SkUPatr: UPDATE "T3"
SET "Name"='polygon22'
WHERE "ID"=2;
Aktualizovala se tabulka T3. Byla nastavena hodnota polygon22 pro atribut Name pro záznam, který má atribut ID=2.
Ukázky pro změnu geometrickou (změnu tvaru):
1) celý tvar
SkUPtvar: UPDATE "T3"
SET geometry=GEOMFROMTEXT('POLYGON((7007 2002,5505 2002, 6505 3003, 6505 5005, 7007 5505, 8008 5005, 8505 4004, 8008 3003,8505 2505, 7007 2002))')
WHERE "Name"='polygon22';
V tabulce T3 byla změněna hodnota atributu geometry pro záznam s atributem Name= polygon22.
2) jeden lomový bod
SkUPlombod: UPDATE "T2"
SET geometry=GEOMFROMTEXT('LINESTRING(6555 3555, 8000 3000)')
WHERE "ID"=4;
V tabulce T2 byla změněna hodnota atributu geometry pro záznam s atributem ID=4.
Pozn. Editovány jsou tvary, které byly výše vloženy.
V MyGIS není třeba psát uvozovky k názvu tabulky a názvům atributů v podmínce. Příkazy v PostGIS a SpatiaLite jsou stejné. Provedení příkazů zabere několik desetin sekundy. To platí pro všechny softwary.
SQL příkaz SELECT vrací sadu záznamů. Získává žádný nebo více řádků z jedné nebo více tabulek v databázi. Ve většině aplikací je SELECT nejčastěji užívaný příkaz.
SELECT má mnoho volitelných klauzulí:
WHERE - určuje, které řádky načíst.
GROUP BY - seskupuje řádky sdílející obsah tak, že agregační funkce může být použita pro každou skupinu.
HAVING - vybírá mezi skupinami definovanými GROUP BY.
ORDER BY – určuje pořadí, jak se řádky vrací.
V ukázkových kódech byly použity některé základní geometrické funkce. Při vstupu dat se pomocí funkce konverze formátu geometrie GEOMFROMTEXT převedla hodnota řetězce, ve WKT podobě, do interního formátu geometrie. V opačném případě se pomocí funkce AsText převede z interního formátu do WKT. Další možné převedení z interního formátu je pomocí funkce AsBinary, která převádí do WKB formátu. Funkce Dimension vrací vnitřní rozměr hodnoty geometrie. Funkce GeometryType vrací název typu geometrie, jenž je instance členem a funkce SRID vrací číslo, které označuje prostorový referenční systém. Tři poslední jmenované funkce patří do kategorie společných funkcí pro všechny typy geometrie. Pro datový typ linestring byly použity funkce: NumPoints, která vrací počet bodů na linii, dále funkce StartPoint a EndPoint, jenž zobrazí hodnoty počátečního a koncového bodu na linii a funkce Length(GLength), která vypočítá délku linie. Datový typ polygon zastupuje funkce Area, která vypočítá rozlohu objektu a datový typ geometrycollection zastupuje funkce NumGeometries, která vrací počet geometrických objektů obsažených v kolekci. Tyto funkce jsou používány k analyzování prostorových dat.
PostGIS: Jako v předchozích případech máme v pgAdminIII dvě možnosti dotazování na záznamy. První možností je tlačítko pro SQL dotazování na liště nástrojů. Druhou možností je označit tabulku, ze které chceme údaje vybírat, kliknout na ni pravým tlačítkem a z nabídky vybrat Skripty – Skript SELECT. Objeví se okno pro dotazování, ale bude již obsahovat jednoduchý skript pro příkaz, do kterého stačí doplnit hodnoty.
Ukázky kódů dotazování pomocí SELECT s některými prostorovými funkcemi:
PkSE1: SELECT * FROM "silnice_chkobk" ORDER BY "length";
Tento příkaz vybere vše z tabulky silnice_chkobk a seřadí podle atributu length.
PkSE2: SELECT id_tax, lokalita, file_lok, x, y, AsText(the_geom)
FROM "obojzivelnici";
Vybere z tabulky obojzivelnici atributy id_tax, lokalita, file_lok, x, y. Atribut the_geom vybere a pomocí prostorové funkce AsText, která ho zobrazí ve formátu WKT.
PkSE3: SELECT id_tax, lokalita, file_lok, x, y, AsText(the_geom), dat_zap
FROM "obojzivelnici"
WHERE "dat_zap">'2002-10-14';
Z tabulky obojzivelnici vybere atributy id_tax, lokalita, file_lok, x, y, the_geom s pomocí prostorové funkce AsText, která ho zobrazí ve formátu WKT a dat_zap s podmínkou, že dat_zap je větší než 2002-10-14.
PkSE4: SELECT trida_sil, cislo_sil, NumPoints(the_geom),
Length(the_geom), length, Dimension(the_geom),GeometryType(the_geom)
FROM "silnice_chkobk"
ORDER BY Length(the_geom) DESC LIMIT 10;
Příkaz vybere atributy trida_sil, cislo_sil, the_geom s prostorovou funkcí NumPoints, která vrací počet vrcholů na geometrickém objektu, the_geom s funkcí Length, jenž vrací délku objektu v mapových jednotkách, length, the_geom s funkcí Dimension, která vrací počet rozměrů a the_geom s funkcí GeometryType, která vrací typ třídy geometrie. Tyto atributy vybere z tabulky silnice_chkobk a bude je řadit pomocí výsledků prostorové funkce Length atributu the_geom, sestupně prvních deset záznamů.
PkSE5: SELECT count(*), kategorie
FROM "topo"
GROUP BY kategorie;
Příkaz vybere celkový počet jednotlivých kategorií z tabulky topo a seskupí je podle druhu kategorie.
PkSE6: SELECT trida_sil, cislo_sil, Length(the_geom)
FROM "silnice_chkobk"
GROUP BY trida_sil, cislo_sil, Length(the_geom)
HAVING Length(the_geom)>5000;
Tento příkaz vybere atributy trida_sil, cislo_sil a the_geom s prostorovou funkcí Length, která vrací délku objektů z tabulky silnice_chkobk a seskupí atributy trida_sil, cislo_sil a the_geom s funkcí Length mající atribut the_geom s funkcí Length větší než 5000.
MyGIS: V MySQL Query Browser jsou záznamy vybírány přes „Query Toolbar“. Query Toolbar obsahuje tři navigační tlačítka (GO BACK, NEXT, REFRESH), oblast pro dotazy, kde se zapisují jednotlivé kódy a dvě akční tlačítka (EXECUTE a STOP).
Ukázky kódů dotazování pomocí SELECT s některými prostorovými funkcemi:
MkSE1: SELECT * FROM silnice_chkobk ORDER BY trida_sil;
Vybere vše z tabulky silnice_chkobk a seřadí podle atributu trida_sil.
MkSE2: SELECT Name, ID, AsBinary(geometry)
FROM t2;
Vybere z tabulky T2 atributy Name, ID. Atribut geometry vybere a pomocí funkce AsBinary, která ho zobrazí ve formátu WKB. Bohužel, binární zobrazení není podporováno.
MkSE3: SELECT Name, AsText(StartPoint(geometry)), AsText(EndPoint(geometry))
FROM t2;
Z tabulky T2 vybere atribut Name a atribut geometry, který pomocí prostorových funkcí StartPoint a EndPoint určí první a poslední bod geometrie geoobjektu a zobrazí je pomocí funkce AsText ve formátu WKT.
MkSE4: SELECT area, Area(SHAPE), perimeter, level, kategorie
FROM topo
WHERE kategorie='les';
Vybere z tabulky topo atributy area, SHAPE s prostorovou funkcí Area, která vypočítá rozlohu geoobjektů, perimeter, level a kategorie s podmínkou, že záznam má atribut kategorie roven hodnotě les.
MkSE5: SELECT Name, ID, NumGeometries(geometry), GeometryType(geometry)
FROM t4;
Z tabulky T4 vybere atributy Name, ID a atribut geometry s funkcí NumGeometries, která určí počet typů geometrií obsažených v kolekci. Pomocí funkce GeometryType zobrazí typ geometrie, což bude kolekce.
MkSE6: SELECT id_tax, lokalita
FROM obojzivelnici
GROUP BY id_tax
HAVING lokalita ='7071-41';
Vybere z tabulky obojzivelnici atributy id_tax, lokalita. Seskupí záznamy podle atributu id_tax a současně musí být atribut lokalita rovna hodnotě 7071-41.
SpatiaLite: Záznamy tabulky se vybírají pomocí kódu, který se zadá do okna pro SQL dotaz a provede tlačítkem Execute SQL statement.
Ukázky kódů, které lze zadat do okna pro SQL dotazování:
SkSE1: SELECT * FROM obojzivelnici ORDER BY id_tax;
Vybere vše z tabulky obojzivelnici a seřadí podle atributu id_tax.
SkSE2: SELECT id_tax, lokalita, file_lok, x, y, AsText(geometry), dat_zap, SRID(geometry)
FROM obojzivelnici;
Vybere z tabulky obojzivelnici atributy id_tax, lokalita, file_lok, x, y, dat_zap. Atribut geometry vybere a pomocí funkce AsText ho zobrazí ve formátu WKT a pomocí funkce SRID zobrazí číslo projekčního systému.
SkSE3: SELECT trida_sil, cislo_sil, NumPoints(Geometry), GLength(Geometry), length, Dimension(Geometry), GeometryType(Geometry)
FROM silnice_chkobk
ORDER BY GLength(Geometry) DESC LIMIT 10;
Příkaz vybere atributy trida_sil, cislo_sil, Geometry s funkcí NumPoints, která vrací počet vrcholů na geometrickém objektu, Geometry s funkcí GLength, jenž vrací délku objektu v mapových jednotkách, length, Geometry s funkcí Dimension, která vrací počet rozměrů a Geometry s funkcí GeometryType, která vrací typ třídy geometrie. Tyto atributy vybere z tabulky silnice_chkobk a bude je řadit pomocí výsledků funkce GLength atributu Geometry, sestupně prvních deset záznamů.
SkSE4: SELECT count(*), GeometryType(geometry)
FROM topo
GROUP BY GeometryType(geometry);
Příkaz vybere celkový počet jednotlivých typů tříd geometrie z tabulky topo a seskupí je podle typu geometrie.
SkSE5: SELECT area, Area(geometry), perimeter, level, kategorie
FROM topo
WHERE kategorie='les';
Vybere z tabulky topo atributy area, geometry s prostorovou funkcí Area, která vypočítá rozlohu geoobjektů, perimeter, level a kategorie s podmínkou, že záznam má atribut kategorie roven hodnotě les.
SkSE6: SELECT cislo_sil, trida_sil, length
FROM silnice_chkobk
GROUP BY length
HAVING length > 1000;
Tento příkaz vybere z tabulky silnice_chkobk atributy cislo_sil, trida_sil a length. Seskupí hodnoty podle atributu length, který má hodnotu větší než 1000.
Příkazy SELECT jsou ve všech třech databázích téměř stejné. V PostGIS je nutné dávat názvy tabulek a názvy atributů v podmínce WHERE do dvojitých uvozovek. Ve všech třech databázích se textové hodnoty atributů uvozují jednoduchými uvozovkami.
© Libor KIMPL | Bakalářská práce | Vedoucí práce: RNDr. Vilém Pechanec, Ph.D. | Katedra Geoinformatiky UP Olomouc | 2010