计算具有两个给定lat长点和宽度的矩形的端点

时间:2013-09-05 08:10:13

标签: map geometry latitude-longitude leaflet rectangles

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

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

可以安全地假设上述两点非常接近。

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

1 个答案:

答案 0 :(得分:1)

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

例如,为了得到左上角的点,你从线的中间点开始,你有线的总长度,你想要将线的长度除以2 ,然后将该长度从米转换为decimel度,然后按该量添加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?,它描述了如何在上面的代码段中获取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。