12

緯度/経度の場所が境界内にあるかどうかを判断し、アルゴリズムに関する推奨事項を探しています。(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
}

これは機能しますか?ありがとう

4

5 に答える 5

22

投稿の簡単な比較は、米国の座標で機能します。ただし、国際日付変更線 (経度が ±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;
}
于 2012-06-07T21:24:38.757 に答える
8

あなたが Javascript と PHP の両方について尋ねたので (そして私は PHP でそれが必要でした)、私は 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;
}
于 2015-04-02T23:43:40.683 に答える
2

これは、CheeseWarlock の Js の回答であるショート サーキットをわずかに最適化したバージョンです。

const inBounds = (point, bounds) => {
    const inLat = point.lat > bounds.sw.lat && point.lat < bounds.ne.lat
    if (!inLat) return false

    const eastBound = point.lng < bounds.ne.lng
    const westBound = point.lng > bounds.sw.lng
    return (bounds.ne.lng < bounds.sw.lng)
        ? eastBound || westBound
        : eastBound && westBound
}
于 2020-09-20T07:39:00.923 に答える