Suite

L'insertion binaire dans la colonne de géographie de Postgis entraîne l'insertion d'une valeur en tant que géométrie ?

L'insertion binaire dans la colonne de géographie de Postgis entraîne l'insertion d'une valeur en tant que géométrie ?


Lors de l'écriture de WKB en tant que valeur (et en tant que paramètre binaire) dans une colonne géographique, la valeur persistante n'est pas la géographie.

Un exemple Java est également disponible ici : https://github.com/ayuudee/issue-pad/blob/master/src/com/jesusthecat/im/pggeog/BinaryGeogTest.java

Voici ce qu'il fait :

  1. Crée une table avec un ID et une géographie (Point, 4326)
  2. insère une ligne en utilisant WKT.
  3. insère une ligne en utilisant WKB (sous forme d'octets).
  4. Affiche l'identifiant, le point et ST_SUMMARY (point).

Le résultat SQL de l'étape 4 est :

identifiant | pt | st_summary ----+--------------------------------------------- --------+------------ 1 | 0101000020E610000009C6C1A5E3E662406BB75D68AEED40C0 | Point[GS] 2 | 0101000020E610000009C6C1A5E3E662406BB75D68AEED40C0 | Points]

Exemple Journal de l'insert binaire (où pt est Geography(Point, 4326))

LOG : exécuter : insérer dans les valeurs px(pt) ($1)

DÉTAIL : paramètres : 1 $ = 'x0101000020e610000009c6c1a5e3e662406bb75d68aeed40c0'

Vous remarquerez que :

  1. Les WKB pour #1 et #2 sont les mêmes ; et
  2. Les drapeaux dans le résultat ST_Summary pour #1 sont [GS], où pour #2 (le binaire) ils sont [S].

La documentation pour ST_Summary indiquerait que #2 a des informations spatiales, mais n'est pas géodésique (c'est-à-dire pas géographique).

J'écris une bibliothèque Java qui cherche à conserver la géographie en tant que binaire, mais cela semblerait indiquer que ce n'est pas possible. De plus, est-il normal que cela puisse se produire de toute façon (c'est-à-dire écrire une valeur dans une colonne de géographie qui n'est pas de la géographie) ?

Versions :

POSTGIS="2.1.3 r12547" GEOS="3.3.3-CAPI-1.7.4" PROJ="Rel. 4.7.1, 23 septembre 2009" GDAL="GDAL 1.9.0, publié le 29/12/2011" LIBXML ="2.7.8" LIBJSON="INCONNU" RASTER DE TOPOLOGIE

POSTGRES PostgreSQL 9.3.5 sur x86_64-unknown-linux-gnu, compilé par gcc (Ubuntu/Linaro? 4.6.3-1ubuntu5) 4.6.3, 64 bits


On dirait qu'il y a une erreur dans la fonction géographie (bytea) qui est liée à l'octet vers la distribution géographique. Vous pouvez le patcher temporairement comme ceci :

CRÉER OU REMPLACER LA FONCTION géographie(octeta) RETOURNE la géographie COMME '$libdir/postgis-2.1','geography_from_binary' LANGUE 'c' IMMUABLE STRICT;

Devrait être corrigé dans les prochaines versions.