I'm using the Python OGR API to add new features to a PostGIS layer. However, despite setting the geometry spatial reference, when the geometry is written out the spatial reference is missing. This is a problem as the destination table has check constraint forcing geom_srid to be a particular type.
ogr.UseExceptions() # Create a feature in an existing layer (where layer is a PostGIS table) feature = ogr.Feature(layer.GetLayerDefn()) # Create spatial reference out_srs = ogr.osr.SpatialReference() out_srs.ImportFromEPSG(27700) # Assign to geometry geom.AssignSpatialReference(out_srs) # Set feature geometry feature.SetGeometry(geom) # Create the feature layer.CreateFeature(feature) feature.Destroy()
Error: new row for relation "table" violates check constraint "enforce_srid_geom" Command: INSERT INTO "table" ("geom", "attr1") VALUES (GeomFromEWKT('SRID=-1;POINT (5000, 1000)'::TEXT), 'row1')
At this point it is clear that OGR is converting the geometry to an EWKT string without pulling in the spatial reference attribute.
1) Does anyone know how I can force the geometry output from SetGeometry() to include an SRID when it is converted to EWKT?
2) Has anyone found this with the CPP bindings?
3) Is this a bug in OGR? From OGR source the output string is being created in ogrpgtablelayer.cpp where nSRSID is being set to -1 if no valid SRS input is found.