4 votos

¿La inserción binaria en una columna de geografía de Postgis resulta en que el valor se inserte como geometría?

Cuando se escribe WKB como un valor (y como un parámetro binario) en una columna de geografía, el valor persistido no es geografía.

El ejemplo de Java también está disponible aquí: https://github.com/ayuudee/issue-pad/blob/master/src/com/jesusthecat/im/pggeog/BinaryGeogTest.java

Esto es lo que hace:

  1. Crea una tabla con un ID y Geografía (Punto, 4326)
  2. Inserta una fila usando WKT.
  3. Inserta una fila usando WKB (como bytes).
  4. Imprime el id, punto y ST_SUMMARY(punto).

El resultado SQL del paso #4 es:

 id |                         pt                         | st_summary 
----+----------------------------------------------------+------------
  1 | 0101000020E610000009C6C1A5E3E662406BB75D68AEED40C0 | Point[GS]
  2 | 0101000020E610000009C6C1A5E3E662406BB75D68AEED40C0 | Point[S]

Ejemplo de registro de la inserción binaria (donde pt es Geografía (Punto, 4326))

LOG: execute : insert into px(pt) values($1)

DETALLE: parámetros: $1 = '\x0101000020e610000009c6c1a5e3e662406bb75d68aeed40c0'

Notarás que:

  1. El WKB tanto para #1 como para #2 son iguales; y
  2. Las banderas en el resultado de ST_Summary para #1 son [GS], mientras que para #2 (el binario) son [S].

La documentación de ST_Summary indicaría que #2 tiene información espacial, pero no es geodésico (es decir, no es geografía).

Estoy escribiendo una biblioteca en Java que busca persistir la geografía como binario, pero esto parecería indicar que no es posible. Además, ¿es normal que esto deba permitirse de todos modos (es decir, escribir un valor en una columna de geografía que no es geografía)?

Versiones:

POSTGIS="2.1.3 r12547" GEOS="3.3.3-CAPI-1.7.4" PROJ="Rel. 4.7.1, 23 September 2009" GDAL="GDAL 1.9.0, released 2011/12/29" LIBXML="2.7.8" LIBJSON="UNKNOWN" TOPOLOGY RASTER

POSTGRES PostgreSQL 9.3.5 en x86_64-unknown-linux-gnu, compilado por gcc (Ubuntu/Linaro? 4.6.3-1ubuntu5) 4.6.3, 64 bits

2 votos

En nuestra lista para arreglar. trac.osgeo.org/postgis/ticket/2870

0 votos

En caso de que ayude a alguien más, aunque esto no sea una respuesta, al final pude resolver el problema usando WKT (transferido como una cadena), que es interpretado correctamente como geografía en su forma canónica. Obviamente hay funciones para construir geografía de forma más fiable a partir de una forma textual, pero en mi caso particular, eso no era posible.

3voto

NilObject Puntos 7874

Parece que hay un error en la función geography(bytea) que está vinculada a la conversión de bytea a geography. Puedes parchear temporalmente de esta manera:

CREATE OR REPLACE FUNCTION geography(bytea)
    RETURNS geography
    AS '$libdir/postgis-2.1','geography_from_binary'
    LANGUAGE 'c' IMMUTABLE STRICT;

Debería solucionarse en próximas versiones.

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