Difference between revisions of "Příklady použití prostorových operátorů"

From Wikivyuka
Jump to: navigation, search
m
m (Co je výsledkem tohoto dotazu?)
 
(18 intermediate revisions by the same user not shown)
Line 1: Line 1:
'''Použití metod objektu SDO_GEOMETRY''':
+
==Použití metod objektu SDO_GEOMETRY==
  
Metody vrací informace o prostorových objektech uložených v databázi. POZOR - někdy fungují pouze v "ostré" verzi se Spatial Modulem, Locator nestačí.
+
Použití metod, které jsou definovány pro třídu objektů SDO_Geometry. Zjišťujeme hodnoty atributů o prostorových složkách uložených objektů v databázi.  
  
SELECT c.name, c.shape.Get_Dims() {vrací dimenzi geoobjektu, lze zaměnit s metodou ST_CoordDim, obě vrací stejné výsledky}
+
SELECT c.name, c.shape.Get_Dims() -- {vrací dimenzi geoobjektu, lze zaměnit s metodou ST_CoordDim, obě vrací stejné výsledky}
 
   FROM cola_markets c WHERE c.name = 'cola_b';
 
   FROM cola_markets c WHERE c.name = 'cola_b';
 
    
 
    
SELECT c.name, c.shape.Get_GType() {vrací hodnotu označení typu geoobjektu uloženou v parametru SDO_GTYPE}
+
SELECT c.name, c.shape.Get_GType() {vrací hodnotu označení typu geoobjektu uloženou v parametru SDO_GTYPE}
 
   FROM cola_markets c WHERE c.name = 'cola_b';
 
   FROM cola_markets c WHERE c.name = 'cola_b';
  
SELECT c.name, c.shape.Get_WKT() {vrací označení typu geoobjektu a jeho koordinát}
+
SELECT c.name, c.shape.Get_WKT() {vrací označení typu geoobjektu a jeho koordinát}
 
   FROM cola_markets c WHERE c.name = 'cola_b';
 
   FROM cola_markets c WHERE c.name = 'cola_b';
  
SELECT c.name, c.shape.ST_IsValid() {ověřuje validnost geoobjektu, podle standardu The ISO/IEC SQL Multimedia standard nese označení well formed for valid. Toleranční hodnota je 0.001.}
+
SELECT c.name, c.shape.ST_IsValid() {ověřuje validnost geoobjektu, podle standardu "The ISO/IEC SQL Multimedia standard" nese označení "well formed for valid". Toleranční hodnota je 0.001.}
   FROM cola_markets c WHERE c.name = 'cola_b';  
+
   FROM cola_markets c WHERE c.name = 'cola_b';
 
+
 
Poznámka: některé fungují pouze v "ostré" verzi se Spatial Modulem, Locator nestačí.
+
==Příklady na použití prostorových složek při dotazování==
  
<hr>
+
====Vyhledání na základě omezení hodnoty jedné z koordinát====
  
 
Vložte body 90, 91, 92 a zkuste vyhledávací funkci přes jednu souřadnici. Lze použít porovnávací operátory jako u jiných číselných hodnot.
 
Vložte body 90, 91, 92 a zkuste vyhledávací funkci přes jednu souřadnici. Lze použít porovnávací operátory jako u jiných číselných hodnot.
  
SELECT * from cola_markets c  
+
SELECT * from cola_markets c  
 
  WHERE c.shape.SDO_POINT.X > 8; {vyhledání geoobjektu typu bod na základě hodnot X-ové složky koordinát}
 
  WHERE c.shape.SDO_POINT.X > 8; {vyhledání geoobjektu typu bod na základě hodnot X-ové složky koordinát}
  
<hr>
+
====Výpočet obsahu geoobjektu/ů:====
  
'''Výpočet obsahu geoobjektu/ů:'''
+
SELECT c.name, SDO_GEOM.SDO_AREA(c.shape, 0.005)  
 
 
SELECT c.name, SDO_GEOM.SDO_AREA(c.shape, 0.005)  
 
 
  FROM cola_markets c  
 
  FROM cola_markets c  
 
  WHERE c.name = 'cola_a'; {vybrán objekt cola_a}
 
  WHERE c.name = 'cola_a'; {vybrán objekt cola_a}
  
SELECT name, SDO_GEOM.SDO_AREA(shape, 0.005)  
+
SELECT name, SDO_GEOM.SDO_AREA(shape, 0.005)  
 
  FROM cola_markets; {všech v tabulce cola_markets}
 
  FROM cola_markets; {všech v tabulce cola_markets}
  
<hr>
+
====Vyhledání nejbližšího geoobjektu od určeného bodu:====
  
