1

Oracle 18c

I have an SDO_GEOMETRY table that I created via ArcGIS Desktop 10.7.1.

The table has a line that appears to have a true curve in it:

enter image description here

However, in a related question, @Vince pointed out that this particular scenario could be misleading:

ArcGIS supports CAD objects in parallel to geometry, as a BLOB data type. The SDE.ST_GEOMETRY stores an approximation of the true curve object. SDO_GEOMETRY can store true curves, but Esri might not use it, since they use the BLOB instead. You need to review this Answer to make sure that the curve segment type is stored in SDO_GEOMETRY, not just that it looks right in an Esri client (leveraging the CAD BLOB).


Question:

Is there a way to determine if a SDO_GEOMETRY line has true curves (or not)?


What I tried:

I considered querying the SDO_GEOMETRY line as WKT so that I could look at the vertices as text (to see if there was any evidence of a true curve):

select
    sdo_util.to_wktgeometry(shape)
from
    my_table

But I think that defeats the purpose of what I'm trying to do. If there was, in fact, a true curve in the line, I think to_wktgeometry() would densify the curve as straight-line segments/approximations anyway. So I wouldn't be able to tell if there is a curve or not.

6
  • Perhaps you could compare the original geometry and geometry returned by sdo_arc_dendify docs.oracle.com/database/121/SPATL/…
    – user30184
    Commented Feb 3, 2022 at 16:26
  • 1
    You just need to review the SDO_ELEM_INFO_ARRAY component to see if the SDO_ETYPE is a curve.
    – Vince
    Commented Feb 3, 2022 at 17:18
  • 2
    Is that enough? By docs.oracle.com/database/121/SPATL/… ETYPE=1003 can be straight or curved and also SDO_INTERPRETATION matters.
    – user30184
    Commented Feb 3, 2022 at 17:31
  • 1
    I'm not sure about the ArcSDE\ArcGIS side, but when it comes to Oracle DB, if the table's geometry is a SDO_GEOMETRY Object Type, then an entry having a circular arc should have a triplet array containing two instances of the number 2, e.g. 'some integer, 2, 2'. This is stated, as @user30184 mentioned earlier, in the SDO_ELEM_INFO section of the SDO_GEOMETRY Object Type documentation.
    – EranGeo
    Commented Feb 26, 2022 at 0:51
  • @EranGeo I viewed the SDO_ELEM_INFO in SQL Developer, and it says my line is MDSYS.SDO_ELEM_INFO_ARRAY(1, 2, 1). So I guess that means that the line doesn't have a true curves stored in the SDO_GEOMETRY ... meaning the curve is stored in Esri's CAD BLOB instead. i.sstatic.net/r8lbc.png
    – User1974
    Commented Feb 27, 2022 at 4:41

1 Answer 1

1
+50

Oracle Spatial and Graph, defines several primitive types of geometries . A line as the example in the question, is called a Compound Line String, which means it has a combination of straight lines and circular arcs. This type of element is depicted in the SDO_GEOMETRY Object Type using the SDO_ELEM_INFO attribute. This attributes consists of a list of integers which maps how the SDO_ORDINATES attribute should be interpreted. The first integer for each triplet indicates the corresponding point(s) in the object's list of ordinates involved. The second and third integers of the triplet, indicates how these mapped ordinates should be interpreted.

Long story short: In an Oracle-native manner, for a line containing a combination of straight line(s) and circular arc(s), you must have at least one triplet that looks like this:

('some integer', 2, 2)

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.