5 votos

¿Cómo asignar a la geometría OGR una referencia espacial al escribir en una nueva capa mediante la API de Python?

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

17voto

Raoul Puntos 1113

Su planteamiento parece correcto y no estoy seguro de dónde está el problema. Como alternativa, puede intentar utilizar ImportFromProj4() y suministrar una cadena proj4 para EPSG 27700 y ver si funciona.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X