Top 5 Recent Articles
ARTICLES CATEGORIES
- Algorithms (22)
- All (399)
- Biography (1)
- Blog (44)
- Business Requirements (1)
- Commentary (1)
- Conversion (2)
- Customers (2)
- Data Models (1)
- Education (2)
- GeoRaptor (13)
- GPS (1)
- Image Processing (2)
- Import Export (8)
- Licensing (2)
- LiDAR (1)
- Linear Referencing (4)
- Manifold GIS (3)
- Mapping (1)
- MySQL Spatial (7)
- Networking and Routing (including Optimization) (5)
- Open Source (18)
- Oracle Spatial and Locator (194)
- Partitioning (1)
- PostGIS (36)
- Projections (1)
- Published Articles (1)
- qGIS (1)
- Recommendations (1)
- Services (1)
- Software Change Log (1)
- Source Code (37)
- Space Curves (9)
- Spatial Database Functions (109)
- Spatial DB comparison (1)
- Spatial XML Processing (11)
- SQL Server Spatial (92)
- Standards (3)
- Stored Procedure (17)
- Tessellation or Gridding (10)
- Tools (2)
- Topological Relationships (1)
- Training (2)
- Triangulation (2)
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.
Documentation
- MySQL Spatial General Functions
- Oracle LRS Objects
- Oracle Spatial Exporter (Java + pl/SQL)
- Oracle Spatial Object Functions
- Oracle Spatial Object Functions (Multi Page)
- PostGIS pl/pgSQL Functions
- SC4O Oracle Java Topology Suite (Java + pl/SQL)
- SQL Server Spatial General TSQL Functions
- SQL Server Spatial LRS TSQL Functions