Estoy utilizando la API OGR de Python para añadir nuevas características a una capa PostGIS. Sin embargo, a pesar de establecer la referencia espacial de la geometría, cuando se escribe la geometría falta la referencia espacial. Esto supone un problema, ya que la tabla de destino tiene una restricción de comprobación que obliga a que geom_srid sea de un tipo determinado.
Por ejemplo:
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()
Devoluciones:
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')
En este punto está claro que OGR está convirtiendo la geometría en una cadena EWKT sin introducir el atributo de referencia espacial.
Preguntas concretas:
1) ¿Alguien sabe cómo puedo forzar la salida de geometría de SetGeometry() para incluir un SRID cuando se convierte a EWKT?
2) ¿Alguien ha encontrado esto con las fijaciones CPP?
3) ¿Se trata de un error de OGR? Desde la fuente OGR la cadena de salida se está creando en ogrpgtablelayer.cpp donde nSRSID se está estableciendo en -1 si no se encuentra ninguna entrada SRS válida.
Muchas gracias,
Tom