7
votes

Point dans l'algorithme de polygone qui gère des polygones qui chevauchent l'antiméridien

J'ai une base de données de points de polygone sous forme de latitude, de paires de longitude et j'ai besoin de tester si un point de lat donné est à l'intérieur de tous les polygones.

Il existe plusieurs algorithmes autour, y compris ces mais ils ne font pas 'T Travailler si le polygone chevauche l'antiméridien (au large des côtes de la Nouvelle-Zélande, où longitude se retourne de +180 degrés est à -180 degrés ouest).

Une solution que je vois est de détecter si le polygone chevauche l'anemeridian et si le divisez-le en deux polygones, un de chaque côté, puis vérifiez chacun d'eux.


0 commentaires

4 Réponses :


2
votes

L'option autre (plus simple), IMO, doit simplement tester ce cas particulier, et s'il existe, appliquez une transformation sur votre point de requête et le polygone. Par exemple, s'il couvre l'anti-méridien, il suffit de traduire tout par un montant de longitude spécifique pour que cela ne soit pas couvrant le méridien et effectuez votre test standard.


0 commentaires

1
votes

Ceci est probablement trop exclu, mais vous pourriez envisager d'utiliser des polygones sphériques au lieu de traiter la carte comme un avion. Voici un Bibliothèque en Java qui les gère et peut faire des contrôles point in-sphériques-polygones. Bien que, si vous avez des polygones contenant plus de la moitié du globe, ou des deux pôles, vous pouvez avoir des problèmes car la définition de la zone ci-jointe commence à tomber en panne.


1 commentaires

D'accord - Le meilleur est de les traiter comme des polys sphériques. Cependant, la zone ci-jointe est toujours ambiguë que si vous suivez une convention d'enroulement (c'est-à-dire de définir à l'intérieur comme la zone enfermée par une traversée CCW).



0
votes

Merci pour les suggestions. À la fin, le polygone que je teste est un rectangle, de sorte que si elle chevauche l'antemeridian (il a des longitudes de signes différents) la couper en deux polygones, une de chaque côté et une interrogation pour des objets qui se croisent l'un d'eux.


0 commentaires

1
votes

Vous ne pouvez pas simplement faire de toutes les coordonnées de longitude 'Move' sur le côté positif du méridien GW en ajoutant 360? Par exemple: la coordonnée est -178degrees puis devient + 182degrés, -1deg devient 359deg, 1 degrés devient 361 etc ...

Je ne sais pas comment cela affectera les pôles, mais cela fonctionnerait probablement bien pour tout ce qui ne touche pas les pôles.


1 commentaires

Je n'ai pas de commentaire partout privilégiant, alors faire une réponse est la seule façon de me dire que ...