J'ai un ensemble de coordonnées en lon / lat. Il y a toujours au moins 3 coordonnées ordonnées qui forment un poly (si elles étaient projetées à plat). Comment puis-je calculer les limites minimales de ces coordonnées comme un ensemble de plages de longitude et de latitude valides? (par «valide», j'entends des plages qui expliquent explicitement l'antiméridien). C'est un peu difficile d'expliquer ce que je cherche donc j'ai une photo.
Le cas dans l'image est trivial; vous trouvez juste le minimum et le maximum absolus pour tous les points. Cela ne fonctionne cependant pas dans tous les cas. Existe-t-il une solution générique?
Edit: pour clarifier ce que je veux dire par «valide», disons que j'avais trois valeurs de longitude dans mon ensemble de données: -76, -135 et 164. Les valeurs traversent l'antiméridien et je voudrais que les plages résultantes soient divisées: -76 à -180 ET 164 à 180.
Quelques précisions supplémentaires. Les points forment un polygone, donc dans certains cas, la plage requise peut être de -180 à +180 (c'est-à-dire les 360 degrés complets):
L'image de gauche montre la longitude de quatre coordonnées qui se produisent sur une «moitié» de la Terre. Imaginez-le comme si vous regardiez le pôle nord (point noir). Le rose montre la plage longitudinale minimale qui englobe le polygone (le polygone est représenté entre les quatre points en violet). Le cas de gauche aurait deux plages longitudinales: [-180 à -120] et [135 à 180] (juste en l'estimant visuellement)
L'image de droite montre un autre cas où les points tournent tout autour de la Terre. Cette plage serait de [-180 à 180].
la source
Réponses:
J'espère que je comprends bien la question ...
Nous pouvons résoudre le problème de longitude et de latitude séparément, je vais donc prendre votre exemple avec les longitudes: -76, -135 et 164.
Je les commanderais d'abord:
Ensuite, j'ajouterais à nouveau la coordonnée la plus à gauche: -135 + 360 = 225
Maintenant, nous pouvons calculer les écarts entre les coordonnées:
Le plus grand écart (240) doit être la limite de la boîte de délimitation minimale, la partie qui n'appartient pas à la boîte. La ligne pointillée est la plus grande partie du cercle que nous pouvons épargner. Dans notre exemple, cela signifie que la zone de frontière commence par 164, inclut -135 et se termine par -76.
la source
C'est vraiment facile à faire en Javascript avec l'API Google Maps. Voici comment vous le feriez côté client avec cette API:
la source
Je pense que j'aurais trouvé un moyen de le faire. Ma mise en œuvre préliminaire fonctionne, mais je ne sais pas s'il y a des cas marginaux que j'ai manqués. S'il y a un problème avec cette solution, veuillez le signaler.
Étant donné que je souhaite obtenir les plages lon / lat du polygone plutôt que les points qui le composent, une façon de résoudre le problème consiste à `` marcher '' le long de l'ensemble des coordonnées ordonnées du début à la fin. Vous gardez une trace de la distance parcourue dans le sens horaire et antihoraire par rapport au centre de la Terre en fonction d' un point de départ et continuez jusqu'à ce que vous ayez terminé le polygone:
Vous pouvez obtenir une plage de distance entre CW et CCW à partir de votre point de départ ... cela vous donne suffisamment d'informations pour dériver des limites correctes dans le cas normal (à gauche dans l'image). Dans le cas où le polygone fait le tour complet ou coupe à travers le centre, l'angle de déplacement renvoyé sera de 360 degrés.
Cette méthode fonctionne également lorsque le polygone `` épouse '' la surface de la Terre plutôt que de la traverser. Donc, si vous avez un polygone montrant quelqu'un voyageant le long de la surface de la Terre de Toronto (lon: -79) à Londres (lon: -5) à Tokyo (lon: 139) et retour (dans le même ordre), vous aurez obtenez la plage [-79 à 139].
Si le polygone coupe le centre (imaginez deux points adjacents à +90 et -90), je considère que c'est un balayage complet (360 degrés) bien que vous puissiez aller dans les deux sens.
la source