Suite

Transaction d'insertion OpenLayers WFS-T tinyows : valeur GID d'erreur

Transaction d'insertion OpenLayers WFS-T tinyows : valeur GID d'erreur


J'essaie d'implémenter l'insertion d'un nouveau point en utilisant Openlayers v2.13 saveStrategy en appelant tinyows qui implémente la transaction WFS-T; J'utilise l'exemple de http://mapserver.org/tinyows/openlayershowto.html - le code est exactement le même, sauf pour la couche.

J'ai deux questions:

1) l'ajout d'un nouveau point implémente une transaction qui utilise "MULTIPOINT" mais ma couche postgis est de type POINT - y a-t-il un moyen de forcer "POINT" ? Ma solution jusqu'à présent est d'utiliser un TRIGGER dans postgresql pour faire un INSTEAD OF pour changer MULTIPOINT TO POINT.

2) J'obtiens une erreur car l'insertion crée une valeur "gid" qui ne doit pas être incluse, car elle est ajoutée par défaut par le compteur. Le journal TINYOWS me donne la transaction et l'erreur suivantes :

SQL

INSÉRER DANS "arch_geo_dbt".."p030104_v" ("gid","the_geom") VALEURS ('042159162153000033','010400002031BF0D00010000000101000000B69CF08B3069314130B8664669AD5541')

ERREUR:

ERREUR : la valeur "042159162153000033" est hors limites pour le type entier

Ci-dessous mon XML du POST DE DEMANDE

1141040.5466402 5682597.1000195

Est-ce que quelqu'un sait comment résoudre ce problème?


Le fait était que tinyows (version 1.0.0) lors de l'ajout d'une nouvelle fonctionnalité lors de l'obtention d'une demande de transaction "insert", ajoute une chaîne aléatoire en tant que GID. Maintenant, GID est soit un entier, soit un grand entier, et est par défaut NEXTVAL (séquence) dans la table Postgres/Postgis. Le GID créé par tinyows était trop grand (hors de portée).

Tinyows fonctionne bien avec une table, mais la table que j'essayais de mettre à jour était une VUE (bien sûr, j'utilisais des déclencheurs pour mettre à jour les tables derrière les vues, car les vues ne peuvent pas être mises à jour). Tinyows permet de définir pkey="gid" dans l'objet layer dans son fichier config.xml, néanmoins s'il s'agit d'une vue, il ne comprend probablement pas le type (c'est-à-dire entier).

MA SOLUTION : dans la vue, CAST la colonne GID en type de texte, de sorte que l'insertion ne génère pas d'erreur, puis dans les déclencheurs, oubliez la valeur GID créée par tinyows et utilisez le bon NEXTVAL().

Si quelqu'un est intéressé, je peux poster ma routine de déclenchement.


Voir la vidéo: GIS Tutorial #1. QGIS-Geoexplorer Integration WFS Layer