Tengo un conjunto de coordenadas en lon / lat. Siempre hay al menos 3 coordenadas ordenadas que forman un poli (si se proyectaron planas). ¿Cómo puedo calcular los límites mínimos para estas coordenadas como un conjunto de rangos válidos de longitud y latitud? (por "válido" me refiero a rangos que explícitamente explican el antimeridiano). Es un poco difícil explicar lo que estoy buscando, así que tengo una foto.
El caso en la imagen es trivial; solo encuentra el mínimo y el máximo absolutos para todos los puntos. Sin embargo, esto no funciona para todos los casos. ¿Hay una solución genérica?
Editar: para aclarar lo que quiero decir con "válido", digamos que tenía tres valores de longitud en mi conjunto de datos: -76, -135 y 164. Los valores cruzan el antimeridiano y me gustaría que los rangos resultantes se dividan: -76 a -180 y 164 a 180.
Un poco más de aclaración. Los puntos forman un polígono, por lo que en ciertos casos, el rango requerido podría ser de -180 a +180 (es decir, los 360 grados completos):
La imagen de la izquierda muestra la longitud de cuatro coordenadas que ocurren en una 'mitad' de la Tierra. Imagínelo como si estuviera mirando hacia el polo norte (punto negro). El rosa muestra el rango longitudinal mínimo que abarca el polígono (el polígono se muestra entre los cuatro puntos en púrpura). El caso de la izquierda tendría dos rangos longitudinales: [-180 a -120] y [135 a 180] (solo estimándolo visualmente)
La imagen de la derecha muestra otro caso en el que los puntos van alrededor de la Tierra. Este rango sería [-180 a 180].
fuente
Respuestas:
Espero entender la pregunta correctamente ...
Podemos resolver el problema de longitud y latitud por separado, por lo que tomaré su ejemplo con las longitudes: -76, -135 y 164.
Primero los ordenaría:
Luego agregaría la coordenada más a la izquierda a la derecha nuevamente: -135 + 360 = 225
Ahora podemos calcular los espacios entre las coordenadas:
El espacio más grande (240) debe ser el límite del cuadro delimitador mínimo, la parte que no pertenece al cuadro. La línea punteada es la parte más grande del círculo que podemos ahorrar. En nuestro ejemplo, eso significa que el cuadro de límite comienza con 164, incluye -135 y termina con -76.
fuente
Esto es realmente fácil de hacer en Javascript con la API de Google Maps. Así es como lo haría del lado del cliente con esa API:
fuente
Creo que podría haber encontrado una manera de hacer esto. Mi implementación preliminar funciona, pero no estoy seguro de si hay algunos casos límite que me he perdido. Si hay algún problema con esta solución, indíquelo.
Dado que me preocupa obtener los rangos lon / lat para el polígono en lugar de solo los puntos que lo componen, una forma de intentar el problema es realmente 'caminar' a lo largo del conjunto de coordenadas ordenadas de principio a fin. Mantiene un registro de cuán lejos ha viajado en sentido horario y antihorario en relación con el centro de la Tierra dado un punto de partida y continúa hasta completar el polígono:
Puede obtener un rango de cuán lejos viaja CW y CCW desde su punto de partida ... esto le brinda suficiente información para derivar los límites correctos en el caso normal (a la izquierda en la imagen). En el caso en el que el polígono gira completamente o corta a través del centro, el ángulo de desplazamiento devuelto será de 360 grados.
Este método también funciona cuando el polígono 'abraza' la superficie de la Tierra en lugar de atravesarla. Entonces, si tiene un polígono que muestra a alguien viajando a lo largo de la superficie de la Tierra desde Toronto (lon: -79) a Londres (lon: -5) a Tokio (lon: 139) y viceversa (en el mismo orden), obtener el rango [-79 a 139].
Si el polígono atraviesa el centro (imagine dos puntos adyacentes en +90 y -90), considero que esto es un barrido completo (360 grados), aunque podría ir en cualquier dirección.
fuente