Proprietary and Standards – What’s in a name

Interesting world we live in where a company that has a standards certificate from a body that another company who is a voting member on criticises its spatial implementation for not being standards compliant.

But, as the cynical poster says: “The nice thing about standards is that there is so many of them”. Or, “If you don’t like it: write your own”.

This is what ESRI says in its ArcGIS 9.2 Q&A about its new spatial type for Oracle:

ArcSDE is unique in the following capabilities:

  • It is open and interoperable across multiple DBMSs (Oracle, SQL Server, DB2, and Informix).
  •  It is standards-based, using as native data structure the OGC binary simple features standard and the ISO spatial type (DB2 and Informix only). At ArcGIS 9.2, support for the ISO-type standard will be extended to the Oracle platform.
  • It supports full open SQL access to geodatabases when using DB2 and Informix. Oracle and will be supported at ArcGIS 9.2.
  • It fully supports Oracle proprietary format (Oracle Spatial)
  • It provides exceptionally high performance for geodatabases

A few comments on this.

The first point (across multiple DBMS) is defensible.

The second, leads on into interesting territory. Both are the right public argument for their implementation. So far so good.

The third point is also defensible as it relates, predominantly, to geodatabase technology access.

The fourth point starts to expose the theme that underlies ESRI justification for what they have done. Scott Moorehouse brought up the “Oracle is proprietary” argument in his letter to Directions Magazine in an attempt to refute my arguments against ESRI’s non-persistent, rules-based topology. My response then was, and remains, that, except for the naming of Oracle’s spatal type (Sdo_Geometry – when they could have named it ST_Geometry!) their implementation has gotten all the necessary standards. Added to this is the FACT that ALL the major GIS and Remote Sensing vendors support Oracle Spatial never mind the myriad of IT reporting tools (Crystal Reports etc) and even tools like Microsoft Access.

BTW ESRI have used the same “proprietary” object extensibility framework Oracle provides to implement their type!

