Mais

A inserção binária na coluna de geografia Postgis resulta na inserção do valor como geometria?

A inserção binária na coluna de geografia Postgis resulta na inserção do valor como geometria?


Ao gravar WKB como um valor (e como um parâmetro binário) em uma coluna de geografia, o valor persistente não é geografia.

Exemplo de Java também está disponível aqui: https://github.com/ayuudee/issue-pad/blob/master/src/com/jesusthecat/im/pggeog/BinaryGeogTest.java

Aqui está o que ele faz:

  1. Cria uma tabela com um ID e Geografia (Ponto, 4326)
  2. insere uma linha usando WKT.
  3. insere uma linha usando WKB (como bytes).
  4. Imprime id, ponto e ST_SUMMARY (ponto).

O resultado SQL da etapa 4 é:

id | pt | st_summary ---- + -------------------------------------------- -------- + ------------ 1 | 0101000020E610000009C6C1A5E3E662406BB75D68AEED40C0 | Ponto [GS] 2 | 0101000020E610000009C6C1A5E3E662406BB75D68AEED40C0 | Pontos]

Exemplo de registro da inserção binária (onde pt é Geografia (Ponto, 4326))

LOG: executar: inserir em valores px (pt) ($ 1)

DETALHE: parâmetros: $ 1 = ' x0101000020e610000009c6c1a5e3e662406bb75d68aeed40c0'

Você notará que:

  1. O WKB para # 1 e # 2 é o mesmo; e
  2. Os sinalizadores no resultado ST_Summary para # 1 são [GS], onde para # 2 (o binário) são [S].

A documentação para ST_Summary indicaria que # 2 tem informações espaciais, mas não é geodésica (ou seja, não é geografia).

Estou escrevendo uma biblioteca Java que busca persistir a geografia como binária, mas isso parece indicar que não é possível. Além disso, é normal que isso deva acontecer de qualquer maneira (ou seja, escrever um valor para uma coluna de geografia que não seja de geografia)?

Versões:

POSTGIS = "2.1.3 r12547" GEOS = "3.3.3-CAPI-1.7.4" PROJ = "Rel. 4.7.1, 23 de setembro de 2009" GDAL = "GDAL 1.9.0, lançado em 29/12/2011" LIBXML = "2.7.8" LIBJSON = "DESCONHECIDO" RASTER DE TOPOLOGIA

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


Parece que há um erro na função geografia (bytea) que está vinculado ao bytea ao elenco geográfico. Você pode corrigir temporariamente assim:

CRIAR OU SUBSTITUIR FUNÇÃO geografia (bytea) RETORNA geografia AS '$ libdir / postgis-2.1', 'geography_from_binary' IDIOMA 'c' IMUTABLE STRICT;

Deve ser corrigido nas próximas versões.


Assista o vídeo: 8# Poradnik Quantum Gis - wykrywanie i likwidacja błędów geometrii.