ORA-13367 - Spatial

Hi.
Does anyone what error ORA-13367 is, I can't seem to find it in any of the documentation. I got the error when I was using function SDO_GEOM.VALIDATE_GEOMETRY on 9.2 on Windows 2000.
Thanks in advance
Jackie Cooper 

Hi
From ORA-Documentation
http://otn.oracle.com/docs/products/oracle9i/doc_library/release2/index.htm
ORA-13367 Wrong orientation for interior/exterior rings
Cause: In a spatial geometry, the exterior and/or interior rings are not oriented correctly.
Action: The exterior rings should be oriented counter clock-wise and interior rings should be oriented clock wise.

Related

extracting first and last vertex from a Geometry field

Hi,
Is there any PL/SQL routine to coordinates of the first vertex and coordinates of last vertex from Geometry field? Do we have any pre-defined methods available in JAVA API for this.
Thanks and Regards
Aravindan 
Hi,
I got a solution for getting the first and last vertex from a Geometry field using
Java API.Here I’m using getFirstPoint() and getLastPoint() methods JGeometry.
Thanks and Regards
Aravindan 
I have offered some pure pl/sql packages to others that help in programming
against Oracle Spatial in Triggers etc. If you are interested email me
"spatialdbadvisor at netspace dot net dot au"
I haven't had much feedback on their use but I certainly find them useful.
S

Convert 3D wkt to SDO_GEOMETRY

Hi,
I have a 3D WKT point and I try to insert it to an SDO_GEOMETRY column.
When executing the following:
Select SDO_GEOMETRY('POINT(2 2)') from dual;
I get the correct result, but when executing the 3D point like
the following:
Select SDO_GEOMETRY('POINT(2 2 3)') from dual;
I get an error.
How can I convert 3D wkt to an SDO_GEOMETRY?
Thanks
dyahav 
In your posts:
1. try to mention DB version
2. try to include the type of error and the error message
Have you tried SDO_UTIL.FROM_WKTGEOMETRY?
http://download.oracle.com/docs/cd/E11882_01/appdev.112/e11830/sdo_util.htm#BJEGGIAB
Luc 
Hi,
I use oracle 11g.
When executing the following:
select SDO_UTIL.FROM_WKTGEOMETRY('POINT(2 2 2)') from dual;
I get the error:
ORA-29532: Java call terminated by uncaught Java exception: java.lang.RuntimeException: -2
ORA-06512: at "MDSYS.SDO_UTIL", line 177
Is there a way to convert 3D point in WKT to SDO_GEOMETRY?
Thanks
dyahav 
Hi dyahav,
I believe the answer is "No". Oracle Spatial implements OGC Simple Features per ISO 13249-3 which I think equates to OGC Simple Feature OGC 05-126 version 1.10.
http://download.oracle.com/docs/cd/B28359_01/appdev.111/b28400/sdo_util.htm#sthref2596
This specification only includes 2D geometries. I think it would be useful if the documentation just said that. The newer OGC 06-103r3 version 1.2.0 specification does support Z and M values on geometries.
So you either need to write your own WKT parser or submit an enhancement request to Oracle to support WKT version 1.2.0.
Also, your WKT example does not specify what exactly your third dimension is. It could be a Z or an M (measure). Extended WKT specifies this by appending this information to the type name, eg.
POINT Z('2 2 2')
POINT M('2 2 0.25')
POINT ZM('2 2 2 0.25')
POINT MZ('2 2 0.25 2')
Hope that helps!
Cheers,
Paul 
Thanks for the detailed answer
dyahav

Linestring with measures and SDO_GEOMETRY

Does SDO_GEOMETRY WKT constructor support Linestring with measures (linestring m)? I run the following statement and got ORA-29352 error Malformed WKT: select sdo_geometry('linestring m(10.05 10.28 5.84, 20.95 31.98 9.01, 21.98 29.80 12.84 )') from dual; Thanks,Hussein
Hi Hussein, Oracle Spatial fully support LRS measures on geometries.  However, Oracle Spatial's implementation of WKT does not - it only supports version 1.1.0 of the OGC WKT Simple Features Access specification.  So you need some other way to input your LRS measures into Oracle. You can always use the native constructors. SELECT MDSYS.SDO_GEOMETRY(3302,NULL,NULL,MDSYS.SDO_ELEM_INFO_ARRAY(1,2,1),MDSYS.SDO_ORDINATE_ARRAY(10.05,10.28,5.84,20.95,31.98,9.01, 21.98,29.80,12.84)) FROM dual; Or if you are really in a bind to read and write modern forms of WKT you could try hooking in to JTS as shown by Simon Greener or try my own PLSQL based solution. Cheers, Paul
Thank you Paul. I will try the native constructors.

get the coordinates from SDO_POINT in VC++ 6.0

