仅针对图层可见部分的边界框
Bounding box only for the visible part of the layer
我想知道是否有办法获取不是完整图层的边界框,而是仅获取在地图当前缩放级别中可见的图层部分?
所以,我需要获取在屏幕上绘制的图层的边界框的屏幕坐标。我找不到实现这一目标的方法。
编辑:
不幸的是,这并没有解决我的问题。这正是我得到的最新信息,在某些情况下它不起作用。由于 Whosebug 不允许我上传图片,因为我的声誉,我将尝试描述:
想象一下,我有一条几乎平行于 y 轴穿过屏幕的路径,但在屏幕外它至少有 x 轴长。在这种情况下,建议的解决方案将为 x 轴 return 最小和最大屏幕坐标,其中它需要是穿过屏幕的短间隔。在某种程度上,我需要图层可见部分的边界框。
编辑 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.extent.getIntersection() 函数。
可以通过f.ex获取当前View的Extent
map.getView().calculateExtent(map.getSize());
图层的全局范围
`layer.getExtent()`.
与 Extent 相交。
ol.extent.getIntersection(extent1, extent2,opt_extent)
应该return 当前视图和您的图层的相交范围。请注意,并非所有提到的功能都是稳定的。
我在下面找到了解决方案:
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);
谢谢大家的帮助!
我想知道是否有办法获取不是完整图层的边界框,而是仅获取在地图当前缩放级别中可见的图层部分?
所以,我需要获取在屏幕上绘制的图层的边界框的屏幕坐标。我找不到实现这一目标的方法。
编辑:
不幸的是,这并没有解决我的问题。这正是我得到的最新信息,在某些情况下它不起作用。由于 Whosebug 不允许我上传图片,因为我的声誉,我将尝试描述: 想象一下,我有一条几乎平行于 y 轴穿过屏幕的路径,但在屏幕外它至少有 x 轴长。在这种情况下,建议的解决方案将为 x 轴 return 最小和最大屏幕坐标,其中它需要是穿过屏幕的短间隔。在某种程度上,我需要图层可见部分的边界框。
编辑 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.extent.getIntersection() 函数。
可以通过f.ex获取当前View的Extent
map.getView().calculateExtent(map.getSize());
图层的全局范围
`layer.getExtent()`.
与 Extent 相交。
ol.extent.getIntersection(extent1, extent2,opt_extent)
应该return 当前视图和您的图层的相交范围。请注意,并非所有提到的功能都是稳定的。
我在下面找到了解决方案:
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);
谢谢大家的帮助!