2

座標の LAT/LNG ポイントが他の 2 つのポイント (道路のようなセグメント ライン) の間にあるかどうかを確認する必要があります。私はこのトピックをたどりましたが、成功しませんでした。

function inRange(start, point, end) {
    start_x = start.lat();
    start_y = start.lng();
    end_x = end.lat();
    end_y = end.lng();
    point_x = point.lat();
    point_y = point.lng();

    var dx = end_x - start_x;
    var dy = end_y - start_y;
    var innerProduct = (point_x - start_x)*dx + (point_y - start_y)*dy;
    return 0 <= innerProduct && innerProduct <= dx*dx + dy*dy;
}


function checkRange(start, point, end){
    var x1 = start.lat();
    var y1 = start.lng();
    var x2 = end.lat();
    var y2 = end.lng();
    var x = point.lat();
    var y = point.lng();

    if (x1 == x2) {  // special case
        return y1 < y2 ? (y1 <= y && y <= y2) : (y2 <= y && y <= y1);
    }

    var m = (y2 - y1) / (x2 - x1);
    var r1 = x1 + m * y1;
    var r2 = x2 + m * y2;
    var r = x + m * y;
    return r1 < r2 ? (r1 <= r && r <= r2) : (r2 <= r && r <= r1);
}
  • 最初のテスト

開始: (44.4963217, 11.327993300000003)

終了: (44.4973624, 11.32760170000006)

ポイント (44.4958434、11.328122000000008)

InRange == false (OK) したがって、Point が新しい開始 Point になります

  • 二次試験

開始: (44.4958434, 11.328122000000008)

終了: (44.4973624, 11.32760170000006)

ポイント: (44.4966928, 11.32781620000003)

InRange == false (エラー) Point2 は開始/終了の間にありますが、関数は false を返します:(

4

1 に答える 1