Difference between revisions of "Příkazy k vytvoření cola markets"

From Wikivyuka
Jump to: navigation, search
 
m (Použití operátorů nad vloženými daty)
 
(24 intermediate revisions by the same user not shown)
Line 1: Line 1:
 
Převzato a poskládáno ze stránek fy Oracle:
 
Převzato a poskládáno ze stránek fy Oracle:
  
CREATE TABLE cola_markets (
+
Stránka k prostorovým operacím: [http://download.oracle.com/docs/cd/B28359_01/appdev.111/b28400/sdo_operat.htm]
 +
 
 +
===Vytvoření tabulky s prostorovým atributem===
 +
 
 +
CREATE TABLE cola_markets (
 
   mkt_id NUMBER PRIMARY KEY,
 
   mkt_id NUMBER PRIMARY KEY,
 
   name VARCHAR2(32),
 
   name VARCHAR2(32),
 
   shape SDO_GEOMETRY);
 
   shape SDO_GEOMETRY);
  
INSERT INTO cola_markets VALUES(
+
===Naplnění tabulky ukázkovými daty===
 +
 
 +
INSERT INTO cola_markets VALUES(
 
   1,
 
   1,
 
   'cola_a',
 
   'cola_a',
Line 13: Line 19:
 
     NULL,
 
     NULL,
 
     NULL,
 
     NULL,
     SDO_ELEM_INFO_ARRAY(1,1003,3), -- one rectangle (1003 = exterior)
+
     SDO_ELEM_INFO_ARRAY(1,1003,3), -- one rectangle (1003 - exterior exterior polygon ring, 3 - rectangle stačí dva body k nadefinování(lower left and upper right))
 
     SDO_ORDINATE_ARRAY(1,1, 5,7) -- only 2 points needed to
 
     SDO_ORDINATE_ARRAY(1,1, 5,7) -- only 2 points needed to
 
   )
 
   )
);
+
);
  
INSERT INTO cola_markets VALUES(
+
INSERT INTO cola_markets VALUES(
 
   2,
 
   2,
 
   'cola_b',
 
   'cola_b',
Line 25: Line 31:
 
     NULL,
 
     NULL,
 
     NULL,
 
     NULL,
     SDO_ELEM_INFO_ARRAY(1,1003,1), -- one polygon (exterior polygon ring)
+
     SDO_ELEM_INFO_ARRAY(1,1003,1), -- one polygon (1003 - exterior polygon ring - vnější polygon, s body definovanými proti směru hodinových ručiček)
 
     SDO_ORDINATE_ARRAY(5,1, 8,1, 8,6, 5,7, 5,1)
 
     SDO_ORDINATE_ARRAY(5,1, 8,1, 8,6, 5,7, 5,1)
 
   )
 
   )
);
+
);
  
INSERT INTO cola_markets VALUES(
+
INSERT INTO cola_markets VALUES(
 
   3,
 
   3,
 
   'cola_c',
 
   'cola_c',
Line 40: Line 46:
 
     SDO_ORDINATE_ARRAY(3,3, 6,3, 6,5, 4,5, 3,3)
 
     SDO_ORDINATE_ARRAY(3,3, 6,3, 6,5, 4,5, 3,3)
 
   )
 
   )
);
+
);
  
INSERT INTO cola_markets VALUES(
+
INSERT INTO cola_markets VALUES(
 
   4,
 
   4,
 
   'cola_d',
 
   'cola_d',
Line 49: Line 55:
 
     NULL,
 
     NULL,
 
     NULL,
 
     NULL,
     SDO_ELEM_INFO_ARRAY(1,1003,4), -- one circle
+
     SDO_ELEM_INFO_ARRAY(1,1003,4), -- 4 - one circle - definován třemi body
 
     SDO_ORDINATE_ARRAY(8,7, 10,9, 8,11)
 
     SDO_ORDINATE_ARRAY(8,7, 10,9, 8,11)
 
   )
 
   )
);
+
);
  
Vyvoření gridu před vytvořením spatial indexu.
+
Zobrazení vložených dat - výstup v GeoRaptoru [[Media:vizColaMarkets.png | obrázek sféry vlivu obchodů]]
  
