6
votes

SPATIAL SQL: DataType le plus approprié pour un carré?

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?

Je suppose que je pourrais utiliser un st_polygon , mais peut-être qu'il y a un type plus spécialisé qui donnerait

  • Meilleures performances
  • de meilleures garanties de données (je veux l'attraper comme une erreur si quelqu'un où stocker une valeur non carrée dans la colonne particulière)

    J'ai essayé de trouver un st_rectangle ou type st_square , mais ils ne semblent pas exister (?)

    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.


0 commentaires

3 Réponses :


2
votes

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.


3 commentaires

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.



2
votes

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

Documentation de DB2 < / p> xxx

résultats: xxx

voir id = 5? le dernier polygone == st_envelope (géométrie)


0 commentaires

4
votes

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 .

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.

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.


0 commentaires