给定一组坐标,如何计算最小界限?


13

我有一组经度/纬度的坐标。始终至少有3个有序坐标构成一个多边形(如果将它们投影成平面)。如何将这些坐标的最小范围计算为一组有效的经度和纬度范围?(“有效”是指明确代表反子午线的范围)。很难解释我在寻找什么,所以我有一张照片。

在此处输入图片说明

图片中的情况很琐碎;您只是找到所有点的绝对最小值和最大值。不过,这并不适用于所有情况。有通用的解决方案吗?

编辑:要弄清楚“有效”的含义,请说我在数据集中有三个经度值:-76,-135和164。这些值跨越了antimeridian,我希望将得到的范围分开:-76至-180和164至180。

还有一些澄清。这些点形成多边形,因此在某些情况下,所需范围可能是-180至+180(即完整的360度):

在此处输入图片说明

左图显示了发生在地球“一半”上的四个坐标的经度。想象一下,好像您正在俯视北极(黑点)一样。粉红色显示了包围多边形的最小纵向范围(多边形在四个点之间以紫色显示)。左侧的案例将具有两个纵向范围:[-180至-120]和[135至180](仅在视觉上对其进行估计)

右图显示了另一种情况,这些点一直围绕地球。此范围为[-180至180]。


1
我以前从未考虑过这个问题,这是一个很大的问题。平坦的土地会使我们的工作更轻松的另一个例子!我期待看到一些解决方案。
2012年

我认为您需要更明确地说明“(“有效”是指明确代表antimeridian的范围)”-我猜最小这个词需要放在问题的边界前面。
伊恩·特顿

您能否重新添加图片,这可能有助于您解释问题。
Mapperz

1
iant:明确澄清“有效” Mapperz:重新添加?没有显示出来吗?我看得很好。
2012年

1
坐标是lon / lat,用于查询数据库以检索地理数据。严格来说,您可以将其转换为纯粹的数学问题(尽管可以说GIS中的许多事情)
Pris 2012年

Answers:


5

希望我正确理解这个问题...

我们可以分别解决经度和纬度的问题,所以我将以经度为例:-76,-135和164。

首先,我将命令他们:

-135, -76, 164

然后我将最左边的坐标再次添加到右边:-135 + 360 = 225

-135, -76, 164, 225

现在我们可以计算坐标之间的间隙:

-135 (59) -76 (240) 164 (61) 225
             .......

最大间隙(240)必须是最小边界框的边界,该边界属于该框。虚线是我们可以避免的最大圈子。在我们的示例中,边界框以164开始,包括-135,以-76结尾。


我认为,这种方法适用于大多数情况。但是,以附加经度(+60)[作为多边形中的第四点]为例。在这种情况下,我希望-180至180。使用您的方法,我将得到61至180和-76至-180。
2012年

@Pris-所以您希望经度180 / -180(毕竟是同一点)在每种情况下都属于盒子,即使那不是最小的盒子也是如此?
martinstoeckli 2012年

我认为这里的主要区别在于这些点形成了多边形。看到我的编辑。
2012年

@Pris-哦,这看起来真的很棘手。就像两点之间的边的每个点都算作顶点一样。
martinstoeckli 2012年

1

使用Google Maps API的Java语言确实很容易做到。使用该API在客户端进行以下操作:

var bounds = new google.maps.LatLngBounds();

//Recursively loop through your coordinate list
    latLng = new google.maps.LatLng(<YourLat>, <YourLon>);
    bounds.extend(latLng);
//

extentBox = new google.maps.Rectangle({
    bounds: bounds,
    strokeColor: "#FF0000",
    strokeOpacity: 0.8,
    strokeWeight: 2,
    fillColor: "#FF0000",
    fillOpacity: 0.35
});
extentBox.setMap(map);

嘿,谢谢您的回答,但是,我正在寻找实际的方法,而不是调用API或使用现有的解决方案。
2012年

您给了我bounds.extend方法,我正在寻找这个确切的解决方案,所以谢谢!
汤姆森·科默

这对多边形有效吗?我看到您正在使用Rectangle。
Danny G

1

我想我可能已经找到了一种方法。我的初步实现可行,但是我不确定是否错过了任何极端情况。如果此解决方案有任何问题,请指出。

鉴于我关注的是获取多边形的经度/纬度范围,而不仅仅是关注构成多边形的点,因此,尝试解决此问题的一种方法是实际上从头到尾沿“有序”坐标集“行走”。给定起点的情况下,您将跟踪相对于地球中心沿顺时针和逆时针方向走了多远,并继续进行直到完成多边形:

在此处输入图片说明

您可以得到从起始点开始走CW和CCW的范围...这为您提供了足够的信息,可以在正常情况下得出正确的界线(图像左侧)。如果多边形完全围绕中心或横切中心,返回的行进角度将为360度。

当多边形“拥抱”地球表面而不是横切地球时,此方法也适用。因此,如果您有一个多边形显示某人沿着地球表面从多伦多(lon:-79)到伦敦(lon:-5)到东京(lon:139)并返回(以相同的顺序)旅行,获得范围[-79至139]。

如果多边形横切中心(在+90和-90处想象两个相邻的点),尽管您可以选择任意一种方式,但我认为这是一次完整扫描(360度)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.