2012-06-07 6 views
5

緯度/経度が境界内にあるかどうかを判断し、アルゴリズムの推奨事項を探したいと思っています。ここで(javascriptやPHP)境界内の緯度/経度の判定

は、私がこれまで持っているものです。

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 
} 

が、この作品はだろうか?ありがとう

+3

あなたはそれが動作するかどうか私達に尋ねていますか?それがうまくいくかどうか聞いてみました。 –

+1

あなたの境界に東経と西経の両方の座標が含まれている場合、いくつか問題があると思います。あなたが使用している座標系によっては、北/南極、0度経度(イングランド、アフリカなど)、180W/E(太平洋の中)の地域があります。 – netfire

+0

@ScottSaundersはい私はより少ないですそれが論理的であるかどうか尋ねる。 –

答えて

9

あなたの投稿の簡単な比較は、米国内の座標では機能します。しかし、あなたは(経度が±180°である場合)国際日付変更線を越えチェックのために安全です解決したい場合:あなたは(と私はPHPでそれを必要)JavascriptとPHPの両方について尋ねたよう

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

を、I CheeseWarlockのPHPへの素晴らしい答えを変換しました。いつものように、PHPの方がずっと優雅です。 :)

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; 
}