【问题标题】:Calculating end points of a rectangle with two given lat long points and breadth计算具有两个给定纬度和宽度的矩形的端点
【发布时间】:2013-09-05 08:10:13
【问题描述】:

我需要检查一个点是否位于地图上的给定矩形内。我正在使用传单创建边界框,这需要我提供矩形的西南和东北点。

我有以下信息: 1.矩形上边的中点 2.矩形底边的中点 3. 边长(即宽度)= 1000 m。

可以肯定地假设以上两点非常接近。

任何关于如何实现这一点的想法都会有所帮助。

【问题讨论】:

    标签: map geometry latitude-longitude leaflet rectangles


    【解决方案1】:

    首先,要获得左上角和右下角的点,您需要使用一些几何图形。这个页面:https://gis.stackexchange.com/questions/2951/algorithm-for-offsetting-a-latitude-longitude-by-some-amount-of-meters 是一个很好的例子,说明如何准确地将米转换为十进制度。

    例如,为了得到左上角的点,你从直线的中点开始,你有直线的总长度,你需要将直线的长度除以 2 ,然后将该长度从米转换为十进制度,然后按该量添加 X 坐标。这会给你右上角。通过减去该数量而不是减去该数量,对左下角重复此操作。

    var upperMiddlePoint = [30,50];
    var segmentLength = 5000;
    var northEastPoint = upperMiddlePoint;
    var northEastPoint.x = northEastPoint.x + ((segmentLength / 2) * DECIMAL_DEGREES_PER_METER)
    

    这里有一个快速简单的答案:Simple calculations for working with lat/lon + km distance?,它描述了如何在上述 sn-p 中获取 DECIMAL_DEGREES_PER_METER 值。

    创建一个LatLngBounds 对象来表示您的矩形边界。 API Here.

    var bounds = new L.LatLngBounds(southWestPoint, northEastPoint);
    

    然后,使用LatLngBounds.contains() 函数(如here 所述)来确定您的点是否在这些范围内。

    var contains = bounds.contains([50, 30]);
    if (contains) {
         doStuff();
    }
    

    如果边界包含该点,contains 布尔值将为 true,否则为 false。

    【讨论】:

    • 我知道上面的功能。当我有问题中提到的数据时,我的问题是如何计算南西点和北东点
    • 看起来像一个简单的几何问题。为了得到左上角,你可以从中点顶部边缘 X 坐标减去边缘长度的 1/2(比如 500m)吗?然后对底部做同样的事情?
    • 在我的答案开头添加了一些代码来描述这一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多