Les éléments de base définis dans le précédent article, il est parfois utile de pouvoir utiliser ces derniers afin de composer des éléments plus complexes avec des géométries fusionnées ou présentant des zones d’exclusion.
Liens vers les articles liés
Cet article s’inscrit dans la série dédiée aux types géographiques et géométriques :
Présentation
Ces types complexes sont en réalité des composés d’éléments simples, autrement dit ils ne sont que des collections d’objets de même type ou non.
Parmi ces objets, on retrouve les éléments suivants :
- MultiPoint : collection de plusieurs points
- MultiLineString : collection de plusieurs lignes
- MultiPolygon : collection de plusieurs polygones
- Collection : collection de plusieurs géométries composées ou non
Comme indiqué, les types d”éléments simples associés peuvent varier et composer ce qu’on appelle alors des collections de géométries. Ces collections peuvent tout à fait contenir d’autres collections et donc être imbriquées.
Pour rappel, l’architecture globale peut être représentée comme suit :
Contraintes techniques
La composition de ces éléments ne présentent pas de difficultés supplémentaires en comparaison de l’utilisation d’objets simples et basiques.
La tâche se complexifie quelque peu lorsque l’on doit composer des collections de géométries elles-mêmes composées et contenant des objets avancés par exemple : un polygone avec trous ou multi-polygones.
Il faut toujours garder à l’esprit les limitations des éléments de manière individuelle pour composer l’objet global.
Implémentation technique dans SQL Server
Au niveau de SQL Server, la déclaration de ces éléments est relativement aisée puisqu’il s’agit de composer le WKT adéquat et d’utiliser les méthodes natives permettant d’initialiser une instance de l’objet déclaré.
La déclaration des différents éléments s’opère comme suit :
- Construction d’une collection de points – MultiPoint
La construction WKT d’un MultiPoint se présente comme suit :
MULTIPOINT((COORDINATES1),(COORDINATES2)) Ou
MULTIPOINT((LONGITUDE LATITUDE),(LONGITUDE LATITUDE))
Voici un exemple de WKT pour le MultiPoint :
MULTIPOINT((3 45),(3.5 45))
Au niveau de la déclaration SQL Server :
DECLARE @multipoint AS GEOGRAPHY
SET @multipoint = GEOGRAPHY::STGeomFromText(
'MULTIPOINT((3 45),(3.5 45),(3.5 46),(4 47),(3 47),(3 45))', 4326)
SELECT @multipoint
Pour les rendres visibles, nous ajoutons un buffer autour des points :
SELECT @multipoint.STBuffer(10000)
Ce qui donne en exécution :

- Construction d’une collection de lignes – MultiLineString
La construction WKT d’un MultiLineString se présente comme suit :
MULTILINESTRING((LINE1),(LINE2))
Ou
MULTILINESTRING((LONGITUDE1 LATITUDE1,
LONGITUDE2 LATITUDE2,
LONGITUDE3 LATITUDE3),
(LONGITUDEA LATITUDEA,
LONGITUDEB LATITUDEB)
)
Voici un exemple de WKT pour le MultiLine :
MULTILINESTRING((3 45,3.5 45),(3.5 46,4 47),(3 47,3 45))
Au niveau de la déclaration SQL Server :
DECLARE @multipolyline AS GEOGRAPHY
SET @multipolyline = GEOGRAPHY::STGeomFromText(
'MULTILINESTRING((3 45,3.5 45),(3.5 46,4 47),(3 47,3 45))', 4326)
SELECT @multipolyline
Ce qui donne en exécution :

- Construction d’une collection de polygones – MultiPolygon
La construction WKT d’un MultiPolygon se présente comme suit :
MULTIPOLYGON((POLYGON1),(POLYGON2))
Soit :
MULTIPOLYGON(((COORDINATESPOLYGON1)),((COORDINATESPOLYGON2)))
A noter les doubles parenthèses qui définissent les polygones.
Voici un exemple de WKT pour le MultiPolygon :
MULTIPOLYGON(((3 45,4 45,4 46,3 45)),((5 46,6 47,5 47,5 46)))
Au niveau de la déclaration SQL Server :
DECLARE @multipolygon AS GEOGRAPHY
SET @multipolygon = GEOGRAPHY::STGeomFromText('MULTIPOLYGON(((3 45,4 45,4 46,3 45)),((5 46,6 47,5 47,5 46)))',4326)
SELECT @multipolygon
Ce qui donne en exécution :

Attention : Dans le cas d’une collection de polygones, la composition de chacun d’entre eux nécessite de respecter les règles de définitions déjà abordées à travers cet article.
Il s’agit notamment de conserver une orientation correcte dans la définition afin de définir le polygone souhaitée et non l’inverse vis à vis du globe terrestre.
- Construction d’une collection imbriquée
La construction WKT d’une collection de géométries se présente comme suit :
GEOMETRYCOLLECTION(ELEMENT1, ELEMENT2)
Voici un exemple de WKT pour la collection de géométries :
GEOMETRYCOLLECTION(
MULTIPOINT((3 44),(3.5 44),(3.25 44.5)),
MULTILINESTRING((3 45,3.5 45),(3.5 46,4 47),(3 47,3 45)),
POINT(2.75 44),
POLYGON((4 46,3.75 46,4 45,4 46))
)
Au niveau de la déclaration SQL Server :
DECLARE @multigeometry AS GEOGRAPHY
SET @multigeometry = GEOGRAPHY::STGeomFromText('GEOMETRYCOLLECTION(
MULTIPOINT((3 44),(3.5 44),(3.25 44.5)),
MULTILINESTRING((3 45,3.5 45),(3.5 46,4 47),(3 47,3 45)),
POINT(2.75 44),
POLYGON((4 46,3.75 46,4 45,4 46))
)',4326)
SELECT @multigeometry
Ce qui donne en exécution :

La déclaration de ce type d’élément peut être réalisée de manière unitaire comme ici, ou à l’aide de méthodes dédiées pour générées des géométries, nous verrons dans un prochain article comment exploiter ces méthodes pour générer ces éléments et exploiter SQL Server 2008 pour ce qu’il fait de mieux avec ce type géographique.
Conclusions
L’ensemble des objets disponibles dans SQL Server 2008 a été couvert et ils seront très utiles pour stocker, manipuler, organiser ou filtrer vos données.
La prochaine version de SQL Server ‘Denali’ apportera plusieurs nouveaux types de bases et composés pour ces données géographiques et repoussera également les limites en termes de définition, nous aborderons ces nouveautés dans un article dédié.
Cette étape de déclaration et définition d’objet au sein de SQL Server 2008 présentée, nous pourrons, dans les prochains articles nous intéresser à l’utilisation des méthodes et à l’exploitation de ce type géographique disponible à travers les versions de SQL Server 2008 et supérieures ainsi qu’au sein de l’offre SQL Azure.
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :