ProblemSortieren Breiten- und Längenkoordinaten in Uhrzeigerrichtung geordnete Viereck
Benutzer bis zu vier Breiten- und Längenkoordinaten, in beliebiger Reihenfolge zur Verfügung stellen können. Sie tun dies mit Google Maps. Mit der Google-API Polygon
(v3) sollten die ausgewählten Koordinaten den ausgewählten Bereich zwischen den vier Koordinaten markieren.
Frage
Wie sortieren Sie eine Reihe von Breiten- und Längenkoordinaten in (Gegen-) Uhrzeigersinn?
Lösungen und Suchen
Stackoverflow Fragen
- 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
Verwandte Seiten
- 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
Bekannte Algorithmen
- Grahams Scan (zu kompliziert)
- Jarvis March-Algorithmus (Griffe N Punkte)
- rekursive Convex Hull (entfernt einen Punkt)
-Code
Hier ist, was ich habe so weit:
// 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;
}
Vielen Dank u.
Warum nicht die Lösung verwenden, die in der SO-Frage ausgewählt wurde, auf die Sie in der Frage verwiesen haben? Es klingt wie das gleiche Problem. –
@Dave, nicht ganz sicher, was Sie suchen. Wie würden die folgenden Punkte sortiert: 'a = (1,1)', 'b = (2,4)', 'c = (3,3)', 'd = (6,2)'? Wie "[b, d, c, a]" vielleicht? Oder möchten Sie "c" aus dem sortierten Array ausschließen, um das Polygon konvex zu machen? –
@Dave, ich nehme an, Sie erkennen, dass die konvexe Hülle einer Menge von Punkten größer als 3, 1 Punkt ausschließen kann. In Ihrem Code-Ausschnitt sehe ich nicht, dass Sie das berücksichtigen, aber Sie verweisen auf Convex Hull-Algorithmen ... –