J'ai une base de données compatible spatialement (DB2, dans ce cas). J'ai besoin de stocker un grand nombre de carrés dans une table. Quel type de données standard spatial SQL convient le mieux? P>
Je suppose que je pourrais utiliser un st_polygon em>, mais peut-être qu'il y a un type plus spécialisé qui donnerait p>
J'ai essayé de trouver un st_rectangle em> ou type st_square em>, mais ils ne semblent pas exister (?) p>
Pendant que je travaille avec DB2, je suis également intéressé par des solutions qui ne fonctionnent pas sur DB2, tant qu'ils sont conformes aux normes. P>
3 Réponses :
Vous recherchez peut-être st_envelope - je ne sais pas avec certitude À propos de DB2 mais cela fait partie de la norme OGC. Toute ligne non verticale ou non horizontale, ou polygone, générera un rectangle via cette fonction, stockant les coordonnées typiquement en tant que flotteurs. P>
Mais st_envolope est une fonction, pas un type, autant que je puisse voir?
Désolé, j'ai retiré beaucoup de bêtises compliquées juste maintenant. Les points sont stockés comme une séquence de Float4 à Postgis, pas sûr de DB2, mais il doit être à peu près le même, ou peut-être l'un des types de numéro de DB2 / Oracle '. Je suppose que tous les rectangles ne sont que des coordonnées stockées comme un type de flotteur de base, avec la fonctionnalité GEO activée via une indexation intelligente pour des requêtes spatiales communes.
Troons est correct. St_envelope est une fonction qui renvoie un st_polygone; St_envelope n'est pas un type. L'optimisation «flottante» est spécifique à PostGis.
dans db2 c'est aussi un polygone. On dirait que vous stockez des grilles, un contrôle rapide pourrait donc être que si st_envelope (géométrie) == géométrie, vous avez un carré
ce code provient de p>
Documentation de DB2 < / p> résultats: p> voir id = 5? le dernier polygone == st_envelope (géométrie) p> p>
Même si vos données représentent un rectangle ou un carré, vous aurez toujours besoin d'utiliser le type ST_POLYGON. Toutefois, lorsque vous effectuez une requête contre les données, vous pouvez utiliser un filtre de premier ordre tel que st_envintersects . p>
Normalement, une base de données spatiale comparera les enveloppes (c'est-à-dire un rectangle contenant le polygone) pour une intersection. Ensuite, il effectue le calcul d'intersection de polygon-polygone plus coûteux. Dans ce cas, étant donné que vos polygones sont égaux à l'enveloppe, vous pouvez ignorer la deuxième étape plus coûteuse. P>
En ce qui concerne la validation des données, vous pouvez ajouter un déclencheur de base de données qui vérifie ST_Equals (st_envelope (GEOM), GEOM) = 1. P>