'''Vyhledání nejbližšího geoobjektu od určeného bodu:'''
+
SELECT c.mkt_id, c.name, c.shape {vyhledání nejbližšího geoobjektu k zadanému bodu (10,7), v případě více blízkých je možné zvýšit počet v parametru "sdo_num_res"}
 
 
SELECT c.mkt_id, c.name  {vyhledání nejbližšího geoobjektu k zadanému bodu (10,7), v případě více blízkých je možné zvýšit počet v parametru "sdo_num_res"}
 
 
  FROM cola_markets c   
 
  FROM cola_markets c   
 
  WHERE SDO_NN(c.shape, sdo_geometry(2001, NULL, sdo_point_type(10,7,NULL), NULL, NULL), 'sdo_num_res=1') = 'TRUE';
 
  WHERE SDO_NN(c.shape, sdo_geometry(2001, NULL, sdo_point_type(10,7,NULL), NULL, NULL), 'sdo_num_res=1') = 'TRUE';
  
<hr>
+
====Vyhledání geoobjektů, které mají jakoukoli vazbu na objekt definovaný v dotaze :====
  
'''Vyhledání geoobjektů, které mají jakoukoli vazbu na objekt definovaný v dotaze :'''
+
SELECT c.mkt_id, c.name, c.shape
 
 
SELECT c.mkt_id, c.name
 
 
   FROM cola_markets c
 
   FROM cola_markets c
 
   WHERE SDO_ANYINTERACT(c.shape,
 
   WHERE SDO_ANYINTERACT(c.shape,
Line 55: Line 49:
 
             ) = 'TRUE';
 
             ) = 'TRUE';
  
select SDO_GEOM.SDO_DISTANCE(sdo_point(1,1,1), sdo_point(1,1,1), 0.005)
+
====Mají nějakou vazbu zvolené geoobjekty?====
from cola_markets;
 
  
<hr>
+
SELECT SDO_GEOM.RELATE(c_b.shape, 'anyinteract', c_d.shape, 0.005)
 +
FROM cola_markets c_b, cola_markets c_d
 +
WHERE c_b.name = 'cola_b' AND c_d.name = 'cola_d';
  
'''Vyhledání geoobjektů, které obsahují objekt definovaný v dotaze :'''
+
====Vyhledání geoobjektů, které obsahují objekt definovaný v dotaze :====
  
SELECT c.mkt_id, c.name
+
SELECT c.mkt_id, c.name, c.shape
 
   FROM cola_markets c
 
   FROM cola_markets c
 
   WHERE SDO_CONTAINS(c.shape,
 
   WHERE SDO_CONTAINS(c.shape,
Line 70: Line 65:
 
             ) = 'TRUE';
 
             ) = 'TRUE';
  
<hr>
 
  
'''Co je výsledkem tohoto dotazu?'''
+
====Vyhledání geoobjektů, které jsou obsaženy v objektu definovaném v dotaze :====
 +
 
 +
SELECT c.mkt_id, c.name, c.shape
 +
  FROM cola_markets c
 +
  WHERE SDO_COVEREDBY(c.shape,
 +
            SDO_GEOMETRY(2003, NULL, NULL,
 +
              SDO_ELEM_INFO_ARRAY(1,1003,3),
 +
              SDO_ORDINATE_ARRAY(1,1, 5,8))
 +
            ) = 'TRUE';
 +
 
 +
====Vyhledání vzdálenosti dvou geoobjektů :====
 +
 
 +
SELECT SDO_GEOM.SDO_DISTANCE(c_b.shape, c_d.shape, 0.005)
 +
FROM cola_markets c_b, cola_markets c_d
 +
WHERE c_b.name = 'cola_b' AND c_d.name = 'cola_d';
 +
 
 +
====Co je výsledkem tohoto dotazu?====
  
