Suite

Forcer ST_collect à renvoyer uniquement une GeometryCollection

Forcer ST_collect à renvoyer uniquement une GeometryCollection


Dans la documentation postgis, il est mentionné que ST_collecter renvoie un MULTI* ou une GEOMETRYCOLLECTION. Mais comment puis-je forcer la fonction à ne renvoyer qu'une GeometryCollection qui ne dépend pas de son argument d'entrée.

Par exemple: J'ai une base de données postgreSQL avec une colonne de type GeometryCollection. Et il devrait stocker les géométries qu'un utilisateur a dessinées. Cela peut par n'importe quelle combinaison de géométries de points, lignes, polygones etc… Si la combinaison est un point, une ligne et un polygone ST_collect renvoie une GeometryCollection. Mais si la combinaison est de deux polygones, elle renvoie un MultiPolygon. Est-il possible que ST_collect renvoie uniquement GeometryCollections même si l'entrée est un seul polygone ?

SELECT ST_AsText(ST_Collect(ST_GeomFromGeoJSON(feat->>'geometry'))) FROM ( SELECT json_array_elements('{ "type":"FeatureCollection", "features":[ { "type":"Feature", "properties": { }, "géométrie":{ "type":"Polygone", "coordonnées":[ [ [ 14.845962524414062, 46.96830518448586 ], [ 14.845962524414062, 47.02309964439266 ], [ 14.976425170898438, 47.02309964439266 ], [ 14.97642517089844852, 46.96884 46.968184 ] ] ] } } ] }'::json->'features') AS feat ) as f;

Utilisez ST_ForceCollection http://postgis.net/docs/ST_Force_Collection.html

Un exemple simple avec une géométrie de point :

SELECT ST_AsText(ST_ForceCollection(ST_GeomFromText('POINT (1 1)')));

Résultat:

"COLLECTION GÉOMÉTRIE(POINT(1 1))"