我想知道是否有办法获得不是完整图层的边界框,而只是在地图当前缩放级别中可见的图层部分?
因此,我需要获取屏幕上绘制的图层边界框的屏幕坐标。我找不到实现这个目标的方法。
编辑:
不幸的是,这并没有解决我的问题。这正是我最新的一点,在某些情况下它不起作用。由于stackoverflow不允许我上传图像因为我的声誉,我将尝试描述: 想象一下,我有一条几乎平行于y轴穿过屏幕的路径,但是在屏幕外面它至少是x轴长。在这种情况下,所提出的解决方案将返回x轴的最小和最大屏幕坐标,其中它需要是穿过屏幕的短间隔。在某种程度上,我需要图层可见部分的边界框。
编辑2: 谢谢大家的答案。我尝试使用" getFeaturesInExtent"函数,但我得到一个错误说:"未捕获TypeError:undefined不是函数"。我使用的是最新的OpenLayers版本3.4.0。我想我收到此错误,因为此版本中未实现此功能。 我使用的方式如下:
var mapExtent = map.getView().calculateExtent(map.getSize());
var features = result.getSource().getFeaturesInExtent(mapExtent);
您建议我使用哪种解决方案? (我尝试使用从https://github.com/openlayers/ol3下载ZIP的主版本,但在这种情况下地图不起作用。) 再次感谢!
答案 0 :(得分:1)
我认为您需要的唯一内容是视图的范围以及图层的范围和ol.extent.getIntersection()函数。
您可以通过f.ex
获取当前视图的范围map.getView().calculateExtent(map.getSize());
图层的全局范围
`layer.getExtent()`.
和相交的范围。
ol.extent.getIntersection(extent1, extent2,opt_extent)
应返回当前视图和图层的交叉范围。请注意,并非所有提到的功能都是稳定的。
答案 1 :(得分:0)
我在下面找到了解决方案:
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);
谢谢大家的帮助!