2012-06-07 11 views
5

Estoy interesado en determinar si una ubicación lat/lng está dentro de los límites y buscando recomendaciones sobre un algoritmo. (Javascript o php)Determine si Lat/Lng en los límites

Esto es lo que tengo hasta ahora:

var lat = somelat; 
var lng = somelng; 

if (bounds.southWest.lat < lat && lat < bounds.northEast.lat && bounds.southWest.lng < lng && lng < bounds.northEast.lng) { 
    'lat and lng in bounds 
} 
se

este trabajo? gracias

+3

¿Nos está preguntando si funcionará? Estaba a punto de preguntarte si funcionó. –

+1

Creo que tendrás algunos problemas si tus límites incluyen las coordenadas de longitud este y oeste. Dependiendo del sistema de coordenadas que esté utilizando, es probable que las áreas cubran los polos norte/sur, 0 longitud degresión (Inglaterra, África, etc.) y 180 W/E (en el océano Pacífico) – netfire

+0

@ScottSaunders sí, soy más menos preguntando si parece lógico –

Respuesta

9

La simple comparación en su publicación funcionará para las coordenadas en los EE. UU. Sin embargo, si desea una solución que sea seguro para el control a través de la línea de fecha internacional (donde la longitud es de ± 180 °):

function inBounds(point, bounds) { 
    var eastBound = point.long < bounds.NE.long; 
    var westBound = point.long > bounds.SW.long; 
    var inLong; 

    if (bounds.NE.long < bounds.SW.long) { 
     inLong = eastBound || westBound; 
    } else { 
     inLong = eastBound && westBound; 
    } 

    var inLat = point.lat > bounds.SW.lat && point.lat < bounds.NE.lat; 
    return inLat && inLong; 
} 
4

Como se preguntará sobre ambos Javascript y PHP (y lo necesitaba en PHP), I convirtió la gran respuesta de CheeseWarlock en PHP. Lo cual, como es habitual con PHP, es mucho menos elegante. :)

function inBounds($pointLat, $pointLong, $boundsNElat, $boundsNElong, $boundsSWlat, $boundsSWlong) { 
    $eastBound = $pointLong < $boundsNElong; 
    $westBound = $pointLong > $boundsSWlong; 

    if ($boundsNElong < $boundsSWlong) { 
     $inLong = $eastBound || $westBound; 
    } else { 
     $inLong = $eastBound && $westBound; 
    } 

    $inLat = $pointLat > $boundsSWlat && $pointLat < $boundsNElat; 
    return $inLat && $inLong; 
} 
Cuestiones relacionadas