Point in polygon - application sur des coordonnées GPS
Bonjour,
Alors voilà,
je dispose d'une fonction booléenne qui à partir d'un vecteurs de points V et d'un point P, détermine si le point est oui ou non à l'intérieur d'un polygone.
Les coordonnées ici sont dans un plan cartésien (X,Y).
Ma question :
Puis-je appliquer cette meme fonction mais en ayant des coordoonées GPS (longitude,Latitude) au lieu de coordonnées 2D (X,Y) ?
Mon but étant de délimiter une région sur une carte à partir d'un ensemble de points GPS (Polygone), puis d'appliquer cette fonction pour voir si un point est à l'intérieur de cette région ou non?
Merci pour toute réponse
Bien à vous.
Réda.
Point In Polygon - Application sur des coordonnées GPS
Bonjour, :D
Ce qui est délicat, c'est que ton outil se réfère à la géométrie du plan, dans lequel tout polygone est délimité par des segments de droite, tandis que les coordonnées géographiques font intervenir (au mieux) la géométrie sphérique; les contours "polygonaux" sont alors courbes (il peut s'agir d'arcs de grands cercles de la sphère), et leur projection sur un plan tangent ne conduira pas à des segments de droite.
Les réponses obtenues pourront apparaître contestables dans le cas de points "proches" de la frontière, et surtout lorsque la courbure de la surface n'est plus négligeable; le rapport du diamètre maximal (Dmax) du polygone au rayon terrestre (R) n'étant alors plus petit devant l'unité: Dmax/R >~ 0.1 .
De plus, les coordonnées angulaires poseront de grosse difficultés au niveau des pôles; il est heureusement peu probable que tu t'intéresses à ces régions.
Si tu te limites par contre à des régions d'étendue limitée (Dmax <~ 100 km) et te contentes d'une précision raisonnable, tu pourras utiliser les formules de conversion entre systèmes de coordonnées (éventuellement sous une forme approchée)(1).
Cependant, cela me paraît assez difficile; ne serait-il pas plus simple d'envisager une réponse directe ? Cela suppose un minimum de familiarité dans le maniement des vecteurs.
Une autre solution pourrait être la recherche (éventuellement le téléchargement) de logiciels appropriés; d'autres intervenants pourraient te suggérer des liens sur ce sujet.
(1) Voir ce qui suit.
Point In Polygon - Application sur des coordonnées GPS
(1) Pour prolonger ce qui a été dit, avec les réserves déjà exprimées:
Au voisinage d'un point de longitude (a0) et de latitude (b0),
1) un écart de 1 degré en latitude correspond à la 360me partie d'un méridien de rayon (R), donc à un arc de cercle de longueur
Dy = (2*Pi*R/360) ;
2) un écart de 1 degré en longitude correspond à la 360me partie d'un parallèle de rayon (R*Cos(b0)), donc à un arc de cercle de longueur Dx = (2*Pi*R*Cos(b0)/360) .
Dans un plan tangent à la sphère au point M0(a0, b0) et orienté par les vecteurs unitaires uE (dirigé vers l'est) et uN (dirigé vers le nord) la position d'un point M(a, b) est approximativement représentée par le vecteur
A0M = Dx*(a - a0).uE + Dy*(b - b0).uN ,
ce qui revient à employer dans le repère local ainsi défini, les coordonnées cartésiennes:
X = Dx*(a - a0) = (2*Pi*R*Cos(b0))*((a - a0)/360) et
Y = Dy*(b - b0) = (2*Pi*R)*((b - b0)/360) , les angles s'exprimant toujours en degrés.
Formule déconseillée pour le pistage des ours blancs d'Ellesmere Island, ou des manchots de Terre-Adélie :D .
Point In Polygon - Application sur des coordonnées GPS
Citation:
Envoyé par
b_reda31
... Dans mon cas, le diamètre maximal du polygone est de l'ordre de quelques KMs seulement, je pense donc pouvoir me contenter des formules de conversion entre (longitude, latitude) vers (X,Y) ...
Le rayon terrestre (R) admettant pour valeur moyenne 6371 km , les erreurs relatives affectant les distances et dues à la courbure de la surface n'atteignent pas un millionème; on a en effet:
e ~ (Dmax/R)2 ~ (4 / 6371)2 = 4E-7 .
Citation:
Envoyé par
b_reda31
... Si je comprends bien, le problème revient à calculer X et Y à partir d'un point de longitude a0 et latitude b0
soit déterminer les fonctions f1 et f2 tel que :
- X = f1(a0, b0, a)
- Y = f2(b0, b) ...
En effet, et à prendre le point (A) pour origine du repère local puisque l'on a par définition: XA = YA = 0 .
On calculera de même les coordonnées des autres sommets du polygone: (XB, YB), (XC, YC), ... etc.
Citation:
Envoyé par
b_reda31
En reprenant vos formules :
X = Dx*(a - a0) = (2*Pi*R*Cos(b0))*((a - a0)/360) et
Y = Dy*(b - b0) = (2*Pi*R)*((b - b0)/360) , les angles s'exprimant toujours en degrés
je remarque que f1 et f2 font intervenir a0, b0, a et b
que représentent alors a et b ?
La longitude et la latitude du point considéré (M) que l'on cherche à situer par rapport aux sommets (A, B, C, D ...) du polygone.
Les coordonnées angulaires (ai, bi)des autres points s'obtiennent par les mêmes relations; par exemple:
- XB = X1 = f1(a0, b0, a1)
- YB = Y1 = f2(b0, b1)
en affectant les sommets successifs du polygone (A, B, C ...) des valeurs (0, 1, 2 ... etc); l'indice (i) joue le rôle d'un compteur.
PS: J'ai corrigé une faute par omission, tardivement repérée: l'erreur relative est inférieure à la première estimation donnée.
1 pièce(s) jointe(s)
Point In Polygon - Application sur des coordonnées GPS
# L'injection directe des valeurs des coordonnées angulaires est effectivement le moyen le plus rapide de vérifier, à l'aide de la fonction disponible, la position d'un point par rapport à un polygone; la validité du procédé vient de ce l'on passe d'un type de coordonnées (a, b) à l'autre (x, y) par une transformation affine, qui ne modifie pas la disposition relative des points dans une figure.
Comme dans l'exemple ci-dessous, où les 2 groupes de points se déduisent l'un de l'autre par une affinité horizontale de rapport (2):
Pièce jointe 366142
# Le diamètre maximal (Dmax) du polygone permet d'évaluer l'erreur relative affectant les distances dans le cas de la configuration la plus défavorable; il s'agit donc d'un seuil de sécurité, qui n'exclut pas des écarts beaucoup plus faibles, dans des cas très particuliers.
Le remplacement de ce paramètre global (Dmax) par la plus longue des arêtes (Amax) supprimerait bien sûr tout désaccord, mais je doute que ce soit pertinent dans le cas d'un très grand nombre de sommets (comme celui de la figure proposée (#7, 30 sommets), où le second seuil est beaucoup plus petit (Amax < 0.1 * Dmax); il faudrait connaître l'algorithme de la fonction conduisant au résultat.(1)
# On a bien évoqué la nécessité de ne pas s'approcher des pôles, mais en restant sur ce point beaucoup trop évasifs. Une justification de cette contrainte peut être établie, en reconsidérant l'erreur relative résultant de l'assimilation d'un arc de cercle à une segment de droite:
a) pour un déplacement Nord-Sud suivant un cercle méridien, l'erreur correspondante est: e1 ~ (d1/Rmer)2 = (d1/R)2
et son bornage conduit à celui des distances: e1 <= emax entraînant: d1 <~ R*emax1/2 = Dmax1 ;
b) pour un déplacement Est-Ouest sur un cercle parallèle à l'équateur, l'erreur devient: e2 ~ (d2/Rpar)2 = (d2/(R*Cos(b))2
et l'on obtient par les mêmes considérations: e2 <= emax , et d2 <~ R*Cos(b)*emax1/2 = Dmax2 = Dmax1*Cos(b) .
Le diamètre maximal du polygone ne peut dépasser le plus petit de ces seuils, et doit donc vérifier:
Dmax <~ Min(Dmax1, Dmax2) = Dmax2 = R*Cos(b)*emax1/2 ;
la contrainte imposée est d'autant plus étroite que l'on se rapproche plus des pôles.
Ainsi pour une erreur tolérée (emax) de l'ordre de un dix-millième (0.01 %), on obtient à l'équateur (b = 0): Dmax <~ 64 km ,
et à une latitude de 75° : Dmax <~ 16 km .
(1) Au fait, quel en est le principe ? Je crois deviner un procédé très simple, mais qui ne change en rien le problème présent.