INSERT INTO user_sdo_geom_metadata
+
==Tvorba prostorového indexu==
    (TABLE_NAME,
+
 
    COLUMN_NAME,
+
===Zápis informací o prostorové složce do tabulky s metadaty ===
    DIMINFO,
+
 
    SRID)
+
describe user_sdo_geom_metadata; {zjištění struktury tabulky uchovávající metadata}
 +
 
 +
INSERT INTO user_sdo_geom_metadata {vložení metainformací o tabulce cola_markets, pro kterou bude vytvořen prostorový index nad sloupcem "shape"}
 +
  (TABLE_NAME, COLUMN_NAME, DIMINFO, SRID)  
 
   VALUES (
 
   VALUES (
 
   'cola_markets',
 
   'cola_markets',
Line 69: Line 78:
 
     ),
 
     ),
 
   NULL  -- SRID
 
   NULL  -- SRID
);
+
  );
  
describe user_sdo_geom_metadata;
+
===Vytvoření prostorového indexu===
  
CREATE INDEX cola_spatial_idx
+
CREATE INDEX cola_spatial_idx  
 
   ON cola_markets(shape)
 
   ON cola_markets(shape)
 
   INDEXTYPE IS MDSYS.SPATIAL_INDEX;
 
   INDEXTYPE IS MDSYS.SPATIAL_INDEX;
  
'''Operace nad prostorovými daty:'''
+
select 'karel' {pomocný kontrolní dotaz}
 +
from cola_markets;
 +
 
 +
==Ukázkové geometrie==
 +
 
 +
===Vkládání dalších prvků do tabulky===
 +
 
    
 
    
SELECT SDO_GEOM.SDO_INTERSECTION(c_a.shape, c_c.shape, 0.005)
+
INSERT INTO cola_markets VALUES(
   FROM cola_markets c_a, cola_markets c_c
+
  90,
   WHERE c_a.name = 'cola_a' AND c_c.name = 'cola_b';
+
  'point_only',
    
+
  SDO_GEOMETRY(
SELECT SDO_GEOM.RELATE(c_b.shape, 'anyinteract', c_d.shape, 0.005)
+
      2001,
   FROM cola_markets c_b, cola_markets c_d
+
      NULL,
   WHERE c_b.name = 'cola_a' AND c_d.name = 'cola_c';
+
      SDO_POINT_TYPE(12, 14, NULL),
    
+
      NULL,
SELECT name, SDO_GEOM.SDO_AREA(shape, 0.005) FROM cola_markets;
+
      NULL));
 +
 
 +
INSERT INTO cola_markets VALUES(
 +
   91,
 +
   'point_only',
 +
  SDO_GEOMETRY(
 +
      2001,
 +
      NULL,
 +
      SDO_POINT_TYPE(4, 4, NULL),
 +
      NULL,
 +
      NULL));
 +
 
 +
INSERT INTO cola_markets VALUES(
 +
  92,
 +
  'point_only',
 +
   SDO_GEOMETRY(
 +
      2001,
 +
      NULL,
 +
      SDO_POINT_TYPE(12, 12, NULL),
 +
      NULL,
 +
      NULL));
 +
 
 +
Ukázka polygonu s "dírou"
 +
 
 +
INSERT INTO cola_markets VALUES(
 +
   10,
 +
   'polygon_with_hole',
 +
   SDO_GEOMETRY(
 +
    2003, -- two-dimensional polygon
 +
    NULL,
 +
    NULL,
 +
    SDO_ELEM_INFO_ARRAY(1,1003,1, 19,2003,1), -- polygon with hole, jsou zde dva prvky,
 +
    -- 2003 je polygon definován jako interior polygon ring, jeho koordináty začínají od pozice 19 v poli koordinát
 +
    SDO_ORDINATE_ARRAY(2,4, 4,3, 10,3, 13,5, 13,9, 11,13, 5,13, 2,11, 2,4, 7,5, 7,10, 10,10, 10,5, 7,5)
 +
  )
 +
);
  
SELECT c.name, SDO_GEOM.SDO_AREA(c.shape, 0.005) FROM cola_markets c
+
==Použití operátorů nad vloženými daty==
  WHERE c.name = 'cola_a';
 
  
SELECT SDO_GEOM.SDO_DISTANCE(c_b.shape, c_d.shape, 0.005)
+
SDO_FILTER(geometry1, geometry2, param);  
  FROM cola_markets c_b, cola_markets c_d
 
  WHERE c_b.name = 'cola_b' AND c_d.name = 'cola_c';
 
  
SELECT c.name, SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXT(c.shape, 0.005)
+
Příklady na použití [[sdo_filter]]
  FROM cola_markets c WHERE c.name = 'cola_c';
 
  
'''Nová tabulka pro uchování výsledků:'''
+
SDO_NN(geometry1, geometry2, param [, number]);
  
CREATE TABLE val_results (sdo_rowid ROWID, result VARCHAR2(2000));
+
Příklad na použití [[sdo_nn]] (nad geometrickou složkou je nutno mít vytvořený prostorový index)
  
CALL SDO_GEOM.VALIDATE_LAYER_WITH_CONTEXT('COLA_MARKETS', 'SHAPE',
+
SDO_NN_DISTANCE(number);  
  'VAL_RESULTS', 2);
 
 
 
SELECT * from val_results;
 
  
Použití metod objektu SDO_GEOMETRY:
+
Příklad na použití [[SDO_NN_DISTANCE]] (nad geometrickou složkou je nutno mít vytvořený prostorový index)
  
SELECT c.shape.Get_WKT()
+
SDO_WITHIN_DISTANCE(geometry1, aGeom, params);  
  FROM cola_markets c WHERE c.name = 'cola_b';
 
 
 
SELECT c.shape.Get_Dims()
 
  FROM cola_markets c WHERE c.name = 'cola_b';
 
 
 
SELECT c.shape.Get_GType()
 
  FROM cola_markets c WHERE c.name = 'cola_b';
 
 
 
SELECT c.mkt_id, c.name
 
  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';
 
  
select SDO_GEOM.SDO_DISTANCE(sdo_point(1,1,1), sdo_point(1,1,1), 0.005)
+
Příklady na použití [[SDO_WITHIN_DISTANCE]]
from cola_markets;
 
  
select SDO_GEOMETRY(
 
    2003,  -- two-dimensional polygon
 
    NULL,
 
    NULL,
 
    SDO_ELEM_INFO_ARRAY(1,1003,3), -- one rectangle (1003 = exterior)
 
    SDO_ORDINATE_ARRAY(1,1, 5,7) -- only 2 points needed to
 
          -- define rectangle (lower left and upper right) with
 
          -- Cartesian-coordinate data
 
  ) from cola_markets;
 
 
 
SELECT SDO_GEOMETRY('SDO_POINT_TYPE(1, 1, null)')
 
