2012-06-07 27 views
5

Bir lat/lng konumunun sınırlar içinde olup olmadığını ve bir algoritma hakkında öneriler olup olmadığını belirlemek istiyorum.Sınırlarda Lat/Lng olup olmadığını belirleme

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 
} 

olacak bu iş: (javascript veya php) İşte

var bugüne kadar ne? teşekkürler

+3

Çalışır mı diye soruyor musunuz? Çalışırsa sana sormak üzereydim. –

+1

Sınırlarınızın hem doğu hem de batı boylam koordinatlarını içermesi durumunda bazı sorunlarınız olacağını düşünüyorum. Bunu kullandığınız koordinat sistemine bağlı olarak kuzey/güney direklerini kaplayan muhtemel alanlar, 0 derecelik Boylam (İngiltere, Afrika, vb) ve 180 W/E (Pasifik Okyanusu'nda) – netfire

+0

@ScottSaunders evet daha azım mantıklı görünüp görünmeyeceğini sormak. –

cevap

9

Gönderinizdeki basit karşılaştırma, ABD'deki koordinatlar için çalışacaktır. Ancak, (boylam ± 180 ° olduğu) Uluslararası Tarih Hat üzerinden kontrol etmek için güvenli bir çözüm istiyorsanız: sizin (ve PHP gerekli) Javascript ve PHP hem sorulduğunda şöyle

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

, ben CheeseWarlock'un PHP'ye büyük cevabı dönüştürüldü. Hangi, PHP ile her zamanki gibi, çok daha az zariftir. :)

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; 
} 
İlgili konular