Cartographie

Bonjour à tous,

Voici mon problème, je programme des vues cartographiques de tournées de livraisons de produits. Mes programmes affichent donc des points sur une carte type Google Map. Puis ensuite mes utilisateurs de programmes "travaillent" leurs futures livraisons.

Une de mes options permet de sélectionner une zone en cliquant sur la carte (succession de 5 à 10 points) exemple d'un quartier d'une ville.

J'ai donc en final une zone bien définie par mes n points et je dois savoir si mes points de livraisons sont dans cette zone.

Tous mes points (livraisons et définition de zone) sont connus en x et y (Latitude et Longitude)

Pouvez vous m'aiguiller sur une piste pour solutionner mon problème.

Famillejo

Réponses

  • Je n'ai pas compris comment était définie la zone. Est-ce l'enveloppe convexe des $n$ points ?
  • Je ne pense pas. Je dirais qu'on a un lacet affine par morceaux, et il faut dire si un point est à l'intérieur ou pas. Ça doit pouvoir se faire en calculant l'indice du point par rapport au lacet. Après, je n'ai pas réfléchi si c'est faisable en pratique ou pas.
  • Ah. Dans ce cas-là une manière de procéder est prendre un point A à l'extérieur et, si B est le point d'intérêt, de regarder le nombre d'intersections de [A,B] avec les segments du contour et regarder la parité.
  • Bonjour,

    la zone est en effet définie par des points qui sont ensuite reliés par des droites. En final ma zone est une surface sur une carte qui est au minimum un triangle (3 points), ou un rectangle (4 points) ou .... (5,6,7,8,10 points) La zone en final peut être particulièrement "tarabiscotée" puisque libre au choix de l'utilisateur du programme.
    Comme données de base j'ai donc les coordonnées de mes points qui limitent ma surface et l'ordre chrono des points qui ne peuvent être reliés qu'au point précédent et suivant (le dernier étant reliè au premier).

    Famillejo
  • Dans ce cas, tu peux faire comme l'a dit Dé :
    - Appelons $B$ le point qui t'intéresse.
    - Tu prends un point $A$ dont tu es sûr qu'il est à l'extérieur de ta zone.
    - Tu traces le segment $[AB]$ et tu comptes les intersections avec la frontière de ta zone (formée de segments reliant chaque point au suivant).
    - S'il y a un nombre impairs d'intersection, ton point $B$ est dans la zone, sinon, il est à l'extérieur.

    Exemple : Ici, il y a 3 intersections. Le point $B$ est dans la zone.
    file.php?2,file=2153521535
  • Sinon, si on appelle $A_0,\ldots,A_n$ les sommets du polygone ``non croisé'' (avec $A_n=A_0$) et si $A$ est un point non situé sur le polygone dont on veut savoir s'il est à l'intérieur ou à l'extérieur, notons $(x_i,y_i)$ les coordonnées de $A_i-A$. Soit $\theta_i$ et $r_i>0$ tels que $(x_i,y_i)=(r_i\cos\theta_i,r_i\sin\theta_i)$. Soit $k_i$ l'unique entier tel que le réel $\phi_i=\theta_{i+1}-\theta_i+2k_i\pi$ appartienne à $]-\pi,\pi[$.

    Alors le point $A$ est à l'extérieur si et seulement si $\phi_0+\phi_1+\cdots+\phi_{n-1}=0$. Si $A$ est à l'intérieur alors c'est un multiple de $2\pi$.
  • Merci,

    de vos réponses, je teste les deux solutions en programme informatique. la première me semble plus simple à coder.

    Famillejo
Connectez-vous ou Inscrivez-vous pour répondre.