ProblemaOrdenar latitud y longitud coordenadas en sentido horario ordenado cuadrilátero
Los usuarios pueden proporcionar hasta cuatro coordenadas de latitud y longitud, en cualquier orden. Lo hacen con Google Maps. Utilizando la API de Google Polygon
(v3), las coordenadas que seleccionen deberían resaltar el área seleccionada entre las cuatro coordenadas.
Pregunta
¿Cómo ordenar un conjunto de coordenadas de latitud y longitud en (en sentido contrario) orden a la derecha?
Soluciones y Búsquedas
Stackoverflow Preguntas
- Drawing resizable (not intersecting) polygons
- How to sort points in a Google maps polygon so that lines do not cross?
- Sort Four Points in Clockwise Order
Sitios Relacionados
- http://www.daftlogic.com/projects-google-maps-area-calculator-tool.htm
- http://en.literateprograms.org/Quickhull_%28Javascript%29
- http://www.geocodezip.com/map-markers_ConvexHull_Polygon.asp
- http://softsurfer.com/Archive/algorithm_0103/algorithm_0103.htm
algoritmos conocidos
- exploración de Graham (demasiado complicado) algoritmo
- Jarvis marzo (maneja N puntos)
- recursiva Convex Hull (elimina un punto)
Código
Aquí es lo que tengo hasta ahora:
// Ensures the markers are sorted: NW, NE, SE, SW
function sortMarkers() {
var ns = markers.slice(0);
var ew = markers.slice(0);
ew.sort(function(a, b) {
if(a.position.lat() < b.position.lat()) {
return -1;
}
else if(a.position.lat() > b.position.lat()) {
return 1;
}
return 0;
});
ns.sort(function(a, b) {
if(a.position.lng() < b.position.lng()) {
return -1;
}
else if(a.position.lng() > b.position.lng()) {
return 1;
}
return 0;
});
var nw;
var ne;
var se;
var sw;
if(ew.indexOf(ns[0]) > 1) {
nw = ns[0];
}
else {
ne = ns[0];
}
if(ew.indexOf(ns[1]) > 1) {
nw = ns[1];
}
else {
ne = ns[1];
}
if(ew.indexOf(ns[2]) > 1) {
sw = ns[2];
}
else {
se = ns[2];
}
if(ew.indexOf(ns[3]) > 1) {
sw = ns[3];
}
else {
se = ns[3];
}
markers[0] = nw;
markers[1] = ne;
markers[2] = se;
markers[3] = sw;
}
Gracias yo tú
¿Por qué no utilizar la solución elegida en la pregunta SO a la que hizo referencia en la pregunta? Suena como el mismo problema. –
@Dave, no estoy seguro de lo que está buscando. ¿Cómo se ordenarían los siguientes puntos: 'a = (1,1)', 'b = (2,4)', 'c = (3,3)', 'd = (6,2)'? Me gusta '[b, d, c, a] 'quizás? ¿O desea excluir 'c' de la matriz ordenada para que el polígono sea convexo? –
@Dave, supongo que se da cuenta de que el casco convexo de un conjunto de puntos mayor que 3, podría excluir 1 punto. En su fragmento de código, no veo que tenga eso en cuenta, sin embargo, hace referencias a los algoritmos de Convex Hull ... –