【问题标题】:Bounding box only for the visible part of the layer边界框仅适用于图层的可见部分
【发布时间】:2015-04-07 09:42:51
【问题描述】:

我想知道是否有办法获取不是完整图层的边界框,而只是在地图的当前缩放级别中可见的图层部分?

所以,我需要获取屏幕上绘制的图层边界框的屏幕坐标。我找不到实现这一目标的方法。

编辑:

不幸的是,这并没有解决我的问题。这正是我最新的观点,在某些情况下它不起作用。由于我的声誉,stackoverflow 不允许我上传图片,我将尝试描述: 想象一下,我有一条几乎平行于 y 轴穿过屏幕的路径,但是在屏幕之外它至少是 x 轴长。在这种情况下,建议的解决方案将返回 x 轴的最小和最大屏幕坐标,其中它需要是穿过屏幕的短间隔。在某种程度上,我需要图层可见部分的边界框。

编辑 2: 谢谢大家的答案。我尝试使用“getFeaturesInExtent”函数,但我收到一条错误消息:“Uncaught TypeError: undefined is not a function”。我正在使用最新的 OpenLayers 版本 3.4.0。我想我收到此错误是因为此版本中未实现此功能。 我使用的方式如下:

var mapExtent = map.getView().calculateExtent(map.getSize());
var features = result.getSource().getFeaturesInExtent(mapExtent);

您对我有什么建议? (我尝试使用从:https://github.com/openlayers/ol3 下载 ZIP 的主版本,但在这种情况下地图不起作用。) 再次感谢!

【问题讨论】:

  • 我不确定我是否理解正确,但ol.source.Vector#getFeaturesInExtent 与地图范围一起调用会为您提供所有可见的功能。然后你可以用这些特征计算出真实的范围。

标签: openlayers-3


【解决方案1】:

我认为您唯一需要的是视图的范围和图层的范围以及 ol.extent.getIntersection() 函数。

可以通过f.ex获取当前View的Extent

map.getView().calculateExtent(map.getSize());

图层的全局范围

`layer.getExtent()`.

与相交的Extent。

ol.extent.getIntersection(extent1, extent2,opt_extent)

应该返回当前视图和图层的相交范围。请注意,并非所有提到的功能都是稳定的。

【讨论】:

  • 问题是(与 tsauerwein 的基本正确答案有关)矢量特征范围方法与给定范围相交,但它们返回整个特征几何的范围。所以我认为当特征几何与非视图区域重叠时,你会得到一个比视图更大的边界框。我的建议是像 tsauerwein 推荐的那样获取所有 featuresInExtent (viewExtent) 并使用此功能的范围而不是我上一个答案的 layer.getExtent() 。请让我知道你最后是如何解决你的问题的。
【解决方案2】:

我在下面找到了解决方案:

    var mapExtent = map.getView().calculateExtent(map.getSize());

    var intersectedFeatures = [];
    for (var i = 0; i < points.length; i++){
      if(ol.extent.containsCoordinate(mapExtent, points[i]))
        intersectedFeatures.push(points[i]);
    }

    var visibleLayerExtent = ol.extent.boundingExtent(intersectedFeatures);

感谢大家的帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多