Sort latitude and longitude coordinates into clockwise ordered quadrilateral
Posted
by Dave Jarvis
on Stack Overflow
See other posts from Stack Overflow
or by Dave Jarvis
Published on 2010-05-18T07:21:40Z
Indexed on
2010/05/18
17:50 UTC
Read the original article
Hit count: 928
Problem
Users can provide up to four latitude and longitude coordinates, in any order. They do so with Google Maps. Using Google's Polygon
API (v3), the coordinates they select should highlight the selected area between the four coordinates.
Solutions and Searches
- http://www.geocodezip.com/map-markers_ConvexHull_Polygon.asp
- http://softsurfer.com/Archive/algorithm_0103/algorithm_0103.htm
- http://stackoverflow.com/questions/2374708/how-to-sort-points-in-a-google-maps-polygon-so-that-lines-do-not-cross
- http://stackoverflow.com/questions/242404/sort-four-points-in-clockwise-order
- http://en.literateprograms.org/Quickhull_%28Javascript%29
- Graham's scan seems too complicated for four coordinates
- Sort the coordinates into two arrays (one by latitude, the other longitude) ... then?
- Jarvis March algorithm?
Question
How do you sort the coordinates in (counter-)clockwise order, using JavaScript?
Code
Here is what I have so far:
// 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;
}
What is a better approach?
The recursive Convex Hull algorithm is overkill for four points in the data set.
Thank you.
© Stack Overflow or respective owner