#1673 closed defect (fixed)
OGR_G_CloseRings side-effect on OGR_G_GetGeometryType
Reported by: | jbronn | Owned by: | Mateusz Łoskot |
---|---|---|---|
Priority: | low | Milestone: | 1.4.2 |
Component: | OGR_SF | Version: | 1.4.1 |
Severity: | normal | Keywords: | geometry |
Cc: | jbronn@…, warmerdam |
Description
After closing the rings on a Polygon, when attempting to get the geometry type of one of the closed rings, OGR returns a nonsense number. Exporting the closed-ring Polygon to WKT fixes this scenario, and the closed ring will subsequently return the correct geometry type.
Here is a Python script that demonstrates the problem:
import ogr # Unclosed Polygon WKT wkt = 'POLYGON((0 0, 5 0, 5 5, 0 5), (1 1, 2 1, 2 2, 2 1))' if __name__=='__main__': # Creating the polygon from the WKT poly = ogr.CreateGeometryFromWkt(wkt) # Getting the exterior ring before we close all rings ring_b = poly.GetGeometryRef(0) print 'Ring Geometry Type Before Closure: %d' % ring_b.GetGeometryType() # Closing the rings poly.CloseRings() # Now getting the same ring again ring_a = poly.GetGeometryRef(0) print 'Ring Geometry Type After Closure: %d' % ring_a.GetGeometryType() # Exporting closed Polygon to WKT "fixes" this. ring_wkt = str(poly) ring_a = poly.GetGeometryRef(0) print 'Ring Geometry Type Fixed: %d' % ring_a.GetGeometryType()
Here is the output from that script:
Ring Geometry Type Before Closure: 2 Ring Geometry Type After Closure: -2147483646 Ring Geometry Type Fixed: 2
Attachments (1)
Change History (6)
comment:1 by , 17 years ago
Cc: | added |
---|
comment:2 by , 17 years ago
Cc: | added |
---|---|
Component: | default → OGR_SF |
Keywords: | geometry added |
Milestone: | → 1.4.2 |
Owner: | changed from | to
comment:3 by , 17 years ago
Status: | new → assigned |
---|
Diagnosis:
- In the closeRings() operation, if start point and end point differs, additional end point is added with the same coordinates of start point.
- The addPoint() operation was passed with X,Y and Z coordinates without respect of current coordinate dimension.
- Next, 2D ring was completed with end point of X,Y,Z coordinates what in turn caused re-qualification of coordinate dimension of the ring, from 2D to 2.5D.
- In result, incorrect (different) geometry type of the ring was reported.
Solution:
The OGRLinearRing::closeRings() has to be patched to respect current coordinate dimension, to avoid implicit changes.
comment:4 by , 17 years ago
Resolution: | → fixed |
---|---|
Status: | assigned → closed |
Fixed in SVN trunk (r11694).
Note:
See TracTickets
for help on using tickets.
Mateusz,
Could you look into this?
Thanks,