Hi All,
How can I get the coordinates from SDO_POINT in VC++ 6.0 ?
I do the following :
OObject bGeometry = dbBox.GetField("GEOMETRY");
OValue Ordinates = bGeometry.GetAttrValue("SDO_POINT");
How can I access the values in the Ordinates object ?
Thanks,
Patrick 
Are you using Oracle Objects for OLE (OO4O)? Go to http://otn.oracle.com/tech/windows/ole/content.html and check it out. I have found it to be the best way of accessing the sdo_ordinates array.
Hope it helps.
Dave

Something wrong with oracle.sdoapi.sref?

I stored my coordinates with sid = 82202 in the tables.
I want my coordinates in the same coordinate system but in Lat/Long.
The sid for this is 8288.
So I have tested oracle.sdoapi.sref using this code section:
.
.
.
//Transformation i Oracle RT90 -> RT90 Lat/Long
SRManager srManager = OraSpatialManager.getSpatialReferenceManager();
srManager.setConnection(conn);
// Create spatial references from ID 82202 = RT90 X/Y
int id1 = 82202;
SpatialReference sr1 = srManager.retrieve(id1);
// Create spatial references from ID 8288 = RT90 Lat/long
int id2 = 8288;
SpatialReference sr2 = srManager.retrieve(id2);
// Create transformation sr1 -> sr2
Transform xform = srManager.createTransform(sr1, sr2);
.
.
.
// Transform a geometry object from sr1 to sr2
Geometry geom2 = xform.transform(geom1);
The result is like this:
Coordinates stored in Oracle
1663100.791,6630056.292
Same point calculated using oracle.sdoapi.sref to
18.71108833,59.75861702
This point should have been like this
18.71108731,59.75860806
If I take the same point calculated using oracle.sdoapi.sref
18.71108833,59.75861702
and I calculate it my self to XY I will get
1663100.804,6630057.292
What is wrong?
Doing Coordinate change from XY to Lat/Long is nothing more then mathematics.
It is not any coordinate system change and it should not be any error at all.
Here it is like 1 meter error.
Please give me some help! 
Coordinate transformations are not supported in SDOAPI.
Use the Oracle Spatial functionality instead.
Jayant
Sorry but
I don't understand the answer.
I'am reading "Java Library User's Guide"
"Release 8.1.7 or later."
Page 1-21 and 1-22 "Using Spatial Reference Systems".
Can you please tell me which part of SDOAPI is in use?
SDOAPI is only for converting between the database structure and a Java object, i.e. SDO_GEOMETRY <--> oracle.sdoapi.Geometry
Transforming between coordinate systems is not fully implemented or supported.
The Transform interface may be used to implement your own coordinate transformation functions. SDOAPI does not provide supported functionality for Coordinate Transformations. That is it is incomplete and as you indicate possibly incorrect.
Did the server side (SQL) transform functions work correctly?
Jayant
Yes, nearly.
RT90 X-coordinate precision in millimetres.
RT90 Y-coordinate precision in centimetres.
I would have seen both with accuracy in millimetres.
If we put in and out coordiantes a couple of times we will get lost.
Hello,
we met the same problems with the SDOAPI. The transform method doesn't work correctly.
Do you know when this problem will be resolved ?
more precisely our problem is this one :
we try to make a conversion from a latitude/longitude coordinate system (Netherlands in our example) to another latitude/longitude (WGS84) coordinate system. Coordinates in decimal degrees of the geometry object are transformed but the results in decimal degrees seems to have been converted as if they were radians:
coordinates before transformation:
lat:42.327
long:3.312
coordinates after transformation:
lat:189.77
long:2425.20
Those coordinates should be quite the same.
code :
(...)
SpatialReference sourceSR = m_srManager.retrieve(8273);
SpatialReference targetSR = m_srManager.retrieve(8307);
m_geomTransformer = m_srManager.createTransform(sourceSR,targetSR);
GeometryFactory geoFactory = OraSpatialManager.getGeometryFactory();
geoFactory.setSpatialReference(sourceSR);
Point point1 = geoFactory.createPoint (42.327,3.312);
Point pointResult = m_geomTransformer.transform ( point1 );
(...)
pointResult is wrong !
Thank you for your help
Bertrand F.
Use ths coordinate conversion functionality of Oracle Spatial, i.e. the MDSYS.SDO_CS package, instead of the sample implementation in sdoapi.
As Jayant mentioned, the java functionality for coordinate systems transformation is not supported. Please
use the server for coordinate systems transformations. 
Our problem is to convert many geometries on the client side.
So, the solution with Oracle spatial is not good for us because it will generate many network communications.
We expect Oracle will correct the SDOAPI about this problem.
Is it planned ? if Yes, when it's planned ?
Thank you for your help.
Pierre J & Bertrand F.
Regarding adding coordiante transform support in SDOAPI see the note on OTN:
Note: This will be the last version of this Spatial Java API released on OTN. A new Java API is planned for the next major Oracle database release, and it will be shipped with Oracle Spatial. This new API will be available only with Oracle Spatial and will not be available through the OTN.
Regarding your issue about converting multiple geometries and network round trips.
If the geometries came from the server in the first place then they could have been transformed there before fetching to the client.
Thank you for your answer.
Pierre JOURDAT

Categories

Resources