Vérifier qu’un point est contenu dans un polygone de type GEOGRAPHY

Voici comment vérifier qu’un point de type GEOGRAPHY, c’est à dire une position définie par sa latitude et sa longitude, appartient à la surface définie par un polygone, toujours sous le type GEOGRAPHY

Comme je suis toulousain, j’ai pris pour exemple des coordonnées de positions aux 4 coins de la Place du Capitole pour définir le polygone que voici :

1
2
3
4
5
6
7
8
9
10
DECLARE @gPlaceCapitole GEOGRAPHY
 
SET @gPlaceCapitole = GEOGRAPHY::STGeomFromText
    (
      'POLYGON
      (
        (43.604832 1.442787,43.60492 1.443754,43.603922 1.443987,43.603823 1.443028,43.604832 1.442787)
      )',
      4326
    );

Il est nécessaire que :

– le premier point soit la même que la dernier point pour qu’on dispose effectivement d’un polygone,
– les points soient ordonnés dans le sens inverse des aiguilles d’une montre,
– les coordonnées soit données suivant un couple {latitude, longitude}

Prenons maintenant un point sur la Croix du Languedoc qui se situe sur la Place du Capitole, et un point dans l’Hôtel de Ville, qui jouxte la Place du Capitole :

1
2
3
4
5
DECLARE @pCroixLanguedoc GEOGRAPHY
SET @pCroixLanguedoc = GEOGRAPHY::Point(1.443304, 43.604386, 4326)
 
DECLARE @pHotelDeVille GEOGRAPHY
SET @pHotelDeVille = GEOGRAPHY::Point(43.604526,1.444323, 4326)

Ici, il est nécessaire les coordonnées soient données suivant un couple {longitude, latitude}.
Faites-y attention, on se fait facilement avoir :D

Vérifions maintenant que la Croix du Languedoc est bien sur la Place du Capitole :

SELECT @g.STIntersects(@pCroixLanguedoc )

L’exécution de ce code nous retourne un BIT ayant pour valeur 1.

Qu’en est-il de l’Hôtel de Ville ?

SELECT @g.STIntersects(@pHotelDeVille)

Ici nous obtenons 0.

Bons SIGs !

ElSuket.

Laisser un commentaire