Go to content Go to navigation Go to search

Featured Articles:

    What sorts of Services do I offer?
    What people say about me or my work...
    Book: "Applying And Extending Oracle Spatial"
    Analyzing Spatial Query Performance Improvements in Oracle Spatial and Graph 12c Through Cross-Vendor Comparison

Newest Article:

SC4O Test log

Thursday October 04 2018 at 18:43

Here is the latest test log for the SC4O (not Exporter) JTS/JASPA functions:

  1. SQL*Plus: Release 12.1.0.1.0 Production ON Thu Oct 4 18:31:08 2018
  2. Copyright (c) 1982, 2013, Oracle.  ALL rights reserved.
  3. LAST Successful login TIME: Thu Oct 04 2018 18:30:53 +10:00
  4. Connected TO:
  5. Oracle DATABASE 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production
  6. WITH the Partitioning, OLAP, Advanced Analytics AND REAL Application Testing options
  7. SQL> -- ***********************************************************************************
  8. SQL> -- ST_DelaunayTriangles
  9. SQL> -- ***********************************************************************************
  10. SQL> -- Method 1: From MultiPoint
  11. SQL> --
  12. SQL> WITH DATA AS (
  13. SQL>   SELECT &&DefaultSchema..SC4O.ST_GeomFromEWKT('SRID=32615;MULTIPOINT ((755441.542258283 3678850.38541675 9.14999999944121), (755438.136705691 3679051.52458636 9.86999999918044), (755642.681431119 3678853.79096725 10.0000000018626), (755639.275877972 3679054.93014137 10), (755635.870328471 3679256.06930606 8.62999999988824), (755843.82060051 3678857.19651868 10), (755840.415056435 3679058.33568674 9.99999999906868), (755837.009506021 3679259.47485623 10), (755959.586342714 3679438.15319976 5.94999999925494), (756044.959776444 3678860.6020602 9.95000000018626), (756041.554231838 3679061.74123334 10.0000000009313), (756038.148680523 3679262.88040789 9.26999999862164))')
  14. SQL>      AS points
  15. SQL>   FROM dual
  16. SQL> )
  17. SQL> SELECT &&DefaultSchema..SC4O.ST_DelaunayTriangles(a.points,0.05,10) AS triangles
  18. SQL>   FROM DATA a;
  19. TRIANGLES(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_INFO, SDO_ORDINATES)
  20. ---------------------------------------------------------------------------------------------------
  21. SDO_GEOMETRY(3004, 32615, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1, 13, 1003, 1, 25, 1003, 1, 37, 1003, 1, 49, 1003, 1, 61, 1003, 1, 73, 1003, 1, 85, 1003, 1, 97, 1003, 1, 109, 1003, 1, 121, 1003, 1, 133, 1003, 1, 145, 1003, 1), SDO_ORDINATE_ARRAY(755438.137, 3679051.52, 9.87, 755441.542, 3678850.39, 9.15, 755639.276, 3679054.93, 10, 755438.137, 3679051.52, 9.87, 755438.137, 3679051.52, 9.87, 755639.276, 3679054.93, 10, 755635.87, 3679256.07, 8.63, 755438.137, 3679051.52, 9.87, 755635.87, 3679256.07, 8.63, 755639.276, 3679054.93, 10, 755837.01, 3679259.47, 10, 755635.87, 3679256.07, 8.63, 755635.87, 3679256.07, 8.63, 755837.01, 3679259.47, 10, 755959.586, 3679438.15, 5.95, 755635.87, 3679256.07, 8.63, 755959.586, 3679438.15, 5.95, 755837.01, 3679259.47, 10, 756038.149, 3679262.88, 9.27, 755959.586, 3679438.15, 5.95, 756038.149, 3679262.88, 9.27, 755837.01, 3679259.47, 10, 755840.415, 3679058.34, 10, 756038.149, 3679262.88, 9.27, 756038.149, 3679262.88, 9.27, 755840.415, 3679058.34, 10, 756041.554, 3679061.74, 10, 756038.149, 3679262.88, 9.27, 755642.681, 3678853.79, 10, 755843.821, 3678857.2, 10, 755840.415, 3679058.34, 10, 755642.681, 3678853.79, 10, 755642.681, 3678853.79, 10, 755840.415, 3679058.34, 10, 755639.276, 3679054.93, 10, 755642.681, 3678853.79, 10, 755642.681, 3678853.79, 10, 755639.276, 3679054.93, 10, 755441.542, 3678850.39, 9.15, 755642.681, 3678853.79, 10, 755639.276, 3679054.93, 10, 755840.415, 3679058.34, 10, 755837.01, 3679259.47, 10, 755639.276, 3679054.93, 10, 755840.415, 3679058.34, 10, 755843.821, 3678857.2, 10, 756041.554, 3679061.74, 10, 755840.415, 3679058.34, 10, 756041.554, 3679061.74, 10, 755843.821, 3678857.2, 10, 756044.96, 3678860.6, 9.95, 756041.554, 3679061.74, 10))
  22. SQL> -- Method 2: COLLECT from set of points
  23. SQL> --
  24. SQL> WITH DATA AS (
  25. SQL>   SELECT MDSYS.SDO_GEOMETRY(3001,32615,MDSYS.SDO_POINT_TYPE(755959.58634214,3679438.15320103,5.95),NULL,NULL) AS point FROM dual UNION ALL
  26. SQL>   SELECT MDSYS.SDO_GEOMETRY(3001,32615,MDSYS.SDO_POINT_TYPE(756038.14867762,3679262.88040938,9.27),NULL,NULL) AS point FROM dual UNION ALL
  27. SQL>   SELECT MDSYS.SDO_GEOMETRY(3001,32615,MDSYS.SDO_POINT_TYPE(755837.009504873,3679259.47485944,10),NULL,NULL) AS point FROM dual UNION ALL
  28. SQL>   SELECT MDSYS.SDO_GEOMETRY(3001,32615,MDSYS.SDO_POINT_TYPE(755635.870332123,3679256.0693095,8.63),NULL,NULL) AS point FROM dual UNION ALL
  29. SQL>   SELECT MDSYS.SDO_GEOMETRY(3001,32615,MDSYS.SDO_POINT_TYPE(755438.136709314,3679051.52458769,9.87),NULL,NULL) AS point FROM dual UNION ALL
  30. SQL>   SELECT MDSYS.SDO_GEOMETRY(3001,32615,MDSYS.SDO_POINT_TYPE(755639.275882053,3679054.93013763,10),NULL,NULL) AS point FROM dual UNION ALL
  31. SQL>   SELECT MDSYS.SDO_GEOMETRY(3001,32615,MDSYS.SDO_POINT_TYPE(755840.415054801,3679058.33568758,10),NULL,NULL) AS point FROM dual UNION ALL
  32. SQL>   SELECT MDSYS.SDO_GEOMETRY(3001,32615,MDSYS.SDO_POINT_TYPE(756041.554227549,3679061.74123752,10),NULL,NULL) AS point FROM dual UNION ALL
  33. SQL>   SELECT MDSYS.SDO_GEOMETRY(3001,32615,MDSYS.SDO_POINT_TYPE(756044.959777476,3678860.60206565,9.95),NULL,NULL) AS point FROM dual UNION ALL
  34. SQL>   SELECT MDSYS.SDO_GEOMETRY(3001,32615,MDSYS.SDO_POINT_TYPE(755843.820604722,3678857.19651571,10),NULL,NULL) AS point FROM dual UNION ALL
  35. SQL>   SELECT MDSYS.SDO_GEOMETRY(3001,32615,MDSYS.SDO_POINT_TYPE(755642.681431989,3678853.79096576,10),NULL,NULL) AS point FROM dual UNION ALL
  36. SQL>   SELECT MDSYS.SDO_GEOMETRY(3001,32615,MDSYS.SDO_POINT_TYPE(755441.54225925,3678850.38541582,9.15),NULL,NULL) AS point FROM dual
  37. SQL> )
  38. SQL> SELECT &&DefaultSchema..SC4O.ST_DelaunayTriangles(CAST(collect(a.point) AS mdsys.sdo_geometry_array),0.05,10) AS triangles
  39. SQL>   FROM DATA a;
  40. TRIANGLES(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_INFO, SDO_ORDINATES)
  41. ---------------------------------------------------------------------------------------------------
  42. SDO_GEOMETRY(3004, 32615, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1, 13, 1003, 1, 25, 1003, 1, 37, 1003, 1, 49, 1003, 1, 61, 1003, 1, 73, 1003, 1, 85, 1003, 1, 97, 1003, 1, 109, 1003, 1, 121, 1003, 1, 133, 1003, 1, 145, 1003, 1), SDO_ORDINATE_ARRAY(755438.137, 3679051.52, 9.87, 755441.542, 3678850.39, 9.15, 755639.276, 3679054.93, 10, 755438.137, 3679051.52, 9.87, 755438.137, 3679051.52, 9.87, 755639.276, 3679054.93, 10, 755635.87, 3679256.07, 8.63, 755438.137, 3679051.52, 9.87, 755635.87, 3679256.07, 8.63, 755639.276, 3679054.93, 10, 755840.415, 3679058.34, 10, 755635.87, 3679256.07, 8.63, 755635.87, 3679256.07, 8.63, 755840.415, 3679058.34, 10, 755837.01, 3679259.47, 10, 755635.87, 3679256.07, 8.63, 755635.87, 3679256.07, 8.63, 755837.01, 3679259.47, 10, 755959.586, 3679438.15, 5.95, 755635.87, 3679256.07, 8.63, 755959.586, 3679438.15, 5.95, 755837.01, 3679259.47, 10, 756038.149, 3679262.88, 9.27, 755959.586, 3679438.15, 5.95, 756038.149, 3679262.88, 9.27, 755837.01, 3679259.47, 10, 755840.415, 3679058.34, 10, 756038.149, 3679262.88, 9.27, 756038.149, 3679262.88, 9.27, 755840.415, 3679058.34, 10, 756041.554, 3679061.74, 10, 756038.149, 3679262.88, 9.27, 755642.681, 3678853.79, 10, 755843.821, 3678857.2, 10, 755639.276, 3679054.93, 10, 755642.681, 3678853.79, 10, 755642.681, 3678853.79, 10, 755639.276, 3679054.93, 10, 755441.542, 3678850.39, 9.15, 755642.681, 3678853.79, 10, 755639.276, 3679054.93, 10, 755843.821, 3678857.2, 10, 755840.415, 3679058.34, 10, 755639.276, 3679054.93, 10, 755840.415, 3679058.34, 10, 755843.821, 3678857.2, 10, 756044.96, 3678860.6, 9.95, 755840.415, 3679058.34, 10, 755840.415, 3679058.34, 10, 756044.96, 3678860.6, 9.95, 756041.554, 3679061.74, 10, 755840.415, 3679058.34, 10))
  43. SQL> -- Method 3: RefCursor
  44. SQL> --
  45. SQL> DECLARE
  46. SQL>   mycur  &&DefaultSchema..SC4O.refcur_t;
  47. SQL>   v_geom mdsys.sdo_geometry;
  48. SQL> BEGIN
  49. SQL>   OPEN mycur FOR
  50. SQL>   WITH DATA AS (
  51. SQL>     SELECT MDSYS.SDO_GEOMETRY(3001,32615,MDSYS.SDO_POINT_TYPE(755959.58634214,3679438.15320103,5.95),NULL,NULL) AS point FROM dual UNION ALL
  52. SQL>     SELECT MDSYS.SDO_GEOMETRY(3001,32615,MDSYS.SDO_POINT_TYPE(756038.14867762,3679262.88040938,9.27),NULL,NULL) AS point FROM dual UNION ALL
  53. SQL>     SELECT MDSYS.SDO_GEOMETRY(3001,32615,MDSYS.SDO_POINT_TYPE(755837.009504873,3679259.47485944,10),NULL,NULL) AS point FROM dual UNION ALL
  54. SQL>     SELECT MDSYS.SDO_GEOMETRY(3001,32615,MDSYS.SDO_POINT_TYPE(755635.870332123,3679256.0693095,8.63),NULL,NULL) AS point FROM dual UNION ALL
  55. SQL>     SELECT MDSYS.SDO_GEOMETRY(3001,32615,MDSYS.SDO_POINT_TYPE(755438.136709314,3679051.52458769,9.87),NULL,NULL) AS point FROM dual UNION ALL
  56. SQL>     SELECT MDSYS.SDO_GEOMETRY(3001,32615,MDSYS.SDO_POINT_TYPE(755639.275882053,3679054.93013763,10),NULL,NULL) AS point FROM dual UNION ALL
  57. SQL>     SELECT MDSYS.SDO_GEOMETRY(3001,32615,MDSYS.SDO_POINT_TYPE(755840.415054801,3679058.33568758,10),NULL,NULL) AS point FROM dual UNION ALL
  58. SQL>     SELECT MDSYS.SDO_GEOMETRY(3001,32615,MDSYS.SDO_POINT_TYPE(756041.554227549,3679061.74123752,10),NULL,NULL) AS point FROM dual UNION ALL
  59. SQL>     SELECT MDSYS.SDO_GEOMETRY(3001,32615,MDSYS.SDO_POINT_TYPE(756044.959777476,3678860.60206565,9.95),NULL,NULL) AS point FROM dual UNION ALL
  60. SQL>     SELECT MDSYS.SDO_GEOMETRY(3001,32615,MDSYS.SDO_POINT_TYPE(755843.820604722,3678857.19651571,10),NULL,NULL) AS point FROM dual UNION ALL
  61. SQL>     SELECT MDSYS.SDO_GEOMETRY(3001,32615,MDSYS.SDO_POINT_TYPE(755642.681431989,3678853.79096576,10),NULL,NULL) AS point FROM dual UNION ALL
  62. SQL>     SELECT MDSYS.SDO_GEOMETRY(3001,32615,MDSYS.SDO_POINT_TYPE(755441.54225925,3678850.38541582,9.15),NULL,NULL) AS point FROM dual
  63. SQL>   )
  64. SQL>   SELECT point FROM DATA a;
  65. SQL>   v_geom := &&DefaultSchema..SC4O.ST_DelaunayTriangles(mycur,0.05,10);
  66. SQL>   dbms_output.put_line('Delaunay: ' || &&DefaultSchema..SC4O.ST_AsEWKT(v_geom));
  67. SQL>   Close myCur;
  68. SQL> END;
  69. SQL> /
  70. Delaunay: SRID=32615;GEOMETRYCOLLECTION (POLYGON ((755438.136709314 3679051.52458769 9.87, 755441.54225925 3678850.38541582 9.15, 755639.275882053 3679054.93013763 10, 755438.136709314 3679051.52458769 9.87)), POLYGON ((755438.136709314 3679051.52458769 9.87, 755639.275882053 3679054.93013763 10, 755635.870332123 3679256.0693095 8.63, 755438.136709314 3679051.52458769 9.87)), POLYGON ((755635.870332123 3679256.0693095 8.63, 755639.275882053 3679054.93013763 10, 755840.415054801 3679058.33568758 10, 755635.870332123 3679256.0693095 8.63)), POLYGON ((755635.870332123 3679256.0693095 8.63, 755840.415054801 3679058.33568758 10, 755837.009504873 3679259.47485944 10, 755635.870332123 3679256.0693095 8.63)), POLYGON ((755635.870332123 3679256.0693095 8.63, 755837.009504873 3679259.47485944 10, 755959.58634214 3679438.15320103 5.95, 755635.870332123 3679256.0693095 8.63)), POLYGON ((755959.58634214 3679438.15320103 5.95, 755837.009504873 3679259.47485944 10, 756038.14867762 3679262.88040938 9.27, 755959.58634214 3679438.15320103 5.95)), POLYGON ((756038.14867762 3679262.88040938 9.27, 755837.009504873 3679259.47485944 10, 755840.415054801 3679058.33568758 10, 756038.14867762 3679262.88040938 9.27)), POLYGON ((756038.14867762 3679262.88040938 9.27, 755840.415054801 3679058.33568758 10, 756041.554227549 3679061.74123752 10, 756038.14867762 3679262.88040938 9.27)), POLYGON ((755642.681431989 3678853.79096576 10, 755843.820604722 3678857.19651571 10, 755639.275882053 3679054.93013763 10, 755642.681431989 3678853.79096576 10)), POLYGON ((755642.681431989 3678853.79096576 10, 755639.275882053 3679054.93013763 10, 755441.54225925 3678850.38541582 9.15, 755642.681431989 3678853.79096576 10)), POLYGON ((755639.275882053 3679054.93013763 10, 755843.820604722 3678857.19651571 10, 755840.415054801 3679058.33568758 10, 755639.275882053 3679054.93013763 10)), POLYGON ((755840.415054801 3679058.33568758 10, 755843.820604722 3678857.19651571 10, 756044.959777476 3678860.60206565 9.95, 755840.415054801 3679058.33568758 10)), POLYGON ((755840.415054801 3679058.33568758 10, 756044.959777476 3678860.60206565 9.95, 756041.554227549 3679061.74123752 10, 755840.415054801 3679058.33568758 10)))
  71. PL/SQL PROCEDURE successfully completed.
  72. SQL> -- ***********************************************************************************
  73. SQL> -- ST_Voronoi
  74. SQL> -- ***********************************************************************************
  75. SQL> -- Method 1: From MultiPoint
  76. SQL> --
  77. SQL> WITH DATA AS (
  78. SQL>   SELECT &&DefaultSchema..SC4O.ST_GeomFromEWKT('SRID=32615;MULTIPOINT ((755441.542258283 3678850.38541675 9.14999999944121), (755438.136705691 3679051.52458636 9.86999999918044), (755642.681431119 3678853.79096725 10.0000000018626), (755639.275877972 3679054.93014137 10), (755635.870328471 3679256.06930606 8.62999999988824), (755843.82060051 3678857.19651868 10), (755840.415056435 3679058.33568674 9.99999999906868), (755837.009506021 3679259.47485623 10), (755959.586342714 3679438.15319976 5.94999999925494), (756044.959776444 3678860.6020602 9.95000000018626), (756041.554231838 3679061.74123334 10.0000000009313), (756038.148680523 3679262.88040789 9.26999999862164))')
  79. SQL>     AS points
  80. SQL>   FROM dual
  81. SQL> )
  82. SQL> SELECT &&DefaultSchema..SC4O.ST_Voronoi(a.points,NULL,0.05,10) AS triangles
  83. SQL>   FROM DATA a;
  84. TRIANGLES(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_INFO, SDO_ORDINATES)
  85. ---------------------------------------------------------------------------------------------------
  86. SDO_GEOMETRY(2004, 32615, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1, 11, 1003, 1, 25, 1003, 1, 37, 1003, 1, 51, 1003, 1, 63, 1003, 1, 77, 1003, 1, 89, 1003, 1, 101, 1003, 1, 113, 1003, 1, 125, 1003, 1, 137, 1003, 1), SDO_ORDINATE_ARRAY(754831.314, 3678940.65, 755540.409, 3678952.66, 755537.004, 3679153.8, 754831.314, 3679835.99, 754831.314, 3678940.65, 755540.409, 3678952.66, 755540.409, 3678952.66, 755741.548, 3678956.06, 755738.143, 3679157.2, 755738.143, 3679157.2, 755537.004, 3679153.8, 755540.409, 3678952.66, 754831.314, 3678243.56, 755552.415, 3678243.56, 755540.409, 3678952.66, 755540.409, 3678952.66, 754831.314, 3678940.65, 754831.314, 3678243.56, 754831.314, 3679835.99, 755537.004, 3679153.8, 755738.143, 3679157.2, 755732.978, 3679462.23, 755405.193, 3680044.98, 754831.314, 3680044.98, 754831.314, 3679835.99, 755738.143, 3679157.2, 755939.282, 3679160.61, 755936.539, 3679322.58, 755732.978, 3679462.23, 755738.143, 3679157.2, 755738.143, 3679157.2, 755741.548, 3678956.06, 755741.548, 3678956.06, 755942.687, 3678959.47, 755939.282, 3679160.61, 755939.282, 3679160.61, 755738.143, 3679157.2, 755741.548, 3678956.06, 755753.612, 3678243.56, 755741.548, 3678956.06, 755741.548, 3678956.06, 755540.409, 3678952.66, 755552.415, 3678243.56, 755753.612, 3678243.56, 756651.783, 3679643.17, 755936.539, 3679322.58, 755939.282, 3679160.61, 755939.282, 3679160.61, 756651.783, 3679172.67, 756651.783, 3679643.17, 755405.193, 3680044.98, 755732.978, 3679462.23, 755936.539, 3679322.58, 756651.783, 3679643.17, 756651.783, 3680044.98, 755405.193, 3680044.98, 755954.809, 3678243.56, 755942.687, 3678959.47, 755942.687, 3678959.47, 755741.548, 3678956.06, 755753.612, 3678243.56, 755954.809, 3678243.56, 756651.783, 3679172.67, 755939.282, 3679160.61, 755942.687, 3678959.47, 755942.687, 3678959.47, 756651.783, 3678971.47, 756651.783, 3679172.67, 756651.783, 3678971.47, 755942.687, 3678959.47, 755954.809, 3678243.56, 756651.783, 3678243.56, 756651.783, 3678971.47))
  87. SQL> -- Method 2: COLLECT from single points
  88. SQL> --
  89. SQL> WITH DATA AS (
  90. SQL>   SELECT MDSYS.SDO_GEOMETRY(3001,32615,MDSYS.SDO_POINT_TYPE(755959.58634214,3679438.15320103,5.95),NULL,NULL) AS point FROM dual UNION ALL
  91. SQL>   SELECT MDSYS.SDO_GEOMETRY(3001,32615,MDSYS.SDO_POINT_TYPE(756038.14867762,3679262.88040938,9.27),NULL,NULL) AS point FROM dual UNION ALL
  92. SQL>   SELECT MDSYS.SDO_GEOMETRY(3001,32615,MDSYS.SDO_POINT_TYPE(755837.009504873,3679259.47485944,10),NULL,NULL) AS point FROM dual UNION ALL
  93. SQL>   SELECT MDSYS.SDO_GEOMETRY(3001,32615,MDSYS.SDO_POINT_TYPE(755635.870332123,3679256.0693095,8.63),NULL,NULL) AS point FROM dual UNION ALL
  94. SQL>   SELECT MDSYS.SDO_GEOMETRY(3001,32615,MDSYS.SDO_POINT_TYPE(755438.136709314,3679051.52458769,9.87),NULL,NULL) AS point FROM dual UNION ALL
  95. SQL>   SELECT MDSYS.SDO_GEOMETRY(3001,32615,MDSYS.SDO_POINT_TYPE(755639.275882053,3679054.93013763,10),NULL,NULL) AS point FROM dual UNION ALL
  96. SQL>   SELECT MDSYS.SDO_GEOMETRY(3001,32615,MDSYS.SDO_POINT_TYPE(755840.415054801,3679058.33568758,10),NULL,NULL) AS point FROM dual UNION ALL
  97. SQL>   SELECT MDSYS.SDO_GEOMETRY(3001,32615,MDSYS.SDO_POINT_TYPE(756041.554227549,3679061.74123752,10),NULL,NULL) AS point FROM dual UNION ALL
  98. SQL>   SELECT MDSYS.SDO_GEOMETRY(3001,32615,MDSYS.SDO_POINT_TYPE(756044.959777476,3678860.60206565,9.95),NULL,NULL) AS point FROM dual UNION ALL
  99. SQL>   SELECT MDSYS.SDO_GEOMETRY(3001,32615,MDSYS.SDO_POINT_TYPE(755843.820604722,3678857.19651571,10),NULL,NULL) AS point FROM dual UNION ALL
  100. SQL>   SELECT MDSYS.SDO_GEOMETRY(3001,32615,MDSYS.SDO_POINT_TYPE(755642.681431989,3678853.79096576,10),NULL,NULL) AS point FROM dual UNION ALL
  101. SQL>   SELECT MDSYS.SDO_GEOMETRY(3001,32615,MDSYS.SDO_POINT_TYPE(755441.54225925,3678850.38541582,9.15),NULL,NULL) AS point FROM dual
  102. SQL> )
  103. SQL> SELECT &&DefaultSchema..SC4O.ST_Voronoi(CAST(collect(a.point) AS mdsys.sdo_geometry_array),NULL,0.05,10) AS triangles
  104. SQL>   FROM DATA a;
  105. TRIANGLES(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_INFO, SDO_ORDINATES)
  106. ---------------------------------------------------------------------------------------------------
  107. SDO_GEOMETRY(2004, 32615, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1, 11, 1003, 1, 25, 1003, 1, 37, 1003, 1, 53, 1003, 1, 69, 1003, 1, 79, 1003, 1, 89, 1003, 1, 101, 1003, 1, 113, 1003, 1, 125, 1003, 1, 135, 1003, 1), SDO_ORDINATE_ARRAY(753010.844, 3678909.83, 755540.409, 3678952.66, 755537.004, 3679153.8, 753010.844, 3681595.84, 753010.844, 3678909.83, 755540.409, 3678952.66, 755540.409, 3678952.66, 755741.548, 3678956.06, 755741.548, 3678956.06, 755738.143, 3679157.2, 755537.004, 3679153.8, 755540.409, 3678952.66, 753010.844, 3676499.31, 755581.947, 3676499.31, 755540.409, 3678952.66, 755540.409, 3678952.66, 753010.844, 3678909.83, 753010.844, 3676499.31, 753010.844, 3681595.84, 755537.004, 3679153.8, 755738.143, 3679157.2, 755738.143, 3679157.2, 755732.978, 3679462.23, 754424.088, 3681789.22, 753010.844, 3681789.22, 753010.844, 3681595.84, 755738.143, 3679157.2, 755741.548, 3678956.06, 755942.687, 3678959.47, 755942.687, 3678959.47, 755939.282, 3679160.61, 755939.282, 3679160.61, 755738.143, 3679157.2, 755738.143, 3679157.2, 755783.144, 3676499.31, 755741.548, 3678956.06, 755540.409, 3678952.66, 755581.947, 3676499.31, 755783.144, 3676499.31, 755738.143, 3679157.2, 755939.282, 3679160.61, 755936.539, 3679322.58, 755732.978, 3679462.23, 755738.143, 3679157.2, 758472.252, 3680459.16, 755936.539, 3679322.58, 755939.282, 3679160.61, 755939.282, 3679160.61, 758472.252, 3679203.49, 758472.252, 3680459.16, 754424.088, 3681789.22, 755732.978, 3679462.23, 755936.539, 3679322.58, 758472.252, 3680459.16, 758472.252, 3681789.22, 754424.088, 3681789.22, 755984.341, 3676499.31, 755942.687, 3678959.47, 755741.548, 3678956.06, 755741.548, 3678956.06, 755783.144, 3676499.31, 755984.341, 3676499.31, 758472.252, 3679203.49, 755939.282, 3679160.61, 755942.687, 3678959.47, 758472.252, 3679002.3, 758472.252, 3679203.49, 758472.252, 3679002.3, 755942.687, 3678959.47, 755942.687, 3678959.47, 755984.341, 3676499.31, 758472.252, 3676499.31, 758472.252, 3679002.3))
  108. SQL> -- Method 3: From Refcursor containing individual points
  109. SQL> --
  110. SQL> DECLARE
  111. SQL>   mycur  &&DefaultSchema..SC4O.refcur_t;
  112. SQL>   v_geom mdsys.sdo_geometry;
  113. SQL> BEGIN
  114. SQL>   OPEN mycur FOR
  115. SQL> WITH DATA AS (
  116. SQL>   SELECT MDSYS.SDO_GEOMETRY(3001,32615,MDSYS.SDO_POINT_TYPE(755959.58634214,3679438.15320103,5.95),NULL,NULL) AS point FROM dual UNION ALL
  117. SQL>   SELECT MDSYS.SDO_GEOMETRY(3001,32615,MDSYS.SDO_POINT_TYPE(756038.14867762,3679262.88040938,9.27),NULL,NULL) AS point FROM dual UNION ALL
  118. SQL>   SELECT MDSYS.SDO_GEOMETRY(3001,32615,MDSYS.SDO_POINT_TYPE(755837.009504873,3679259.47485944,10),NULL,NULL) AS point FROM dual UNION ALL
  119. SQL>   SELECT MDSYS.SDO_GEOMETRY(3001,32615,MDSYS.SDO_POINT_TYPE(755635.870332123,3679256.0693095,8.63),NULL,NULL) AS point FROM dual UNION ALL
  120. SQL>   SELECT MDSYS.SDO_GEOMETRY(3001,32615,MDSYS.SDO_POINT_TYPE(755438.136709314,3679051.52458769,9.87),NULL,NULL) AS point FROM dual UNION ALL
  121. SQL>   SELECT MDSYS.SDO_GEOMETRY(3001,32615,MDSYS.SDO_POINT_TYPE(755639.275882053,3679054.93013763,10),NULL,NULL) AS point FROM dual UNION ALL
  122. SQL>   SELECT MDSYS.SDO_GEOMETRY(3001,32615,MDSYS.SDO_POINT_TYPE(755840.415054801,3679058.33568758,10),NULL,NULL) AS point FROM dual UNION ALL
  123. SQL>   SELECT MDSYS.SDO_GEOMETRY(3001,32615,MDSYS.SDO_POINT_TYPE(756041.554227549,3679061.74123752,10),NULL,NULL) AS point FROM dual UNION ALL
  124. SQL>   SELECT MDSYS.SDO_GEOMETRY(3001,32615,MDSYS.SDO_POINT_TYPE(756044.959777476,3678860.60206565,9.95),NULL,NULL) AS point FROM dual UNION ALL
  125. SQL>   SELECT MDSYS.SDO_GEOMETRY(3001,32615,MDSYS.SDO_POINT_TYPE(755843.820604722,3678857.19651571,10),NULL,NULL) AS point FROM dual UNION ALL
  126. SQL>   SELECT MDSYS.SDO_GEOMETRY(3001,32615,MDSYS.SDO_POINT_TYPE(755642.681431989,3678853.79096576,10),NULL,NULL) AS point FROM dual UNION ALL
  127. SQL>   SELECT MDSYS.SDO_GEOMETRY(3001,32615,MDSYS.SDO_POINT_TYPE(755441.54225925,3678850.38541582,9.15),NULL,NULL) AS point FROM dual
  128. SQL> )
  129. SQL> SELECT point
  130. SQL>   FROM DATA a;
  131. SQL>   v_geom := &&DefaultSchema..SC4O.ST_Voronoi(mycur,NULL,0.05,10);
  132. SQL>   dbms_output.put_line('Voronoi: ' || &&DefaultSchema..SC4O.ST_AsEWKT(v_geom));
  133. SQL>   Close myCur;
  134. SQL> END;
  135. SQL> /
  136. Voronoi: SRID=32615;GEOMETRYCOLLECTION (POLYGON ((753010.844436666 3678909.82893043, 755540.409070646 3678952.65777673, 755537.003520721 3679153.79694859, 753010.844436666 3681595.83790209, 753010.844436666 3678909.82893043)), POLYGON ((755540.409070646 3678952.65777673, 755540.409070657 3678952.65777672, 755741.548243388 3678956.06332667, 755741.548243394 3678956.06332668, 755738.14269346 3679157.20249854, 755537.003520721 3679153.79694859, 755540.409070646 3678952.65777673)), POLYGON ((753010.844436666 3676499.31427498, 755581.947393112 3676499.31427498, 755540.409070657 3678952.65777672, 755540.409070646 3678952.65777673, 753010.844436666 3678909.82893043, 753010.844436666 3676499.31427498)), POLYGON ((753010.844436666 3681595.83790209, 755537.003520721 3679153.79694859, 755738.14269346 3679157.20249854, 755738.14269346 3679157.20249854, 755732.978235974 3679462.22656952, 754424.08773671 3681789.22434187, 753010.844436666 3681789.22434187, 753010.844436666 3681595.83790209)), POLYGON ((755738.14269346 3679157.20249854, 755741.548243394 3678956.06332668, 755942.687416137 3678959.46887661, 755942.687416137 3678959.46887661, 755939.281866213 3679160.60804848, 755939.281866209 3679160.60804848, 755738.14269346 3679157.20249854, 755738.14269346 3679157.20249854)), POLYGON ((755783.14422639 3676499.31427498, 755741.548243388 3678956.06332667, 755540.409070657 3678952.65777672, 755581.947393112 3676499.31427498, 755783.14422639 3676499.31427498)), POLYGON ((755738.14269346 3679157.20249854, 755939.281866209 3679160.60804848, 755936.539475839 3679322.57957733, 755732.978235974 3679462.22656952, 755738.14269346 3679157.20249854)), POLYGON ((758472.252050124 3680459.1593058, 755936.539475839 3679322.57957733, 755939.281866209 3679160.60804848, 755939.281866213 3679160.60804848, 758472.252050124 3679203.49455512, 758472.252050124 3680459.1593058)), POLYGON ((754424.08773671 3681789.22434187, 755732.978235974 3679462.22656952, 755936.539475839 3679322.57957733, 758472.252050124 3680459.1593058, 758472.252050124 3681789.22434187, 754424.08773671 3681789.22434187)), POLYGON ((755984.341059436 3676499.31427498, 755942.687416137 3678959.46887661, 755741.548243394 3678956.06332668, 755741.548243388 3678956.06332667, 755783.14422639 3676499.31427498, 755984.341059436 3676499.31427498)), POLYGON ((758472.252050124 3679203.49455512, 755939.281866213 3679160.60804848, 755942.687416137 3678959.46887661, 758472.252050124 3679002.2977228, 758472.252050124 3679203.49455512)), POLYGON ((758472.252050124 3679002.2977228, 755942.687416137 3678959.46887661, 755942.687416137 3678959.46887661, 755984.341059436 3676499.31427498, 758472.252050124 3676499.31427498, 758472.252050124 3679002.2977228)))
  137. PL/SQL PROCEDURE successfully completed.
  138. SQL> -- ***********************************************************************************
  139. SQL> -- ST_Densify, ST_DouglasPeuckerSimplify and ST_TopologyPreservingSimplify
  140. SQL> -- ***********************************************************************************
  141. SQL> --
  142. SQL> SELECT &&DefaultSchema..SC4O.ST_Densify(sdo_geometry('LINESTRING(0 0, 10 10, 10 0, 20 10)',0),2,3) AS dGeom
  143. SQL>   FROM dual;
  144. DGEOM(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_INFO, SDO_ORDINATES)
  145. ---------------------------------------------------------------------------------------------------
  146. SDO_GEOMETRY(2002, 0, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1), SDO_ORDINATE_ARRAY(0, 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 10, 7.5, 10, 5, 10, 2.5, 10, 0, 12, 2, 14, 4, 16, 6, 18, 8, 20, 10))
  147. SQL> SELECT &&DefaultSchema..SC4O.ST_Densify(sdo_geometry(2003,NULL,NULL,sdo_elem_info_array(1,1003,3),sdo_ordinate_array(1,1,10,10)),2,3) AS dGeom
  148. SQL>   FROM dual;
  149. DGEOM(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_INFO, SDO_ORDINATES)
  150. ---------------------------------------------------------------------------------------------------
  151. SDO_GEOMETRY(2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARRAY(1, 1, 3.25, 1, 5.5, 1, 7.75, 1, 10, 1, 10, 3.25, 10, 5.5, 10, 7.75, 10, 10, 7.75, 10, 5.5, 10, 3.25, 10, 1, 10, 1, 7.75, 1, 5.5, 1, 3.25, 1, 1))
  152. SQL> WITH dense_data AS (
  153. SQL>   SELECT MDSYS.SDO_GEOMETRY(2002, NULL, NULL, MDSYS.SDO_ELEM_INFO_ARRAY(1,2,1),
  154. SQL>         MDSYS.SDO_ORDINATE_ARRAY(191060.535, 576339.562, 186987.358, 581000.620, 184257.910, 575373.757, 181570.453, 577305.367, 180562.657, 571300.581, 175901.599, 580958.628, 174263.930, 574575.919, 171282.533, 575037.825, 170694.652, 572266.385)) AS geom,
  155. SQL>        &&defaultSchema..SC4O.ST_Densify (
  156. SQL>     p_geom        => MDSYS.SDO_GEOMETRY(2002, NULL, NULL, MDSYS.SDO_ELEM_INFO_ARRAY(1,2,1),
  157. SQL> MDSYS.SDO_ORDINATE_ARRAY(191060.535, 576339.562, 186987.358, 581000.620, 184257.910, 575373.757, 181570.453, 577305.367, 180562.657, 571300.581, 175901.599, 580958.628, 174263.930, 574575.919, 171282.533, 575037.825, 170694.652, 572266.385)),
  158. SQL>     p_precision       => 2,
  159. SQL>     p_distanceTolerance => 90
  160. SQL>        ) AS dense_geom
  161. SQL>   FROM dual
  162. SQL> )
  163. SQL>         SELECT CAST('Original'   AS varchar2(20)) AS text, sdo_util.GetNumVertices(geom) AS numVertices      FROM dense_data
  164. SQL> UNION ALL SELECT CAST('Densify'    AS varchar2(20)) AS text, sdo_util.GetNumVertices(dense_geom) AS numVertices FROM dense_data
  165. SQL> UNION ALL SELECT CAST('DouglasPeucker' AS varchar2(20)) AS text, sdo_util.GetNumVertices(&&defaultSchema..SC4O.ST_DouglasPeuckerSimplify(a.geom,5000,3))     AS numVertices FROM dense_data a
  166. SQL> UNION ALL SELECT CAST('TopologyPreserving' AS varchar2(20)) AS text, sdo_util.GetNumVertices(&&defaultSchema..SC4O.ST_TopologyPreservingSimplify(a.geom,5000,3)) AS numVertices FROM dense_data a;
  167. TEXT         NUMVERTICES
  168. -------------------- -----------
  169. Original           9
  170. Densify          505
  171. DouglasPeucker           5
  172. TopologyPreserving         5
  173. SQL> -- ***********************************************************************************
  174. SQL> -- ST_InsertVertex
  175. SQL> -- ***********************************************************************************
  176. SQL> -- ST_InsertVertex testing
  177. SQL> -- Test update of SDO_POINT structure with valid ordinate values
  178. SQL> SELECT &&DefaultSchema..SC4O.ST_InsertVertex(mdsys.SDO_Geometry(3001,NULL,sdo_point_type(1.12345,2.43534,3.43513),NULL,NULL),
  179. SQL>             1,
  180. SQL>             mdsys.SDO_Geometry(3001,NULL,sdo_point_type(4.555,4.666,10),NULL,NULL) ) AS atStart,
  181. SQL>      &&DefaultSchema..SC4O.ST_InsertVertex(mdsys.SDO_Geometry(3001,NULL,sdo_point_type(1.12345,2.43534,3.43513),NULL,NULL),
  182. SQL>             -1,
  183. SQL>             mdsys.SDO_Geometry(3001,NULL,sdo_point_type(4.555,4.666,10),NULL,NULL) ) AS atEnd
  184. SQL>   FROM dual;
  185. ATSTART(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_INFO, SDO_ORDINATES)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   ATEND(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_INFO, SDO_ORDINATES)
  186. --------------------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  187. SDO_GEOMETRY(3005, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1, 2), SDO_ORDINATE_ARRAY(4.555, 4.666, 10, 1.12345, 2.43534, 3.43513))                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      SDO_GEOMETRY(3005, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1, 2), SDO_ORDINATE_ARRAY(1.12345, 2.43534, 3.43513, 4.555, 4.666, 10))
  188. SQL> -- Add point at every position in MultiPoint
  189. SQL> WITH DATA AS (
  190. SQL>  SELECT mdsys.SDO_Geometry(2005,NULL,NULL,sdo_elem_info_array(1,1,3),sdo_ordinate_array(1.1,1.3,2.4,2.03,3.4,3.5)) AS mPoint
  191. SQL>    FROM dual
  192. SQL> )
  193. SQL> SELECT CASE WHEN b.posn =  SDO_UTIL.GETNUMVERTICES((SELECT mPoint FROM DATA)) + 2 THEN -1 ELSE b.posn END AS posn,
  194. SQL>      &&DefaultSchema..SC4O.ST_InsertVertex(a.mPoint,
  195. SQL>             CASE WHEN b.posn =  SDO_UTIL.GETNUMVERTICES((SELECT mPoint FROM DATA)) + 2 THEN -1 ELSE b.posn END, /* Means append to end of coordinates */
  196. SQL>             mdsys.SDO_Geometry(2001,NULL,sdo_point_type(4.5,4.6,NULL),NULL,NULL))
  197. SQL>     AS point
  198. SQL>   FROM DATA a,
  199. SQL>      (SELECT level AS posn
  200. SQL>         FROM dual
  201. SQL>         CONNECT BY level <= ( SDO_UTIL.GETNUMVERTICES((SELECT mPoint FROM DATA)) + 2) ) b;
  202.       POSN POINT(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_INFO, SDO_ORDINATES)
  203. ---------- ---------------------------------------------------------------------------------------------------
  204.    1 SDO_GEOMETRY(2005, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1, 4), SDO_ORDINATE_ARRAY(4.5, 4.6, 1.1, 1.3, 2.4, 2.03, 3.4, 3.5))
  205.    2 SDO_GEOMETRY(2005, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1, 4), SDO_ORDINATE_ARRAY(1.1, 1.3, 4.5, 4.6, 2.4, 2.03, 3.4, 3.5))
  206.    3 SDO_GEOMETRY(2005, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1, 4), SDO_ORDINATE_ARRAY(1.1, 1.3, 2.4, 2.03, 4.5, 4.6, 3.4, 3.5))
  207.    4 SDO_GEOMETRY(2005, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1, 4), SDO_ORDINATE_ARRAY(1.1, 1.3, 2.4, 2.03, 3.4, 3.5, 4.5, 4.6))
  208.   -1 SDO_GEOMETRY(2005, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1, 4), SDO_ORDINATE_ARRAY(1.1, 1.3, 2.4, 2.03, 3.4, 3.5, 4.5, 4.6))
  209. SQL> -- Test a linestring (should throw exception)
  210. SQL> WITH DATA AS (
  211. SQL>   SELECT mdsys.sdo_geometry('LINESTRING(1.12345 1.3445,2.43534 2.03998398,3.43513 3.451245)') AS linestring,
  212. SQL>        mdsys.sdo_geometry('POINT(4.555 4.666)') AS point
  213. SQL>   FROM dual
  214. SQL> )
  215. SQL> SELECT &&DefaultSchema..SC4O.ST_InsertVertex(a.linestring,a.point,NULL/*Will throw exception as null interpreted as 0*/).Get_WKT() AS geom
  216. SQL>   FROM DATA a;
  217. ERROR:
  218. ORA-29532: Java CALL TERMINATED BY uncaught Java exception: java.SQL.SQLException: The INDEX (0) must be -1 (LAST coord) OR greater OR equal than 1
  219. ORA-06512: at "GIS.SC4O", line 909
  220. no ROWS selected
  221. SQL> WITH DATA AS (
  222. SQL>   SELECT mdsys.sdo_geometry('LINESTRING(1.12345 1.3445,2.43534 2.03998398,3.43513 3.451245)',NULL) AS linestring,
  223. SQL>        mdsys.sdo_geometry('POINT(4.555 4.666)',NULL) AS point
  224. SQL>   FROM dual
  225. SQL> )
  226. SQL> SELECT &&DefaultSchema..SC4O.ST_InsertVertex(a.linestring,a.point,1/*Will insert at the beginning of the linestring*/).Get_WKT() AS geom
  227. SQL>   FROM DATA a;
  228. GEOM
  229. --------------------------------------------------------------------------------
  230. LINESTRING (4.555 4.666, 1.12345 1.3445, 2.43534 2.03998398, 3.43513 3.451245)
  231. SQL> -- Multilinestring
  232. SQL> WITH DATA AS (
  233. SQL>   SELECT mdsys.sdo_geometry('MULTILINESTRING ((1.1 1.1, 2.2 2.2, 3.3 3.3), (10.0 10.0, 10.0 20.0))') AS multilinestring,
  234. SQL>        mdsys.sdo_geometry('POINT(-1 -1)') AS point
  235. SQL>   FROM dual
  236. SQL> )
  237. SQL> SELECT &&DefaultSchema..SC4O.ST_InsertVertex(a.multilinestring,1,a.point).Get_WKT() AS st_geom
  238. SQL>   FROM DATA a;
  239. ST_GEOM
  240. --------------------------------------------------------------------------------
  241. MULTILINESTRING ((-1.0 -1.0, 1.1 1.1, 2.2 2.2, 3.3 3.3), (10.0 10.0, 10.0 20.0))
  242. SQL> WITH DATA AS (
  243. SQL>   SELECT mdsys.sdo_geometry('MULTILINESTRING ((1.1 1.1, 2.2 2.2, 3.3 3.3), (10.0 10.0, 10.0 20.0))') AS multilinestring,
  244. SQL>        mdsys.sdo_geometry('POINT(4.4 4.4)') AS point
  245. SQL>   FROM dual
  246. SQL> )
  247. SQL> SELECT &&DefaultSchema..SC4O.ST_InsertVertex(a.multilinestring,4,a.point).Get_WKT() AS geom
  248. SQL>   FROM DATA a;
  249. GEOM
  250. --------------------------------------------------------------------------------
  251. MULTILINESTRING ((1.1 1.1, 2.2 2.2, 3.3 3.3), (4.4 4.4, 10.0 10.0, 10.0 20.0))
  252. SQL> WITH DATA AS (
  253. SQL>   SELECT mdsys.sdo_geometry('MULTILINESTRING ((1.1 1.1, 2.2 2.2, 3.3 3.3), (10.0 10.0, 10.0 20.0))') AS multilinestring,
  254. SQL>        mdsys.sdo_geometry('POINT(30 30)') AS point
  255. SQL>   FROM dual
  256. SQL> )
  257. SQL> SELECT &&DefaultSchema..SC4O.ST_InsertVertex(a.multilinestring,-1,a.point).Get_WKT() AS st_geom
  258. SQL>   FROM DATA a;
  259. ST_GEOM
  260. --------------------------------------------------------------------------------
  261. MULTILINESTRING ((1.1 1.1, 2.2 2.2, 3.3 3.3), (10.0 10.0, 10.0 20.0, 30.0 30.0))
  262. SQL> -- ***********************************************************************************
  263. SQL> -- ST_UpdateVertex
  264. SQL> -- ***********************************************************************************
  265. SQL> -- ST_UpdatePoint all indexes
  266. SQL> WITH DATA AS (
  267. SQL>  SELECT mdsys.SDO_Geometry(2005,NULL,NULL,sdo_elem_info_array(1,1,3),sdo_ordinate_array(1.1,1.3,2.4,2.03,3.4,3.5)) AS mPoint
  268. SQL>    FROM dual
  269. SQL> )
  270. SQL> SELECT CASE WHEN b.posn =  SDO_UTIL.GETNUMVERTICES((SELECT mPoint FROM DATA)) + 1 THEN -1 ELSE b.posn END AS posn,
  271. SQL>      &&DefaultSchema..SC4O.ST_UpdateVertex(a.mPoint,
  272. SQL>             CASE WHEN b.posn =  SDO_UTIL.GETNUMVERTICES((SELECT mPoint FROM DATA)) + 1 THEN -1 ELSE b.posn END, /* Means append to end of coordinates */
  273. SQL>             mdsys.SDO_Geometry(2001,NULL,sdo_point_type(4.5,4.6,NULL),NULL,NULL))
  274. SQL>     AS point
  275. SQL>   FROM DATA a,
  276. SQL>      (SELECT level AS posn FROM dual CONNECT BY level <= ( SDO_UTIL.GETNUMVERTICES((SELECT mPoint FROM DATA)) + 1) ) b;
  277.       POSN POINT(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_INFO, SDO_ORDINATES)
  278. ---------- ---------------------------------------------------------------------------------------------------
  279.    1 SDO_GEOMETRY(2005, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1, 3), SDO_ORDINATE_ARRAY(4.5, 4.6, 2.4, 2.03, 3.4, 3.5))
  280.    2 SDO_GEOMETRY(2005, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1, 3), SDO_ORDINATE_ARRAY(1.1, 1.3, 4.5, 4.6, 3.4, 3.5))
  281.    3 SDO_GEOMETRY(2005, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1, 3), SDO_ORDINATE_ARRAY(1.1, 1.3, 2.4, 2.03, 4.5, 4.6))
  282.   -1 SDO_GEOMETRY(2005, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1, 3), SDO_ORDINATE_ARRAY(1.1, 1.3, 2.4, 2.03, 4.5, 4.6))
  283. SQL> -- ST_UpdateVertex from/to
  284. SQL> WITH DATA AS (
  285. SQL> SELECT mdsys.SDO_Geometry(2002,NULL,NULL,sdo_elem_info_array(1,2,1),sdo_ordinate_array(1.12345,1.3445,2.43534,2.03998398,3.43513,3.451245)) AS geom,
  286. SQL>      mdsys.SDO_Geometry(2001,NULL,sdo_point_type(3.43513,3.451245,NULL),NULL,NULL) AS fromPoint,
  287. SQL>      mdsys.SDO_Geometry(2001,NULL,sdo_point_type(4.555,4.666,NULL),NULL,NULL) AS toPoint
  288. SQL>   FROM dual
  289. SQL> )
  290. SQL> SELECT &&DefaultSchema..SC4O.ST_UpdateVertex(a.geom,a.fromPoint,a.toPoint) AS updated_geom
  291. SQL>   FROM DATA a,
  292. SQL> -- LinearRing single point update returns LINESTRING...
  293. SQL> WITH DATA AS (
  294. SQL>   SELECT mdsys.sdo_geometry('LINESTRING(2 2, 2 7, 12 7, 12 2, 2 2)',NULL) AS the_line,
  295. SQL>        mdsys.SDO_Geometry(2001,NULL,sdo_point_type(1,1,NULL),NULL,NULL) AS the_point
  296. SQL>   FROM dual
  297. SQL> )
  298. SQL> SELECT &&DefaultSchema..SC4O.ST_UpdateVertex(b.the_line,1,b.the_point) AS setPointOfPoly
  299. SQL>   FROM DATA b;
  300. SETPOINTOFPOLY(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_INFO, SDO_ORDINATES)
  301. ---------------------------------------------------------------------------------------------------
  302. SDO_GEOMETRY(2002, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1), SDO_ORDINATE_ARRAY(1, 1, 2, 7, 12, 7, 12, 2, 2, 2))
  303. SQL> -- If point first or last in existing polygon it will fail ....
  304. SQL> WITH DATA AS (
  305. SQL>   SELECT mdsys.sdo_geometry('POLYGON((2 2, 2 7, 12 7, 12 2, 2 2))',NULL)      AS the_poly,
  306. SQL>        mdsys.SDO_Geometry(2001,NULL,sdo_point_type(1,1,NULL),NULL,NULL) AS the_point
  307. SQL>   FROM dual
  308. SQL> )
  309. SQL> SELECT &&DefaultSchema..SC4O.ST_UpdateVertex(b.the_poly,1,b.the_point) AS setPointOfPoly
  310. SQL>   FROM DATA b;
  311. SELECT GIS.SC4O.ST_UpdateVertex(b.the_poly,1,b.the_point) AS setPointOfPoly
  312.        *
  313. ERROR at line 6:
  314. ORA-29532: Java CALL TERMINATED BY uncaught Java exception: java.SQL.SQLException: LinearRings must be closed linestring
  315. ORA-06512: at "GIS.SC4O", line 882
  316. SQL> -- .... So up overloaded ST_UpdateVertex...
  317. SQL> WITH DATA AS (
  318. SQL>   SELECT mdsys.sdo_geometry('POLYGON((2 2, 2 7, 12 7, 12 2, 2 2))',NULL)  AS the_poly,
  319. SQL>        mdsys.SDO_Geometry(2001,NULL,sdo_point_type(2,2,NULL),NULL,NULL) AS from_Point,
  320. SQL>        mdsys.SDO_Geometry(2001,NULL,sdo_point_type(1,1,NULL),NULL,NULL) AS to_Point
  321. SQL>   FROM dual
  322. SQL> )
  323. SQL> SELECT &&DefaultSchema..SC4O.ST_UpdateVertex(b.the_poly,b.from_point,b.to_point) AS setPointOfPoly
  324. SQL>   FROM DATA b;
  325. SETPOINTOFPOLY(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_INFO, SDO_ORDINATES)
  326. ---------------------------------------------------------------------------------------------------
  327. SDO_GEOMETRY(2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARRAY(1, 1, 12, 2, 12, 7, 2, 7, 1, 1))
  328. SQL> -- ***********************************************************************************
  329. SQL> -- ST_DeleteVertex
  330. SQL> -- ***********************************************************************************
  331. SQL> -- Test single point
  332. SQL> SELECT &&DefaultSchema..SC4O.ST_DeleteVertex(mdsys.SDO_Geometry(3001,NULL,sdo_point_type(1.1,2.4,3.5),NULL,NULL),
  333. SQL>             1) AS point
  334. SQL>   FROM dual;
  335. POINT(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_INFO, SDO_ORDINATES)
  336. ---------------------------------------------------------------------------------------------------
  337. SDO_GEOMETRY(NULL, NULL, NULL, NULL, NULL)
  338. SQL> -- Remove vertices from multipoint
  339. SQL> WITH DATA AS (
  340. SQL>   SELECT mdsys.SDO_Geometry(2005,NULL,NULL,sdo_elem_info_array(1,1,3),sdo_ordinate_array(1.1,1.1,2.2,2.2,3.2,3.2)) AS geom
  341. SQL>   FROM dual
  342. SQL> )
  343. SQL> SELECT CASE WHEN LEVEL < 4 THEN LEVEL ELSE -1 END  AS point,
  344. SQL>      &&DefaultSchema..SC4O.ST_DeleteVertex(a.geom,CASE WHEN LEVEL < a.numVertices THEN LEVEL ELSE -1 END ) AS RemovedPoint
  345. SQL>   FROM (SELECT sdo_util.getNumVertices(b.geom)+1 AS numVertices, b.geom
  346. SQL>         FROM DATA b
  347. SQL>      ) a
  348. SQL>  CONNECT BY level <= a.numVertices;
  349.      POINT REMOVEDPOINT(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_INFO, SDO_ORDINATES)
  350. ---------- ---------------------------------------------------------------------------------------------------
  351.    1 SDO_GEOMETRY(2005, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1, 2), SDO_ORDINATE_ARRAY(2.2, 2.2, 3.2, 3.2))
  352.    2 SDO_GEOMETRY(2005, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1, 2), SDO_ORDINATE_ARRAY(1.1, 1.1, 3.2, 3.2))
  353.    3 SDO_GEOMETRY(2005, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1, 2), SDO_ORDINATE_ARRAY(1.1, 1.1, 2.2, 2.2))
  354.   -1 SDO_GEOMETRY(2005, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1, 2), SDO_ORDINATE_ARRAY(1.1, 1.1, 2.2, 2.2))
  355. SQL> -- Remove first coordinate in standard LineString
  356. SQL> WITH DATA AS (
  357. SQL>   SELECT mdsys.sdo_geometry('LINESTRING(1.1 1.1,2.2 2.2,3.3 3.3)',NULL) AS linestring
  358. SQL>   FROM dual
  359. SQL> )
  360. SQL> SELECT &&DefaultSchema..SC4O.ST_DeleteVertex(a.linestring,1)/*.Get_WKT()*/ AS st_geom
  361. SQL>   FROM DATA a;
  362. ST_GEOM(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_INFO, SDO_ORDINATES)
  363. ---------------------------------------------------------------------------------------------------
  364. SDO_GEOMETRY(2002, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1), SDO_ORDINATE_ARRAY(2.2, 2.2, 3.3, 3.3))
  365. SQL> -- Try to remove a point from 2 point linestring (should get error)
  366. SQL> WITH DATA AS (
  367. SQL>   SELECT mdsys.sdo_geometry('LINESTRING(1.1 1.1,2.2 2.2)',NULL) AS linestring
  368. SQL>   FROM dual
  369. SQL> )
  370. SQL> SELECT &&DefaultSchema..SC4O.ST_DeleteVertex(a.linestring,1).Get_WKT() AS st_geom
  371. SQL>   FROM DATA a;
  372. ERROR:
  373. ORA-29532: Java CALL TERMINATED BY uncaught Java exception: java.SQL.SQLException: Invalid NUMBER OF points IN LineString (found 1 - must be 0 OR >= 2)
  374. ORA-06512: at "GIS.SC4O", line 876
  375. no ROWS selected
  376. SQL> -- Try to remove 2 points from three point linestring (should get error)
  377. SQL> WITH DATA AS (
  378. SQL>   SELECT mdsys.sdo_geometry('LINESTRING(1.1 1.1,2.2 2.2,3.3 3.3)',NULL) AS linestring
  379. SQL>   FROM dual
  380. SQL> )
  381. SQL> SELECT &&DefaultSchema..SC4O.ST_DeleteVertex(
  382. SQL>    &&DefaultSchema..SC4O.ST_DeleteVertex(a.linestring,1),
  383. SQL>    1).Get_WKT() AS st_geom
  384. SQL>   FROM DATA a;
  385. ERROR:
  386. ORA-29532: Java CALL TERMINATED BY uncaught Java exception: java.SQL.SQLException: Invalid NUMBER OF points IN LineString (found 1 - must be 0 OR >= 2)
  387. ORA-06512: at "GIS.SC4O", line 876
  388. no ROWS selected
  389. SQL> -- Remove points 1-4 in a 3D LineString, note 0 and NULL denote is the last coord
  390. SQL> WITH DATA AS (
  391. SQL>   SELECT mdsys.SDO_Geometry(3002,NULL,NULL,
  392. SQL>         sdo_elem_info_array(1,2,1),
  393. SQL>         sdo_ordinate_array(1.1,1.1,9, 2.2,2.2,9, 3.3,3.3,9)) AS geom
  394. SQL>   FROM dual
  395. SQL> )
  396. SQL> SELECT CASE WHEN LEVEL < 4 THEN LEVEL ELSE -1 END  AS point,
  397. SQL>      &&DefaultSchema..SC4O.ST_DeleteVertex(
  398. SQL>           a.geom,
  399. SQL>           CASE WHEN LEVEL < a.numVertices THEN LEVEL ELSE -1 END
  400. SQL>      ) AS RemovedPoint
  401. SQL>   FROM (SELECT sdo_util.getNumVertices(b.geom)+1 AS numVertices, b.geom
  402. SQL>         FROM DATA b
  403. SQL>      ) a
  404. SQL>  CONNECT BY level <= a.numVertices;
  405.      POINT REMOVEDPOINT(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_INFO, SDO_ORDINATES)
  406. ---------- ---------------------------------------------------------------------------------------------------
  407.    1 SDO_GEOMETRY(3002, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1), SDO_ORDINATE_ARRAY(2.2, 2.2, 9, 3.3, 3.3, 9))
  408.    2 SDO_GEOMETRY(3002, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1), SDO_ORDINATE_ARRAY(1.1, 1.1, 9, 3.3, 3.3, 9))
  409.    3 SDO_GEOMETRY(3002, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1), SDO_ORDINATE_ARRAY(1.1, 1.1, 9, 2.2, 2.2, 9))
  410.   -1 SDO_GEOMETRY(3002, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1), SDO_ORDINATE_ARRAY(1.1, 1.1, 9, 2.2, 2.2, 9))
  411. SQL> -- Test single polygon
  412. SQL> SELECT NULL AS removedVertex, mdsys.sdo_geometry('POLYGON((2 2, 12 2, 12 7, 2 7, 2 2))',NULL) AS geom FROM dual
  413. SQL> UNION ALL SELECT 2 AS removedVertex, &&DefaultSchema..SC4O.ST_DeleteVertex(sdo_geometry('POLYGON((2 2, 12 2, 12 7, 2 7, 2 2))',NULL),2) AS geom FROM dual
  414. SQL> UNION ALL SELECT 3 AS removedVertex, &&DefaultSchema..SC4O.ST_DeleteVertex(sdo_geometry('POLYGON((2 2, 12 2, 12 7, 2 7, 2 2))',NULL),3) AS geom FROM dual;
  415. REMOVEDVERTEX GEOM(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_INFO, SDO_ORDINATES)
  416. ------------- ---------------------------------------------------------------------------------------------------
  417.         SDO_GEOMETRY(2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARRAY(2, 2, 12, 2, 12, 7, 2, 7, 2, 2))
  418.       2 SDO_GEOMETRY(2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARRAY(2, 2, 12, 7, 2, 7, 2, 2))
  419.       3 SDO_GEOMETRY(2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARRAY(2, 2, 12, 2, 2, 7, 2, 2))
  420. SQL> -- ***********************************************************************************
  421. SQL> -- ST_LineMerger
  422. SQL> -- ***********************************************************************************
  423. SQL> --
  424. SQL> WITH DATA AS (
  425. SQL>   SELECT CAST(multiset(
  426. SQL>       SELECT mdsys.sdo_geometry('LINESTRING (220 160, 240 150, 270 150, 290 170)',NULL) AS geom FROM dual UNION ALL
  427. SQL>       SELECT mdsys.sdo_geometry('LINESTRING (60 210, 30 190, 30 160)',NULL) AS geom FROM dual UNION ALL
  428. SQL>       SELECT mdsys.sdo_geometry('LINESTRING (70 430, 100 430, 120 420, 140 400)',NULL) AS geom FROM dual UNION ALL
  429. SQL>       SELECT mdsys.sdo_geometry('LINESTRING (160 310, 160 280, 160 250, 170 230)',NULL) AS geom FROM dual UNION ALL
  430. SQL>       SELECT mdsys.sdo_geometry('LINESTRING (170 230, 180 210, 200 180, 220 160)',NULL) AS geom FROM dual UNION ALL
  431. SQL>       SELECT mdsys.sdo_geometry('LINESTRING (30 160, 40 150, 70 150)',NULL) AS geom FROM dual UNION ALL
  432. SQL>       SELECT mdsys.sdo_geometry('LINESTRING (160 310, 200 330, 220 340, 240 360)',NULL) AS geom FROM dual UNION ALL
  433. SQL>       SELECT mdsys.sdo_geometry('LINESTRING (140 400, 150 370, 160 340, 160 310)',NULL) AS geom FROM dual UNION ALL
  434. SQL>       SELECT mdsys.sdo_geometry('LINESTRING (160 310, 130 300, 100 290, 70 270)',NULL) AS geom FROM dual UNION ALL
  435. SQL>       SELECT mdsys.sdo_geometry('LINESTRING (240 360, 260 390, 260 410, 250 430)',NULL) AS geom FROM dual UNION ALL
  436. SQL>       SELECT mdsys.sdo_geometry('LINESTRING (70 150, 100 180, 100 200)',NULL) AS geom FROM dual UNION ALL
  437. SQL>       SELECT mdsys.sdo_geometry('LINESTRING (70 270, 60 260, 50 240, 50 220, 60 210)',NULL) AS geom FROM dual UNION ALL
  438. SQL>       SELECT mdsys.sdo_geometry('LINESTRING (100 200, 90 210, 60 210)',NULL) AS geom FROM dual
  439. SQL>       ) AS mdsys.sdo_geometry_array) AS mLines
  440. SQL>   FROM dual
  441. SQL> )
  442. SQL> SELECT rownum AS Id, &&DefaultSchema..SC4O.st_linemerger(s.mlines,3)
  443. SQL>   FROM DATA s;
  444.   ID GIS.SC4O.ST_LINEMERGER(S.MLINES,3)(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_INFO, SDO_ORDINATES)
  445. ---------- ---------------------------------------------------------------------------------------------------
  446.    1 SDO_GEOMETRY(2006, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1, 19, 2, 1, 35, 2, 1, 49, 2, 1, 63, 2, 1), SDO_ORDINATE_ARRAY(60, 210, 30, 190, 30, 160, 40, 150, 70, 150, 100, 180, 100, 200, 90, 210, 60, 210, 160, 310, 130, 300, 100, 290, 70, 270, 60, 260, 50, 240, 50, 220, 60, 210, 70, 430, 100, 430, 120, 420, 140, 400, 150, 370, 160, 340, 160, 310, 160, 310, 200, 330, 220, 340, 240, 360, 260, 390, 260, 410, 250, 430, 160, 310, 160, 280, 160, 250, 170, 230, 180, 210, 200, 180, 220, 160, 240, 150, 270, 150, 290, 170))
  447. SQL> -- ***********************************************************************************
  448. SQL> -- St_HausdorffSimilarityMeasure, St_AreaSimilarityMeasure
  449. SQL> -- ***********************************************************************************
  450. SQL> --
  451. SQL> WITH DATA AS (
  452. SQL>   SELECT MDSYS.SDO_GEOMETRY(2003,NULL,NULL,MDSYS.SDO_ELEM_INFO_ARRAY(1,1003,3),MDSYS.SDO_ORDINATE_ARRAY(100.0, 100.0, 500.0, 500.0)) AS area1,
  453. SQL>        MDSYS.SDO_GEOMETRY(2003,NULL,NULL,MDSYS.SDO_ELEM_INFO_ARRAY(1,1003,1),MDSYS.SDO_ORDINATE_ARRAY(100,100,500,100,500,500,100,500,100,100)) AS area2
  454. SQL>   FROM dual
  455. SQL> )
  456. SQL> SELECT &&DefaultSchema..SC4O.St_HausdorffSimilarityMeasure(area1,area2,3) AS HSM,
  457. SQL>      &&DefaultSchema..SC4O.St_AreaSimilarityMeasure(area1,area2,3)      AS ASM
  458. SQL>   FROM DATA;
  459.        HSM    ASM
  460. ---------- ----------
  461.    1      1
  462. SQL> WITH DATA AS (
  463. SQL>   SELECT MDSYS.SDO_GEOMETRY(2003, NULL, NULL, MDSYS.SDO_ELEM_INFO_ARRAY(1,1003,3), MDSYS.SDO_ORDINATE_ARRAY(100.0, 100.0, 500.0,  500.0)) AS area1,
  464. SQL>        MDSYS.SDO_GEOMETRY(2003,NULL,NULL,MDSYS.SDO_ELEM_INFO_ARRAY(1,1003,1),MDSYS.SDO_ORDINATE_ARRAY(100,100,500.01,100,500.01,500.01,100,500.01,100,100)) AS area2
  465. SQL>   FROM dual
  466. SQL> )
  467. SQL> SELECT &&DefaultSchema..SC4O.St_HausdorffSimilarityMeasure(area1,area2,3) AS HSM,
  468. SQL>      &&DefaultSchema..SC4O.St_AreaSimilarityMeasure(area1,area2,3)      AS ASM
  469. SQL>   FROM DATA;
  470.        HSM    ASM
  471. ---------- ----------
  472. .999975001 .999950002
  473. SQL> WITH DATA AS (
  474. SQL>   SELECT MDSYS.SDO_GEOMETRY(2002, NULL, NULL, MDSYS.SDO_ELEM_INFO_ARRAY(1,2,1), MDSYS.SDO_ORDINATE_ARRAY(0,0, 10,10, 20,0, 30,30)) AS line1,
  475. SQL>        MDSYS.SDO_GEOMETRY(2002, NULL, NULL, MDSYS.SDO_ELEM_INFO_ARRAY(1,2,1), MDSYS.SDO_ORDINATE_ARRAY(0,0, 10.01,10, 20,0.1, 30,30.07)) AS line2
  476. SQL>   FROM dual
  477. SQL> )
  478. SQL> SELECT &&DefaultSchema..SC4O.St_HausdorffSimilarityMeasure(line1,line2,3) AS HSM
  479. SQL>   FROM DATA;
  480.        HSM
  481. ----------
  482. .997645726
  483. SQL> -- ***********************************************************************************
  484. SQL> -- ST_Area, ST_Length, ST_IsValid, ST_IsSimple, ST_Dimension, ST_CoordDim, ST_GeomFromText
  485. SQL> -- ***********************************************************************************
  486. SQL> --
  487. SQL> WITH DATA AS (
  488. SQL>   SELECT &&DefaultSchema..SC4O.ST_GeomFromText('POINT (10 5)',NULL) AS geom FROM dual UNION ALL
  489. SQL>   SELECT &&DefaultSchema..SC4O.ST_GeomFromText('POINT (900 900 10)',NULL) AS geom FROM dual UNION ALL
  490. SQL>   SELECT mdsys.sdo_geometry('LINESTRING (10 10, 20 10)',NULL) AS geom FROM dual UNION ALL
  491. SQL>   SELECT mdsys.sdo_geometry('LINESTRING (100 100, 900 900)',NULL) AS geom FROM dual UNION ALL
  492. SQL>   SELECT &&DefaultSchema..SC4O.ST_GeomFromText('LINESTRING (10 10 1, 20 10 2)',NULL) AS geom FROM dual UNION ALL
  493. SQL>   SELECT &&DefaultSchema..SC4O.ST_GeomFromText('LINESTRING (10 25, 20 30, 25 25, 30 30)',NULL) AS geom FROM dual UNION ALL
  494. SQL>   SELECT mdsys.sdo_geometry('LINESTRING (10 55, 15 55, 20 60, 10 60, 10 55)',NULL) AS geom FROM dual UNION ALL
  495. SQL>   SELECT &&DefaultSchema..SC4O.ST_GeomFromText('LINESTRING (10 85, 20 90, 20 85, 10 90, 10 85)',NULL) AS geom FROM dual UNION ALL
  496. SQL>   SELECT mdsys.sdo_geometry('POLYGON ((10 105, 15 105, 20 110, 10 110, 10 105))',NULL) AS geom FROM dual UNION ALL
  497. SQL>   SELECT mdsys.sdo_geometry('POLYGON ((100 100, 500 100, 500 500, 100 500, 100 100))',NULL) AS geom FROM dual UNION ALL
  498. SQL>   SELECT mdsys.sdo_geometry('POLYGON ((500 500, 1500 500, 1500 1500, 500 1500, 500 500), (600 750, 900 750, 900 1050, 600 1050, 600 750))',NULL) AS geom FROM dual UNION ALL
  499. SQL>   SELECT &&DefaultSchema..SC4O.ST_GeomFromText('POLYGON ((50 135, 60 135, 60 140, 50 140, 50 135), (51 136, 59 136, 59 139, 51 139, 51 136))',NULL) AS geom FROM dual UNION ALL
  500. SQL>   SELECT mdsys.sdo_geometry('POLYGON ((10 135, 20 135, 20 140, 10 140, 10 135))',NULL) AS geom FROM dual UNION ALL
  501. SQL>   SELECT &&DefaultSchema..SC4O.ST_GeomFromText('MULTIPOINT ((50 5), (55 7), (60 5))',NULL) AS geom FROM dual UNION ALL
  502. SQL>   SELECT mdsys.sdo_geometry('MULTIPOINT ((65 5))',NULL) AS geom FROM dual UNION ALL
  503. SQL>   SELECT mdsys.sdo_geometry('MULTIPOINT ((100 100), (900 900))',NULL) AS geom FROM dual UNION ALL
  504. SQL>   SELECT mdsys.sdo_geometry('MULTILINESTRING ((50 15, 55 15), (60 15, 65 15))',NULL) AS geom FROM dual UNION ALL
  505. SQL>   SELECT &&DefaultSchema..SC4O.ST_GeomFromText('MULTILINESTRING ((50 22, 60 22), (55 20, 55 25))',NULL) AS geom FROM dual UNION ALL
  506. SQL>   SELECT mdsys.sdo_geometry('MULTILINESTRING ((50 55, 50 60, 55 58, 50 55), (56 58, 60 55, 60 60, 56 58))',NULL) AS geom FROM dual UNION ALL
  507. SQL>   SELECT mdsys.sdo_geometry('MULTIPOLYGON (((50 105, 55 105, 60 110, 50 110, 50 105)), ((62 108, 65 108, 65 112, 62 112, 62 108)))',NULL) AS geom FROM dual UNION ALL
  508. SQL>   SELECT &&DefaultSchema..SC4O.ST_GeomFromText('MULTIPOLYGON (((50 115, 55 115, 55 120, 50 120, 50 115)), ((55 120, 58 120, 58 122, 55 122, 55 120)))',NULL) AS geom FROM dual UNION ALL
  509. SQL>   SELECT mdsys.sdo_geometry('MULTIPOLYGON (((50 95, 55 95, 53 96, 55 97, 53 98, 55 99, 50 99, 50 95)), ((55 100, 55 95, 60 95, 60 100, 55 100)))',NULL) AS geom FROM dual UNION ALL
  510. SQL>   SELECT mdsys.sdo_geometry('MULTIPOLYGON (((50 168, 50 160, 55 160, 55 168, 50 168), (51 167, 54 167, 54 161, 51 161, 51 162, 52 163, 51 164, 51 165, 51 166, 51 167)), ((52 166, 52 162, 53 162, 53 166, 52 166)))',NULL) AS geom FROM dual UNION ALL
  511. SQL>   SELECT mdsys.sdo_geometry('MULTIPOLYGON (((1500 100, 1900 100, 1900 500, 1500 500, 1500 100)), ((1900 500, 2300 500, 2300 900, 1900 900, 1900 500)))',NULL) AS geom FROM dual
  512. SQL> )
  513. SQL> SELECT DISTINCT
  514. SQL>      CASE WHEN a.geom.get_gtype() IN (1) THEN 'Point'
  515. SQL>     WHEN a.geom.get_gtype() IN (5) THEN 'MultiPoint'
  516. SQL>     WHEN a.geom.get_gtype() IN (2) THEN 'Line'
  517. SQL>     WHEN a.geom.get_gtype() IN (6) THEN 'MultiLine'
  518. SQL>     WHEN a.geom.get_gtype() IN (3) THEN 'Area'
  519. SQL>     WHEN a.geom.get_gtype() IN (7) THEN 'MultiArea'
  520. SQL>     ELSE 'Not Supported'
  521. SQL>       END geometryType,
  522. SQL>      round(&&DefaultSchema..SC4O.ST_area(a.geom,3),3) AS area,
  523. SQL>      round(sdo_geom.sdo_area(a.geom,0.0005),3) AS areaSDO,
  524. SQL>      round(&&DefaultSchema..SC4O.ST_length(a.geom,3),3) AS len,
  525. SQL>      round(sdo_geom.sdo_length(a.geom,0.0005),3) AS lenSDO,
  526. SQL>      &&DefaultSchema..SC4O.ST_IsValid(a.geom) AS isValid,
  527. SQL>      &&DefaultSchema..SC4O.ST_IsSimple(a.geom) AS isSimple,
  528. SQL>      &&DefaultSchema..SC4O.ST_Dimension(a.geom) AS Dimension,
  529. SQL>      &&DefaultSchema..SC4O.ST_CoordDim(a.geom) AS coordDim
  530. SQL>   FROM DATA a
  531. SQL> ORDER BY 1,2,4;
  532. GEOMETRYTYPE      AREA    AREASDO    LEN     LENSDO ISVALID                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        ISSIMPLE                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         DIMENSION                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          COORDDIM
  533. ------------- ---------- ---------- ---------- ---------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  534. Area          26        52      TRUE                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           TRUE                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           2                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            2
  535. Area        37.5       37.5 27.071     27.071 TRUE                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           TRUE                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           2                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            2
  536. Area          50   50     30         30 TRUE                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           TRUE                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           2                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            2
  537. Area      160000     160000   1600       1600 TRUE                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           TRUE                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           2                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            2
  538. Area      910000     910000   5200       5200 TRUE                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           TRUE                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           2                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            2
  539. Line           0    0     10         10 TRUE                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           TRUE                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           1                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            2
  540. Line           0    0     10      10.05 TRUE                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           TRUE                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           1                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            3
  541. Line           0    25.322      TRUE                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           TRUE                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           1                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            2
  542. Line           0    0 27.071     27.071 TRUE                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           TRUE                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           1                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            2
  543. Line           0    32.361      TRUE                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           FALSE                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          1                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            2
  544. Line           0    0   1131.371   1131.371 TRUE                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           TRUE                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           1                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            2
  545. MultiArea       27   27 54.828     54.828 TRUE                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           TRUE                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           2                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            2
  546. MultiArea       31        30      TRUE                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           TRUE                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           2                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            2
  547. MultiArea       41   41 42.944     42.944 TRUE                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           TRUE                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           2                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            2
  548. MultiArea     49.5       49.5 41.071     41.071 TRUE                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           TRUE                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           2                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            2
  549. MultiArea   320000     320000   3200       3200 TRUE                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           TRUE                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           2                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            2
  550. MultiLine        0    0     10         10 TRUE                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           TRUE                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           1                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            2
  551. MultiLine        0        15      TRUE                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           FALSE                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          1                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            2
  552. MultiLine        0    0 30.688     30.688 TRUE                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           TRUE                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           1                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            2
  553. MultiPoint         0    0      0    0 TRUE                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           TRUE                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           0                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            2
  554. MultiPoint         0         0      TRUE                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           TRUE                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           0                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            2
  555. Point          0    0      0    0 TRUE                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           TRUE                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           0                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            3
  556. Point          0         0      TRUE                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           TRUE                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           0                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            2
  557. 23 ROWS selected.
  558. SQL> -- ***********************************************************************************
  559. SQL> -- ST_Buffer
  560. SQL> -- ***********************************************************************************
  561. SQL> --
  562. SQL> -- No Geometry
  563. SQL> --
  564. SQL> SELECT &&DefaultSchema..SC4O.ST_Buffer(NULL,100.0,1) AS polygon
  565. SQL>   FROM dual;
  566. POLYGON(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_INFO, SDO_ORDINATES)
  567. ---------------------------------------------------------------------------------------------------
  568. SQL> -- 1. 15m Buffer with _Round_ End Cap and Join Style*
  569. SQL> SELECT &&DefaultSchema..SC4O.ST_Buffer(mdsys.sdo_geometry(2002,NULL,NULL,sdo_elem_info_array(1,2,1),sdo_ordinate_array(20,1,50,50,100,0,150,50)),15.0,2,
  570. SQL>            1 /*CAP_ROUND*/,
  571. SQL>            1 /*JOIN_ROUND*/,
  572. SQL>            8 /*QUADRANT_SEGMENTS*/,
  573. SQL>            0 /*FULL BUFFER*/) AS buf
  574. SQL>   FROM dual;
  575. BUF(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_INFO, SDO_ORDINATES)
  576. ---------------------------------------------------------------------------------------------------
  577. SDO_GEOMETRY(2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARRAY(37.21, 57.83, 7.21, 8.83, 5.93, 6.19, 5.18, 3.34, 5.01, .41, 5.42, -2.51, 6.38, -5.29, 7.87, -7.82, 9.82, -10.02, 12.17, -11.79, 14.81, -13.07, 17.66, -13.82, 20.59, -13.99, 23.51, -13.58, 26.29, -12.62, 28.82, -11.13, 31.02, -9.18, 32.79, -6.83, 52.85, 25.93, 89.39, -10.61, 91.67, -12.47, 94.26, -13.86, 97.07, -14.71, 100, -15, 102.93, -14.71, 105.74, -13.86, 108.33, -12.47, 110.61, -10.61, 160.61, 39.39, 162.47, 41.67, 163.86, 44.26, 164.71, 47.07, 165, 50, 164.71, 52.93, 163.86, 55.74, 162.47, 58.33, 160.61, 60.61, 158.33, 62.47, 155.74, 63.86, 152.93, 64.71, 150, 65, 147.07, 64.71, 144.26, 63.86, 141.67, 62.47, 139.39, 60.61, 100, 21.21, 60.61, 60.61, 58.28, 62.51, 55.62, 63.91, 52.73, 64.75, 49.74, 65, 46.75, 64.64, 43.9, 63.7, 41.29, 62.21, 39.03, 60.23, 37.21, 57.83))
  578. SQL> -- 2. 15m Buffer with _SQUARE_ End Cap and ROUND Join Style*
  579. SQL> SELECT &&DefaultSchema..SC4O.ST_Buffer(mdsys.sdo_geometry(2002,NULL,NULL,sdo_elem_info_array(1,2,1),sdo_ordinate_array(20,1,50,50,100,0,150,50)),15.0,2,
  580. SQL>            3 /*CAP_SQUARE*/,
  581. SQL>            1 /*JOIN_ROUND*/,
  582. SQL>            8 /*QUADRANT_SEGMENTS*/,
  583. SQL>            0 /*FULL BUFFER*/) AS buf
  584. SQL>   FROM dual;
  585. BUF(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_INFO, SDO_ORDINATES)
  586. ---------------------------------------------------------------------------------------------------
  587. SDO_GEOMETRY(2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARRAY(37.21, 57.83, -.63, -3.96, 24.96, -19.63, 32.79, -6.83, 52.85, 25.93, 89.39, -10.61, 91.67, -12.47, 94.26, -13.86, 97.07, -14.71, 100, -15, 102.93, -14.71, 105.74, -13.86, 108.33, -12.47, 110.61, -10.61, 171.21, 50, 150, 71.21, 139.39, 60.61, 100, 21.21, 60.61, 60.61, 58.28, 62.51, 55.62, 63.91, 52.73, 64.75, 49.74, 65, 46.75, 64.64, 43.9, 63.7, 41.29, 62.21, 39.03, 60.23, 37.21, 57.83))
  588. SQL> -- 3. 15m Buffer with _BUTT_ End Cap and _ROUND_ Join Style*
  589. SQL> SELECT &&DefaultSchema..SC4O.ST_Buffer(mdsys.sdo_geometry(2002,NULL,NULL,sdo_elem_info_array(1,2,1),sdo_ordinate_array(20,1,50,50,100,0,150,50)),15.0,2,
  590. SQL>            2 /*CAP_BUTT*/,
  591. SQL>            1 /*JOIN_ROUND*/,
  592. SQL>            8 /*QUADRANT_SEGMENTS*/,
  593. SQL>            0 /*FULL BUFFER*/) AS buf
  594. SQL>   FROM dual;
  595. BUF(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_INFO, SDO_ORDINATES)
  596. ---------------------------------------------------------------------------------------------------
  597. SDO_GEOMETRY(2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARRAY(37.21, 57.83, 7.21, 8.83, 32.79, -6.83, 52.85, 25.93, 89.39, -10.61, 91.67, -12.47, 94.26, -13.86, 97.07, -14.71, 100, -15, 102.93, -14.71, 105.74, -13.86, 108.33, -12.47, 110.61, -10.61, 160.61, 39.39, 139.39, 60.61, 100, 21.21, 60.61, 60.61, 58.28, 62.51, 55.62, 63.91, 52.73, 64.75, 49.74, 65, 46.75, 64.64, 43.9, 63.7, 41.29, 62.21, 39.03, 60.23, 37.21, 57.83))
  598. SQL> -- 4. 15m Buffer with _BUTT_ End Cap and _MITRE_ Join Style*
  599. SQL> SELECT &&DefaultSchema..SC4O.ST_Buffer(mdsys.sdo_geometry(2002,NULL,NULL,sdo_elem_info_array(1,2,1),sdo_ordinate_array(20,1,50,50,100,0,150,50)),15.0,2,
  600. SQL>            2 /*CAP_BUTT*/,
  601. SQL>            2 /*JOIN_MITRE*/,
  602. SQL>            8 /*QUADRANT_SEGMENTS*/,
  603. SQL>            0 /*FULL BUFFER*/) AS buf
  604. SQL>   FROM dual;
  605. BUF(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_INFO, SDO_ORDINATES)
  606. ---------------------------------------------------------------------------------------------------
  607. SDO_GEOMETRY(2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARRAY(47.15, 74.07, 7.21, 8.83, 32.79, -6.83, 52.85, 25.93, 100, -21.21, 160.61, 39.39, 139.39, 60.61, 100, 21.21, 47.15, 74.07))
  608. SQL> -- 5. 15m Buffer with _BUTT_ End Cap and _BEVEL_ Join Style*
  609. SQL> SELECT &&DefaultSchema..SC4O.ST_Buffer(mdsys.sdo_geometry(2002,NULL,NULL,sdo_elem_info_array(1,2,1),sdo_ordinate_array(20,1,50,50,100,0,150,50)),15.0,2,
  610. SQL>            2 /*CAP_BUTT*/,
  611. SQL>            3 /*JOIN_BEVEL*/,
  612. SQL>            8 /*QUADRANT_SEGMENTS*/,
  613. SQL>            0 /*FULL BUFFER*/) AS buf
  614. SQL>   FROM dual;
  615. BUF(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_INFO, SDO_ORDINATES)
  616. ---------------------------------------------------------------------------------------------------
  617. SDO_GEOMETRY(2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARRAY(37.21, 57.83, 7.21, 8.83, 32.79, -6.83, 52.85, 25.93, 89.39, -10.61, 110.61, -10.61, 160.61, 39.39, 139.39, 60.61, 100, 21.21, 60.61, 60.61, 37.21, 57.83))
  618. SQL> -- 6. Simple Bent Line Buffered Left and Right Side by 15m.
  619. SQL> SELECT &&DefaultSchema..SC4O.ST_Buffer(line,b.left_right_distance,2,1,c.join_type,8,1) AS buf
  620. SQL>   FROM (SELECT mdsys.sdo_geometry(2002,NULL,NULL,sdo_elem_info_array(1,2,1),sdo_ordinate_array(20,1,50,50,100,0,150,50)) AS line
  621. SQL>         FROM dual
  622. SQL>      ) a,
  623. SQL>      (SELECT CASE WHEN level = 1 THEN -15.0 ELSE 15.0 END AS left_right_distance FROM dual CONNECT BY level < 3) b,
  624. SQL>      (SELECT level AS join_type FROM dual CONNECT BY level < 4) c;
  625. BUF(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_INFO, SDO_ORDINATES)
  626. ---------------------------------------------------------------------------------------------------
  627. SDO_GEOMETRY(2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARRAY(20, 1, 32.79, -6.83, 52.85, 25.93, 89.39, -10.61, 91.67, -12.47, 94.26, -13.86, 97.07, -14.71, 100, -15, 102.93, -14.71, 105.74, -13.86, 108.33, -12.47, 110.61, -10.61, 160.61, 39.39, 150, 50, 100, 0, 50, 50, 20, 1))
  628. SDO_GEOMETRY(2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARRAY(20, 1, 32.79, -6.83, 52.85, 25.93, 100, -21.21, 160.61, 39.39, 150, 50, 100, 0, 50, 50, 20, 1))
  629. SDO_GEOMETRY(2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARRAY(20, 1, 32.79, -6.83, 52.85, 25.93, 89.39, -10.61, 110.61, -10.61, 160.61, 39.39, 150, 50, 100, 0, 50, 50, 20, 1))
  630. SDO_GEOMETRY(2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARRAY(150, 50, 139.39, 60.61, 100, 21.21, 60.61, 60.61, 58.28, 62.51, 55.62, 63.91, 52.73, 64.75, 49.74, 65, 46.75, 64.64, 43.9, 63.7, 41.29, 62.21, 39.03, 60.23, 37.21, 57.83, 7.21, 8.83, 20, 1, 50, 50, 100, 0, 150, 50))
  631. SDO_GEOMETRY(2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARRAY(150, 50, 139.39, 60.61, 100, 21.21, 47.15, 74.07, 7.21, 8.83, 20, 1, 50, 50, 100, 0, 150, 50))
  632. SDO_GEOMETRY(2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARRAY(150, 50, 139.39, 60.61, 100, 21.21, 60.61, 60.61, 37.21, 57.83, 7.21, 8.83, 20, 1, 50, 50, 100, 0, 150, 50))
  633. 6 ROWS selected.
  634. SQL> -- ***********************************************************************************
  635. SQL> -- ST_Union, ST_Intersection, ST_XOR, ST_Difference, ST_CoordinateRounder
  636. SQL> -- ***********************************************************************************
  637. SQL> -- Polygon tests
  638. SQL> --
  639. SQL> WITH DATA AS (
  640. SQL>   SELECT mdsys.sdo_geometry(2003,82469,NULL,sdo_elem_info_array(1,1003,3),sdo_ordinate_array(1,1,10,10)) AS geom1,
  641. SQL>        mdsys.sdo_geometry(2003,82469,NULL,sdo_elem_info_array(1,1003,3),sdo_ordinate_array(5,5,15,15)) AS geom2
  642. SQL>   FROM dual
  643. SQL> )
  644. SQL> SELECT 'UNION' AS gtype,
  645. SQL>      &&DefaultSchema..SC4O.ST_Union(mdsys.sdo_geometry(2003,82469,NULL,sdo_elem_info_array(1,1003,3),sdo_ordinate_array(1,1,10,10)),
  646. SQL>             mdsys.sdo_geometry(2003,82469,NULL,sdo_elem_info_array(1,1003,3),sdo_ordinate_array(5,5,15,15)),
  647. SQL>             1) AS rGeom,
  648. SQL>      'INTERSECTION' AS gtype,
  649. SQL>      &&DefaultSchema..SC4O.ST_intersection(mdsys.sdo_geometry(2003,82469,NULL,sdo_elem_info_array(1,1003,3),sdo_ordinate_array(1,1,10,10)),
  650. SQL>              mdsys.sdo_geometry(2003,82469,NULL,sdo_elem_info_array(1,1003,3),sdo_ordinate_array(5,5,15,15)),
  651. SQL>              1) AS rGeom,
  652. SQL>      'XOR' AS gtype,
  653. SQL>      &&DefaultSchema..SC4O.ST_XOr(mdsys.sdo_geometry(2003,82469,NULL,sdo_elem_info_array(1,1003,3),sdo_ordinate_array(1,1,10,10)),
  654. SQL>           mdsys.sdo_geometry(2003,82469,NULL,sdo_elem_info_array(1,1003,3),sdo_ordinate_array(5,5,15,15)),
  655. SQL>           1) AS rGeom,
  656. SQL>      'DIFFERENCE' AS gtype,
  657. SQL>       &&DefaultSchema..SC4O.ST_Difference(mdsys.sdo_geometry(2003,82469,NULL,sdo_elem_info_array(1,1003,3),sdo_ordinate_array(1,1,10,10)),
  658. SQL>             mdsys.sdo_geometry(2003,82469,NULL,sdo_elem_info_array(1,1003,3),sdo_ordinate_array(5,5,15,15)),
  659. SQL>             1) AS rGeom
  660. SQL>   FROM DATA;
  661. GTYPE RGEOM(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_INFO, SDO_ORDINATES)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       GTYPE      RGEOM(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_INFO, SDO_ORDINATES)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     GTY RGEOM(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_INFO, SDO_ORDINATES)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   GTYPE      RGEOM(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_INFO, SDO_ORDINATES)
  662. ----- --------------------------------------------------------------------------------------------------- ------------ -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  663. UNION SDO_GEOMETRY(2003, 82469, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARRAY(10, 5, 15, 5, 15, 15, 5, 15, 5, 10, 1, 10, 1, 1, 10, 1, 10, 5))                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    INTERSECTION SDO_GEOMETRY(2003, 82469, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARRAY(5, 10, 5, 5, 10, 5, 10, 10, 5, 10))                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          XOR SDO_GEOMETRY(2007, 82469, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1, 15, 1003, 1), SDO_ORDINATE_ARRAY(10, 5, 5, 5, 5, 10, 1, 10, 1, 1, 10, 1, 10, 5, 10, 5, 15, 5, 15, 15, 5, 15, 5, 10, 10, 10, 10, 5))                                                                                                                                                                                                                                                                                                                                                                                                                                                                      DIFFERENCE SDO_GEOMETRY(2003, 82469, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARRAY(10, 5, 5, 5, 5, 10, 1, 10, 1, 1, 10, 1, 10, 5))
  664. SQL> -- Union of two points
  665. SQL> WITH DATA AS (
  666. SQL>   SELECT MDSYS.SDO_GEOMETRY(2001, 32639, MDSYS.SDO_POINT_TYPE(548810.44489, 3956383.07564,NULL),NULL,NULL) g1,
  667. SQL>        MDSYS.SDO_GEOMETRY(2001, 32639, MDSYS.SDO_POINT_TYPE(548766.398, 3956415.329,NULL), NULL, NULL) g2
  668. SQL>   FROM dual
  669. SQL> )
  670. SQL> SELECT &&DefaultSchema..SC4O.ST_CoordinateRounder(&&DefaultSchema..SC4O.ST_Union(g1,g2,1),1) AS GeoProcess,
  671. SQL>      &&DefaultSchema..SC4O.ST_CoordinateRounder(sdo_geom.sdo_union(g1,g2,0.05),1) AS Oracle
  672. SQL>   FROM DATA;
  673. GEOPROCESS(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_INFO, SDO_ORDINATES)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ORACLE(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_INFO, SDO_ORDINATES)
  674. --------------------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  675. SDO_GEOMETRY(2005, 32639, NULL, SDO_ELEM_INFO_ARRAY(1, 1, 2), SDO_ORDINATE_ARRAY(548766.4, 3956415.3, 548810.4, 3956383.1))                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      SDO_GEOMETRY(2005, 32639, NULL, SDO_ELEM_INFO_ARRAY(1, 1, 2), SDO_ORDINATE_ARRAY(548810.4, 3956383.1, 548766.4, 3956415.3))
  676. SQL> -- Coordinate rounding ...
  677. SQL> WITH DATA AS (
  678. SQL>   SELECT MDSYS.SDO_GEOMETRY(2001, 32639, MDSYS.SDO_POINT_TYPE(548810.44489, 3956383.07564,NULL),NULL,NULL) g1,
  679. SQL>        MDSYS.SDO_GEOMETRY(2001, 32639, MDSYS.SDO_POINT_TYPE(548766.398, 3956415.329,NULL), NULL, NULL) g2
  680. SQL>   FROM dual
  681. SQL> )
  682. SQL> SELECT sdo_geom.relate(&&DefaultSchema..SC4O.ST_CoordinateRounder(&&DefaultSchema..SC4O.ST_Union(g1,g2,1),1),
  683. SQL>          'DETERMINE',
  684. SQL>          &&DefaultSchema..SC4O.ST_CoordinateRounder(sdo_geom.sdo_union(g1,g2,0.05),1),
  685. SQL>          0.05) AS compare
  686. SQL>   FROM DATA;
  687. COMPARE
  688. -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  689. EQUAL
  690. SQL> -- Intersection of mixed objects ...
  691. SQL> -- 1. A point and a line
  692. SQL> WITH DATA AS (
  693. SQL>   SELECT MDSYS.SDO_GEOMETRY(2002, 32639, NULL, MDSYS.SDO_ELEM_INFO_ARRAY(1,2,1), MDSYS.SDO_ORDINATE_ARRAY(548766.398, 3956415.329, 548866.753, 3956341.844, 548845.366, 3956342.941)) g1,
  694. SQL>        MDSYS.SDO_GEOMETRY(2001, 32639, MDSYS.SDO_POINT_TYPE(548766.398, 3956415.329,NULL), NULL, NULL) g2
  695. SQL>   FROM dual
  696. SQL> )
  697. SQL> SELECT &&DefaultSchema..SC4O.ST_CoordinateRounder(&&DefaultSchema..SC4O.ST_Intersection(g1,g2,1),1) AS GeoProcess,
  698. SQL>      &&DefaultSchema..SC4O.ST_CoordinateRounder(sdo_geom.sdo_intersection(g1,g2,0.05),1) AS Oracle
  699. SQL>   FROM DATA;
  700. GEOPROCESS(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_INFO, SDO_ORDINATES)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ORACLE(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_INFO, SDO_ORDINATES)
  701. --------------------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  702. SDO_GEOMETRY(2001, 32639, SDO_POINT_TYPE(548766.4, 3956415.3, NULL), NULL, NULL)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 SDO_GEOMETRY(2001, 32639, SDO_POINT_TYPE(548766.4, 3956415.3, NULL), NULL, NULL)
  703. SQL> -- 2. Two crossing lines
  704. SQL> WITH DATA AS (
  705. SQL>   SELECT MDSYS.SDO_GEOMETRY(2002, 32639, NULL, MDSYS.SDO_ELEM_INFO_ARRAY(1,2,1), MDSYS.SDO_ORDINATE_ARRAY(548938.421,3956363.864,548823.852,3956379.758,548818.010,3956381.297,548812.139,3956382.844,548683.715,3956400.404)) g1,
  706. SQL>        MDSYS.SDO_GEOMETRY(2002, 32639, NULL, MDSYS.SDO_ELEM_INFO_ARRAY(1,2,1), MDSYS.SDO_ORDINATE_ARRAY(548766.398,3956415.329,548866.753,3956341.844,548845.366,3956342.941)) g2
  707. SQL>   FROM dual
  708. SQL> )
  709. SQL> SELECT &&DefaultSchema..SC4O.ST_CoordinateRounder(&&DefaultSchema..SC4O.ST_Intersection(g1,g2,1),1) AS GeoProcess,
  710. SQL>      &&DefaultSchema..SC4O.ST_CoordinateRounder(sdo_geom.sdo_intersection(g1,g2,0.05),1) AS Oracle
  711. SQL>   FROM DATA;
  712. GEOPROCESS(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_INFO, SDO_ORDINATES)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ORACLE(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_INFO, SDO_ORDINATES)
  713. --------------------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  714. SDO_GEOMETRY(2001, 32639, SDO_POINT_TYPE(548810.4, 3956383.1, NULL), NULL, NULL)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 SDO_GEOMETRY(2001, 32639, SDO_POINT_TYPE(548810.4, 3956383.1, NULL), NULL, NULL)
  715. SQL> -- 3. A line and a polygon
  716. SQL> WITH DATA AS (
  717. SQL>   SELECT MDSYS.SDO_GEOMETRY(2003, 32639, NULL, MDSYS.SDO_ELEM_INFO_ARRAY(1,1003,1), MDSYS.SDO_ORDINATE_ARRAY(548862.366, 3956401.619, 548793.269, 3956409.845, 548785.043, 3956369.812, 548850.302, 3956361.587, 548862.366, 3956401.619)) g1,
  718. SQL>        MDSYS.SDO_GEOMETRY(2002, 32639, NULL, MDSYS.SDO_ELEM_INFO_ARRAY(1,2,1), MDSYS.SDO_ORDINATE_ARRAY(548766.398, 3956415.329, 548866.753, 3956341.844, 548845.366, 3956342.941)) g2
  719. SQL>   FROM dual
  720. SQL> )
  721. SQL> SELECT &&DefaultSchema..SC4O.ST_CoordinateRounder(&&DefaultSchema..SC4O.ST_Intersection(g1,g2,1),1) AS GeoProcess,
  722. SQL>      &&DefaultSchema..SC4O.ST_CoordinateRounder(sdo_geom.sdo_intersection(g1,g2,0.05),1) AS Oracle
  723. SQL>   FROM DATA;
  724. GEOPROCESS(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_INFO, SDO_ORDINATES)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ORACLE(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_INFO, SDO_ORDINATES)
  725. --------------------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  726. SDO_GEOMETRY(2002, 32639, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1), SDO_ORDINATE_ARRAY(548790.7, 3956397.5, 548837.6, 3956363.2))                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      SDO_GEOMETRY(2002, 32639, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1), SDO_ORDINATE_ARRAY(548790.7, 3956397.5, 548837.6, 3956363.2))
  727. SQL> -- 4. A Point and polygon
  728. SQL> WITH DATA AS (
  729. SQL>   SELECT mdsys.sdo_geometry (2001, NULL, NULL, SDO_ELEM_INFO_ARRAY(1,1,1),SDO_ORDINATE_ARRAY (13,106)) g1,
  730. SQL>        mdsys.sdo_geometry (2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1,1003,1),SDO_ORDINATE_ARRAY (10,105, 15,105, 20,110, 10,110, 10,105)) g2
  731. SQL>   FROM dual
  732. SQL> )
  733. SQL> SELECT &&DefaultSchema..SC4O.ST_CoordinateRounder(&&DefaultSchema..SC4O.ST_Intersection(g1,g2,1),1) AS GeoProcess,
  734. SQL>      &&DefaultSchema..SC4O.ST_CoordinateRounder(sdo_geom.sdo_intersection(g1,g2,0.05),1) AS Oracle
  735. SQL>   FROM DATA;
  736. GEOPROCESS(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_INFO, SDO_ORDINATES)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ORACLE(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_INFO, SDO_ORDINATES)
  737. --------------------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  738. SDO_GEOMETRY(2001, NULL, SDO_POINT_TYPE(13, 106, NULL), NULL, NULL)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    SDO_GEOMETRY(2001, NULL, SDO_POINT_TYPE(13, 106, NULL), NULL, NULL)
  739. SQL> -- ***********************************************************************************
  740. SQL> -- ST_Union, ST_Intersection, ST_XOR, ST_Difference, ST_CoordinateRounder
  741. SQL> -- ***********************************************************************************
  742. SQL> -- 1. Point is returned as is
  743. SQL> SELECT &&DefaultSchema..SC4O.ST_MinimumBoundingCircle(sdo_geometry(2001,NULL,sdo_point_type(1,1,NULL),NULL,NULL),2) AS mbc FROM dual;
  744. MBC(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_INFO, SDO_ORDINATES)
  745. ---------------------------------------------------------------------------------------------------
  746. SDO_GEOMETRY(2001, NULL, SDO_POINT_TYPE(1, 1, NULL), NULL, NULL)
  747. SQL> -- 2. Straight line defined by two points
  748. SQL> SELECT &&DefaultSchema..SC4O.ST_MinimumBoundingCircle(sdo_geometry('MULTIPOINT ((10 10), (20 20))',0),2) AS mbc  FROM dual;
  749. MBC(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_INFO, SDO_ORDINATES)
  750. ---------------------------------------------------------------------------------------------------
  751. SDO_GEOMETRY(2003, 0, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARRAY(22.07, 15, 21.94, 16.38, 21.53, 17.71, 20.88, 18.93, 20, 20, 18.93, 20.88, 17.71, 21.53, 16.38, 21.94, 15, 22.07, 13.62, 21.94, 12.29, 21.53, 11.07, 20.88, 10, 20, 9.12, 18.93, 8.47, 17.71, 8.06, 16.38, 7.93, 15, 8.06, 13.62, 8.47, 12.29, 9.12, 11.07, 10, 10, 11.07, 9.12, 12.29, 8.47, 13.62, 8.06, 15, 7.93, 16.38, 8.06, 17.71, 8.47, 18.93, 9.12, 20, 10, 20.88, 11.07, 21.53, 12.29, 21.94, 13.62, 22.07, 15))
  752. SQL> -- 3. Three Points In Line
  753. SQL> SELECT &&DefaultSchema..SC4O.ST_MinimumBoundingCircle(sdo_geometry('MULTIPOINT ((10 10), (20 20), (30 30))',0),2) AS mbc  FROM dual;
  754. MBC(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_INFO, SDO_ORDINATES)
  755. ---------------------------------------------------------------------------------------------------
  756. SDO_GEOMETRY(2003, 0, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARRAY(34.14, 20, 33.87, 22.76, 33.07, 25.41, 31.76, 27.86, 30, 30, 27.86, 31.76, 25.41, 33.07, 22.76, 33.87, 20, 34.14, 17.24, 33.87, 14.59, 33.07, 12.14, 31.76, 10, 30, 8.24, 27.86, 6.93, 25.41, 6.13, 22.76, 5.86, 20, 6.13, 17.24, 6.93, 14.59, 8.24, 12.14, 10, 10, 12.14, 8.24, 14.59, 6.93, 17.24, 6.13, 20, 5.86, 22.76, 6.13, 25.41, 6.93, 27.86, 8.24, 30, 10, 31.76, 12.14, 33.07, 14.59, 33.87, 17.24, 34.14, 20))
  757. SQL> -- 4. three points
  758. SQL> SELECT &&DefaultSchema..SC4O.ST_MinimumBoundingCircle(sdo_geometry('MULTIPOINT ((10 10), (20 20), (10 20))',0),2) AS mbc  FROM dual;
  759. MBC(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_INFO, SDO_ORDINATES)
  760. ---------------------------------------------------------------------------------------------------
  761. SDO_GEOMETRY(2003, 0, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARRAY(22.07, 15, 21.94, 16.38, 21.53, 17.71, 20.88, 18.93, 20, 20, 18.93, 20.88, 17.71, 21.53, 16.38, 21.94, 15, 22.07, 13.62, 21.94, 12.29, 21.53, 11.07, 20.88, 10, 20, 9.12, 18.93, 8.47, 17.71, 8.06, 16.38, 7.93, 15, 8.06, 13.62, 8.47, 12.29, 9.12, 11.07, 10, 10, 11.07, 9.12, 12.29, 8.47, 13.62, 8.06, 15, 7.93, 16.38, 8.06, 17.71, 8.47, 18.93, 9.12, 20, 10, 20.88, 11.07, 21.53, 12.29, 21.94, 13.62, 22.07, 15))
  762. SQL> -- 5. testTriangleWithMiddlePoint
  763. SQL> SELECT &&DefaultSchema..SC4O.ST_MinimumBoundingCircle(sdo_geometry('MULTIPOINT ((10 10), (20 20), (10 20), (15 19))',0),2) AS mbc  FROM dual;
  764. MBC(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_INFO, SDO_ORDINATES)
  765. ---------------------------------------------------------------------------------------------------
  766. SDO_GEOMETRY(2003, 0, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARRAY(22.07, 15, 21.94, 16.38, 21.53, 17.71, 20.88, 18.93, 20, 20, 18.93, 20.88, 17.71, 21.53, 16.38, 21.94, 15, 22.07, 13.62, 21.94, 12.29, 21.53, 11.07, 20.88, 10, 20, 9.12, 18.93, 8.47, 17.71, 8.06, 16.38, 7.93, 15, 8.06, 13.62, 8.47, 12.29, 9.12, 11.07, 10, 10, 11.07, 9.12, 12.29, 8.47, 13.62, 8.06, 15, 7.93, 16.38, 8.06, 17.71, 8.47, 18.93, 9.12, 20, 10, 20.88, 11.07, 21.53, 12.29, 21.94, 13.62, 22.07, 15))
  767. SQL> -- 3. Linestring
  768. SQL> WITH DATA AS (
  769. SQL>   SELECT mdsys.sdo_geometry('LINESTRING(0 0, 10 10, 10 0, 20 10)',0) AS line FROM dual
  770. SQL> )
  771. SQL> SELECT &&DefaultSchema..SC4O.ST_MinimumBoundingCircle(line,2) AS dGeom
  772. SQL>   FROM DATA;
  773. DGEOM(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_INFO, SDO_ORDINATES)
  774. ---------------------------------------------------------------------------------------------------
  775. SDO_GEOMETRY(2003, 0, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARRAY(21.18, 5, 20.97, 7.18, 20.33, 9.28, 19.3, 11.21, 17.91, 12.91, 16.21, 14.3, 14.28, 15.33, 12.18, 15.97, 10, 16.18, 7.82, 15.97, 5.72, 15.33, 3.79, 14.3, 2.09, 12.91, .7, 11.21, -.33, 9.28, -.97, 7.18, -1.18, 5, -.97, 2.82, -.33, .72, .7, -1.21, 2.09, -2.91, 3.79, -4.3, 5.72, -5.33, 7.82, -5.97, 10, -6.18, 12.18, -5.97, 14.28, -5.33, 16.21, -4.3, 17.91, -2.91, 19.3, -1.21, 20.33, .72, 20.97, 2.82, 21.18, 5))
  776. SQL> -- 7. Optimized Rectangle
  777. SQL> WITH DATA AS (
  778. SQL> SELECT mdsys.sdo_geometry(2003,NULL,NULL,sdo_elem_info_array(1,1003,3),sdo_ordinate_array(1,1,10,10)) AS rect FROM dual
  779. SQL> )
  780. SQL> SELECT &&DefaultSchema..SC4O.ST_MinimumBoundingCircle(rect,2) AS dGeom FROM DATA;
  781. DGEOM(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_INFO, SDO_ORDINATES)
  782. ---------------------------------------------------------------------------------------------------
  783. SDO_GEOMETRY(2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARRAY(11.86, 5.5, 11.74, 6.74, 11.38, 7.94, 10.79, 9.04, 10, 10, 9.04, 10.79,