用户在矩形内部或外部的Javascript解决方案

时间:2016-07-25 14:49:36

标签: javascript gps

我正在检查Stackoverflow和许多其他页面,以找到一个Javascript(或JQuery)解决方案,告诉我用户(当前GPS位置)是在地图上预定义的矩形内部还是外部。圆形和正方形有很多解决方案,但我找不到矩形的解决方案。 此外,矩形不得与f.e平行。赤道。它可以有任何可能的角度。 进行内/外计算需要哪个矩形参数?有谁知道一个Javascript解决方案来解决这个问题?

1 个答案:

答案 0 :(得分:1)

要知道一个点是否在您需要的2D平面图中的矩形内:

  • 矩形的一个点的位置:X0,Y0;
  • 矩形与水平轴的夹角:a;
  • 第一面的长度:L1;
  • 第二面的长度:L2。

See this drawing.

点(X,Y)位于矩形内部:

  • 0> =(X-X0)* cos(a) - (Y-Y0)* sin(a)> = L1
  • 0> =(X-X0)* sin(a)+(Y-Y0)* cos(a)> = L2

或者在javascript中:

<form class="schedulerBody form-horizontal" id="{{sourceCleaned}}">
    <div class="form-group">
        <label class="col-sm-3 control-label">{{t "templates.scheduler.fireEvery"}}</label>
        <div class="col-sm-8">
            <div class="form-inline">
                <select class="liveSyncSchedule form-control"></select>
                <span>{{t "templates.scheduler.seconds"}}</span>
            </div>
        </div>
    </div>
    <div class="form-group">
        <div class="col-sm-offset-3 col-sm-8">
            <div class="checkbox">
                <label>
                    <input type="checkbox" />{{t "templates.scheduler.enabled"}}
                </label>
            </div>
        </div>
    </div>
    <div class="form-group">
        <div class="col-sm-offset-3 col-sm-8">
            <div class="checkbox">
                <label>
                    <input type="checkbox" />{{t "templates.scheduler.persisted"}}
                </label>
            </div>
        </div>
    </div>
    <div class="form-group">
        <label class="col-sm-3 control-label">{{t "templates.scheduler.misfirePolicy"}}</label>
        <div class="col-sm-8">
            <select class="misfirePolicy form-control">
                <option value="fireAndProceed">{{t "templates.scheduler.fireAndProceed"}}</option>
                <option value="doNothing" selected>{{t "templates.scheduler.doNothing"}}</option>
            </select>
        </div>
    </div>
</form>

使用它:

function isInRectangle(x, y, x0, y0, a, l1, l2) {
    var v1 = (x-x0)*Math.cos(a) - (y-y0)*Math.sin(a);
    var v2 = (x-x0)*Math.sin(a) + (y-y0)*Math.cos(a);
    return v1 >= 0 && v1 <= l1 && v2 >= 0 && v2 <= l2;
}