Suite

Les données SQL Server doivent-elles être spatiales


En référence à ma question précédente.

Je recherche les avantages de dire à SQL Server que vos données sont spatiales. Par exemple, j'ai un doublon de cette table généré par le Shape2SQL outil (voir question précédente). La principale différence est qu'il ne s'agit pas d'un spatial table, mais j'ai un champ où je stocke le texte bien connu en lat/long (par exemple POINT(-82.2990401 38.9186892)). J'ai découvert que j'étais capable d'exécuter une requête similaire qui fonctionnait pour obtenir les données que je demandais.

declare @poly geometry = 'POLYGON((-82.8113 39.690, -81.145 39.725, -80.717 38.74, -82.813 38.614, -82.8113 39.690))' SELECT * FROM [TABLE] WHERE @poly.STIntersects(WKT) <> 0;

je cherche à voir le réel avantages de dire à SQL Server que vous traitez des données spatiales. Les deux seules choses auxquelles je peux penser par tête sont l'indexation spatiale et la possibilité de visualiser vos données dans la fenêtre des résultats de la requête dans SQL Server Management Studio.

Je recherche les pros de SQL Server au service des données spatiales. Il s'agit d'un site Web personnel et je n'ai aucune envie d'investir dans l'exécution d'une instance de serveur spatial comme ArcGIS Server ou GeoServer. Je suis curieux de savoir si je ferais mieux de laisser les choses dans une table et d'utiliser simplement WKT dans mes requêtes ou si je devrais vraiment utiliser un objet geom/geog.


l'indexation spatiale et la possibilité de visualiser vos données

Vous avez tout à fait raison sur ces deux points.

Je ferais encore un point; la construction de l'objet géométrique est coûteuse en temps de calcul, en particulier sur des ensembles de données volumineux ou complexes. Les performances et la mise à l'échelle en souffriront, car la base de données doit créer la géométrie à la volée.

Votre requête fonctionnera mieux si l'objet de géométrie a déjà été créé et stocké dans un champ.

Aussi, je pense que votre requête devrait ressembler davantage à ceci:

SELECT * FROM [TABLE] WHERE @poly.STIntersects(geometry::STGeomFromText(WKT)) <> 0;