2

I have a feature class in an ESRI file geodatabase where I have isolated one feature. When I copy the feature class to a oracle db (ST_Geometry as defaults; by copy and paste; also fails with gp tools or by python cursor) I get the error "Shape integrity error". Copying the feature or the feature class to other file gdb feature classes works. It only fails on my oracle db.

Check geometry returns no error. What could be wrong? What can I do?

The shape looks like this:

A shape that fails

The domain of the feature class is X=(-20037700 to 900699887774,099) Y=(-30241100 to 900689684374,099). The resolution 0,0001 meters and the tolerance 0,001 meters.

EDIT: It also occurs when I copy it to a SQL Server database.

  • I am remembering that for Oracle self-touching outer ring is a topology error. It wants to get ring 0-1-11-12-0 and then three holes. – user30184 May 11 '17 at 14:56
3

I have solved this problem by applying ArcGIS Pro 2.0 that has luckily just been released and by using the Tool "Repair Geometry": https://pro.arcgis.com/en/pro-app/tool-reference/data-management/repair-geometry.htm with the validation_method = 'OGC' parameter.

This solves the problem. Unfortunately now there exist features in the database that can not be copied to another feature class in the database. If I want to copy these features I have to copy them to a local(fGDB) feature class do "Repair Geometry" and then I can copy it to a feature class in a database. But I can live with that.

Thank you all for your help!

1

The Oracle Spatial validation is comform to the OGC Simple Feature Specification. See Polygons Chapter 6.1.11.1

The rule

d) A Polygon may not have cut lines, spikes or punctures

Oracle and the most other vendors interpretation of the rule is:

  • "cut lines, spikes or punctures" is equivalent to "touch lines, spikes or punctures"

ESRI software interpretation is:

  • "cut lines, spikes or punctures" is not equivalent to "touch lines, spikes or punctures"

the result is Oracle wants interior's (holes), ersi software want's in that case only one exterior ring.

Whatever you can fixe it easily, intersect the geometry with it self.

  • select SDO_GEOM.SDO_INTERSECTION(a.shape, a.shape, 0.001) from dual; (see)

@simsi: please, never post helpful textual information as an image (e.g. coordinates, stacktrace, etc.)

  • Thank you for your answer, i will keep your advice about the image in mind. How can i run this oracle query when I am not able to upload the feature into an oracle db? – simsi May 11 '17 at 16:21
  • Which geometry data type should be used inside your oracle db. ESRI geometry type, it should be a other problem. Which type is configured in your dbtune file. If the Table already exists, which type is used. Maybe you will find further information in the server side log file. Oracle sdo_geometry, which version has the oracle side sde server? – Andreas W. Bartels May 11 '17 at 20:42
  • DBTUNE is set to ST_Geometry and I have also tried to add it to a table with SDELOB. The oracle db is "Oracle Database 12c Standard Edition Release 12.1.0.2.0 - 64bit Production". – simsi May 12 '17 at 7:12
  • I have also tried to sniff the SQL traffic, there are only SELECT statements sent over port 1521 on my loopback device so probably the error already occurs on arcsde side. – simsi May 12 '17 at 7:22
  • If you use ST_Geometry oracle behaivior doesn't matters. – Andreas W. Bartels May 12 '17 at 11:21

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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