select unique sdo_geom.sdo_distance(SDO_GEOMETRY(
+
select unique sdo_geom.sdo_distance(SDO_GEOMETRY(
 
     2001,
 
     2001,
 
     NULL,
 
     NULL,
Line 87: Line 97:
 
     from cola_markets;
 
     from cola_markets;
  
<hr>
+
Poznámka: některé operátory mohou fungovat pouze v "ostré" verzi se Spatial Modulem, Locator nestačí.
  
 
[http://gis.vsb.cz/wikivyuka/index.php/Prostorov%C3%A9_datab%C3%A1ze Zpět na stránku PDB]
 
[http://gis.vsb.cz/wikivyuka/index.php/Prostorov%C3%A9_datab%C3%A1ze Zpět na stránku PDB]

Latest revision as of 08:33, 17 May 2013

Použití metod objektu SDO_GEOMETRY

Použití metod, které jsou definovány pro třídu objektů SDO_Geometry. Zjišťujeme hodnoty atributů o prostorových složkách uložených objektů v databázi.

SELECT c.name, c.shape.Get_Dims() -- {vrací dimenzi geoobjektu, lze zaměnit s metodou ST_CoordDim,  obě vrací stejné výsledky}
 FROM cola_markets c WHERE c.name = 'cola_b';
 
SELECT c.name, c.shape.Get_GType() {vrací hodnotu označení typu geoobjektu uloženou v parametru SDO_GTYPE}
 FROM cola_markets c WHERE c.name = 'cola_b';
SELECT c.name, c.shape.Get_WKT() {vrací označení typu geoobjektu a jeho koordinát}
 FROM cola_markets c WHERE c.name = 'cola_b';
SELECT c.name, c.shape.ST_IsValid() {ověřuje validnost geoobjektu, podle standardu "The ISO/IEC SQL Multimedia standard" nese označení "well formed for valid". Toleranční hodnota je 0.001.}
 FROM cola_markets c WHERE c.name = 'cola_b';

Příklady na použití prostorových složek při dotazování

Vyhledání na základě omezení hodnoty jedné z koordinát

Vložte body 90, 91, 92 a zkuste vyhledávací funkci přes jednu souřadnici. Lze použít porovnávací operátory jako u jiných číselných hodnot.

SELECT * from cola_markets c 
WHERE c.shape.SDO_POINT.X > 8; {vyhledání geoobjektu typu bod na základě hodnot X-ové složky koordinát}

Výpočet obsahu geoobjektu/ů:

SELECT c.name, SDO_GEOM.SDO_AREA(c.shape, 0.005) 
FROM cola_markets c 
WHERE c.name = 'cola_a'; {vybrán objekt cola_a}
SELECT name, SDO_GEOM.SDO_AREA(shape, 0.005) 
FROM cola_markets; {všech v tabulce cola_markets}

Vyhledání nejbližšího geoobjektu od určeného bodu:

SELECT c.mkt_id, c.name, c.shape  {vyhledání nejbližšího geoobjektu k zadanému bodu (10,7), v případě více blízkých je možné zvýšit počet v parametru "sdo_num_res"}
FROM cola_markets c  
WHERE SDO_NN(c.shape, sdo_geometry(2001, NULL, sdo_point_type(10,7,NULL), NULL, NULL), 'sdo_num_res=1') = 'TRUE';

Vyhledání geoobjektů, které mají jakoukoli vazbu na objekt definovaný v dotaze :

SELECT c.mkt_id, c.name, c.shape
 FROM cola_markets c
 WHERE SDO_ANYINTERACT(c.shape,
           SDO_GEOMETRY(2003, NULL, NULL,
             SDO_ELEM_INFO_ARRAY(1,1003,3),
             SDO_ORDINATE_ARRAY(4,6, 8,8))
           ) = 'TRUE';

Mají nějakou vazbu zvolené geoobjekty?

SELECT SDO_GEOM.RELATE(c_b.shape, 'anyinteract', c_d.shape, 0.005)
FROM cola_markets c_b, cola_markets c_d
WHERE c_b.name = 'cola_b' AND c_d.name = 'cola_d';

Vyhledání geoobjektů, které obsahují objekt definovaný v dotaze :

SELECT c.mkt_id, c.name, c.shape
 FROM cola_markets c
 WHERE SDO_CONTAINS(c.shape,
           SDO_GEOMETRY(2003, NULL, NULL,
             SDO_ELEM_INFO_ARRAY(1,1003,3),
             SDO_ORDINATE_ARRAY(7,8, 9,9))
           ) = 'TRUE';


Vyhledání geoobjektů, které jsou obsaženy v objektu definovaném v dotaze :

SELECT c.mkt_id, c.name, c.shape
 FROM cola_markets c
 WHERE SDO_COVEREDBY(c.shape,
           SDO_GEOMETRY(2003, NULL, NULL,
             SDO_ELEM_INFO_ARRAY(1,1003,3),
             SDO_ORDINATE_ARRAY(1,1, 5,8))
           ) = 'TRUE';

Vyhledání vzdálenosti dvou geoobjektů :

SELECT SDO_GEOM.SDO_DISTANCE(c_b.shape, c_d.shape, 0.005)
FROM cola_markets c_b, cola_markets c_d
WHERE c_b.name = 'cola_b' AND c_d.name = 'cola_d';

Co je výsledkem tohoto dotazu?

select unique sdo_geom.sdo_distance(SDO_GEOMETRY(
    2001,
    NULL,
    SDO_POINT_TYPE(10, 20, NULL),
    NULL,
    NULL), SDO_GEOMETRY(
    2001,
    NULL,
    SDO_POINT_TYPE(0, 0, NULL),
    NULL,
    NULL), 0.5)
    from cola_markets;

Poznámka: některé operátory mohou fungovat pouze v "ostré" verzi se Spatial Modulem, Locator nestačí.

Zpět na stránku PDB