Bug: BUG-000122070: Shapes that are stored using third-party spatial types may display incorrectly or not at all
ArcGIS is unable to display certain shapes from a feature class stored using third-party spatial types inside an enterprise database. These types include SQL Server geometry and geography as well as PostGIS geometry and geography. In these cases, the shapes have been inserted by applications other than ArcGIS.
- ArcGIS cannot display invalid shapes (shapes considered invalid at the database level) and will return a database error indicating that the spatial function could not execute against the invalid shape.
- ArcGIS can display shapes considered valid at the database level but, in some cases, ArcGIS may display them incorrectly or throw a shape integrity error. These shapes include the following:
- Shapes that have inclusions or holes that touch the outer shell at exactly one point
- Shapes that have conjoined inner rings or two or more inner rings that touch each other at exactly one point, but do not touch the outer shell
For shapes considered invalid at the database level, ArcGIS always returns an error. For shapes considered valid at the database level, previous ArcGIS versions performed an internal shape verification process when querying the shapes to ensure they displayed correctly. The cost of the shape verification can be significant when fetching more complex geometries and many rows.
As a result, ArcGIS 10.6 introduced a performance fix that disabled the shape verification for third-party spatial types such as SQL Server or PostGIS geometry.
For cases where editing is solely performed using ArcGIS, a performance boost would be the only impact ever noticed because ArcGIS wouldn’t insert a shape that it would be unable to read and display. For cases where editing is performed outside of ArcGIS (using SQL or other applications) it could mean that shapes inserted that have inclusions or self-touching rings may encounter display issues within ArcGIS.
- The following example shows one case where ArcGIS may display the shape incorrectly:
POLYGON ((0 0, 50 0, 50 50, 0 50, 0 0), (0 0, 2 5, 5 5, 5 2, 0 0), (10 10, 10 20, 20 20, 20 10, 10 10))
- This WKT polygon displays incorrectly in ArcGIS:
POLYGON ((0 0, 50 0, 50 50, 0 50, 0 0), (10 10, 10 20, 20 20, 20 10, 10 10), (0 0, 2 5, 5 5, 5 2, 0 0))
Notice that the only difference is in the location of the inner ring that touches at a single point of the exterior ring. The display in ArcGIS requires that this touching interior ring is listed immediately after the outer ring within the WKT.
- The next example shows one case for which ArcGIS may encounter a shape integrity error.
The following WKT polygon displays correctly in ArcGIS:
POLYGON ((0 0, 0 50, 50 50, 50 0, 0 0), (10 10, 20 10, 20 20, 10 20, 10 10), (20 20, 30 20, 30 30, 20 30, 20 20))
- This following WKT representation returns a shape integrity error in ArcGIS:
POLYGON ((0 0, 0 50, 50 50, 50 0, 0 0), (20 20, 30 20, 30 30, 20 30, 20 20), (10 10, 20 10, 20 20, 10 20, 10 10))
Again, notice that the only difference is with order of the two inner rings that touch at a single point within the WKT.
Note: There may be other scenarios that encounter similar behaviors that have not been described in this article.
When editing spatial data outside of ArcGIS, special consideration should be made when inserting shapes like the ones mentioned in this article. For polygon shapes with holes, the outer boundary should always be listed first, followed by any holes. If a polygon has an inversion, which are empty spaces inside the area shape that touch the outer boundary at a single point, the inversion must be listed immediately after the outer boundary. If two holes touch at one point the lower left hole should be listed before the other hole that touches.