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
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.