FROM from dual;
 
  
select 'karel'
+
<!-- SDO_INSIDE(geometry1, geometry2); Příklady na použití [[sdo_inside]] -->
from cola_markets;
 
  
select unique sdo_geom.sdo_distance(SDO_GEOMETRY(
+
[http://gis.vsb.cz/wikivyuka/index.php/Prostorov%C3%A9_datab%C3%A1ze Zpět na stránku PDB]
    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;
 
   
 
INSERT INTO cola_markets VALUES(
 
  90,
 
  'point_only',
 
  SDO_GEOMETRY(
 
      2001,
 
      NULL,
 
      SDO_POINT_TYPE(12, 14, NULL),
 
      NULL,
 
      NULL));
 

Latest revision as of 05:47, 5 April 2012

Převzato a poskládáno ze stránek fy Oracle:

Stránka k prostorovým operacím: [1]

Vytvoření tabulky s prostorovým atributem

CREATE TABLE cola_markets (
 mkt_id NUMBER PRIMARY KEY,
 name VARCHAR2(32),
 shape SDO_GEOMETRY);

Naplnění tabulky ukázkovými daty

INSERT INTO cola_markets VALUES(
 1,
 'cola_a',
 SDO_GEOMETRY(
   2003,  -- two-dimensional polygon
   NULL,
   NULL,
   SDO_ELEM_INFO_ARRAY(1,1003,3), -- one rectangle (1003 - exterior exterior polygon ring, 3 - rectangle stačí dva body k nadefinování(lower left and upper right))
   SDO_ORDINATE_ARRAY(1,1, 5,7) -- only 2 points needed to
  )
);
INSERT INTO cola_markets VALUES(
 2,
 'cola_b',
 SDO_GEOMETRY(
   2003,  -- two-dimensional polygon
   NULL,
   NULL,
   SDO_ELEM_INFO_ARRAY(1,1003,1), -- one polygon (1003 - exterior polygon ring - vnější polygon, s body definovanými proti směru hodinových ručiček)
   SDO_ORDINATE_ARRAY(5,1, 8,1, 8,6, 5,7, 5,1)
 )
);
INSERT INTO cola_markets VALUES(
 3,
 'cola_c',
 SDO_GEOMETRY(
   2003,  -- two-dimensional polygon
   NULL,
   NULL,
   SDO_ELEM_INFO_ARRAY(1,1003,1), -- one polygon (exterior polygon ring)
   SDO_ORDINATE_ARRAY(3,3, 6,3, 6,5, 4,5, 3,3)
 )
);
INSERT INTO cola_markets VALUES(
 4,
 'cola_d',
 SDO_GEOMETRY(
   2003,  -- two-dimensional polygon
   NULL,
   NULL,
   SDO_ELEM_INFO_ARRAY(1,1003,4), -- 4 - one circle - definován třemi body
   SDO_ORDINATE_ARRAY(8,7, 10,9, 8,11)
 )
);

Zobrazení vložených dat - výstup v GeoRaptoru obrázek sféry vlivu obchodů

Tvorba prostorového indexu

Zápis informací o prostorové složce do tabulky s metadaty

describe user_sdo_geom_metadata; {zjištění struktury tabulky uchovávající metadata}

INSERT INTO user_sdo_geom_metadata {vložení metainformací o tabulce cola_markets, pro kterou bude vytvořen prostorový index nad sloupcem "shape"}
 (TABLE_NAME, COLUMN_NAME, DIMINFO, SRID) 
 VALUES (
 'cola_markets',
 'shape',
 SDO_DIM_ARRAY(   -- 20X20 grid
   SDO_DIM_ELEMENT('X', 0, 20, 0.005),
   SDO_DIM_ELEMENT('Y', 0, 20, 0.005)
    ),
 NULL   -- SRID
 );

Vytvoření prostorového indexu

CREATE INDEX cola_spatial_idx 
  ON cola_markets(shape)
  INDEXTYPE IS MDSYS.SPATIAL_INDEX;
select 'karel' {pomocný kontrolní dotaz}
from cola_markets;

Ukázkové geometrie

Vkládání dalších prvků do tabulky

INSERT INTO cola_markets VALUES(
  90,
  'point_only',
  SDO_GEOMETRY(
     2001,
     NULL,
     SDO_POINT_TYPE(12, 14, NULL),
     NULL,
     NULL));
INSERT INTO cola_markets VALUES(
  91,
  'point_only',
  SDO_GEOMETRY(
     2001,
     NULL,
     SDO_POINT_TYPE(4, 4, NULL),
     NULL,
     NULL));
INSERT INTO cola_markets VALUES(
  92,
  'point_only',
  SDO_GEOMETRY(
     2001,
     NULL,
     SDO_POINT_TYPE(12, 12, NULL),
     NULL,
     NULL));

Ukázka polygonu s "dírou"

INSERT INTO cola_markets VALUES(
 10,
 'polygon_with_hole',
 SDO_GEOMETRY(
   2003,  -- two-dimensional polygon
   NULL,
   NULL,
   SDO_ELEM_INFO_ARRAY(1,1003,1, 19,2003,1), -- polygon with hole, jsou zde dva prvky, 
   -- 2003 je polygon definován jako interior polygon ring, jeho koordináty začínají od pozice 19 v poli koordinát
   SDO_ORDINATE_ARRAY(2,4, 4,3, 10,3, 13,5, 13,9, 11,13, 5,13, 2,11, 2,4, 7,5, 7,10, 10,10, 10,5, 7,5)
 )
);

Použití operátorů nad vloženými daty

SDO_FILTER(geometry1, geometry2, param); 

Příklady na použití sdo_filter

SDO_NN(geometry1, geometry2, param [, number]); 

Příklad na použití sdo_nn (nad geometrickou složkou je nutno mít vytvořený prostorový index)

SDO_NN_DISTANCE(number); 

Příklad na použití SDO_NN_DISTANCE (nad geometrickou složkou je nutno mít vytvořený prostorový index)

SDO_WITHIN_DISTANCE(geometry1, aGeom, params); 

Příklady na použití SDO_WITHIN_DISTANCE


Zpět na stránku PDB