But, Oracle reponded to the lack of a standards-compliant type signature at 10gR1 and more publically in 10gR2 (I have edited the output to save space):

 <p class="#sourceCode">
 SQL> desc mdsys.st_point
   mdsys.st_point extends MDSYS.ST_GEOMETRY
   Name                                      Null?    Type
   ----------------------------------------- -------- -------------------
   GEOM                                               MDSYS.SDO_GEOMETRY 
   FINAL CONSTRUCTOR FUNCTION ST_POINT RETURNS SELF AS RESULT
   Argument Name                  Type                    In/Out Default?
   ------------------------------ ----------------------- ------ --------
   XCOORD                         NUMBER                  IN
   YCOORD                         NUMBER                  IN
   FINAL CONSTRUCTOR FUNCTION ST_POINT RETURNS SELF AS RESULT
   Argument Name                  Type                    In/Out Default?
   ------------------------------ ----------------------- ------ --------
   XCOORD                         NUMBER                  IN
   YCOORD                         NUMBER                  IN
   ASRID                          NUMBER                  IN
   MEMBER FUNCTION GET_SDO_GEOM RETURNS SDO_GEOMETRY
   MEMBER FUNCTION GET_WKB RETURNS BLOB
   MEMBER FUNCTION GET_WKT RETURNS CLOB
   MEMBER FUNCTION ST_COORDDIM RETURNS NUMBER
   MEMBER FUNCTION ST_ISVALID RETURNS NUMBER
   MEMBER FUNCTION ST_SRID RETURNS NUMBER
   MEMBER FUNCTION ST_SRID RETURNS ST_GEOMETRY
   Argument Name                  Type                    In/Out Default?
   ------------------------------ ----------------------- ------ --------
   ASRID                          NUMBER                  IN
   STATIC FUNCTION FROM_WKT RETURNS ST_GEOMETRY
   Argument Name                  Type                    In/Out Default?
   ------------------------------ ----------------------- ------ --------
   WKT                            CLOB                    IN
   STATIC FUNCTION FROM_WKT RETURNS ST_GEOMETRY
   Argument Name                  Type                    In/Out Default?
   ------------------------------ ----------------------- ------ --------
   WKT                            VARCHAR2                IN
   STATIC FUNCTION FROM_WKB RETURNS ST_GEOMETRY
   Argument Name                  Type                    In/Out Default?
   ------------------------------ ----------------------- ------ --------
   WKB                            BLOB                    IN
   STATIC FUNCTION FROM_WKT RETURNS ST_GEOMETRY
   Argument Name                  Type                    In/Out Default?
   ------------------------------ ----------------------- ------ --------
   WKT                            CLOB                    IN
   ASRID                          NUMBER                  IN
   STATIC FUNCTION FROM_WKT RETURNS ST_GEOMETRY
   Argument Name                  Type                    In/Out Default?
   ------------------------------ ----------------------- ------ --------
   WKT                            VARCHAR2                IN
   ASRID                          NUMBER                  IN
   STATIC FUNCTION FROM_WKB RETURNS ST_GEOMETRY
   Argument Name                  Type                    In/Out Default?
   ------------------------------ ----------------------- ------ --------
   WKB                            BLOB                    IN
   ASRID                          NUMBER                  IN
   STATIC FUNCTION FROM_SDO_GEOM RETURNS ST_GEOMETRY
   Argument Name                  Type                    In/Out Default?
   ------------------------------ ----------------------- ------ --------
   AGEOMETRY                      SDO_GEOMETRY            IN
   MEMBER FUNCTION ST_ISEMPTY RETURNS NUMBER
   MEMBER FUNCTION ST_ENVELOPE RETURNS ST_GEOMETRY
   MEMBER FUNCTION ST_BOUNDARY RETURNS ST_GEOMETRY
   MEMBER FUNCTION ST_GEOMETRYTYPE RETURNS VARCHAR2
   MEMBER FUNCTION ST_BUFFER RETURNS ST_GEOMETRY
   Argument Name                  Type                    In/Out Default?
   ------------------------------ ----------------------- ------ --------
   D                              NUMBER                  IN
   MEMBER FUNCTION ST_EQUALS RETURNS NUMBER
   Argument Name                  Type                    In/Out Default?
   ------------------------------ ----------------------- ------ --------
   G2                             ST_GEOMETRY             IN
   MEMBER FUNCTION ST_SYMMETRICDIFFERENCE RETURNS ST_GEOMETRY
   Argument Name                  Type                    In/Out Default?
   ------------------------------ ----------------------- ------ --------
   G2                             ST_GEOMETRY             IN
   MEMBER FUNCTION ST_DISTANCE RETURNS NUMBER
   Argument Name                  Type                    In/Out Default?
   ------------------------------ ----------------------- ------ --------
   G2                             ST_GEOMETRY             IN
   MEMBER FUNCTION ST_ISSIMPLE RETURNS NUMBER
   MEMBER FUNCTION ST_INTERSECTS RETURNS NUMBER
   Argument Name                  Type                    In/Out Default?
   ------------------------------ ----------------------- ------ --------
   G2                             ST_GEOMETRY             IN
   MEMBER FUNCTION ST_RELATE RETURNS NUMBER
   Argument Name                  Type                    In/Out Default?
   ------------------------------ ----------------------- ------ --------
   G2                             ST_GEOMETRY             IN
   PATTERNMATRIX VARCHAR2 IN
   MEMBER FUNCTION ST_CROSS RETURNS NUMBER
   Argument Name                  Type                    In/Out Default?
   ------------------------------ ----------------------- ------ --------
   G2                             ST_GEOMETRY             IN
   MEMBER FUNCTION ST_DISJOINT RETURNS NUMBER
   Argument Name                  Type                    In/Out Default?
   ------------------------------ ----------------------- ------ --------
   G2                             ST_GEOMETRY             IN
   MEMBER FUNCTION ST_TOUCH RETURNS NUMBER
   Argument Name                  Type                    In/Out Default?
   ------------------------------ ----------------------- ------ --------
   G2                             ST_GEOMETRY             IN
   MEMBER FUNCTION ST_WITHIN RETURNS NUMBER
   Argument Name                  Type                    In/Out Default?
   ------------------------------ ----------------------- ------ --------
   G2                             ST_GEOMETRY             IN
   MEMBER FUNCTION ST_OVERLAP RETURNS NUMBER
   Argument Name                  Type                    In/Out Default?
   ------------------------------ ----------------------- ------ --------
   G2                             ST_GEOMETRY             IN
   MEMBER FUNCTION ST_CONTAINS RETURNS NUMBER
   Argument Name                  Type                    In/Out Default?
   ------------------------------ ----------------------- ------ --------
   G2                             ST_GEOMETRY             IN
   MEMBER FUNCTION ST_INTERSECTION RETURNS ST_GEOMETRY
   Argument Name                  Type                    In/Out Default?
   ------------------------------ ----------------------- ------ --------
   G2                             ST_GEOMETRY             IN
   MEMBER FUNCTION ST_DIFFERENCE RETURNS ST_GEOMETRY
   Argument Name                  Type                    In/Out Default?
   ------------------------------ ----------------------- ------ --------
   G2                             ST_GEOMETRY             IN
   MEMBER FUNCTION ST_UNION RETURNS ST_GEOMETRY
   Argument Name                  Type                    In/Out Default?
   ------------------------------ ----------------------- ------ --------
   G2                             ST_GEOMETRY             IN
   MEMBER FUNCTION ST_CONVEXHULL RETURNS ST_GEOMETRY
   MEMBER FUNCTION ST_CENTROID RETURNS ST_GEOMETRY
   MEMBER FUNCTION ST_DIMENSION RETURNS NUMBER
   MEMBER FUNCTION ST_X RETURNS NUMBER
   MEMBER FUNCTION ST_X RETURNS ST_POINT
   Argument Name                  Type                    In/Out Default?
   ------------------------------ ----------------------- ------ --------
   XCOORD                         NUMBER                  IN
   MEMBER FUNCTION ST_Y RETURNS NUMBER
   MEMBER FUNCTION ST_Y RETURNS ST_POINT
   Argument Name                  Type                    In/Out Default?
   ------------------------------ ----------------------- ------ --------
   YCOORD                         NUMBER                  IN
   MEMBER FUNCTION ST_EXPLICITPOINT RETURNS ST_DOUBLE_PRECISION_ARRAY
  </P>

The final is less about the performance of geodatabases but more a classic ESRI dig at Oracle Spatial’s performance. Since Oracle doesn’t benchmark this cannot be tested…. Sad, but true.

Oracle Spatial is OGC Simple Features compliant and is also a member of the ISO SQL/MM standards committee so is ESRI saying that the Oracle Spatial implementation is not standards compliant?

Note the “proprietary” comment in relation to Oracle Spatial.

In my view, this is still about ESRI’s myopic view that they “own” the geospatial industry from the back office to the front office. Their technology IS proprietary. Their interfaces ARE almost ENTIRELY proprietary. They might develop their applications with open development tools but the deployment choices are almost always to run a script within their operating environment.

A concrete example: BPEL/BPML are the preferred IT framework for defining/describing (BPML) processes and deploying them. Ask your ESRI distributor if they can deploy their Model Builder processes in non-ESRI containers.

Leave a Reply

Your email address will not be published. Required fields are marked *